diff options
author | Alexandre Oliva <aoliva@redhat.com> | 2001-04-12 03:41:36 +0000 |
---|---|---|
committer | Alexandre Oliva <aoliva@gcc.gnu.org> | 2001-04-12 03:41:36 +0000 |
commit | 691073076ba2bdceb294db095293a0453489ab0f (patch) | |
tree | 943b9fe0140e410d24c23703edfa24a7154c671e /gcc/integrate.c | |
parent | 001643af8038ea54c0fdf32ce0cc570fafed0c2c (diff) | |
download | gcc-691073076ba2bdceb294db095293a0453489ab0f.zip gcc-691073076ba2bdceb294db095293a0453489ab0f.tar.gz gcc-691073076ba2bdceb294db095293a0453489ab0f.tar.bz2 |
expmed.c (store_bit_field): Truncate CONST_INTs.
* expmed.c (store_bit_field): Truncate CONST_INTs.
(expand_mult_highpart, expand_divmod): Likewise.
* expr.c (convert_modes, store_field): Likewise.
* integrate.c (expand_inline_function): Use promote_mode() to
determine whether to convert_modes() an argument as signed
or unsigned.
* optabs.c (expand_binop): Get CONST_INT operands
sign-extended for their appropriate modes.
* stmt.c (emit_case_nodes): Convert node values to the
appropriate mode.
(expand_end_case): Convert minval and range to the appropriate
mode.
* unroll.c (loop_iterations): Truncate abs_diff to the mode of
the iteration variable.
* varasm.c (immed_double_const): Don't require words to be
narrower than host wide ints to properly sign-extend
CONST_INTs.
From-SVN: r41285
Diffstat (limited to 'gcc/integrate.c')
-rw-r--r-- | gcc/integrate.c | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/gcc/integrate.c b/gcc/integrate.c index 327e8fa..1955c05 100644 --- a/gcc/integrate.c +++ b/gcc/integrate.c @@ -702,13 +702,24 @@ expand_inline_function (fndecl, parms, target, ignore, type, else if (GET_CODE (loc) != MEM) { if (GET_MODE (loc) != TYPE_MODE (TREE_TYPE (arg))) - /* 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_modes (GET_MODE (loc), - TYPE_MODE (TREE_TYPE (arg)), - expand_expr (arg, NULL_RTX, mode, - EXPAND_SUM), - TREE_UNSIGNED (TREE_TYPE (formal))); + { + int unsignedp = TREE_UNSIGNED (TREE_TYPE (formal)); + enum machine_mode pmode = TYPE_MODE (TREE_TYPE (formal)); + + pmode = promote_mode (TREE_TYPE (formal), pmode, + &unsignedp, 0); + + if (GET_MODE (loc) != pmode) + abort (); + + /* 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_modes (pmode, + TYPE_MODE (TREE_TYPE (arg)), + expand_expr (arg, NULL_RTX, mode, + EXPAND_SUM), + unsignedp); + } else arg_vals[i] = expand_expr (arg, NULL_RTX, mode, EXPAND_SUM); } |