https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68291

--- Comment #5 from Eric Botcazou <ebotcazou at gcc dot gnu.org> ---
This comes from -ftree-coalesce-vars in expand_function_start:

  /* If we may coalesce this result, make sure it has the expected mode.  */
  if (flag_tree_coalesce_vars && is_gimple_reg (res))
    {
      tree def = ssa_default_def (cfun, res);
      gcc_assert (def);
      machine_mode mode = promote_ssa_mode (def, NULL);
      set_parm_rtl (res, gen_reg_rtx (mode));
    }

(gdb) p debug_tree(def)
 <ssa_name 0x7ffff6c40798
    type <vector_type 0x7ffff6d09690 __m128
        type <real_type 0x7ffff6c4d3f0 float SF
            size <integer_cst 0x7ffff6c37f90 constant 32>
            unit size <integer_cst 0x7ffff6c37fa8 constant 4>
            align 32 symtab 0 alias set 1 canonical type 0x7ffff6c4d3f0
precision 32
            pointer_to_this <pointer_type 0x7ffff6c4d5e8>>
        BLK
        size <integer_cst 0x7ffff6c37d98 constant 128>
        unit size <integer_cst 0x7ffff6c37db0 constant 16>
        align 128 symtab 0 alias set -1 canonical type 0x7ffff6d09540
        attributes <tree_list 0x7ffff6d05cd0
            purpose <identifier_node 0x7ffff6d17140 __may_alias__>> nunits 4
context <translation_unit_decl 0x7ffff6d25078 D.1400>>
    var <result_decl 0x7ffff6d25000 D.1399>def_stmt GIMPLE_NOP

    version 10>

so we end up creating a REG with BLKmode:

(gdb) p debug_tree(res)
 <result_decl 0x7ffff6d25000 D.1399
    type <vector_type 0x7ffff6d09690 __m128
        type <real_type 0x7ffff6c4d3f0 float SF
            size <integer_cst 0x7ffff6c37f90 constant 32>
            unit size <integer_cst 0x7ffff6c37fa8 constant 4>
            align 32 symtab 0 alias set 1 canonical type 0x7ffff6c4d3f0
precision 32
            pointer_to_this <pointer_type 0x7ffff6c4d5e8>>
        BLK
        size <integer_cst 0x7ffff6c37d98 constant 128>
        unit size <integer_cst 0x7ffff6c37db0 constant 16>
        align 128 symtab 0 alias set -1 canonical type 0x7ffff6d09540
        attributes <tree_list 0x7ffff6d05cd0
            purpose <identifier_node 0x7ffff6d17140 __may_alias__>> nunits 4
context <translation_unit_decl 0x7ffff6d25078 D.1400>>
    ignored BLK file pr39928-1.c line 8 col 1 size <integer_cst 0x7ffff6c37d98
128> unit size <integer_cst 0x7ffff6c37db0 16>
    align 128 context <function_decl 0x7ffff6d0d380 vq_nbest>
    (reg:BLK 109 [ <retval> ])>

instead of the expected:

 <result_decl 0x7ffff6d25000 D.1399
    type <vector_type 0x7ffff6d09690 __m128
        type <real_type 0x7ffff6c4d3f0 float SF
            size <integer_cst 0x7ffff6c37f90 constant 32>
            unit size <integer_cst 0x7ffff6c37fa8 constant 4>
            align 32 symtab 0 alias set 1 canonical type 0x7ffff6c4d3f0
precision 32
            pointer_to_this <pointer_type 0x7ffff6c4d5e8>>
        BLK
        size <integer_cst 0x7ffff6c37d98 constant 128>
        unit size <integer_cst 0x7ffff6c37db0 constant 16>
        align 128 symtab 0 alias set -1 canonical type 0x7ffff6d09540
        attributes <tree_list 0x7ffff6d05cd0
            purpose <identifier_node 0x7ffff6d17140 __may_alias__>> nunits 4
context <translation_unit_decl 0x7ffff6d25078 D.1400>>
    ignored BLK file pr39928-1.c line 8 col 1 size <integer_cst 0x7ffff6c37d98
128> unit size <integer_cst 0x7ffff6c37db0 16>
    align 128 context <function_decl 0x7ffff6d0d380 vq_nbest>
    (parallel:BLK [
        (expr_list:REG_DEP_TRUE (reg:DI 109 [ <retval> ])
            (const_int 0 [0]))
        (expr_list:REG_DEP_TRUE (reg:DI 110 [ <retval>+8 ])
            (const_int 8 [0x8]))
    ])>

and this later confuses expand_function_end.

Reply via email to