aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJohn David Anglin <dave.anglin@nrc-cnrc.gc.ca>2012-08-18 23:16:53 +0000
committerJohn David Anglin <danglin@gcc.gnu.org>2012-08-18 23:16:53 +0000
commitb216b86b7ee3b1f6a83daebab8aadf77d69bd5d0 (patch)
treecce054ce1aba013927a269a47a19b00fcd6964a0 /gcc
parentb44e2c4cfb03d46d3969039fc54461a1f8afb5d0 (diff)
downloadgcc-b216b86b7ee3b1f6a83daebab8aadf77d69bd5d0.zip
gcc-b216b86b7ee3b1f6a83daebab8aadf77d69bd5d0.tar.gz
gcc-b216b86b7ee3b1f6a83daebab8aadf77d69bd5d0.tar.bz2
re PR middle-end/53823 (FAIL: gcc.c-torture/execute/930921-1.c execution at -O0 and -O1)
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/expmed.c2
2 files changed, 8 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2282536..1f313e9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/expmed.c b/gcc/expmed.c
index ac944f1..6c94a90 100644
--- a/gcc/expmed.c
+++ b/gcc/expmed.c
@@ -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