aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2015-01-12 21:45:38 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2015-01-12 21:45:38 +0100
commit631b8d78b040678569701afe7e8d5de53d3fd419 (patch)
tree15027dd8eb02fe6a60ca9ad1573300669e15222c
parentf51286f21f3b69878d9b5d55041089aba79c82a6 (diff)
downloadgcc-631b8d78b040678569701afe7e8d5de53d3fd419.zip
gcc-631b8d78b040678569701afe7e8d5de53d3fd419.tar.gz
gcc-631b8d78b040678569701afe7e8d5de53d3fd419.tar.bz2
re PR target/64513 (ICE: in maybe_record_trace_start, at dwarf2cfi.c:2231 with -mstack-arg-probe)
PR target/64513 * config/i386/i386.c (ix86_expand_prologue): Add REG_FRAME_RELATED_EXPR to %rax and %r10 pushes. * gcc.target/i386/pr64513.c: New test. From-SVN: r219492
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/config/i386/i386.c8
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/gcc.target/i386/pr64513.c17
4 files changed, 32 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b9d47cf..4a21711 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
2015-01-12 Jakub Jelinek <jakub@redhat.com>
+ PR target/64513
+ * config/i386/i386.c (ix86_expand_prologue): Add
+ REG_FRAME_RELATED_EXPR to %rax and %r10 pushes.
+
PR tree-optimization/64454
* tree-vrp.c (simplify_div_or_mod_using_ranges): Optimize
op0 % op1 into op0 if op0 is in range [-op1 + 1, op1 - 1]
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 8724ea3..7a39f80 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -11559,6 +11559,10 @@ ix86_expand_prologue (void)
if (sp_is_cfa_reg)
m->fs.cfa_offset += UNITS_PER_WORD;
RTX_FRAME_RELATED_P (insn) = 1;
+ add_reg_note (insn, REG_FRAME_RELATED_EXPR,
+ gen_rtx_SET (VOIDmode, stack_pointer_rtx,
+ plus_constant (Pmode, stack_pointer_rtx,
+ -UNITS_PER_WORD)));
}
}
@@ -11572,6 +11576,10 @@ ix86_expand_prologue (void)
if (sp_is_cfa_reg)
m->fs.cfa_offset += UNITS_PER_WORD;
RTX_FRAME_RELATED_P (insn) = 1;
+ add_reg_note (insn, REG_FRAME_RELATED_EXPR,
+ gen_rtx_SET (VOIDmode, stack_pointer_rtx,
+ plus_constant (Pmode, stack_pointer_rtx,
+ -UNITS_PER_WORD)));
}
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 9a07ada..1b441e4 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2015-01-12 Jakub Jelinek <jakub@redhat.com>
+ PR target/64513
+ * gcc.target/i386/pr64513.c: New test.
+
PR tree-optimization/64454
* gcc.dg/pr64454.c: New test.
diff --git a/gcc/testsuite/gcc.target/i386/pr64513.c b/gcc/testsuite/gcc.target/i386/pr64513.c
new file mode 100644
index 0000000..0236496
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr64513.c
@@ -0,0 +1,17 @@
+/* PR target/64513 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -mstack-arg-probe" } */
+
+struct A {};
+struct B { struct A y; };
+int foo (struct A);
+
+int
+bar (int x)
+{
+ struct B b;
+ int c;
+ while (x--)
+ c = foo (b.y);
+ return c;
+}