(expand_mult): Properly set ADD_TARGET for add_variant.
authorRichard Kenner <kenner@gcc.gnu.org>
Thu, 28 Jul 1994 03:33:05 +0000 (23:33 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Thu, 28 Jul 1994 03:33:05 +0000 (23:33 -0400)
From-SVN: r7802

gcc/expmed.c

index 994451a0e2d2a64be6edad839516e66fc0a77ddd..98019eeb2ed3093d6adc523b92160da33d759881 100644 (file)
@@ -2093,7 +2093,8 @@ expand_mult (mode, op0, op1, target, unsignedp)
        alg = alg2, variant = negate_variant;
 
       /* This proves very useful for division-by-constant.  */
-      synth_mult (&alg2, val - 1, (alg.cost < mult_cost ? alg.cost : mult_cost) - add_cost);
+      synth_mult (&alg2, val - 1,
+                 (alg.cost < mult_cost ? alg.cost : mult_cost) - add_cost);
       if (alg2.cost + add_cost < alg.cost)
        alg = alg2, variant = add_variant;
 
@@ -2131,7 +2132,9 @@ expand_mult (mode, op0, op1, target, unsignedp)
              int log = alg.log[opno];
              int preserve = preserve_subexpressions_p ();
              rtx shift_subtarget = preserve ? 0 : accum;
-             rtx add_target = opno == alg.ops - 1 && target != 0 ? target : 0;
+             rtx add_target
+               = (opno == alg.ops - 1 && target != 0 && variant != add_variant
+                 ? target : 0);
              rtx accum_target = preserve ? 0 : accum;
              
              switch (alg.op[opno])