diff options
author | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-04-21 17:02:19 +0000 |
---|---|---|
committer | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-04-21 17:02:19 +0000 |
commit | b4dcfd488e7bf438b934f030668c8ffdfb5a9ad3 (patch) | |
tree | 2c75dd3ba824a16844c1f27d411974966c382bea | |
parent | abb13663a66a4e38613848766fe687c276ec41b6 (diff) | |
download | gcc-b4dcfd488e7bf438b934f030668c8ffdfb5a9ad3.tar.gz |
* expmed.c (expand_mult_highpart_optab): Use narrower version of OP1
in two more places; remove unneeded force_reg
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@80969 138bc75d-0d04-0410-961f-82ee72b054a4
-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 3fc6309c5f5..1e5ac10935c 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 3fb76b45a54..3eb745465da 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) { |