>-#define PIC_OFFSET_TABLE_REGNUM \ >- ((TARGET_64BIT && (ix86_cmodel == CM_SMALL_PIC \ >- || TARGET_PECOFF)) \ >- || !flag_pic ? INVALID_REGNUM \ >- : reload_completed ? REGNO (pic_offset_table_rtx) \ >+#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)
>No negative conditions, please. Also, please follow established >multi-level condition format, please see e.g. HARD_REGNO_NREGS >definition in i386.h. I don't see how we can avoid negative condition here. If we remove "not" from !flag_pic we'll need to add "not" to TARGET_64BIT and TARGET_PECOFF. I've done it this way: +#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) Is it ok? On Fri, Oct 10, 2014 at 6:01 PM, Evgeny Stupachenko <evstu...@gmail.com> wrote: > Updated ChangeLog: > 2014-10-10 Ilya Enkovich <ilya.enkov...@intel.com> > Vladimir Makarov <vmaka...@redhat.com> > > * config/i386/i386.c (ix86_use_pseudo_pic_reg): New. > (ix86_init_pic_reg): New. > (ix86_select_alt_pic_regnum): Add check on pseudo register. > (ix86_save_reg): Likewise. > (ix86_expand_prologue): Remove PIC register initialization > now performed in ix86_init_pic_reg. > (ix86_output_function_epilogue): Add check on pseudo register. > (set_pic_reg_ever_alive): New. > (legitimize_pic_address): Replace df_set_regs_ever_live with new > set_pic_reg_ever_alive. > (legitimize_tls_address): Likewise. > (ix86_pic_register_p): New check. > (ix86_delegitimize_address): Add check on pseudo register. > (ix86_expand_call): Insert move from pseudo PIC register to ABI > defined REAL_PIC_OFFSET_TABLE_REGNUM. > (TARGET_INIT_PIC_REG): New. > (TARGET_USE_PSEUDO_PIC_REG): New. > * config/i386/i386.h (PIC_OFFSET_TABLE_REGNUM): Return INVALID_REGNUM > if pic_offset_table_rtx exists. > >>- if (pic_offset_table_rtx) >>+ if (pic_offset_table_rtx >>+ && (!reload_completed || !ix86_use_pseudo_pic_reg ())) > >>Hm, can you please add a comment for this change? > > I've added the following comment to the patch: > - in which case we return (%ecx - %ebx) + foo. */ > + in which case we return (%ecx - %ebx) + foo. > + > + Note that when pseudo_pic_reg is used we can generate it only > + before reload_completed. */ > > On Fri, Oct 10, 2014 at 4:36 PM, Jakub Jelinek <ja...@redhat.com> wrote: >> On Fri, Oct 10, 2014 at 02:34:07PM +0200, Rainer Orth wrote: >>> Uros Bizjak <ubiz...@gmail.com> writes: >>> >>> > On Fri, Oct 10, 2014 at 9:43 AM, Evgeny Stupachenko <evstu...@gmail.com> >>> > wrote: >>> >> i386 specific part of the patch: >>> >> >>> >> 2014-10-08 Ilya Enkovich <ilya.enkov...@intel.com> >>> >> Vladimir Makarov <vmaka...@redhat.com> >>> >> * gcc/config/i386/i386.c (ix86_use_pseudo_pic_reg): New. >>> >>> Evgeny: here and in your other submissions: drop the gcc prefix from the >>> pathnames. They are all relative to the directory the ChangeLog lives >>> in. >> >> And add a blank line after after the e-mail lines. >> >> Jakub