From 5f652c070f1060b110828aeb06551321bd607dde Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Wed, 23 Jun 1999 00:49:46 +0000 Subject: [PATCH] expr.c (expand_expr): STRIP_NOPS before checking against MAX_INTEGER_COMPUTATION_MODE * expr.c (expand_expr): STRIP_NOPS before checking against MAX_INTEGER_COMPUTATION_MODE (check_max_integer_computation_mode): Likewise. From-SVN: r27715 --- gcc/ChangeLog | 6 ++++++ gcc/expr.c | 14 ++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 64120f9022e3..bcdcb1600065 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +Wed Jun 23 00:48:21 1999 Jason Merrill + + * expr.c (expand_expr): STRIP_NOPS before checking against + MAX_INTEGER_COMPUTATION_MODE + (check_max_integer_computation_mode): Likewise. + Tue Jun 22 20:23:43 1999 Jim Wilson * md.texi (smul@var{m}3_highpart): Add missing 's' prefix. diff --git a/gcc/expr.c b/gcc/expr.c index dc9bca518ea0..99c5e3671cc9 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -5397,9 +5397,13 @@ void check_max_integer_computation_mode (exp) tree exp; { - enum tree_code code = TREE_CODE (exp); + enum tree_code code; enum machine_mode mode; + /* Strip any NOPs that don't change the mode. */ + STRIP_NOPS (exp); + code = TREE_CODE (exp); + /* We must allow conversions of constants to MAX_INTEGER_COMPUTATION_MODE. */ if (code == NOP_EXPR && TREE_CODE (TREE_OPERAND (exp, 0)) == INTEGER_CST) @@ -5578,7 +5582,12 @@ expand_expr (exp, target, tmode, modifier) } #ifdef MAX_INTEGER_COMPUTATION_MODE + /* Only check stuff here if the mode we want is different from the mode + of the expression; if it's the same, check_max_integer_computiation_mode + will handle it. Do we really need to check this stuff at all? */ + if (target + && GET_MODE (target) != mode && TREE_CODE (exp) != INTEGER_CST && TREE_CODE (exp) != PARM_DECL && TREE_CODE (exp) != ARRAY_REF @@ -5595,7 +5604,8 @@ expand_expr (exp, target, tmode, modifier) fatal ("unsupported wide integer operation"); } - if (TREE_CODE (exp) != INTEGER_CST + if (tmode != mode + && TREE_CODE (exp) != INTEGER_CST && TREE_CODE (exp) != PARM_DECL && TREE_CODE (exp) != ARRAY_REF && TREE_CODE (exp) != COMPONENT_REF -- 2.47.2