>-#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 <[email protected]> wrote:
> Updated ChangeLog:
> 2014-10-10 Ilya Enkovich <[email protected]>
> Vladimir Makarov <[email protected]>
>
> * 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 <[email protected]> wrote:
>> On Fri, Oct 10, 2014 at 02:34:07PM +0200, Rainer Orth wrote:
>>> Uros Bizjak <[email protected]> writes:
>>>
>>> > On Fri, Oct 10, 2014 at 9:43 AM, Evgeny Stupachenko <[email protected]>
>>> > wrote:
>>> >> i386 specific part of the patch:
>>> >>
>>> >> 2014-10-08 Ilya Enkovich <[email protected]>
>>> >> Vladimir Makarov <[email protected]>
>>> >> * 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