combine.c (try_combine): Do not allow combining a PARALLEL I2 with a register move...
authorSegher Boessenkool <segher@kernel.crashing.org>
Thu, 11 Dec 2014 14:29:14 +0000 (15:29 +0100)
committerSegher Boessenkool <segher@gcc.gnu.org>
Thu, 11 Dec 2014 14:29:14 +0000 (15:29 +0100)
* combine.c (try_combine): Do not allow combining a PARALLEL I2
with a register move I3 if that I2 is an asm.

From-SVN: r218623

gcc/ChangeLog
gcc/combine.c

index 530147080b9e75059f2655776cd934738b201cb4..fa79ce977b91f66f9c7905f85d7d9fc8fa51e85d 100644 (file)
@@ -1,3 +1,8 @@
+2014-12-11  Segher Boessenkool  <segher@kernel.crashing.org>
+
+       * combine.c (try_combine): Do not allow combining a PARALLEL I2
+       with a register move I3 if that I2 is an asm.
+
 2014-12-11  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
        * config/arm/arm_neon.h (vrndqn_f32): Rename to...
index 9ed03be22196791572ef420f73c4c105d5956bab..c95b493886bced6f12026306ee41f711b21e7675 100644 (file)
@@ -2716,6 +2716,13 @@ try_combine (rtx_insn *i3, rtx_insn *i2, rtx_insn *i1, rtx_insn *i0,
                                        SET_DEST (XVECEXP (p2, 0, i))))
          break;
 
+      /* Make sure this PARALLEL is not an asm.  We do not allow combining
+        that usually (see can_combine_p), so do not here either.  */
+      for (i = 0; i < XVECLEN (p2, 0); i++)
+       if (GET_CODE (XVECEXP (p2, 0, i)) == SET
+           && GET_CODE (SET_SRC (XVECEXP (p2, 0, i))) == ASM_OPERANDS)
+         break;
+
       if (i == XVECLEN (p2, 0))
        for (i = 0; i < XVECLEN (p2, 0); i++)
          if (GET_CODE (XVECEXP (p2, 0, i)) == SET