re PR rtl-optimization/69847 (Spec 2006 403.gcc slows down with -mlra vs. reload...
authorVladimir Makarov <vmakarov@redhat.com>
Fri, 5 Aug 2016 21:31:31 +0000 (21:31 +0000)
committerVladimir Makarov <vmakarov@gcc.gnu.org>
Fri, 5 Aug 2016 21:31:31 +0000 (21:31 +0000)
2016-08-05  Vladimir Makarov  <vmakarov@redhat.com>

PR rtl-optimization/69847
* lra-constraints.c (process_invariant_for_inheritance): Save
pattern instead of src.
(remove_inheritance_pseudos): Use the pattern.  Add assert.

From-SVN: r239180

gcc/ChangeLog
gcc/lra-constraints.c

index 40ca18ca3efb635614abe26cfc4f0739150a6ef4..67ec6224a8afd32b4813c967e8e9ff5cdfeb0bcf 100644 (file)
@@ -1,3 +1,10 @@
+2016-08-05  Vladimir Makarov  <vmakarov@redhat.com>
+
+       PR rtl-optimization/69847
+       * lra-constraints.c (process_invariant_for_inheritance): Save
+       pattern instead of src.
+       (remove_inheritance_pseudos): Use the pattern.  Add assert.
+
 2016-08-05  David Malcolm  <dmalcolm@redhat.com>
 
        * input.c (string_concat::string_concat): New constructor.
index 43c05ba06d44646c878abd55b00971e90d3546db..880eee0890d7e7d9e69e713f2eb475942430d185 100644 (file)
@@ -5475,7 +5475,7 @@ process_invariant_for_inheritance (rtx dst_reg, rtx invariant_rtx)
                                        cl, "invariant inheritance");
          bitmap_set_bit (&lra_inheritance_pseudos, REGNO (new_reg));
          bitmap_set_bit (&check_only_regs, REGNO (new_reg));
-         lra_reg_info[REGNO (new_reg)].restore_rtx = invariant_rtx;
+         lra_reg_info[REGNO (new_reg)].restore_rtx = PATTERN (insn);
          start_sequence ();
          lra_emit_move (new_reg, dst_reg);
          new_insns = get_insns ();
@@ -6343,9 +6343,11 @@ remove_inheritance_pseudos (bitmap remove_pseudos)
                  start_sequence ();
                  /* We can not just change the source.  It might be
                     an insn different from the move.  */
-                 lra_emit_move (SET_DEST (set), lra_reg_info[sregno].restore_rtx);
+                 emit_insn (lra_reg_info[sregno].restore_rtx);
                  rtx_insn *new_insns = get_insns ();
                  end_sequence ();
+                 lra_assert (single_set (new_insns) != NULL
+                             && SET_DEST (set) == SET_DEST (single_set (new_insns)));
                  lra_process_new_insns (curr_insn, NULL, new_insns,
                                         "Changing reload<-invariant inheritance");
                  delete_move_and_clobber (curr_insn, dregno);