Commit fc5851fe by Alexandre Oliva Committed by Alexandre Oliva

[PR67766] reorder handling of parallels, concats and promoted values in return

for  gcc/ChangeLog

	PR middle-end/67766
	* function.c (expand_function_end): Move return value
	promotion past the handling of PARALLELs and CONCATs.

From-SVN: r228651
parent f813d16e
2015-10-09 Alexandre Oliva <aoliva@redhat.com>
PR middle-end/67766
* function.c (expand_function_end): Move return value
promotion past the handling of PARALLELs and CONCATs.
PR rtl-optimization/67828
* tree-ssa-loop-unswitch.c: Include tree-ssa.h.
(tree_may_unswitch_on): Don't unswitch on expressions
......@@ -5446,18 +5446,6 @@ expand_function_end (void)
decl_rtl);
shift_return_value (GET_MODE (decl_rtl), true, real_decl_rtl);
}
/* If a named return value dumped decl_return to memory, then
we may need to re-do the PROMOTE_MODE signed/unsigned
extension. */
else if (GET_MODE (real_decl_rtl) != GET_MODE (decl_rtl))
{
int unsignedp = TYPE_UNSIGNED (TREE_TYPE (decl_result));
promote_function_mode (TREE_TYPE (decl_result),
GET_MODE (decl_rtl), &unsignedp,
TREE_TYPE (current_function_decl), 1);
convert_move (real_decl_rtl, decl_rtl, unsignedp);
}
else if (GET_CODE (real_decl_rtl) == PARALLEL)
{
/* If expand_function_start has created a PARALLEL for decl_rtl,
......@@ -5488,6 +5476,18 @@ expand_function_end (void)
emit_move_insn (tmp, decl_rtl);
emit_move_insn (real_decl_rtl, tmp);
}
/* If a named return value dumped decl_return to memory, then
we may need to re-do the PROMOTE_MODE signed/unsigned
extension. */
else if (GET_MODE (real_decl_rtl) != GET_MODE (decl_rtl))
{
int unsignedp = TYPE_UNSIGNED (TREE_TYPE (decl_result));
promote_function_mode (TREE_TYPE (decl_result),
GET_MODE (decl_rtl), &unsignedp,
TREE_TYPE (current_function_decl), 1);
convert_move (real_decl_rtl, decl_rtl, unsignedp);
}
else
emit_move_insn (real_decl_rtl, decl_rtl);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment