[Bug target/88343] [7/8 Regression] R31 is unconditionally saved/restored on powerpc-darwin even when it's not necessary.
amodra at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Feb 8 22:21:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88343
--- Comment #30 from Alan Modra <amodra at gcc dot gnu.org> ---
Author: amodra
Date: Fri Feb 8 22:20:58 2019
New Revision: 268708
URL: https://gcc.gnu.org/viewcvs?rev=268708&root=gcc&view=rev
Log:
[RS6000] Correct save_reg_p
Fixes lack of r30 save/restore on
// -m32 -fpic -ftls-model=initial-exec
__thread char* p;
char** f1 (void) { return &p; }
and
// -m32 -fpic -msecure-plt
extern int foo (int);
int f1 (int x) { return foo (x); }
These are both caused by save_reg_p returning false when the pic
offset table reg (r30 for ABI_V4) was used, due to the logic not
exactly matching that in rs6000_emit_prologue to set up r30.
I also noticed that save_reg_p isn't following the comment regarding
calls_eh_return (since svn 267049, git 0edf78b1b2a0), and the comment
needs tweaking too. For why the revised comment is correct, grep for
saves_all_registers in lra.c, and yes, we do want to save the pic
offset table reg for eh_return.
PR target/88343
* config/rs6000/rs6000.c (save_reg_p): Correct calls_eh_return
case. Match logic in rs6000_emit_prologue emitting pic_offset_table
setup.
Modified:
trunk/gcc/ChangeLog
trunk/gcc/config/rs6000/rs6000.c
More information about the Gcc-bugs
mailing list