From: Matthew Fortune <matthew.fort...@imgtec.com> This should be solved using the various PIC related macros such as PIC_OFFSET_TABLE_REGNUM and pic_offset_table_rtx but changing these is too dangerous without investigation. The lightweight fix for shrink-wrapping being inhibited by -mgpopt just clears the global pointer from being related to the prologue and only affects shrink wrapping.
Cherry-picked 4ea3a82b5e8e23591d79a9ca63018acceb53c2a5 from https://github.com/MIPS/gcc Signed-off-by: Matthew Fortune <matthew.fort...@imgtec.com> Signed-off-by: Faraz Shahbazker <fshahbaz...@wavecomp.com> Signed-off-by: Aleksandar Rakic <aleksandar.ra...@htecgroup.com> --- gcc/config/mips/mips.cc | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/gcc/config/mips/mips.cc b/gcc/config/mips/mips.cc index 57a858aca39..10f302e0790 100644 --- a/gcc/config/mips/mips.cc +++ b/gcc/config/mips/mips.cc @@ -25497,6 +25497,15 @@ mips_c_mode_for_floating_type (enum tree_index ti) return default_mode_for_floating_type (ti); } +/* Implement TARGET_SET_UP_BY_PROLOGUE. */ + +static void +mips_set_up_by_prologue (hard_reg_set_container *regs) +{ + if (!TARGET_USE_GOT && TARGET_GPOPT) + CLEAR_HARD_REG_BIT (regs->set, GLOBAL_POINTER_REGNUM); +} + void mips_bit_clear_info (enum machine_mode mode, unsigned HOST_WIDE_INT m, int *start_pos, int *size) @@ -25634,6 +25643,9 @@ mips_bit_clear_p (enum machine_mode mode, unsigned HOST_WIDE_INT m) #undef TARGET_IN_SMALL_DATA_P #define TARGET_IN_SMALL_DATA_P mips_in_small_data_p +#undef TARGET_SET_UP_BY_PROLOGUE +#define TARGET_SET_UP_BY_PROLOGUE mips_set_up_by_prologue + #undef TARGET_MACHINE_DEPENDENT_REORG #define TARGET_MACHINE_DEPENDENT_REORG mips_reorg -- 2.34.1