Tighten up checks when tying chains.
authorRobert Suchanek <robert.suchanek@imgtec.com>
Wed, 11 Nov 2015 10:36:00 +0000 (10:36 +0000)
committerRobert Suchanek <rts@gcc.gnu.org>
Wed, 11 Nov 2015 10:36:00 +0000 (10:36 +0000)
gcc/
* regname.c (scan_rtx_reg): Check the matching number of consecutive
registers when tying chains.
(build_def_use): Move terminated_this_insn earlier in the function.

From-SVN: r230149

gcc/ChangeLog
gcc/regrename.c

index e3a0432119ad6bab21d04c1b9e42ae7c6a80b20d..21ea2f07d08ffd812374bfcdf694717eddd9eaf1 100644 (file)
@@ -1,3 +1,9 @@
+2015-11-11  Robert Suchanek  <robert.suchanek@imgtec.com>
+
+       * regname.c (scan_rtx_reg): Check the matching number of consecutive
+       registers when tying chains.
+       (build_def_use): Move terminated_this_insn earlier in the function.
+
 2015-11-10  Mike Frysinger  <vapier@gentoo.org>
 
        * configure.ac: Use = with test and not ==.
index d727dd9095b963dfc5611f2ba9206927a0f0cd4d..d41410a9348b7611f9c96333de815609b8e3a2e1 100644 (file)
@@ -1068,7 +1068,9 @@ scan_rtx_reg (rtx_insn *insn, rtx *loc, enum reg_class cl, enum scan_actions act
              && GET_CODE (pat) == SET
              && GET_CODE (SET_DEST (pat)) == REG
              && GET_CODE (SET_SRC (pat)) == REG
-             && terminated_this_insn)
+             && terminated_this_insn
+             && terminated_this_insn->nregs
+                == REG_NREGS (recog_data.operand[1]))
            {
              gcc_assert (terminated_this_insn->regno
                          == REGNO (recog_data.operand[1]));
@@ -1593,6 +1595,7 @@ build_def_use (basic_block bb)
          enum rtx_code set_code = SET;
          enum rtx_code clobber_code = CLOBBER;
          insn_rr_info *insn_info = NULL;
+         terminated_this_insn = NULL;
 
          /* Process the insn, determining its effect on the def-use
             chains and live hard registers.  We perform the following
@@ -1749,8 +1752,6 @@ build_def_use (basic_block bb)
              scan_rtx (insn, &XEXP (note, 0), ALL_REGS, mark_read,
                        OP_INOUT);
 
-         terminated_this_insn = NULL;
-
          /* Step 4: Close chains for registers that die here, unless
             the register is mentioned in a REG_UNUSED note.  In that
             case we keep the chain open until step #7 below to ensure