re PR target/62662 (Miscompilation of Qt on s390x)
2014-09-19 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> PR target/62662 * config/s390/s390.c (s390_emit_epilogue): When doing the return address load optimization force s390_optimize_prologue to leave it that way. Only do the optimization if we already decided to push r14 into a stack slot. From-SVN: r215381
This commit is contained in:
parent
f434eb6997
commit
db716bdeca
|
@ -1,3 +1,11 @@
|
||||||
|
2014-09-19 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
|
||||||
|
|
||||||
|
PR target/62662
|
||||||
|
* config/s390/s390.c (s390_emit_epilogue): When doing the return
|
||||||
|
address load optimization force s390_optimize_prologue to leave it
|
||||||
|
that way. Only do the optimization if we already decided to push
|
||||||
|
r14 into a stack slot.
|
||||||
|
|
||||||
2014-09-19 Marat Zakirov <m.zakirov@samsung.com>
|
2014-09-19 Marat Zakirov <m.zakirov@samsung.com>
|
||||||
|
|
||||||
* asan.c (build_check_stmt): Alignment arg was added.
|
* asan.c (build_check_stmt): Alignment arg was added.
|
||||||
|
|
|
@ -9083,11 +9083,14 @@ s390_emit_epilogue (bool sibcall)
|
||||||
if (! sibcall)
|
if (! sibcall)
|
||||||
{
|
{
|
||||||
/* Fetch return address from stack before load multiple,
|
/* Fetch return address from stack before load multiple,
|
||||||
this will do good for scheduling. */
|
this will do good for scheduling.
|
||||||
|
|
||||||
if (cfun_frame_layout.save_return_addr_p
|
Only do this if we already decided that r14 needs to be
|
||||||
|| (cfun_frame_layout.first_restore_gpr < BASE_REGNUM
|
saved to a stack slot. (And not just because r14 happens to
|
||||||
&& cfun_frame_layout.last_restore_gpr > RETURN_REGNUM))
|
be in between two GPRs which need saving.) Otherwise it
|
||||||
|
would be difficult to take that decision back in
|
||||||
|
s390_optimize_prologue. */
|
||||||
|
if (cfun_gpr_save_slot (RETURN_REGNUM) == -1)
|
||||||
{
|
{
|
||||||
int return_regnum = find_unused_clobbered_reg();
|
int return_regnum = find_unused_clobbered_reg();
|
||||||
if (!return_regnum)
|
if (!return_regnum)
|
||||||
|
@ -9102,6 +9105,13 @@ s390_emit_epilogue (bool sibcall)
|
||||||
addr = gen_rtx_MEM (Pmode, addr);
|
addr = gen_rtx_MEM (Pmode, addr);
|
||||||
set_mem_alias_set (addr, get_frame_alias_set ());
|
set_mem_alias_set (addr, get_frame_alias_set ());
|
||||||
emit_move_insn (return_reg, addr);
|
emit_move_insn (return_reg, addr);
|
||||||
|
|
||||||
|
/* Once we did that optimization we have to make sure
|
||||||
|
s390_optimize_prologue does not try to remove the
|
||||||
|
store of r14 since we will not be able to find the
|
||||||
|
load issued here. */
|
||||||
|
cfun_frame_layout.save_return_addr_p = true;
|
||||||
|
cfun_gpr_save_slot (RETURN_REGNUM) = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue