From 2d87c1d472b4d881024bde41836ed826449e861a Mon Sep 17 00:00:00 2001 From: Renlin Li Date: Mon, 13 Jul 2015 08:29:46 +0000 Subject: [PATCH]Fix PR66556. [PATCH]Fix PR66556. Don't drop side-effect in simplify_const_relational_operation function. gcc/ 2015-07-13 Renlin Li PR rtl/66556 * simplify-rtx.c (simplify_const_relational_operation): Add side_effects_p checks. gcc/testsuite/ 2015-07-13 Renlin Li PR rtl/66556 * gcc.c-torture/execute/pr66556.c: New. From-SVN: r225729 --- gcc/simplify-rtx.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'gcc/simplify-rtx.c') diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index c243080..91e4b9c 100644 --- a/gcc/simplify-rtx.c +++ b/gcc/simplify-rtx.c @@ -4925,7 +4925,8 @@ simplify_const_relational_operation (enum rtx_code code, /* Optimize comparisons with upper and lower bounds. */ if (HWI_COMPUTABLE_MODE_P (mode) - && CONST_INT_P (trueop1)) + && CONST_INT_P (trueop1) + && !side_effects_p (trueop0)) { int sign; unsigned HOST_WIDE_INT nonzero = nonzero_bits (trueop0, mode); @@ -5038,7 +5039,7 @@ simplify_const_relational_operation (enum rtx_code code, } /* Optimize integer comparisons with zero. */ - if (trueop1 == const0_rtx) + if (trueop1 == const0_rtx && !side_effects_p (trueop0)) { /* Some addresses are known to be nonzero. We don't know their sign, but equality comparisons are known. */ @@ -5089,7 +5090,7 @@ simplify_const_relational_operation (enum rtx_code code, } /* Optimize comparison of ABS with zero. */ - if (trueop1 == CONST0_RTX (mode) + if (trueop1 == CONST0_RTX (mode) && !side_effects_p (trueop0) && (GET_CODE (trueop0) == ABS || (GET_CODE (trueop0) == FLOAT_EXTEND && GET_CODE (XEXP (trueop0, 0)) == ABS))) -- cgit v1.1