combine.c (simplify_set): When generating a CC set...
authorSegher Boessenkool <segher@kernel.crashing.org>
Wed, 13 May 2015 11:26:45 +0000 (13:26 +0200)
committerSegher Boessenkool <segher@gcc.gnu.org>
Wed, 13 May 2015 11:26:45 +0000 (13:26 +0200)
* combine.c (simplify_set): When generating a CC set, if the
source already is in the correct mode, do not wrap it in a
compare.  Simplify the rest of that code.

From-SVN: r223146

gcc/ChangeLog
gcc/combine.c

index d9a4fe43173cee9cff9f49de0168f5e2f85d7add..2f8a0205754ff4f1c1eea90803bfc0334df362ef 100644 (file)
@@ -1,3 +1,9 @@
+2015-05-13  Segher Boessenkool  <segher@kernel.crashing.org>
+
+       * combine.c (simplify_set): When generating a CC set, if the
+       source already is in the correct mode, do not wrap it in a
+       compare.  Simplify the rest of that code.
+
 2015-05-13  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/66123
index 1c1a74fdaa6809c04d80eaf5e3b44503e337eaef..5bb49cbc53810a3d4f7c99f3d2fbf00b541beb05 100644 (file)
@@ -6705,20 +6705,16 @@ simplify_set (rtx x)
       if (other_changed)
        undobuf.other_insn = other_insn;
 
-      /* Otherwise, if we didn't previously have a COMPARE in the
-        correct mode, we need one.  */
-      if (GET_CODE (src) != COMPARE || GET_MODE (src) != compare_mode)
-       {
-         SUBST (SET_SRC (x), gen_rtx_COMPARE (compare_mode, op0, op1));
-         src = SET_SRC (x);
-       }
-      else if (GET_MODE (op0) == compare_mode && op1 == const0_rtx)
+      /* Don't generate a compare of a CC with 0, just use that CC.  */
+      if (GET_MODE (op0) == compare_mode && op1 == const0_rtx)
        {
          SUBST (SET_SRC (x), op0);
          src = SET_SRC (x);
        }
-      /* Otherwise, update the COMPARE if needed.  */
-      else if (XEXP (src, 0) != op0 || XEXP (src, 1) != op1)
+      /* Otherwise, if we didn't previously have the same COMPARE we
+        want, create it from scratch.  */
+      else if (GET_CODE (src) != COMPARE || GET_MODE (src) != compare_mode
+              || XEXP (src, 0) != op0 || XEXP (src, 1) != op1)
        {
          SUBST (SET_SRC (x), gen_rtx_COMPARE (compare_mode, op0, op1));
          src = SET_SRC (x);