Inconsistent initialization for pic_offset_table_rtx?

2016-02-04 Thread 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 != INVALID_REGNUM) pic_offset_table_rtx = gen_raw_RE

Re: Inconsistent initialization for pic_offset_table_rtx?

2016-02-04 Thread Ilya Enkovich
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

Early inlining and function references from static const struct (bug?)

2016-02-04 Thread Carlos Pita
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

Re: Inconsistent initialization for pic_offset_table_rtx?

2016-02-04 Thread Bin.Cheng
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

Re: Early inlining and function references from static const struct (bug?)

2016-02-04 Thread Carlos Pita
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

Re: Early inlining and function references from static const struct (bug?)

2016-02-04 Thread Carlos Pita
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