Commit 9b015c36 by Alan Modra Committed by Alan Modra

re PR go/66870 (split stack issues on ppc64le and ppc64)

	PR target/66870
	* config/rs6000/rs6000.c (machine_function): Add split_stack_argp_used.
	(rs6000_emit_prologue): Set it.
	(rs6000_set_up_by_prologue): Specify r12 when split_stack_argp_used.

From-SVN: r226443
parent ec043522
2015-07-31 Alan Modra <amodra@gmail.com>
PR target/66870
* config/rs6000/rs6000.c (machine_function): Add split_stack_argp_used.
(rs6000_emit_prologue): Set it.
(rs6000_set_up_by_prologue): Specify r12 when split_stack_argp_used.
2015-07-31 Richard Biener <rguenther@suse.de> 2015-07-31 Richard Biener <rguenther@suse.de>
* fold-const.c (fold_binary_loc): Remove X ^ C1 == C2 * fold-const.c (fold_binary_loc): Remove X ^ C1 == C2
......
...@@ -166,6 +166,7 @@ typedef struct GTY(()) machine_function ...@@ -166,6 +166,7 @@ typedef struct GTY(()) machine_function
rtx sdmode_stack_slot; rtx sdmode_stack_slot;
/* Alternative internal arg pointer for -fsplit-stack. */ /* Alternative internal arg pointer for -fsplit-stack. */
rtx split_stack_arg_pointer; rtx split_stack_arg_pointer;
bool split_stack_argp_used;
/* Flag if r2 setup is needed with ELFv2 ABI. */ /* Flag if r2 setup is needed with ELFv2 ABI. */
bool r2_setup_needed; bool r2_setup_needed;
} machine_function; } machine_function;
...@@ -24693,6 +24694,7 @@ rs6000_emit_prologue (void) ...@@ -24693,6 +24694,7 @@ rs6000_emit_prologue (void)
__morestack was called, it left the arg pointer to the old __morestack was called, it left the arg pointer to the old
stack in r29. Otherwise, the arg pointer is the top of the stack in r29. Otherwise, the arg pointer is the top of the
current frame. */ current frame. */
cfun->machine->split_stack_argp_used = true;
if (sp_adjust) if (sp_adjust)
{ {
rtx r12 = gen_rtx_REG (Pmode, 12); rtx r12 = gen_rtx_REG (Pmode, 12);
...@@ -33930,6 +33932,8 @@ rs6000_set_up_by_prologue (struct hard_reg_set_container *set) ...@@ -33930,6 +33932,8 @@ rs6000_set_up_by_prologue (struct hard_reg_set_container *set)
&& TARGET_MINIMAL_TOC && TARGET_MINIMAL_TOC
&& get_pool_size () != 0) && get_pool_size () != 0)
add_to_hard_reg_set (&set->set, Pmode, RS6000_PIC_OFFSET_TABLE_REGNUM); 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);
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment