OSDN Git Service

* expmed.c (expand_mult_highpart_optab): Use narrower version of OP1
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 21 Apr 2004 17:02:19 +0000 (17:02 +0000)
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 21 Apr 2004 17:02:19 +0000 (17:02 +0000)
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

gcc/ChangeLog
gcc/expmed.c

index 3fc6309..1e5ac10 100644 (file)
@@ -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
index 3fb76b4..3eb7454 100644 (file)
@@ -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)
        {