aboutsummaryrefslogtreecommitdiff
path: root/gcc/simplify-rtx.c
diff options
context:
space:
mode:
authorKazu Hirata <kazu@codesourcery.com>2006-05-21 15:13:36 +0000
committerKazu Hirata <kazu@gcc.gnu.org>2006-05-21 15:13:36 +0000
commit4d49d44d6619d257f7635ef4c449d0b036add018 (patch)
tree34fe4de54e40acf8897300094b90a362f9af7693 /gcc/simplify-rtx.c
parent6531d1be909aabc40e765eccd6327512528a94bc (diff)
downloadgcc-4d49d44d6619d257f7635ef4c449d0b036add018.zip
gcc-4d49d44d6619d257f7635ef4c449d0b036add018.tar.gz
gcc-4d49d44d6619d257f7635ef4c449d0b036add018.tar.bz2
re PR rtl-optimization/27671 (optimization error on pentium4-Linux with %, regression from gcc-4.1.0)
gcc/ PR rtl-optimization/27671 * simplify-rtx.c (simplify_relational_operation_1): Fix simplifications of (eq/ne (xor x y) y) and (eq/ne (xor x y) x). gcc/testsuite/ PR rtl-optimization/27671 * gcc.c-torture/execute/pr27671-1.c: New. * gcc.dg/pr27671-2.c: Likewise. From-SVN: r113955
Diffstat (limited to 'gcc/simplify-rtx.c')
-rw-r--r--gcc/simplify-rtx.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c
index 962c2de..6ab5cb7 100644
--- a/gcc/simplify-rtx.c
+++ b/gcc/simplify-rtx.c
@@ -3604,18 +3604,21 @@ simplify_relational_operation_1 (enum rtx_code code, enum machine_mode mode,
return simplify_gen_relational (code, mode, cmp_mode,
XEXP (op0, 0), XEXP (op0, 1));
- /* (eq/ne (xor x y) x) simplifies to (eq/ne x 0). */
+ /* (eq/ne (xor x y) x) simplifies to (eq/ne y 0). */
if ((code == EQ || code == NE)
&& op0code == XOR
&& rtx_equal_p (XEXP (op0, 0), op1)
- && !side_effects_p (XEXP (op0, 1)))
- return simplify_gen_relational (code, mode, cmp_mode, op1, const0_rtx);
- /* Likewise (eq/ne (xor x y) y) simplifies to (eq/ne y 0). */
+ && !side_effects_p (XEXP (op0, 0)))
+ return simplify_gen_relational (code, mode, cmp_mode,
+ XEXP (op0, 1), const0_rtx);
+
+ /* Likewise (eq/ne (xor x y) y) simplifies to (eq/ne x 0). */
if ((code == EQ || code == NE)
&& op0code == XOR
&& rtx_equal_p (XEXP (op0, 1), op1)
- && !side_effects_p (XEXP (op0, 0)))
- return simplify_gen_relational (code, mode, cmp_mode, op1, const0_rtx);
+ && !side_effects_p (XEXP (op0, 1)))
+ return simplify_gen_relational (code, mode, cmp_mode,
+ XEXP (op0, 0), const0_rtx);
/* (eq/ne (xor x C1) C2) simplifies to (eq/ne x (C1^C2)). */
if ((code == EQ || code == NE)