Commit 2da068d5 by Richard Sandiford Committed by Richard Sandiford

ira-costs.c (find_costs_and_classes): For -O0...

gcc/
	* ira-costs.c (find_costs_and_classes): For -O0, use the best class
	as the allocation class if it isn't likely to be spilled.

From-SVN: r213078
parent 093a6c99
2014-07-26 Richard Sandiford <rdsandiford@googlemail.com>
* ira-costs.c (find_costs_and_classes): For -O0, use the best class
as the allocation class if it isn't likely to be spilled.
2014-07-26 Richard Sandiford <rdsandiford@googlemail.com>
* rtl.h (tls_referenced_p): Declare.
* rtlanal.c (tls_referenced_p_1, tls_referenced_p): New functions.
* config/mips/mips.c (mips_tls_symbol_ref_1): Delete.
......
......@@ -1753,6 +1753,20 @@ find_costs_and_classes (FILE *dump_file)
alt_class = ira_allocno_class_translate[alt_class];
if (best_cost > i_mem_cost)
regno_aclass[i] = NO_REGS;
else if (!optimize && !targetm.class_likely_spilled_p (best))
/* Registers in the alternative class are likely to need
longer or slower sequences than registers in the best class.
When optimizing we make some effort to use the best class
over the alternative class where possible, but at -O0 we
effectively give the alternative class equal weight.
We then run the risk of using slower alternative registers
when plenty of registers from the best class are still free.
This is especially true because live ranges tend to be very
short in -O0 code and so register pressure tends to be low.
Avoid that by ignoring the alternative class if the best
class has plenty of registers. */
regno_aclass[i] = best;
else
{
/* Make the common class the biggest class of best and
......
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