aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2015-05-30 09:45:30 +0930
committerAlan Modra <amodra@gcc.gnu.org>2015-05-30 09:45:30 +0930
commit43f7e3fec5c7bb5f00e257061c06b9e974a44259 (patch)
tree729fb99ba6fbc0ebe02825d10d8f300500526b92
parentadad2a7d908a58b22431e05dc4f4efba3b990ea2 (diff)
downloadgcc-43f7e3fec5c7bb5f00e257061c06b9e974a44259.zip
gcc-43f7e3fec5c7bb5f00e257061c06b9e974a44259.tar.gz
gcc-43f7e3fec5c7bb5f00e257061c06b9e974a44259.tar.bz2
rs6000.c (split_stack_arg_pointer_used_p): Scan correct block for use of r12.
* config/rs6000/rs6000.c (split_stack_arg_pointer_used_p): Scan correct block for use of r12. (rs6000_expand_split_stack_prologue): Error on r29 asm global reg. From-SVN: r223878
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/rs6000/rs6000.c9
2 files changed, 14 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1d59898..063362d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2015-05-30 Alan Modra <amodra@gmail.com>
+
+ * config/rs6000/rs6000.c (split_stack_arg_pointer_used_p): Scan
+ correct block for use of r12.
+ (rs6000_expand_split_stack_prologue): Error on r29 asm global reg.
+
2015-05-29 Dominik Vogt <vogt@linux.vnet.ibm.com>
PR target/66215
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index a590ef4..1201c86 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -23450,7 +23450,7 @@ split_stack_arg_pointer_used_p (void)
/* Unfortunately we also need to do some code scanning, since
r12 may have been substituted for the pseudo. */
rtx_insn *insn;
- basic_block bb = ENTRY_BLOCK_PTR_FOR_FN (cfun);
+ basic_block bb = ENTRY_BLOCK_PTR_FOR_FN (cfun)->next_bb;
FOR_BB_INSNS (bb, insn)
if (NONDEBUG_INSN_P (insn))
{
@@ -25942,6 +25942,13 @@ rs6000_expand_split_stack_prologue (void)
if (!info->push_p)
return;
+ if (global_regs[29])
+ {
+ error ("-fsplit-stack uses register r29");
+ inform (DECL_SOURCE_LOCATION (global_regs_decl[29]),
+ "conflicts with %qD", global_regs_decl[29]);
+ }
+
allocate = info->total_size;
if (allocate > (unsigned HOST_WIDE_INT) 1 << 31)
{