From 7d276691dd3b927438c182f62fdd9473cf2a809c Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Fri, 9 Jan 2004 19:17:30 -0800 Subject: [PATCH] * recog.c (constrain_operands): Validate mem operands. From-SVN: r75625 --- gcc/ChangeLog | 4 ++++ gcc/recog.c | 25 +++++++++++++++++++------ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 128baf72077a..e1fe55f7eb1a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2004-01-09 Richard Henderson + + * recog.c (constrain_operands): Validate mem operands. + 2004-01-02 Nathanael Nerode PR target/13069 diff --git a/gcc/recog.c b/gcc/recog.c index 8218a88451ac..dd080ddbfd3c 100644 --- a/gcc/recog.c +++ b/gcc/recog.c @@ -2515,12 +2515,25 @@ constrain_operands (strict) break; case 'm': - if (GET_CODE (op) == MEM - /* Before reload, accept what reload can turn into mem. */ - || (strict < 0 && CONSTANT_P (op)) - /* During reload, accept a pseudo */ - || (reload_in_progress && GET_CODE (op) == REG - && REGNO (op) >= FIRST_PSEUDO_REGISTER)) + /* Memory operands must be valid, to the extent + required by STRICT. */ + if (GET_CODE (op) == MEM) + { + if (strict > 0 + && !strict_memory_address_p (GET_MODE (op), + XEXP (op, 0))) + break; + if (strict == 0 + && !memory_address_p (GET_MODE (op), XEXP (op, 0))) + break; + win = 1; + } + /* Before reload, accept what reload can turn into mem. */ + else if (strict < 0 && CONSTANT_P (op)) + win = 1; + /* During reload, accept a pseudo */ + else if (reload_in_progress && GET_CODE (op) == REG + && REGNO (op) >= FIRST_PSEUDO_REGISTER) win = 1; break; -- 2.47.2