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.