[RFC] By default if-convert only basic blocks that will be vectorized (take 3)

Sergey Ostanevich sergos.gnu@gmail.com
Tue Oct 22 16:37:00 GMT 2013


still fails on 403 et al.

regrename.c: In function 'regrename_optimize':
regrename.c:200:1: internal compiler error: Segmentation fault
 regrename_optimize ()
 ^
0x96698f crash_signal
        ../../gcc/toplev.c:335
0x9a2657 ssa_default_def(function*, tree_node*)
        ../../gcc/tree-dfa.c:310
0x9a2c68 get_or_create_ssa_default_def(function*, tree_node*)
        ../../gcc/tree-dfa.c:362
0x9d0773 get_reaching_def
        ../../gcc/tree-into-ssa.c:1188
0x9d0773 get_reaching_def
        ../../gcc/tree-into-ssa.c:1175
0x9d24f8 rewrite_update_phi_arguments
        ../../gcc/tree-into-ssa.c:2017
0x9d24f8 rewrite_update_dom_walker::before_dom_children(basic_block_def*)
        ../../gcc/tree-into-ssa.c:2133
0x9d24f8 rewrite_update_dom_walker::before_dom_children(basic_block_def*)
        ../../gcc/tree-into-ssa.c:2069
0xddcbea dom_walker::walk(basic_block_def*)
        ../../gcc/domwalk.c:176
0x9ceba2 rewrite_blocks
        ../../gcc/tree-into-ssa.c:2188
0x9d604e update_ssa(unsigned int)
        ../../gcc/tree-into-ssa.c:3311
0x9b729f version_loop_for_if_conversion
        ../../gcc/tree-if-conv.c:1962
0x9bad10 tree_if_conversion
        ../../gcc/tree-if-conv.c:2042
0x9bad10 main_tree_if_conversion
        ../../gcc/tree-if-conv.c:2097
0x9bad10 execute
        ../../gcc/tree-if-conv.c:2147
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <http://gcc.gnu.org/bugs.html> for instructions.
specmake: *** [regrename.o] Error 1

On Tue, Oct 22, 2013 at 6:08 PM, Sergey Ostanevich <sergos.gnu@gmail.com> wrote:
> I use
> -march=core-avx2 -static -Ofast -flto -funroll-loops
> with all 3 patches applied to git version I mentioned
>
> the same is in progress for 'take 3'
>
> On Tue, Oct 22, 2013 at 5:26 PM, Jakub Jelinek <jakub@redhat.com> wrote:
>> On Tue, Oct 22, 2013 at 05:16:29PM +0400, Sergey Ostanevich wrote:
>>> ouch.. html got me!
>>>
>>> applying to the same as before
>>>
>>> commit 0e3dfadd374c3045a926afa6d06af276cee2108d
>>> Author: rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
>>> Date:   Fri Oct 18 08:36:28 2013 +0000
>>>
>>> trying '06 build.
>>>
>>>
>>> for take 2 on HSW there were mixed results for passed tests:
>>>
>>> 400.perlbench     +0.25%
>>> 401.bzip2         -0.40%
>>> 429.mcf           -1.67%
>>> 456.hmmer         +0%
>>> 458.sjeng         -1.65%
>>> 471.omnetpp       -1.72%
>>> 483.xalancbmk     -0.25%
>>> 410.bwaves        +0%
>>> 433.milc          -0.28%
>>> 444.namd          -1.13%
>>> 450.soplex        -1.01%
>>> 459.GemsFDTD      -0.25%
>>> 470.lbm           +1.44%
>>> 482.sphinx3       +0.61%
>>
>> Thanks.
>>
>> If this is with AVX or AVX2, there can be multiple things.
>>
>> One is whether if-conversion in it's current form is really so harmful
>> for generated code quality (we have various testcases where what we get with
>> it is very bad, but perhaps there are still testcases where it improves
>> non-vectorized loops), another one is when the masked loads/stores/gather is
>> actually beneficial and whether we don't want some better tuning for it.
>> The patchset as whole does both things, so determining what is what is hard.
>>
>> If only the first two patches are applied and not the third, then it should
>> give a picture on whether it is a win to have if-conversion done in it's
>> current form only for vectorized bbs.
>>
>> And, if all 3 patches are applied, but the condition in tree_if_conversion:
>>    if ((flag_tree_loop_vectorize || loop->force_vect)
>>        && (flag_tree_loop_if_convert == -1 || any_mask_load_store)
>>        && !version_loop_for_if_conversion (loop, &version_outer_loop,
>>                                            any_mask_load_store))
>>      goto cleanup;
>> is changed into just
>>   if (any_mask_load_store
>>       && !version_loop_for_if_conversion (loop, &version_outer_loop, true))
>>     goto cleanup;
>> then if-conversion would happen as before, just in cases where previously
>> we wouldn't if-convert because of conditional loads/stores, but now we
>> could, those changes would be limited to vectorized loops only.
>>
>>         Jakub



More information about the Gcc-patches mailing list