[Bug middle-end/101294] [12 Regression] ICE: in maybe_legitimize_operand, at optabs.c:7614 with -mavx since r12-1958-gedafb35bdadf309e
hjl.tools at gmail dot com
gcc-bugzilla@gcc.gnu.org
Fri Jul 2 13:04:01 GMT 2021
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101294
H.J. Lu <hjl.tools at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Component|target |middle-end
--- Comment #2 from H.J. Lu <hjl.tools at gmail dot com> ---
The bug is latent before r12-1958. store_constructor has
/* Try using vec_duplicate_optab for uniform vectors. */
if (!TREE_SIDE_EFFECTS (exp)
&& VECTOR_MODE_P (mode)
&& eltmode == GET_MODE_INNER (mode)
&& ((icode = optab_handler (vec_duplicate_optab, mode))
!= CODE_FOR_nothing)
&& (elt = uniform_vector_p (exp)))
{
class expand_operand ops[2];
create_output_operand (&ops[0], target, mode);
create_input_operand (&ops[1], expand_normal (elt), eltmode);
expand_insn (icode, 2, ops);
if (!rtx_equal_p (target, ops[0].value))
emit_move_insn (target, ops[0].value);
break;
}
(gdb) call debug_tree (exp)
<constructor 0x7fffea23a9a8
type <vector_type 0x7fffea22ab28
type <integer_type 0x7fffea0f1930 long long unsigned int public
unsigned DI
size <integer_cst 0x7fffea0d8cf0 constant 64>
unit-size <integer_cst 0x7fffea0d8d08 constant 8>
align:64 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7fffea0f1930 precision:64 min <integer_cst 0x7fffea0f6018 0> max <integer_cst
0x7fffea0d9540 18446744073709551615>
pointer_to_this <pointer_type 0x7fffea101348>>
unsigned V4DI
size <integer_cst 0x7fffea0f6060 constant 256>
unit-size <integer_cst 0x7fffea0f6150 constant 32>
align:256 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7fffea22ab28 nunits:4 context <translation_unit_decl 0x7fffea0e6ac8 x.c>>
constant length:4
val <vector_cst 0x7fffea23a8a0
type <vector_type 0x7fffea22aa80 U type <integer_type 0x7fffea0f1930
long long unsigned int>
unsigned V1DI size <integer_cst 0x7fffea0d8cf0 64> unit-size
<integer_cst 0x7fffea0d8d08 8>
align:64 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7fffea22a9d8 nunits:1 context <translation_unit_decl 0x7fffea0e6ac8 x.c>>
constant npatterns:1 nelts-per-pattern:1
elt:0: <integer_cst 0x7fffea0f6018 constant 0>>
val <vector_cst 0x7fffea23a900 type <vector_type 0x7fffea22aa80 U>
constant npatterns:1 nelts-per-pattern:1 elt:0: <integer_cst
0x7fffea0f6018 0>>
val <vector_cst 0x7fffea23a900 type <vector_type 0x7fffea22aa80 U>
constant npatterns:1 nelts-per-pattern:1 elt:0: <integer_cst
0x7fffea0f6018 0>>
val <vector_cst 0x7fffea23a900 type <vector_type 0x7fffea22aa80 U>
constant npatterns:1 nelts-per-pattern:1 elt:0: <integer_cst
0x7fffea0f6018 0>>>
(gdb) call debug_tree (elt)
<vector_cst 0x7fffea23a8a0
type <vector_type 0x7fffea22aa80 U
type <integer_type 0x7fffea0f1930 long long unsigned int public
unsigned DI
size <integer_cst 0x7fffea0d8cf0 constant 64>
unit-size <integer_cst 0x7fffea0d8d08 constant 8>
align:64 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7fffea0f1930 precision:64 min <integer_cst 0x7fffea0f6018 0> max <integer_cst
0x7fffea0d9540 18446744073709551615>
pointer_to_this <pointer_type 0x7fffea101348>>
unsigned V1DI size <integer_cst 0x7fffea0d8cf0 64> unit-size
<integer_cst 0x7fffea0d8d08 8>
align:64 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7fffea22a9d8 nunits:1 context <translation_unit_decl 0x7fffea0e6ac8 x.c>>
constant npatterns:1 nelts-per-pattern:1
elt:0: <integer_cst 0x7fffea0f6018 type <integer_type 0x7fffea0f1930 long
long unsigned int> constant 0>>
(gdb) p eltmode
$11 = E_DImode
(gdb)
DImode != V1DImode.
More information about the Gcc-bugs
mailing list