OSDN Git Service

(expand_mult): Properly set ADD_TARGET for add_variant.
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 28 Jul 1994 03:33:05 +0000 (03:33 +0000)
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 28 Jul 1994 03:33:05 +0000 (03:33 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@7802 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/expmed.c

index 994451a..98019ee 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])