VEC_COND_EXPR optimizations v2

Marc Glisse marc.glisse@inria.fr
Thu Aug 6 09:05:56 GMT 2020


On Thu, 6 Aug 2020, Christophe Lyon wrote:

>>> 2020-08-05  Marc Glisse  <marc.glisse@inria.fr>
>>>
>>>         PR tree-optimization/95906
>>>         PR target/70314
>>>         * match.pd ((c ? a : b) op d, (c ? a : b) op (c ? d : e),
>>>         (v ? w : 0) ? a : b, c1 ? c2 ? a : b : b): New transformations.
>>>         (op (c ? a : b)): Update to match the new transformations.
>>>
>>>         * gcc.dg/tree-ssa/andnot-2.c: New file.
>>>         * gcc.dg/tree-ssa/pr95906.c: Likewise.
>>>         * gcc.target/i386/pr70314.c: Likewise.
>>>
>
> I think this patch is causing several ICEs on arm-none-linux-gnueabihf
> --with-cpu cortex-a9 --with-fpu neon-fp16:
>  Executed from: gcc.c-torture/compile/compile.exp
>    gcc.c-torture/compile/20160205-1.c   -O3 -fomit-frame-pointer
> -funroll-loops -fpeel-loops -ftracer -finline-functions  (internal
> compiler error)
>    gcc.c-torture/compile/20160205-1.c   -O3 -g  (internal compiler error)
>  Executed from: gcc.dg/dg.exp
>    gcc.dg/pr87746.c (internal compiler error)
>  Executed from: gcc.dg/tree-ssa/tree-ssa.exp
>    gcc.dg/tree-ssa/ifc-cd.c (internal compiler error)

I tried a cross from x86_64-linux with current master

.../configure --target=arm-none-linux-gnueabihf --enable-languages=c,c++ --with-system-zlib --disable-nls --with-cpu=cortex-a9 --with-fpu=neon-fp16
make

it stops at some point with an error, but I have xgcc and cc1 in
build/gcc.

I copied 2 of the testcases and compiled

./xgcc pr87746.c -Ofast -S -B.
./xgcc -O3 -fdump-tree-ifcvt-details-blocks-details ifc-cd.c -S -B.

without getting any ICE.

Is there a machine on the compile farm where this is easy to reproduce?
Or could you attach the .optimized dump that corresponds to the
backtrace below? It looks like we end up with a comparison with an
unexpected return type.

>  Executed from: gcc.dg/vect/vect.exp
>    gcc.dg/vect/pr59591-1.c (internal compiler error)
>    gcc.dg/vect/pr59591-1.c -flto -ffat-lto-objects (internal compiler error)
>    gcc.dg/vect/pr86927.c (internal compiler error)
>    gcc.dg/vect/pr86927.c -flto -ffat-lto-objects (internal compiler error)
>    gcc.dg/vect/slp-cond-5.c (internal compiler error)
>    gcc.dg/vect/slp-cond-5.c -flto -ffat-lto-objects (internal compiler error)
>    gcc.dg/vect/vect-23.c (internal compiler error)
>    gcc.dg/vect/vect-23.c -flto -ffat-lto-objects (internal compiler error)
>    gcc.dg/vect/vect-24.c (internal compiler error)
>    gcc.dg/vect/vect-24.c -flto -ffat-lto-objects (internal compiler error)
>    gcc.dg/vect/vect-cond-reduc-6.c (internal compiler error)
>    gcc.dg/vect/vect-cond-reduc-6.c -flto -ffat-lto-objects (internal
> compiler error)
>
> Backtrace for gcc.c-torture/compile/20160205-1.c   -O3
> -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer
> -finline-functions
> during RTL pass: expand
> /gcc/testsuite/gcc.c-torture/compile/20160205-1.c:2:5: internal
> compiler error: in do_store_flag, at expr.c:12259
> 0x8feb26 do_store_flag
>        /gcc/expr.c:12259
> 0x900201 expand_expr_real_2(separate_ops*, rtx_def*, machine_mode,
> expand_modifier)
>        /gcc/expr.c:9617
> 0x908cd0 expand_expr_real_1(tree_node*, rtx_def*, machine_mode,
> expand_modifier, rtx_def**, bool)
>        /gcc/expr.c:10159
> 0x91174e expand_expr
>        /gcc/expr.h:282
> 0x91174e expand_operands(tree_node*, tree_node*, rtx_def*, rtx_def**,
> rtx_def**, expand_modifier)
>        /gcc/expr.c:8065
> 0x8ff543 expand_expr_real_2(separate_ops*, rtx_def*, machine_mode,
> expand_modifier)
>        /gcc/expr.c:9950
> 0x908cd0 expand_expr_real_1(tree_node*, rtx_def*, machine_mode,
> expand_modifier, rtx_def**, bool)
>        /gcc/expr.c:10159
> 0x91174e expand_expr
>        /gcc/expr.h:282
> 0x91174e expand_operands(tree_node*, tree_node*, rtx_def*, rtx_def**,
> rtx_def**, expand_modifier)
>        /gcc/expr.c:8065
> 0x8ff543 expand_expr_real_2(separate_ops*, rtx_def*, machine_mode,
> expand_modifier)
>        /gcc/expr.c:9950
> 0x908cd0 expand_expr_real_1(tree_node*, rtx_def*, machine_mode,
> expand_modifier, rtx_def**, bool)
>        /gcc/expr.c:10159
> 0x91174e expand_expr
>        /gcc/expr.h:282
> 0x91174e expand_operands(tree_node*, tree_node*, rtx_def*, rtx_def**,
> rtx_def**, expand_modifier)
>        /gcc/expr.c:8065
> 0x8ff543 expand_expr_real_2(separate_ops*, rtx_def*, machine_mode,
> expand_modifier)
>        /gcc/expr.c:9950
> 0x908cd0 expand_expr_real_1(tree_node*, rtx_def*, machine_mode,
> expand_modifier, rtx_def**, bool)
>        /gcc/expr.c:10159
> 0x91174e expand_expr
>        /gcc/expr.h:282
> 0x91174e expand_operands(tree_node*, tree_node*, rtx_def*, rtx_def**,
> rtx_def**, expand_modifier)
>        /gcc/expr.c:8065
> 0x8ff543 expand_expr_real_2(separate_ops*, rtx_def*, machine_mode,
> expand_modifier)
>        /gcc/expr.c:9950
> 0x908cd0 expand_expr_real_1(tree_node*, rtx_def*, machine_mode,
> expand_modifier, rtx_def**, bool)
>        /gcc/expr.c:10159
> 0x91174e expand_expr
>        /gcc/expr.h:282
>
> Christophe

-- 
Marc Glisse


More information about the Gcc-patches mailing list