aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPat Haugen <pthaugen@us.ibm.com>2017-09-14 18:29:44 +0000
committerPat Haugen <pthaugen@gcc.gnu.org>2017-09-14 18:29:44 +0000
commit44e13e607f63ef73c75cd64b041f24b0eeafd992 (patch)
tree19b2d65af1c02d3ff136cf98414c82940da1f8b1 /gcc
parentbc998d034f45d1828a8663b2eed928faf22a7d01 (diff)
downloadgcc-44e13e607f63ef73c75cd64b041f24b0eeafd992.zip
gcc-44e13e607f63ef73c75cd64b041f24b0eeafd992.tar.gz
gcc-44e13e607f63ef73c75cd64b041f24b0eeafd992.tar.bz2
rs6000.c (rs6000_set_up_by_prologue): Make sure the TOC reg (r2) isn't in the set of registers defined in the prologue.
* config/rs6000/rs6000.c (rs6000_set_up_by_prologue): Make sure the TOC reg (r2) isn't in the set of registers defined in the prologue. * gcc.target/powerpc/r2_shrink-wrap.c: New. From-SVN: r252768
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/rs6000/rs6000.c5
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.target/powerpc/r2_shrink-wrap.c17
4 files changed, 31 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 31c9d0a..b66faeb 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2017-09-14 Pat Haugen <pthaugen@us.ibm.com>
+
+ * config/rs6000/rs6000.c (rs6000_set_up_by_prologue): Make sure the TOC
+ reg (r2) isn't in the set of registers defined in the prologue.
+
2017-09-14 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 3fee228..6dd726e 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -37804,6 +37804,11 @@ rs6000_set_up_by_prologue (struct hard_reg_set_container *set)
add_to_hard_reg_set (&set->set, Pmode, RS6000_PIC_OFFSET_TABLE_REGNUM);
if (cfun->machine->split_stack_argp_used)
add_to_hard_reg_set (&set->set, Pmode, 12);
+
+ /* Make sure the hard reg set doesn't include r2, which was possibly added
+ via PIC_OFFSET_TABLE_REGNUM. */
+ if (TARGET_TOC)
+ remove_from_hard_reg_set (&set->set, Pmode, TOC_REGNUM);
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ad6ef29..005c0b9 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2017-09-14 Pat Haugen <pthaugen@us.ibm.com>
+
+ * gcc.target/powerpc/r2_shrink-wrap.c: New.
+
2017-09-14 Will Schmidt <will_schmidt@vnet.ibm.com>
* gcc.target/powerpc/fold-vec-ld-longlong.c: Add
diff --git a/gcc/testsuite/gcc.target/powerpc/r2_shrink-wrap.c b/gcc/testsuite/gcc.target/powerpc/r2_shrink-wrap.c
new file mode 100644
index 0000000..b81b9b1
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/r2_shrink-wrap.c
@@ -0,0 +1,17 @@
+/* { dg-do compile { target lp64 } } */
+/* { dg-options "-O2 -fdump-rtl-pro_and_epilogue" } */
+
+/* Verify we move the prologue past the TOC reference of 'j' and shrink-wrap
+ the function. */
+void bar();
+int j;
+void foo(int i)
+{
+ j = i;
+ if (i > 0)
+ {
+ bar();
+ }
+}
+
+/* { dg-final { scan-rtl-dump-times "Performing shrink-wrapping" 1 "pro_and_epilogue" } } */