diff options
author | Richard Kenner <kenner@vlsi1.ultra.nyu.edu> | 2004-04-21 17:02:19 +0000 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 2004-04-21 13:02:19 -0400 |
commit | 665acd1ef23f8d1429207fec05c4c0e232d0aa75 (patch) | |
tree | 2c75dd3ba824a16844c1f27d411974966c382bea /gcc | |
parent | 86a80fc3522cb14dd0b5a8f4913e8653111bbcc0 (diff) | |
download | gcc-665acd1ef23f8d1429207fec05c4c0e232d0aa75.zip gcc-665acd1ef23f8d1429207fec05c4c0e232d0aa75.tar.gz gcc-665acd1ef23f8d1429207fec05c4c0e232d0aa75.tar.bz2 |
expmed.c (expand_mult_highpart_optab): Use narrower version of OP1 in two more places; remove unneeded force_reg
* expmed.c (expand_mult_highpart_optab): Use narrower version of OP1
in two more places; remove unneeded force_reg
From-SVN: r80969
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/expmed.c | 12 |
2 files changed, 10 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3fc6309..1e5ac10 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2004-04-21 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * expmed.c (expand_mult_highpart_optab): Use narrower version of OP1 + in two more places; remove unneeded force_reg + 2004-04-21 Andrew Pinski <pinskia@physics.uc.edu> * config/rs6000/rs6000.c (symbol_ref_operand): Remove hack diff --git a/gcc/expmed.c b/gcc/expmed.c index 3fb76b4..3eb7454 100644 --- a/gcc/expmed.c +++ b/gcc/expmed.c @@ -2883,6 +2883,7 @@ static rtx expand_mult_highpart_optab (enum machine_mode mode, rtx op0, rtx op1, rtx target, int unsignedp, int max_cost) { + rtx narrow_op1 = gen_int_mode (INTVAL (op1), mode); enum machine_mode wider_mode; optab moptab; rtx tem; @@ -2896,8 +2897,7 @@ expand_mult_highpart_optab (enum machine_mode mode, rtx op0, rtx op1, if (mul_highpart_cost[(int) mode] < max_cost) { moptab = unsignedp ? umul_highpart_optab : smul_highpart_optab; - tem = expand_binop (mode, moptab, op0, - gen_int_mode (INTVAL (op1), mode), target, + tem = expand_binop (mode, moptab, op0, narrow_op1, target, unsignedp, OPTAB_DIRECT); if (tem) return tem; @@ -2910,8 +2910,7 @@ expand_mult_highpart_optab (enum machine_mode mode, rtx op0, rtx op1, < max_cost)) { moptab = unsignedp ? smul_highpart_optab : umul_highpart_optab; - tem = expand_binop (mode, moptab, op0, - gen_int_mode (INTVAL (op1), mode), target, + tem = expand_binop (mode, moptab, op0, narrow_op1, target, unsignedp, OPTAB_DIRECT); if (tem) /* We used the wrong signedness. Adjust the result. */ @@ -2924,7 +2923,7 @@ expand_mult_highpart_optab (enum machine_mode mode, rtx op0, rtx op1, if (moptab->handlers[(int) wider_mode].insn_code != CODE_FOR_nothing && mul_widen_cost[(int) wider_mode] < max_cost) { - tem = expand_binop (wider_mode, moptab, op0, op1, 0, + tem = expand_binop (wider_mode, moptab, op0, narrow_op1, 0, unsignedp, OPTAB_WIDEN); if (tem) return extract_high_half (mode, tem); @@ -2949,8 +2948,7 @@ expand_mult_highpart_optab (enum machine_mode mode, rtx op0, rtx op1, && (mul_widen_cost[(int) wider_mode] + 2 * shift_cost[size-1] + 4 * add_cost < max_cost)) { - rtx regop1 = force_reg (mode, op1); - tem = expand_binop (wider_mode, moptab, op0, regop1, + tem = expand_binop (wider_mode, moptab, op0, narrow_op1, NULL_RTX, ! unsignedp, OPTAB_WIDEN); if (tem != 0) { |