From: John David Anglin Date: Sat, 18 Aug 2012 23:16:53 +0000 (+0000) Subject: re PR middle-end/53823 (FAIL: gcc.c-torture/execute/930921-1.c execution at -O0 and... X-Git-Tag: misc/gccgo-go1_1_2~1307 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b216b86b7ee3b1f6a83daebab8aadf77d69bd5d0;p=thirdparty%2Fgcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2282536c1ab6..1f313e9b7d89 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2012-08-18 John David Anglin + + 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 * sparseset.c (sparseset_alloc): Use non-clearing allocation. Tell diff --git a/gcc/expmed.c b/gcc/expmed.c index ac944f159bdd..6c94a90fb843 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