From 5352ea68e36a461476228c109a31a4fb5bad7ce7 Mon Sep 17 00:00:00 2001
From: Andrew Pinski <apinski@cavium.com>
Date: Fri, 2 Nov 2012 23:32:32 +0000
Subject: [PATCH] re PR rtl-optimization/54524 (Spurious add on sum of
 bitshifts (forward-propagate issue))

2012-11-02  Andrew Pinski  <apinski@cavium.com>

        PR rtl-opt/54524
        * simplify-rtx.c (simplify_relational_operation_1): Don't simplify
        (LTU/GEU (PLUS a 0) 0) into (GEU/LTU a 0) since they are not equivalent.

From-SVN: r193111
---
 gcc/ChangeLog      | 6 ++++++
 gcc/simplify-rtx.c | 4 +++-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 284dd8a15203..ada7ff5e7867 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2012-11-02  Andrew Pinski  <apinski@cavium.com>
+
+	PR rtl-opt/54524
+	* simplify-rtx.c (simplify_relational_operation_1): Don't simplify
+	(LTU/GEU (PLUS a 0) 0) into (GEU/LTU a 0) since they are not equivalent.
+
 2012-11-02  Jan Hubicka  <jh@suse.cz>
 
 	* tree-ssa-loop-niter.c (double_int_cmp, bound_index,
diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c
index cb63b80500e5..6c50d301fe06 100644
--- a/gcc/simplify-rtx.c
+++ b/gcc/simplify-rtx.c
@@ -4546,7 +4546,9 @@ simplify_relational_operation_1 (enum rtx_code code, enum machine_mode mode,
       && GET_CODE (op0) == PLUS
       && CONST_INT_P (XEXP (op0, 1))
       && (rtx_equal_p (op1, XEXP (op0, 0))
-	  || rtx_equal_p (op1, XEXP (op0, 1))))
+	  || rtx_equal_p (op1, XEXP (op0, 1)))
+      /* (LTU/GEU (PLUS a 0) 0) is not the same as (GEU/LTU a 0). */
+      && XEXP (op0, 1) != const0_rtx)
     {
       rtx new_cmp
 	= simplify_gen_unary (NEG, cmp_mode, XEXP (op0, 1), cmp_mode);
-- 
GitLab