summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog12
-rw-r--r--gcc/lra.c12
-rw-r--r--gcc/recog.c3
3 files changed, 19 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 84235284999..74bbc8d75a9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,15 @@
+2013-11-29 Vladimir Makarov <vmakarov@redhat.com>
+
+ PR rtl-optimization/59340
+ * lra.c (check_rtl): Use recog_memoized instead of insn_invalid_p.
+
+ Revert
+ 2013-11-20 Robert Suchanek <Robert.Suchanek@imgtec.com>
+
+ * lra.c (lra): Set lra_in_progress before check_rtl call.
+ * recog.c (insn_invalid_p): Add !lra_in_progress to prevent
+ adding clobber regs when LRA is running.
+
2013-11-29 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
PR target/59289
diff --git a/gcc/lra.c b/gcc/lra.c
index d0d9bcbc7e3..d21d8646a61 100644
--- a/gcc/lra.c
+++ b/gcc/lra.c
@@ -2066,8 +2066,9 @@ check_rtl (bool final_p)
correctly decomposed. LRA can generate reloads for
decomposable addresses. The decomposition code checks the
correctness of the addresses. So we don't need to check
- the addresses here. */
- if (insn_invalid_p (insn, false))
+ the addresses here. Don't call insn_invalid_p here, it can
+ change the code at this stage. */
+ if (recog_memoized (insn) < 0 && asm_noperands (PATTERN (insn)) < 0)
fatal_insn_not_found (insn);
}
}
@@ -2266,14 +2267,13 @@ lra (FILE *f)
init_insn_recog_data ();
- /* We can not set up reload_in_progress because it prevents new
- pseudo creation. */
- lra_in_progress = 1;
-
#ifdef ENABLE_CHECKING
+ /* Some quick check on RTL generated by previous passes. */
check_rtl (false);
#endif
+ lra_in_progress = 1;
+
lra_live_range_iter = lra_coalesce_iter = 0;
lra_constraint_iter = lra_constraint_iter_after_spill = 0;
lra_inheritance_iter = lra_undo_inheritance_iter = 0;
diff --git a/gcc/recog.c b/gcc/recog.c
index 5c0ec165bd1..7f597566770 100644
--- a/gcc/recog.c
+++ b/gcc/recog.c
@@ -315,8 +315,7 @@ insn_invalid_p (rtx insn, bool in_group)
int icode = recog (pat, insn,
(GET_CODE (pat) == SET
&& ! reload_completed
- && ! reload_in_progress
- && ! lra_in_progress)
+ && ! reload_in_progress)
? &num_clobbers : 0);
int is_asm = icode < 0 && asm_noperands (PATTERN (insn)) >= 0;