]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR middle-end/53823 (FAIL: gcc.c-torture/execute/930921-1.c execution at -O0 and...
authorJohn David Anglin <dave.anglin@nrc-cnrc.gc.ca>
Sat, 18 Aug 2012 23:16:53 +0000 (23:16 +0000)
committerJohn David Anglin <danglin@gcc.gnu.org>
Sat, 18 Aug 2012 23:16:53 +0000 (23:16 +0000)
PR middle-end/53823
* expmed.c (expand_mult): Skip synth_mult for negative coefficients
if the mode is larger than a wide int and it is too costly to multiply
by a positive multiplier and negate the result.

From-SVN: r190505

gcc/ChangeLog
gcc/expmed.c

index 2282536c1ab64d3f9890826ccb01371f060fcea7..1f313e9b7d89da753046002be15df2b51c579739 100644 (file)
@@ -1,3 +1,10 @@
+2012-08-18  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+
+       PR middle-end/53823
+       * expmed.c (expand_mult): Skip synth_mult for negative coefficients
+       if the mode is larger than a wide int and it is too costly to multiply
+       by a positive multiplier and negate the result.
+
 2012-08-18  Steven Bosscher  <steven@gcc.gnu.org>
 
        * sparseset.c (sparseset_alloc): Use non-clearing allocation.  Tell
index ac944f159bdd311d75663e5f815acd7984e451c8..6c94a90fb8436122bf9018abfcba3f23cc8eb89b 100644 (file)
@@ -3261,7 +3261,6 @@ expand_mult (enum machine_mode mode, rtx op0, rtx op1, rtx target,
       /* Attempt to handle multiplication of DImode values by negative
         coefficients, by performing the multiplication by a positive
         multiplier and then inverting the result.  */
-      /* ??? How is this not slightly redundant with the neg variant?  */
       if (is_neg && mode_bitsize > HOST_BITS_PER_WIDE_INT)
        {
          /* Its safe to use -coeff even for INT_MIN, as the
@@ -3278,6 +3277,7 @@ expand_mult (enum machine_mode mode, rtx op0, rtx op1, rtx target,
                                            &algorithm, variant);
              return expand_unop (mode, neg_optab, temp, target, 0);
            }
+         goto skip_synth;
        }
 
       /* Exclude cost of op0 from max_cost to match the cost