mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-10 02:06:59 +08:00
re PR rtl-optimization/11381 (volatile memory access optimized away)
PR optimization/11381 * simplify-rtx.c (simplify_relational_operation): Check that two equal operands have no side-effects before simplifying the comparison. From-SVN: r68869
This commit is contained in:
parent
7960bf2230
commit
8821d0914c
@ -1,3 +1,10 @@
|
||||
2003-07-03 Eric Botcazou <ebotcazou@libertysurf.fr>
|
||||
|
||||
PR optimization/11381
|
||||
* simplify-rtx.c (simplify_relational_operation): Check that
|
||||
two equal operands have no side-effects before simplifying
|
||||
the comparison.
|
||||
|
||||
2003-07-02 Jeff Law <law@redhat.com>
|
||||
|
||||
* expr.c (do_store_flag): Remove special case folding for
|
||||
|
@ -2220,8 +2220,10 @@ simplify_relational_operation (code, mode, op0, op1)
|
||||
return const0_rtx;
|
||||
|
||||
/* For modes without NaNs, if the two operands are equal, we know the
|
||||
result. */
|
||||
if (!HONOR_NANS (GET_MODE (trueop0)) && rtx_equal_p (trueop0, trueop1))
|
||||
result except if they have side-effects. */
|
||||
if (! HONOR_NANS (GET_MODE (trueop0))
|
||||
&& rtx_equal_p (trueop0, trueop1)
|
||||
&& ! side_effects_p (trueop0))
|
||||
equal = 1, op0lt = 0, op0ltu = 0, op1lt = 0, op1ltu = 0;
|
||||
|
||||
/* If the operands are floating-point constants, see if we can fold
|
||||
|
@ -1,3 +1,7 @@
|
||||
2003-07-03 Eric Botcazou <ebotcazou@libertysurf.fr>
|
||||
|
||||
* gcc.dg/i386-volatile-1.c: New test.
|
||||
|
||||
2003-07-02 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
PR c++/11072
|
||||
|
14
gcc/testsuite/gcc.dg/i386-volatile-1.c
Normal file
14
gcc/testsuite/gcc.dg/i386-volatile-1.c
Normal file
@ -0,0 +1,14 @@
|
||||
/* PR optimization/11381 */
|
||||
/* Originator: <tobias@ringstrom.mine.nu> */
|
||||
/* { dg-do compile { target i?86-*-* } } */
|
||||
/* { dg-options "-O" } */
|
||||
|
||||
/* Verify that the comparison is not optimized away. */
|
||||
|
||||
void foo(volatile unsigned int *vaddr)
|
||||
{
|
||||
while (*vaddr != *vaddr)
|
||||
;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "cmp" } } */
|
Loading…
Reference in New Issue
Block a user