Commit 18eaea7f by Roger Sayle Committed by Roger Sayle

re PR middle-end/21309 (internal compiler error: in expand_mult_const, at expmed.c:2884)


	PR middle-end/21309
	* expmed.c (choose_mult_variant): Return immediately when mult_cost
	is less than zero.  Limit mult_cost to a reasonable upper bound for
	the synthetic multiplication sequence.

From-SVN: r107537
parent 7e7b53aa
2005-11-25 Roger Sayle <roger@eyesopen.com>
PR middle-end/21309
* expmed.c (choose_mult_variant): Return immediately when mult_cost
is less than zero. Limit mult_cost to a reasonable upper bound for
the synthetic multiplication sequence.
2005-11-25 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
PR middle-end/25022
......
......@@ -2836,6 +2836,17 @@ choose_mult_variant (enum machine_mode mode, HOST_WIDE_INT val,
struct mult_cost limit;
int op_cost;
/* Fail quickly for impossible bounds. */
if (mult_cost < 0)
return false;
/* Ensure that mult_cost provides a reasonable upper bound.
Any constant multiplication can be performed with less
than 2 * bits additions. */
op_cost = 2 * GET_MODE_BITSIZE (mode) * add_cost[mode];
if (mult_cost > op_cost)
mult_cost = op_cost;
*variant = basic_variant;
limit.cost = mult_cost;
limit.latency = mult_cost;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment