aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Sandiford <rdsandiford@googlemail.com>2012-02-11 09:00:42 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2012-02-11 09:00:42 +0000
commit4cb0fdbca0dbe3841b2e82a712895324c058554c (patch)
treec14fb082dc2ec8626408c0b4f1957808cdcc043f /gcc
parent4e92c31f3a3d1e85c3269348f1953658f11e694f (diff)
downloadgcc-4cb0fdbca0dbe3841b2e82a712895324c058554c.zip
gcc-4cb0fdbca0dbe3841b2e82a712895324c058554c.tar.gz
gcc-4cb0fdbca0dbe3841b2e82a712895324c058554c.tar.bz2
re PR rtl-optimization/52175 (ICE in maybe_record_trace_start after invalid dbr_schedule transformation)
gcc/ PR rtl-optimization/52175 * reorg.c (fill_slots_from_thread): Don't apply add/sub optimization to frame-related instructions. gcc/testsuite/ PR rtl-optimization/52175 * gcc.c-torture/compile/pr52175.c: New test. From-SVN: r184128
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/reorg.c1
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr52175.c25
4 files changed, 37 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9dce424..b9af710 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2012-02-11 Richard Sandiford <rdsandiford@googlemail.com>
+
+ PR rtl-optimization/52175
+ * reorg.c (fill_slots_from_thread): Don't apply add/sub optimization
+ to frame-related instructions.
+
2012-02-10 Jason Merrill <jason@redhat.com>
PR c++/51910
diff --git a/gcc/reorg.c b/gcc/reorg.c
index 3fa5393..dfc9747 100644
--- a/gcc/reorg.c
+++ b/gcc/reorg.c
@@ -2937,6 +2937,7 @@ fill_slots_from_thread (rtx insn, rtx condition, rtx thread,
if (delay_list == 0 && likely
&& new_thread && !ANY_RETURN_P (new_thread)
&& NONJUMP_INSN_P (new_thread)
+ && !RTX_FRAME_RELATED_P (new_thread)
&& GET_CODE (PATTERN (new_thread)) != ASM_INPUT
&& asm_noperands (PATTERN (new_thread)) < 0)
{
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 812cee10..03fba54 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2012-02-11 Richard Sandiford <rdsandiford@googlemail.com>
+
+ PR rtl-optimization/52175
+ * gcc.c-torture/compile/pr52175.c: New test.
+
2012-02-10 Jason Merrill <jason@redhat.com>
PR c++/51910
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr52175.c b/gcc/testsuite/gcc.c-torture/compile/pr52175.c
new file mode 100644
index 0000000..e0aed77
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr52175.c
@@ -0,0 +1,25 @@
+void bad (void);
+char *foo (char *src, char **last)
+{
+ char *dst;
+ int ch;
+ dst = src = (src ? src : *last);
+
+ if (*src == 0)
+ return 0;
+
+ while (src[0])
+ {
+ if (!src[1])
+ {
+ bad ();
+ break;
+ }
+ *dst = *src;
+ dst += 1;
+ src += 2;
+ }
+ *last = src;
+ *dst = 0;
+ return *last;
+}