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.