diff options
author | Bernd Schmidt <bernds@codesourcery.com> | 2011-07-08 12:57:50 +0000 |
---|---|---|
committer | Bernd Schmidt <bernds@gcc.gnu.org> | 2011-07-08 12:57:50 +0000 |
commit | 69660a709191cd559cfeb9170b1cad9c1e5daae4 (patch) | |
tree | dbfc3d0e9b173b47f6d2222de19d36b1c0d27471 /gcc/expr.c | |
parent | 2c50b2c366a178161e90caad85d9dd883b5bfa90 (diff) | |
download | gcc-69660a709191cd559cfeb9170b1cad9c1e5daae4.zip gcc-69660a709191cd559cfeb9170b1cad9c1e5daae4.tar.gz gcc-69660a709191cd559cfeb9170b1cad9c1e5daae4.tar.bz2 |
optabs.c (expand_binop): Use GET_MODE_PRECISION instead of GET_MODE_BITSIZE where appropriate.
* optabs.c (expand_binop): Use GET_MODE_PRECISION instead of
GET_MODE_BITSIZE where appropriate.
(widen_leading, expand_parity, expand_ctz, expand_ffs,
expand_unop, expand_abs_nojump, expand_one_cmpl_abs_nojump,
expand_float, expand_fix): Likewise.
* expr.c (convert_move, convert_modes, expand_expr_real_2,
expand_expr_real_1, reduce_to_bit_field_precision): Likewise.
* cfgexpand.c (convert_debug_memory_address, expand_debug_expr):
Likewise.
* convert.c (convert_to_integer): Likewise.
* expmed.c (expand_shift_1): Likewise.
From-SVN: r176038
Diffstat (limited to 'gcc/expr.c')
-rw-r--r-- | gcc/expr.c | 45 |
1 files changed, 23 insertions, 22 deletions
@@ -336,8 +336,8 @@ convert_move (rtx to, rtx from, int unsignedp) TO here. */ if (GET_CODE (from) == SUBREG && SUBREG_PROMOTED_VAR_P (from) - && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (from))) - >= GET_MODE_SIZE (to_mode)) + && (GET_MODE_PRECISION (GET_MODE (SUBREG_REG (from))) + >= GET_MODE_PRECISION (to_mode)) && SUBREG_PROMOTED_UNSIGNED_P (from) == unsignedp) from = gen_lowpart (to_mode, from), from_mode = to_mode; @@ -478,8 +478,8 @@ convert_move (rtx to, rtx from, int unsignedp) /* Now both modes are integers. */ /* Handle expanding beyond a word. */ - if (GET_MODE_BITSIZE (from_mode) < GET_MODE_BITSIZE (to_mode) - && GET_MODE_BITSIZE (to_mode) > BITS_PER_WORD) + if (GET_MODE_PRECISION (from_mode) < GET_MODE_PRECISION (to_mode) + && GET_MODE_PRECISION (to_mode) > BITS_PER_WORD) { rtx insns; rtx lowpart; @@ -503,7 +503,7 @@ convert_move (rtx to, rtx from, int unsignedp) return; } /* Next, try converting via full word. */ - else if (GET_MODE_BITSIZE (from_mode) < BITS_PER_WORD + else if (GET_MODE_PRECISION (from_mode) < BITS_PER_WORD && ((code = can_extend_p (to_mode, word_mode, unsignedp)) != CODE_FOR_nothing)) { @@ -529,7 +529,7 @@ convert_move (rtx to, rtx from, int unsignedp) from = force_reg (from_mode, from); /* Get a copy of FROM widened to a word, if necessary. */ - if (GET_MODE_BITSIZE (from_mode) < BITS_PER_WORD) + if (GET_MODE_PRECISION (from_mode) < BITS_PER_WORD) lowpart_mode = word_mode; else lowpart_mode = from_mode; @@ -567,8 +567,8 @@ convert_move (rtx to, rtx from, int unsignedp) } /* Truncating multi-word to a word or less. */ - if (GET_MODE_BITSIZE (from_mode) > BITS_PER_WORD - && GET_MODE_BITSIZE (to_mode) <= BITS_PER_WORD) + if (GET_MODE_PRECISION (from_mode) > BITS_PER_WORD + && GET_MODE_PRECISION (to_mode) <= BITS_PER_WORD) { if (!((MEM_P (from) && ! MEM_VOLATILE_P (from) @@ -603,7 +603,7 @@ convert_move (rtx to, rtx from, int unsignedp) } /* Handle extension. */ - if (GET_MODE_BITSIZE (to_mode) > GET_MODE_BITSIZE (from_mode)) + if (GET_MODE_PRECISION (to_mode) > GET_MODE_PRECISION (from_mode)) { /* Convert directly if that works. */ if ((code = can_extend_p (to_mode, from_mode, unsignedp)) @@ -635,8 +635,8 @@ convert_move (rtx to, rtx from, int unsignedp) /* No suitable intermediate mode. Generate what we need with shifts. */ - shift_amount = (GET_MODE_BITSIZE (to_mode) - - GET_MODE_BITSIZE (from_mode)); + shift_amount = (GET_MODE_PRECISION (to_mode) + - GET_MODE_PRECISION (from_mode)); from = gen_lowpart (to_mode, force_reg (from_mode, from)); tmp = expand_shift (LSHIFT_EXPR, to_mode, from, shift_amount, to, unsignedp); @@ -664,7 +664,7 @@ convert_move (rtx to, rtx from, int unsignedp) ??? Code above formerly short-circuited this, for most integer mode pairs, with a force_reg in from_mode followed by a recursive call to this routine. Appears always to have been wrong. */ - if (GET_MODE_BITSIZE (to_mode) < GET_MODE_BITSIZE (from_mode)) + if (GET_MODE_PRECISION (to_mode) < GET_MODE_PRECISION (from_mode)) { rtx temp = force_reg (to_mode, gen_lowpart (to_mode, from)); emit_move_insn (to, temp); @@ -742,11 +742,11 @@ convert_modes (enum machine_mode mode, enum machine_mode oldmode, rtx x, int uns wider than HOST_BITS_PER_WIDE_INT, we must be narrowing the operand. */ if ((CONST_INT_P (x) - && GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT) + && GET_MODE_PRECISION (mode) <= HOST_BITS_PER_WIDE_INT) || (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_CLASS (oldmode) == MODE_INT && (GET_CODE (x) == CONST_DOUBLE - || (GET_MODE_SIZE (mode) <= GET_MODE_SIZE (oldmode) + || (GET_MODE_PRECISION (mode) <= GET_MODE_PRECISION (oldmode) && ((MEM_P (x) && ! MEM_VOLATILE_P (x) && direct_load[(int) mode]) || (REG_P (x) @@ -759,7 +759,7 @@ convert_modes (enum machine_mode mode, enum machine_mode oldmode, rtx x, int uns X does not need sign- or zero-extension. This may not be the case, but it's the best we can do. */ if (CONST_INT_P (x) && oldmode != VOIDmode - && GET_MODE_SIZE (mode) > GET_MODE_SIZE (oldmode)) + && GET_MODE_PRECISION (mode) > GET_MODE_PRECISION (oldmode)) { HOST_WIDE_INT val = INTVAL (x); @@ -4279,7 +4279,7 @@ expand_assignment (tree to, tree from, bool nontemporal) if (!MEM_P (to_rtx) && GET_MODE (to_rtx) != BLKmode && (unsigned HOST_WIDE_INT) bitpos - >= GET_MODE_BITSIZE (GET_MODE (to_rtx))) + >= GET_MODE_PRECISION (GET_MODE (to_rtx))) { expand_normal (from); result = NULL; @@ -7476,7 +7476,7 @@ expand_expr_real_2 (sepops ops, rtx target, enum machine_mode tmode, if (modifier == EXPAND_STACK_PARM) target = 0; if (TREE_CODE (treeop0) == INTEGER_CST - && GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT + && GET_MODE_PRECISION (mode) <= HOST_BITS_PER_WIDE_INT && TREE_CONSTANT (treeop1)) { rtx constant_part; @@ -7498,7 +7498,7 @@ expand_expr_real_2 (sepops ops, rtx target, enum machine_mode tmode, } else if (TREE_CODE (treeop1) == INTEGER_CST - && GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT + && GET_MODE_PRECISION (mode) <= HOST_BITS_PER_WIDE_INT && TREE_CONSTANT (treeop0)) { rtx constant_part; @@ -8968,7 +8968,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, we can't do this optimization. */ && (! DECL_BIT_FIELD (field) || ((GET_MODE_CLASS (DECL_MODE (field)) == MODE_INT) - && (GET_MODE_BITSIZE (DECL_MODE (field)) + && (GET_MODE_PRECISION (DECL_MODE (field)) <= HOST_BITS_PER_WIDE_INT)))) { if (DECL_BIT_FIELD (field) @@ -8987,7 +8987,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, } else { - int count = GET_MODE_BITSIZE (imode) - bitsize; + int count = GET_MODE_PRECISION (imode) - bitsize; op0 = expand_shift (LSHIFT_EXPR, imode, op0, count, target, 0); @@ -9431,7 +9431,8 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, /* If neither mode is BLKmode, and both modes are the same size then we can use gen_lowpart. */ else if (mode != BLKmode && GET_MODE (op0) != BLKmode - && GET_MODE_SIZE (mode) == GET_MODE_SIZE (GET_MODE (op0)) + && (GET_MODE_PRECISION (mode) + == GET_MODE_PRECISION (GET_MODE (op0))) && !COMPLEX_MODE_P (GET_MODE (op0))) { if (GET_CODE (op0) == SUBREG) @@ -9754,7 +9755,7 @@ reduce_to_bit_field_precision (rtx exp, rtx target, tree type) } else { - int count = GET_MODE_BITSIZE (GET_MODE (exp)) - prec; + int count = GET_MODE_PRECISION (GET_MODE (exp)) - prec; exp = expand_shift (LSHIFT_EXPR, GET_MODE (exp), exp, count, target, 0); return expand_shift (RSHIFT_EXPR, GET_MODE (exp), |