summaryrefslogtreecommitdiff
path: root/gcc/lra-assigns.c
diff options
context:
space:
mode:
authorAlexander Monakov <amonakov@ispras.ru>2017-09-19 13:16:20 +0300
committerAlexander Monakov <amonakov@gcc.gnu.org>2017-09-19 13:16:20 +0300
commitffaea1170332667a1533a354dfcedc6d0de4aa5e (patch)
tree44bbb0fce59aadf8f4f5b18d02ac86d7dc1f856d /gcc/lra-assigns.c
parent9412007cea62fe6181dfab389c578a0f0839baf8 (diff)
lra: make reload_pseudo_compare_func a proper comparator
PR rtl-optimization/57878 PR rtl-optimization/68988 * lra-assigns.c (reload_pseudo_compare_func): Remove fragmentation avoidance test involving non_reload_pseudos. Move frequency test below the general fragmentation avoidance test. From-SVN: r252972
Diffstat (limited to 'gcc/lra-assigns.c')
-rw-r--r--gcc/lra-assigns.c15
1 files changed, 3 insertions, 12 deletions
diff --git a/gcc/lra-assigns.c b/gcc/lra-assigns.c
index 9208fccfd59..5a65c7c8c5f 100644
--- a/gcc/lra-assigns.c
+++ b/gcc/lra-assigns.c
@@ -211,24 +211,15 @@ reload_pseudo_compare_func (const void *v1p, const void *v2p)
if ((diff = (ira_class_hard_regs_num[cl1]
- ira_class_hard_regs_num[cl2])) != 0)
return diff;
- if ((diff
- = (ira_reg_class_max_nregs[cl2][lra_reg_info[r2].biggest_mode]
- - ira_reg_class_max_nregs[cl1][lra_reg_info[r1].biggest_mode])) != 0
- /* The code below executes rarely as nregs == 1 in most cases.
- So we should not worry about using faster data structures to
- check reload pseudos. */
- && ! bitmap_bit_p (&non_reload_pseudos, r1)
- && ! bitmap_bit_p (&non_reload_pseudos, r2))
- return diff;
- if ((diff = (regno_assign_info[regno_assign_info[r2].first].freq
- - regno_assign_info[regno_assign_info[r1].first].freq)) != 0)
- return diff;
/* Allocate bigger pseudos first to avoid register file
fragmentation. */
if ((diff
= (ira_reg_class_max_nregs[cl2][lra_reg_info[r2].biggest_mode]
- ira_reg_class_max_nregs[cl1][lra_reg_info[r1].biggest_mode])) != 0)
return diff;
+ if ((diff = (regno_assign_info[regno_assign_info[r2].first].freq
+ - regno_assign_info[regno_assign_info[r1].first].freq)) != 0)
+ return diff;
/* Put pseudos from the thread nearby. */
if ((diff = regno_assign_info[r1].first - regno_assign_info[r2].first) != 0)
return diff;