aboutsummaryrefslogtreecommitdiff
path: root/gcc/lra-lives.c
diff options
context:
space:
mode:
authorTom de Vries <tom@codesourcery.com>2015-03-12 06:59:34 +0000
committerTom de Vries <vries@gcc.gnu.org>2015-03-12 06:59:34 +0000
commit13d29cb0105e563a75da2aa7ef7943421bce04a5 (patch)
tree0f7dfd047c36a8ea93774e4f301f8fc0b40aa936 /gcc/lra-lives.c
parent2e5554fde31cf4f018733cf58a6e6bb2ffad2271 (diff)
downloadgcc-13d29cb0105e563a75da2aa7ef7943421bce04a5.zip
gcc-13d29cb0105e563a75da2aa7ef7943421bce04a5.tar.gz
gcc-13d29cb0105e563a75da2aa7ef7943421bce04a5.tar.bz2
Use actual_call_used_reg_set to find conflicting regs
2015-03-12 Tom de Vries <tom@codesourcery.com> * lra-lives.c (check_pseudos_live_through_calls): Use actual_call_used_reg_set instead of call_used_reg_set, if available. From-SVN: r221372
Diffstat (limited to 'gcc/lra-lives.c')
-rw-r--r--gcc/lra-lives.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/lra-lives.c b/gcc/lra-lives.c
index 9dfffb6..5d759ca 100644
--- a/gcc/lra-lives.c
+++ b/gcc/lra-lives.c
@@ -636,8 +636,12 @@ check_pseudos_live_through_calls (int regno)
if (! sparseset_bit_p (pseudos_live_through_calls, regno))
return;
sparseset_clear_bit (pseudos_live_through_calls, regno);
+ bool actual_call_used_reg_set_available_p
+ = !hard_reg_set_empty_p (lra_reg_info[regno].actual_call_used_reg_set);
IOR_HARD_REG_SET (lra_reg_info[regno].conflict_hard_regs,
- call_used_reg_set);
+ (actual_call_used_reg_set_available_p
+ ? lra_reg_info[regno].actual_call_used_reg_set
+ : call_used_reg_set));
for (hr = 0; hr < FIRST_PSEUDO_REGISTER; hr++)
if (HARD_REGNO_CALL_PART_CLOBBERED (hr, PSEUDO_REGNO_MODE (regno)))