aboutsummaryrefslogtreecommitdiff
path: root/gcc/integrate.c
diff options
context:
space:
mode:
authorAlexandre Oliva <aoliva@redhat.com>2001-04-12 03:41:36 +0000
committerAlexandre Oliva <aoliva@gcc.gnu.org>2001-04-12 03:41:36 +0000
commit691073076ba2bdceb294db095293a0453489ab0f (patch)
tree943b9fe0140e410d24c23703edfa24a7154c671e /gcc/integrate.c
parent001643af8038ea54c0fdf32ce0cc570fafed0c2c (diff)
downloadgcc-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.c25
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);
}