Use actual_call_used_reg_set to find conflicting regs
authorTom de Vries <tom@codesourcery.com>
Thu, 12 Mar 2015 06:59:34 +0000 (06:59 +0000)
committerTom de Vries <vries@gcc.gnu.org>
Thu, 12 Mar 2015 06:59:34 +0000 (06:59 +0000)
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

gcc/ChangeLog
gcc/lra-lives.c

index 53f582b5e967af98329d1587a266b7b21865750c..5973cbc1a976f7d3732a9c36f8d3a262482c9b04 100644 (file)
@@ -1,3 +1,8 @@
+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.
+
 2015-03-10  Jan Hubicka  <hubicka@ucw.cz>
 
        * cgraph.c (cgraph_node::release_body): Free function_in_decl_state.
index 9dfffb6f28788b22df01b9922faa8463065bee04..5d759ca73d3d1ce55faf9c0522366edc55582b46 100644 (file)
@@ -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)))