This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Fix rs6000 exception handling (PR target/90418)
- From: David Edelsohn <dje dot gcc at gmail dot com>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Mon, 13 May 2019 11:16:46 -0400
- Subject: [PATCH] Fix rs6000 exception handling (PR target/90418)
Following the same pattern as the AArch64 patch, this patch fixes the
PPC32 BE and AIX EH failures after the sibcall changes.
This does not address the Darwin failures because of SAVE_WORLD.
Bootstrapped on powerpc-ibm-aix7.2.0.0, powerpc64le-unknown-linux-gnu,
powerpc64-unknown-linux-gnu, powerpc-unknown-linux-gnu
Approved by Segher and me.
Thanks, David
* config/rs6000/rs6000.c (rs6000_emit_epilogue): Don't load EH data
registers in sibcall epilogues. Don't add EH_RETURN_STACKADJ_RTX to sp
in sibcall epilogues.
Index: rs6000.c
===================================================================
--- rs6000.c (revision 271111)
+++ rs6000.c (working copy)
@@ -28423,7 +28423,7 @@ rs6000_emit_epilogue (int sibcall)
restore_saved_lr (0, exit_func);
/* Load exception handler data registers, if needed. */
- if (crtl->calls_eh_return)
+ if (!sibcall && crtl->calls_eh_return)
{
unsigned int i, regno;
@@ -28614,7 +28614,7 @@ rs6000_emit_epilogue (int sibcall)
RTX_FRAME_RELATED_P (insn) = 1;
}
- if (crtl->calls_eh_return)
+ if (!sibcall && crtl->calls_eh_return)
{
rtx sa = EH_RETURN_STACKADJ_RTX;
emit_insn (gen_add3_insn (sp_reg_rtx, sp_reg_rtx, sa));