PR rtl-optimization/55630
* expr.c (expand_assignment): Do not call copy_blkmode_to_reg to move
BLKmode return values to the return register.
From-SVN: r194530
+2012-12-16 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR rtl-optimization/55630
+ * expr.c (expand_assignment): Do not call copy_blkmode_to_reg to move
+ BLKmode return values to the return register.
+
2012-12-15 Alexandre Oliva <aoliva@redhat.com>
PR libmudflap/53952
rtx temp;
push_temp_slots ();
- if (REG_P (to_rtx) && TYPE_MODE (TREE_TYPE (from)) == BLKmode)
+
+ /* If the source is itself a return value, it still is in a pseudo at
+ this point so we can move it back to the return register directly. */
+ if (REG_P (to_rtx)
+ && TYPE_MODE (TREE_TYPE (from)) == BLKmode
+ && TREE_CODE (from) != CALL_EXPR)
temp = copy_blkmode_to_reg (GET_MODE (to_rtx), from);
else
temp = expand_expr (from, NULL_RTX, GET_MODE (to_rtx), EXPAND_NORMAL);