Message ID | 20150129112730.GB58846@msticlxl57.ims.intel.com |
---|---|
State | New |
Headers | show |
On Thu, Jan 29, 2015 at 02:27:30PM +0300, Ilya Enkovich wrote: > Thank you for review! Here is an updated version with proposed changes. Bootstrapped and tested on x86_64-unknown-linux-gnu. OK for trunk? > > Thanks, > Ilya > -- > 2015-01-29 Ilya Enkovich <ilya.enkovich@intel.com> Perhaps mention Uros as co-author of the patch? I'll defer the review to Uros or other i?86 maintainers. Jakub
On Thu, Jan 29, 2015 at 12:27 PM, Ilya Enkovich <enkovich.gnu@gmail.com> wrote: > On 29 Jan 09:50, Uros Bizjak wrote: >> On Thu, Jan 29, 2015 at 9:13 AM, Uros Bizjak <ubizjak@gmail.com> wrote: >> >> >>> Currently ix86_conditional_register_usage code may mark EBX as a fixed register if it is called >> >>> when pic_offset_table_rtx is NULL even if we are going to use pseudo PIC register. It already >> >>> caused some problem in combination with another issue (PR jit/64722). This patch will probably >> >>> help to avoid problems in the future. >> >>> >> >>> BTW if we don't want to support possibility to switch to the fixed PIC register in i386 target then >> >>> this code may be removed at all. >> >> >> >> No, we don't want to switch to fixed PIC register. cpuid asm in >> >> cpuid.h and cmpxchg8b pattern will break. Please do not bring back the >> >> dead and remove this code. >> > >> > Also, if possible, please simplify PIC_OFFSET_TABLE_REGNUM to use >> > TARGET_USE_PSEUDO_PIC_REG, like: >> >> Ops, better use the attached patch that exports ix86_use_pseudo_pic_reg. >> >> Uros. > > Hello Uros, > > Thank you for review! Here is an updated version with proposed changes. Bootstrapped and tested on x86_64-unknown-linux-gnu. OK for trunk? > > Thanks, > Ilya > -- > 2015-01-29 Ilya Enkovich <ilya.enkovich@intel.com> > > * config/i386/i386-protos.h (ix86_use_pseudo_pic_reg): New. > * config/i386/i386.h (PIC_OFFSET_TABLE_REGNUM): Simplify by > using x86_use_pseudo_pic_reg. > * config/i386/i386.c (ix86_conditional_register_usage): Remove > support for fixed PIC register. > (ix86_use_pseudo_pic_reg): Not static any more. OK. Thanks, Uros.
diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h index 17aed5a..3962427 100644 --- a/gcc/config/i386/i386-protos.h +++ b/gcc/config/i386/i386-protos.h @@ -40,6 +40,8 @@ extern void ix86_output_addr_diff_elt (FILE *, int, int); extern enum calling_abi ix86_cfun_abi (void); extern enum calling_abi ix86_function_type_abi (const_tree); +extern bool ix86_use_pseudo_pic_reg (void); + extern void ix86_reset_previous_fndecl (void); #ifdef RTX_CODE diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index d10d3ff..f912007 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -4384,12 +4384,6 @@ static void ix86_conditional_register_usage (void) { int i, c_mask; - unsigned int j; - - /* The PIC register, if it exists, is fixed. */ - j = PIC_OFFSET_TABLE_REGNUM; - if (j != INVALID_REGNUM) - fixed_regs[j] = call_used_regs[j] = 1; /* For 32-bit targets, squash the REX registers. */ if (! TARGET_64BIT) @@ -6256,7 +6250,7 @@ ix86_maybe_switch_abi (void) /* Return 1 if pseudo register should be created and used to hold GOT address for PIC code. */ -static bool +bool ix86_use_pseudo_pic_reg (void) { if ((TARGET_64BIT diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index 395778c..5d1e5e0 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -1256,13 +1256,11 @@ extern const char *host_detect_local_cpu (int argc, const char **argv); #define REAL_PIC_OFFSET_TABLE_REGNUM (TARGET_64BIT ? R15_REG : BX_REG) #define PIC_OFFSET_TABLE_REGNUM \ - ((TARGET_64BIT && (ix86_cmodel == CM_SMALL_PIC \ - || TARGET_PECOFF)) \ - || !flag_pic \ - ? INVALID_REGNUM \ - : pic_offset_table_rtx \ - ? INVALID_REGNUM \ - : REAL_PIC_OFFSET_TABLE_REGNUM) + (ix86_use_pseudo_pic_reg () \ + ? (pic_offset_table_rtx \ + ? INVALID_REGNUM \ + : REAL_PIC_OFFSET_TABLE_REGNUM) \ + : INVALID_REGNUM) #define GOT_SYMBOL_NAME "_GLOBAL_OFFSET_TABLE_"