On 5/25/21 4:22 PM, Richard Biener via Gcc-patches wrote:
> On Sun, May 23, 2021 at 12:03 PM apinski--- via Gcc-patches
> <gcc-patches@gcc.gnu.org> wrote:
>>
>> From: Andrew Pinski <apin...@marvell.com>
>>
>> Instead of some of the more manual optimizations inside phi-opt,
>> it would be good idea to do a lot of the heavy lifting inside match
>> and simplify instead. In the process, this moves the three simple
>> A?CST1:CST2 (where CST1 or CST2 is zero) simplifications.
>>
>> OK? Boostrapped and tested on x86_64-linux-gnu with no regressions.
>>
>> Differences from V1:
>> * Use bit_xor 1 instead of bit_not to fix the problem with boolean types
>> which are not 1 bit precision.
> 
> OK.
> 
> Thanks,
> Richard.
> 

Hmm, sorry, no luck.

I think this caused:

home/ed/gnu/gcc-build/./gcc/xgcc -B/home/ed/gnu/gcc-build/./gcc/ 
-B/home/ed/gnu/install/x86_64-pc-linux-gnu/bin/ 
-B/home/ed/gnu/install/x86_64-pc-linux-gnu/lib/ -isystem 
/home/ed/gnu/install/x86_64-pc-linux-gnu/include -isystem 
/home/ed/gnu/install/x86_64-pc-linux-gnu/sys-include   -fchecking=1 -c -g -O2 
-W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes 
-Wold-style-definition -Wmissing-format-attribute -Wno-overlength-strings 
-pedantic -Wno-long-long   -DHAVE_CONFIG_H -I. -I../../gcc-trunk/fixincludes 
-I../include -I../../gcc-trunk/fixincludes/../include 
../../gcc-trunk/fixincludes/fixtests.c
during GIMPLE pass: evrp
../../gcc-trunk/fixincludes/fixtests.c: In function ‘run_test’:
../../gcc-trunk/fixincludes/fixtests.c:155:1: internal compiler error: in 
operator[], at vec.h:890
  155 | }
      | ^
0x824622 vec<tree_node*, va_gc, vl_embed>::operator[](unsigned int)
        ../../gcc-trunk/gcc/vec.h:890
0x8247f0 vec<range_def_chain::rdc, va_heap, vl_embed>::operator[](unsigned int)
        ../../gcc-trunk/gcc/tree.h:3366
0x8247f0 vec<range_def_chain::rdc, va_heap, vl_ptr>::operator[](unsigned int)
        ../../gcc-trunk/gcc/vec.h:1461
0x8247f0 range_def_chain::register_dependency(tree_node*, tree_node*, 
basic_block_def*)
        ../../gcc-trunk/gcc/gimple-range-gori.cc:179
0x18639bc fold_using_range::range_of_range_op(irange&, gimple*, fur_source&)
        ../../gcc-trunk/gcc/gimple-range.cc:439
0x1866c85 fold_using_range::fold_stmt(irange&, gimple*, fur_source&, tree_node*)
        ../../gcc-trunk/gcc/gimple-range.cc:376
0x1866fa2 gimple_ranger::fold_range_internal(irange&, gimple*, tree_node*)
        ../../gcc-trunk/gcc/gimple-range.cc:1067
0x1866fa2 gimple_ranger::range_of_stmt(irange&, gimple*, tree_node*)
        ../../gcc-trunk/gcc/gimple-range.cc:1097
0x186308a gimple_ranger::range_of_expr(irange&, tree_node*, gimple*)
        ../../gcc-trunk/gcc/gimple-range.cc:980
0x18637c7 fold_using_range::range_of_range_op(irange&, gimple*, fur_source&)
        ../../gcc-trunk/gcc/gimple-range.cc:431
0x1866c85 fold_using_range::fold_stmt(irange&, gimple*, fur_source&, tree_node*)
        ../../gcc-trunk/gcc/gimple-range.cc:376
0x1866fa2 gimple_ranger::fold_range_internal(irange&, gimple*, tree_node*)
        ../../gcc-trunk/gcc/gimple-range.cc:1067
0x1866fa2 gimple_ranger::range_of_stmt(irange&, gimple*, tree_node*)
        ../../gcc-trunk/gcc/gimple-range.cc:1097
0x186308a gimple_ranger::range_of_expr(irange&, tree_node*, gimple*)
        ../../gcc-trunk/gcc/gimple-range.cc:980
