sh: Fixes for RTL checking
authorSegher Boessenkool <segher@kernel.crashing.org>
Fri, 24 Feb 2017 22:42:49 +0000 (23:42 +0100)
committerSegher Boessenkool <segher@gcc.gnu.org>
Fri, 24 Feb 2017 22:42:49 +0000 (23:42 +0100)
* config/sh/sh.md (tstsi_t): If operands[0] is a SUBREG instead of
a REG, look at the REG it is a SUBREG of.
(splitter for cmpeqsi_t): Ditto.

From-SVN: r245727

gcc/ChangeLog
gcc/config/sh/sh.md

index 35b1609da1fc855fff528b0c65bb8d4a4ff168e2..cf24e79f263a6a19cfe358ee18b87aec05d1c784 100644 (file)
@@ -1,3 +1,9 @@
+2017-02-24  Segher Boessenkool  <segher@kernel.crashing.org>
+
+       * config/sh/sh.md (tstsi_t): If operands[0] is a SUBREG instead of
+       a REG, look at the REG it is a SUBREG of.
+       (splitter for cmpeqsi_t): Ditto.
+
 2017-02-24  Segher Boessenkool  <segher@kernel.crashing.org>
 
        * config/pa/pa.c (pa_combine_instructions): Do not share RTL.  Make
index 2645fca47383c965715555f4750033f893ad869e..e19e977087db4d5231f2276af53a42ee82bd50de 100644 (file)
   gcc_assert (CONST_INT_P (operands[1]));
 
   HOST_WIDE_INT op1val = INTVAL (operands[1]);
+  rtx reg = operands[0];
+  if (SUBREG_P (reg))
+    reg = SUBREG_REG (reg);
+  gcc_assert (REG_P (reg));
   bool op0_dead_after_this =
-       sh_reg_dead_or_unused_after_insn (curr_insn, REGNO (operands[0]));
+       sh_reg_dead_or_unused_after_insn (curr_insn, REGNO (reg));
 
   if (optimize)
     {
   /* If the tested reg is not dead after this insn, it's probably used by
      something else after the comparison.  It's probably better to leave
      it as it is.  */
-  if (find_regno_note (curr_insn, REG_DEAD, REGNO (operands[0])) == NULL_RTX)
+  rtx reg = operands[0];
+  if (SUBREG_P (reg))
+    reg = SUBREG_REG (reg);
+  gcc_assert (REG_P (reg));
+  if (find_regno_note (curr_insn, REG_DEAD, REGNO (reg)) != NULL_RTX)
     FAIL;
 
   /* FIXME: Maybe also search the predecessor basic blocks to catch