From 2da068d5c04c748a27fa0694eb00bb385bac13aa Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Sat, 26 Jul 2014 09:48:24 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 5 +++++ gcc/ira-costs.c | 14 ++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6cf53647c62..17506913c1d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2014-07-26 Richard Sandiford + + * 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 * rtl.h (tls_referenced_p): Declare. diff --git a/gcc/ira-costs.c b/gcc/ira-costs.c index a83e1dff00c..13bbf077829 100644 --- a/gcc/ira-costs.c +++ b/gcc/ira-costs.c @@ -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 -- 2.30.2