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.

Reply via email to