diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1992-09-19 15:47:55 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1992-09-19 15:47:55 -0400 |
commit | 4b7cb39e6230d7e1ae25d013c64714d7fe62f46d (patch) | |
tree | 2573bf6f586bec94e0ac435472fb0294ab8eb8ce | |
parent | c56d91f8e71a1ae7d8bb3ad59d83dd3a621b8298 (diff) | |
download | gcc-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.c | 14 |
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. */ |