aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorClaudiu Zissulescu <claziss@synopsys.com>2018-12-14 11:42:44 +0100
committerClaudiu Zissulescu <claziss@gcc.gnu.org>2018-12-14 11:42:44 +0100
commit544a4843e8873ce0dc08b2e1cde8978b15d23628 (patch)
treeed668494e51fdf9310164b7f77c930b04c44e0e9 /gcc
parentd77aa5cd5646600f316b260f068c45446ba1ee6b (diff)
downloadgcc-544a4843e8873ce0dc08b2e1cde8978b15d23628.zip
gcc-544a4843e8873ce0dc08b2e1cde8978b15d23628.tar.gz
gcc-544a4843e8873ce0dc08b2e1cde8978b15d23628.tar.bz2
[ARC] Fix millicode wrong blink restore.
The blink is restored wrongly when using millicode and regular load instructions. gcc/ xxxx-xx-xx Claudiu Zissulescu <claziss@synopsys.com> * config/arc/arc.c (arc_restore_callee_milli) Don't clobber off variable. testsuite/ xxxx-xx-xx Claudiu Zissulescu <claziss@synopsys.com> * gcc.target/arc/milli-1.c: New test. From-SVN: r267129
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/arc/arc.c4
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.target/arc/milli-1.c23
4 files changed, 33 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a585e25..f97c401 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2018-12-14 Claudiu Zissulescu <claziss@synopsys.com>
+ * config/arc/arc.c (arc_restore_callee_milli) Don't clobber off
+ variable.
+
+2018-12-14 Claudiu Zissulescu <claziss@synopsys.com>
+
* config/arc/arc.h (reg_class): Add SIBCALL_REGS.
2018-12-14 Richard Biener <rguenther@suse.de>
diff --git a/gcc/config/arc/arc.c b/gcc/config/arc/arc.c
index 55175215..5af3ee6 100644
--- a/gcc/config/arc/arc.c
+++ b/gcc/config/arc/arc.c
@@ -3597,9 +3597,7 @@ arc_restore_callee_milli (unsigned int gmask,
insn = frame_insn (insn);
/* Add DWARF info. */
- for (regno = start_reg, off = 0;
- regno <= end_reg;
- regno++, off += UNITS_PER_WORD)
+ for (regno = start_reg; regno <= end_reg; regno++)
{
reg = gen_rtx_REG (SImode, regno);
add_reg_note (insn, REG_CFA_RESTORE, reg);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 8128ea9..3cfdfae 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2018-12-14 Claudiu Zissulescu <claziss@synopsys.com>
+
+ * gcc.target/arc/milli-1.c: New test.
+
2018-12-13 Michael Ploujnikov <michael.ploujnikov@oracle.com>
* gcc.dg/lto/pr88297_0.c: New test.
diff --git a/gcc/testsuite/gcc.target/arc/milli-1.c b/gcc/testsuite/gcc.target/arc/milli-1.c
new file mode 100644
index 0000000..b501b39
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arc/milli-1.c
@@ -0,0 +1,23 @@
+/* { dg-do compile } */
+/* { dg-options "-Os" } */
+
+/* Test if we restore correctly blink when using millicode. */
+extern void bar (void);
+
+void foo (void)
+{
+ __asm__ volatile ( "" : : : "r13","r14","r15","r16","r17","r18","r20","r21");
+ bar();
+}
+
+void foo2 (void)
+{
+ bar();
+ __asm__ volatile ( "" : : : "r13","r14","r15","r16","r17","r18","r20","r21");
+}
+
+/* { dg-final { scan-assembler-not "st.*r13,\\\[sp" } } */
+/* { dg-final { scan-assembler-not "st.*r14,\\\[sp" } } */
+/* { dg-final { scan-assembler-not "st.*r15,\\\[sp" } } */
+/* { dg-final { scan-assembler "ld.*blink,\\\[sp,32" } } */
+/* { dg-final { scan-assembler "mov_s.*r12,32" } } */