On Wed, May 26, 2021 at 1:43 AM Bernd Edlinger
<bernd.edlin...@hotmail.de> wrote:
>
> 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:

If anything it is a bad interaction with changes between r12-1046 and
r12-1053; I am suspecting a bug in those changes rather than my
changes causing the bug.  Debugging it right now.

Thanks,
Andrew




>
> 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