This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] PR ipa/63909 ICE: SIGSEGV in ipa_icf_gimple::func_checker::compare_bb()


On 12/10/2014 02:26 PM, Richard Biener wrote:
On Tue, Dec 9, 2014 at 4:52 PM, Martin LiÅka <mliska@suse.cz> wrote:
On 11/21/2014 01:23 PM, Richard Biener wrote:

On Fri, Nov 21, 2014 at 12:52 PM, Martin LiÅka <mliska@suse.cz> wrote:

On 11/20/2014 05:41 PM, Richard Biener wrote:


On Thu, Nov 20, 2014 at 5:30 PM, Martin LiÅka <mliska@suse.cz> wrote:


Hello.

Following patch fixes ICE in IPA ICF. Problem was that number of
non-debug
statements in a BB can
change (for instance by IPA split), so that the number is recomputed.



Huh, so can it get different for both candidates?  I think the stmt
compare
loop should be terminated on gsi_end_p of either iterator and return
false for any remaining non-debug-stmts on the other.

Thus, not walk all stmts twice here.



Hello.

Sorry for the previous patch, you are right it can be fixed in purer way.
Please take a look at attached patch.


As IPA split is run early I don't see how it should affect a real IPA
pass though?





Sorry for non precise information, the problematic BB is changed here:
#0  gsi_split_seq_before (i=0x7fffffffd550, pnew_seq=0x7fffffffd528) at
../../gcc/gimple-iterator.c:429
#1  0x0000000000b95a2a in gimple_split_block (bb=0x7ffff6c41548,
stmt=0x0)
at ../../gcc/tree-cfg.c:5707
#2  0x00000000007563cf in split_block (bb=0x7ffff6c41548, i=i@entry=0x0)
at
../../gcc/cfghooks.c:508
#3  0x0000000000756b44 in split_block_after_labels (bb=<optimized out>)
at
../../gcc/cfghooks.c:549
#4  make_forwarder_block (bb=<optimized out>,
redirect_edge_p=redirect_edge_p@entry=0x75d4e0
<mfb_keep_just(edge_def*)>,
new_bb_cbk=new_bb_cbk@entry=0x0) at ../../gcc/cfghooks.c:842
#5  0x000000000076085a in create_preheader (loop=0x7ffff6d56948,
flags=<optimized out>) at ../../gcc/cfgloopmanip.c:1563
#6  0x0000000000760aea in create_preheaders (flags=1) at
../../gcc/cfgloopmanip.c:1613
#7  0x00000000009bc6b0 in apply_loop_flags (flags=15) at
../../gcc/loop-init.c:75
#8  0x00000000009bc7d3 in loop_optimizer_init (flags=15) at
../../gcc/loop-init.c:136
#9  0x0000000000957914 in estimate_function_body_sizes
(node=0x7ffff6c47620,
early=false) at ../../gcc/ipa-inline-analysis.c:2480
#10 0x000000000095948b in compute_inline_parameters (node=0x7ffff6c47620,
early=false) at ../../gcc/ipa-inline-analysis.c:2907
#11 0x000000000095bd88 in inline_analyze_function (node=0x7ffff6c47620)
at
../../gcc/ipa-inline-analysis.c:3994
#12 0x000000000095bed3 in inline_generate_summary () at
../../gcc/ipa-inline-analysis.c:4045
#13 0x0000000000a70b71 in execute_ipa_summary_passes (ipa_pass=0x1dcb9e0)
at


So inline_summary is generated after IPA-ICF does its job?

But the bug is obviously that an IPA analysis phase does a code transform
(here initializes loops without AVOID_CFG_MANIPULATIONS).
Honza - if that is really needed then I think we should make sure
loops are initialized at the start of the IPA analysis phase, not randomly
inbetween.

Thanks,
Richard.


Hello.

Even thought the root of problem is hidden somewhere in loop creation, I
would
like to apply the patch which makes iteration of non-debug gimple statement
more clearly?

What do you think Richard?

Works for me - but we have to address the underlying issue.

Richard.

Thank you, I've just create another issue that is related to inliner analysis,
where the transformation occurs: PR64253.

Thanks,
Martin



Thanks,
Martin



../../gcc/passes.c:2137
#14 0x0000000000777a15 in ipa_passes () at ../../gcc/cgraphunit.c:2074
#15 symbol_table::compile (this=this@entry=0x7ffff6c3a000) at
../../gcc/cgraphunit.c:2187
#16 0x0000000000778bcd in symbol_table::finalize_compilation_unit
(this=0x7ffff6c3a000) at ../../gcc/cgraphunit.c:2340
#17 0x00000000006580ee in c_write_global_declarations () at
../../gcc/c/c-decl.c:10777
#18 0x0000000000b5bb8b in compile_file () at ../../gcc/toplev.c:584
#19 0x0000000000b5def1 in do_compile () at ../../gcc/toplev.c:2041
#20 0x0000000000b5e0fa in toplev::main (this=0x7fffffffdc9f, argc=20,
argv=0x7fffffffdd98) at ../../gcc/toplev.c:2138
#21 0x000000000063f1d9 in main (argc=20, argv=0x7fffffffdd98) at
../../gcc/main.c:38


Patch can bootstrap on x86_64-linux-pc and no regression has been seen.
Ready for trunk?


Thanks,
Martin


Thanks,
Richard.

Patch can bootstrap on x86_64-linux-pc and no regression has been seen.
Ready for trunk?

Thanks,
Martin






Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]