fold-const.c (fold_binary): When comparing two simple ADDR_EXPR expressions...
* fold-const.c (fold_binary): When comparing two simple ADDR_EXPR expressions, test their _DECL operands for pointer equality rather than using operand_equal_p. * gcc.dg/tree-ssa/pr22321.c: New test. From-SVN: r101974
This commit is contained in:
parent
4969c0d82c
commit
59f7a2023f
@ -1,3 +1,9 @@
|
||||
2005-07-13 Jeff Law <law@redhat.com>
|
||||
|
||||
* fold-const.c (fold_binary): When comparing two simple ADDR_EXPR
|
||||
expressions, test their _DECL operands for pointer equality rather
|
||||
than using operand_equal_p.
|
||||
|
||||
2005-07-13 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* config/alpha/linux.h (TARGET_HAS_F_SETLKW): Renamed to ...
|
||||
|
@ -8757,9 +8757,23 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1)
|
||||
&& ! lookup_attribute ("alias",
|
||||
DECL_ATTRIBUTES (TREE_OPERAND (arg1, 0)))
|
||||
&& ! DECL_EXTERNAL (TREE_OPERAND (arg1, 0)))
|
||||
return constant_boolean_node (operand_equal_p (arg0, arg1, 0)
|
||||
? code == EQ_EXPR : code != EQ_EXPR,
|
||||
type);
|
||||
{
|
||||
/* We know that we're looking at the address of two
|
||||
non-weak, unaliased, static _DECL nodes.
|
||||
|
||||
It is both wasteful and incorrect to call operand_equal_p
|
||||
to compare the two ADDR_EXPR nodes. It is wasteful in that
|
||||
all we need to do is test pointer equality for the arguments
|
||||
to the two ADDR_EXPR nodes. It is incorrect to use
|
||||
operand_equal_p as that function is NOT equivalent to a
|
||||
C equality test. It can in fact return false for two
|
||||
objects which would test as equal using the C equality
|
||||
operator. */
|
||||
bool equal = TREE_OPERAND (arg0, 0) == TREE_OPERAND (arg1, 0);
|
||||
return constant_boolean_node (equal
|
||||
? code == EQ_EXPR : code != EQ_EXPR,
|
||||
type);
|
||||
}
|
||||
|
||||
/* If this is a comparison of two exprs that look like an
|
||||
ARRAY_REF of the same object, then we can fold this to a
|
||||
|
@ -1,3 +1,7 @@
|
||||
2005-07-13 Jeff Law <law@redhat.com>
|
||||
|
||||
* gcc.dg/tree-ssa/pr22321.c: New test
|
||||
|
||||
2005-07-13 Paolo Bonzini <bonzini@gnu.org>
|
||||
|
||||
PR tree-optimization/21921
|
||||
|
20
gcc/testsuite/gcc.dg/tree-ssa/pr22321.c
Normal file
20
gcc/testsuite/gcc.dg/tree-ssa/pr22321.c
Normal file
@ -0,0 +1,20 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O1 -fno-tree-vrp -fno-tree-copy-prop -fno-tree-ccp -fdump-tree-optimized" } */
|
||||
|
||||
|
||||
volatile int x;
|
||||
|
||||
int main ()
|
||||
{
|
||||
volatile int *vip;
|
||||
vip = &x;
|
||||
volatile int *cvip;
|
||||
cvip = vip;
|
||||
|
||||
if (vip != cvip) return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump-times "return 0" 1 "optimized" } } */
|
||||
/* { dg-final { cleanup-tree-dump "optimized" } } */
|
||||
|
Loading…
Reference in New Issue
Block a user