aboutsummaryrefslogtreecommitdiff
path: root/gcc/df-problems.c
diff options
context:
space:
mode:
authorBernd Schmidt <bernds@codesourcery.com>2011-05-04 20:24:15 +0000
committerBernd Schmidt <bernds@gcc.gnu.org>2011-05-04 20:24:15 +0000
commit0360f70d36156a2a537e985f09fbf675c16bda2a (patch)
tree88c7421e027323dfc259d89cfc562d0c678055a6 /gcc/df-problems.c
parenta3330c9d558720697db4f6f767252335eefe89a3 (diff)
downloadgcc-0360f70d36156a2a537e985f09fbf675c16bda2a.zip
gcc-0360f70d36156a2a537e985f09fbf675c16bda2a.tar.gz
gcc-0360f70d36156a2a537e985f09fbf675c16bda2a.tar.bz2
re PR rtl-optimization/47612 (RTL crash when cc0 setter moved away from cc0 user)
PR rtl-optimization/47612 * df-problems.c (can_move_insns_across): Don't pick a cc0 setter as the last insn of the sequence to be moved. From-SVN: r173393
Diffstat (limited to 'gcc/df-problems.c')
-rw-r--r--gcc/df-problems.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/gcc/df-problems.c b/gcc/df-problems.c
index 0f398ba..e5b88e3 100644
--- a/gcc/df-problems.c
+++ b/gcc/df-problems.c
@@ -4001,7 +4001,10 @@ can_move_insns_across (rtx from, rtx to, rtx across_from, rtx across_to,
if (bitmap_intersect_p (merge_set, test_use)
|| bitmap_intersect_p (merge_use, test_set))
break;
- max_to = insn;
+#ifdef HAVE_cc0
+ if (!sets_cc0_p (insn))
+#endif
+ max_to = insn;
}
next = NEXT_INSN (insn);
if (insn == to)
@@ -4038,7 +4041,11 @@ can_move_insns_across (rtx from, rtx to, rtx across_from, rtx across_to,
{
if (NONDEBUG_INSN_P (insn))
{
- if (!bitmap_intersect_p (test_set, local_merge_live))
+ if (!bitmap_intersect_p (test_set, local_merge_live)
+#ifdef HAVE_cc0
+ && !sets_cc0_p (insn)
+#endif
+ )
{
max_to = insn;
break;