This change fixes PR middle-end/53823. The negative variant of synth_mult doesn't handle modes larger than a host wide int.
Approved by rth in PR. Tested on hppa2.0w-hp-hpux11.11 and hppa64-hp-hpux11.11. Dave -- J. David Anglin dave.ang...@nrc-cnrc.gc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6602) 2012-08-18 John David Anglin <dave.ang...@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. Index: expmed.c =================================================================== --- expmed.c (revision 190317) +++ expmed.c (working copy) @@ -3261,7 +3261,6 @@ /* 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 @@ &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