From: Franz Sirl Date: Tue, 25 Feb 2003 23:22:48 +0000 (+0000) Subject: re PR target/9732 ([ppc32] Wrong code with -O2 -fPIC) X-Git-Tag: releases/gcc-3.2.3~162 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=af3533614413532c610a6a102a6f1e1083a1ba9b;p=thirdparty%2Fgcc.git re PR target/9732 ([ppc32] Wrong code with -O2 -fPIC) 2003-02-25 Franz Sirl PR target/9732 * config/rs6000/rs6000.c (first_reg_to_save): Handle PIC_OFFSET_TABLE_REGNUM for -fPIC too. (rs6000_emit_prologue): Likewise. (rs6000_emit_epilogue): Likewise. * config/rs6000/rs6000.h (CONDITIONAL_REGISTER_USAGE): Make PIC_OFFSET_TABLE_REGNUM a fixed register for -fPIC. From-SVN: r63429 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2c59dd79a1ca..97638d9d0f81 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2003-02-25 Franz Sirl + + PR target/9732 + * config/rs6000/rs6000.c (first_reg_to_save): Handle + PIC_OFFSET_TABLE_REGNUM for -fPIC too. + (rs6000_emit_prologue): Likewise. + (rs6000_emit_epilogue): Likewise. + * config/rs6000/rs6000.h (CONDITIONAL_REGISTER_USAGE): Make + PIC_OFFSET_TABLE_REGNUM a fixed register for -fPIC. + 2003-02-25 Matthias Klose 2003-02-07 Richard Henderson diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 89808cca8201..521f092b3bea 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -7409,7 +7409,7 @@ first_reg_to_save () if (regs_ever_live[first_reg] && (! call_used_regs[first_reg] || (first_reg == RS6000_PIC_OFFSET_TABLE_REGNUM - && ((DEFAULT_ABI == ABI_V4 && flag_pic == 1) + && ((DEFAULT_ABI == ABI_V4 && flag_pic != 0) || (DEFAULT_ABI == ABI_DARWIN && flag_pic))))) break; @@ -8793,7 +8793,7 @@ rs6000_emit_prologue () if ((regs_ever_live[info->first_gp_reg_save+i] && ! call_used_regs[info->first_gp_reg_save+i]) || (i+info->first_gp_reg_save == RS6000_PIC_OFFSET_TABLE_REGNUM - && ((DEFAULT_ABI == ABI_V4 && flag_pic == 1) + && ((DEFAULT_ABI == ABI_V4 && flag_pic != 0) || (DEFAULT_ABI == ABI_DARWIN && flag_pic)))) { rtx addr, reg, mem; @@ -9179,7 +9179,7 @@ rs6000_emit_epilogue (sibcall) if ((regs_ever_live[info->first_gp_reg_save+i] && ! call_used_regs[info->first_gp_reg_save+i]) || (i+info->first_gp_reg_save == RS6000_PIC_OFFSET_TABLE_REGNUM - && ((DEFAULT_ABI == ABI_V4 && flag_pic == 1) + && ((DEFAULT_ABI == ABI_V4 && flag_pic != 0) || (DEFAULT_ABI == ABI_DARWIN && flag_pic)))) { rtx addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index 8c77dd558c06..87c0f4abdd02 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -960,6 +960,10 @@ extern int rs6000_altivec_abi; for (i = 32; i < 64; i++) \ fixed_regs[i] = call_used_regs[i] \ = call_really_used_regs[i] = 1; \ + if (DEFAULT_ABI == ABI_V4 \ + && PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM \ + && flag_pic == 2) \ + fixed_regs[RS6000_PIC_OFFSET_TABLE_REGNUM] = 1; \ if (DEFAULT_ABI == ABI_V4 \ && PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM \ && flag_pic == 1) \