aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1992-09-19 15:47:55 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1992-09-19 15:47:55 -0400
commit4b7cb39e6230d7e1ae25d013c64714d7fe62f46d (patch)
tree2573bf6f586bec94e0ac435472fb0294ab8eb8ce
parentc56d91f8e71a1ae7d8bb3ad59d83dd3a621b8298 (diff)
downloadgcc-4b7cb39e6230d7e1ae25d013c64714d7fe62f46d.zip
gcc-4b7cb39e6230d7e1ae25d013c64714d7fe62f46d.tar.gz
gcc-4b7cb39e6230d7e1ae25d013c64714d7fe62f46d.tar.bz2
(expand_inline_function): Convert actual to formal's mode (in case formal
was promoted). From-SVN: r2177
-rw-r--r--gcc/integrate.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/gcc/integrate.c b/gcc/integrate.c
index 424f9a6..965bc9f 100644
--- a/gcc/integrate.c
+++ b/gcc/integrate.c
@@ -1224,15 +1224,21 @@ expand_inline_function (fndecl, parms, target, ignore, type, structure_value_add
if (GET_CODE (loc) == MEM && GET_CODE (XEXP (loc, 0)) == REG
&& REGNO (XEXP (loc, 0)) > LAST_VIRTUAL_REGISTER)
{
- enum machine_mode mode = TYPE_MODE (TREE_TYPE (arg));
- rtx stack_slot = assign_stack_temp (mode, int_size_in_bytes (TREE_TYPE (arg)), 1);
+ rtx stack_slot
+ = assign_stack_temp (TYPE_MODE (TREE_TYPE (arg)),
+ int_size_in_bytes (TREE_TYPE (arg)), 1);
store_expr (arg, stack_slot, 0);
arg_vals[i] = XEXP (stack_slot, 0);
}
else if (GET_CODE (loc) != MEM)
- arg_vals[i] = expand_expr (arg, NULL_RTX, mode, EXPAND_SUM);
+ /* The mode if LOC and ARG can differ if LOC was a variable
+ that had its mode promoted via PROMOTED_MODE. */
+ arg_vals[i] = convert_to_mode (GET_MODE (loc),
+ expand_expr (arg, NULL_RTX, mode,
+ EXPAND_SUM),
+ TREE_UNSIGNED (TREE_TYPE (formal)));
else
arg_vals[i] = 0;
@@ -1250,7 +1256,7 @@ expand_inline_function (fndecl, parms, target, ignore, type, structure_value_add
|| GET_CODE (arg_vals[i]) == SUBREG
|| GET_CODE (arg_vals[i]) == MEM)
&& reg_overlap_mentioned_p (arg_vals[i], target))))
- arg_vals[i] = copy_to_mode_reg (mode, arg_vals[i]);
+ arg_vals[i] = copy_to_mode_reg (GET_MODE (loc), arg_vals[i]);
}
/* Allocate the structures we use to remap things. */