Hi,
I noticed that pic_offset_table_rtx is initialized twice in GCC. Take
x86_32 as an example.
The first initialization is done in emit_init_regs, with below code:
pic_offset_table_rtx = NULL_RTX;
if ((unsigned) PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM)
pic_offset_table_rtx = gen_raw_RE
2016-02-04 17:12 GMT+03:00 Bin.Cheng :
> Hi,
> I noticed that pic_offset_table_rtx is initialized twice in GCC. Take
> x86_32 as an example.
> The first initialization is done in emit_init_regs, with below code:
>
> pic_offset_table_rtx = NULL_RTX;
> if ((unsigned) PIC_OFFSET_TABLE_REGNUM != I
Hi all,
I've been trying to understand some bizarre interaction between
optimizing passes I've observed while compiling a heavily nested
inlined numerical code of mine. I managed to reduce the issue down to
this simple code:
``` test.c
typedef struct F {
int (*call)(int);
} F;
static int g(F
On Thu, Feb 4, 2016 at 3:18 PM, Ilya Enkovich wrote:
> 2016-02-04 17:12 GMT+03:00 Bin.Cheng :
>> Hi,
>> I noticed that pic_offset_table_rtx is initialized twice in GCC. Take
>> x86_32 as an example.
>> The first initialization is done in emit_init_regs, with below code:
>>
>> pic_offset_table_r
PS: I framed the issue between the inline_param and fixup_cfg passes
because I was only looking at the tree passes, but the really relevant
passes are tree-einline (obviously) and ipa-inline, which happens
between tree-inline_param2 and tree-fixup_cfg2. So, restating the
problem: if early inline is
PS 2 (last one, I swear): I've isolated what I think is the root of
the problem. When einline expands g, there is plenty of call sites for
f.call, so the full redundancy elimination pass replaces sum for
f.call, making things easy for the late ipa inliner. But when g is not
early inlined, there is