0x1149961 range_query::value_of_expr(tree_node*, gimple*)
        ../../gcc-trunk/gcc/value-query.cc:86
0x1871e51 hybrid_folder::value_of_expr(tree_node*, gimple*)
        ../../gcc-trunk/gcc/gimple-ssa-evrp.c:235
0xff9573 substitute_and_fold_engine::replace_uses_in(gimple*)
        ../../gcc-trunk/gcc/tree-ssa-propagate.c:575
0xff988c substitute_and_fold_dom_walker::before_dom_children(basic_block_def*)
        ../../gcc-trunk/gcc/tree-ssa-propagate.c:845
0x183921f dom_walker::walk(basic_block_def*)
        ../../gcc-trunk/gcc/domwalk.c:309
0xff8d15 substitute_and_fold_engine::substitute_and_fold(basic_block_def*)
        ../../gcc-trunk/gcc/tree-ssa-propagate.c:987
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.
make[2]: *** [Makefile:76: fixtests.o] Error 1
make[2]: Leaving directory '/home/ed/gnu/gcc-build/fixincludes'
make[1]: *** [Makefile:3827: all-fixincludes] Error 2
make[1]: Leaving directory '/home/ed/gnu/gcc-build'
make: *** [Makefile:1011: all] Error 2


Bernd.


>> Thanks,
>> Andrew Pinski
>>
>> gcc:
>>         * match.pd (A?CST1:CST2): Add simplifcations for A?0:+-1, A?+-1:0,
>>         A?POW2:0 and A?0:POW2.
>> ---
>>  gcc/match.pd | 41 +++++++++++++++++++++++++++++++++++++++++
>>  1 file changed, 41 insertions(+)
>>
>> diff --git a/gcc/match.pd b/gcc/match.pd
>> index 1fc6b7b1557..ad6b057c56d 100644
>> --- a/gcc/match.pd
>> +++ b/gcc/match.pd
>> @@ -3711,6 +3711,47 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
>>     (if (integer_all_onesp (@1) && integer_zerop (@2))
>>      @0))))
>>
>> +/* A few simplifications of "a ? CST1 : CST2". */
>> +/* NOTE: Only do this on gimple as the if-chain-to-switch
>> +   optimization depends on the gimple to have if statements in it. */
>> +#if GIMPLE
>> +(simplify
>> + (cond @0 INTEGER_CST@1 INTEGER_CST@2)
>> + (switch
>> +  (if (integer_zerop (@2))
>> +   (switch
>> +    /* a ? 1 : 0 -> a if 0 and 1 are integral types. */
>> +    (if (integer_onep (@1))
>> +     (convert (convert:boolean_type_node @0)))
>> +    /* a ? -1 : 0 -> -a. */
>> +    (if (integer_all_onesp (@1))
>> +     (negate (convert (convert:boolean_type_node @0))))
>> +    /* a ? powerof2cst : 0 -> a << (log2(powerof2cst)) */
>> +    (if (!POINTER_TYPE_P (type) && integer_pow2p (@1))
>> +     (with {
>> +       tree shift = build_int_cst (integer_type_node, tree_log2 (@1));
>> +      }
>> +      (lshift (convert (convert:boolean_type_node @0)) { shift; })))))
>> +  (if (integer_zerop (@1))
>> +   (with {
>> +      tree booltrue = constant_boolean_node (true, boolean_type_node);
>> +    }
>> +    (switch
>> +     /* a ? 0 : 1 -> !a. */
>> +     (if (integer_onep (@2))
>> +      (convert (bit_xor (convert:boolean_type_node @0) { booltrue; } )))
>> +     /* a ? -1 : 0 -> -(!a). */
>> +     (if (integer_all_onesp (@2))
>> +      (negate (convert (bit_xor (convert:boolean_type_node @0) { booltrue; 
>> } ))))
>> +     /* a ? powerof2cst : 0 -> (!a) << (log2(powerof2cst)) */
>> +     (if (!POINTER_TYPE_P (type) && integer_pow2p (@2))
>> +      (with {
>> +       tree shift = build_int_cst (integer_type_node, tree_log2 (@2));
>> +       }
>> +       (lshift (convert (bit_xor (convert:boolean_type_node @0) { booltrue; 
>> } ))
>> +        { shift; }))))))))
>> +#endif
>> +
>>  /* Simplification moved from fold_cond_expr_with_comparison.  It may also
>>     be extended.  */
>>  /* This pattern implements two kinds simplification:
>> --
>> 2.17.1
>>
> 

Reply via email to