Hi,
This patch fixes PR64895, related to the gcc.target/i386/fuse-caller-save*.c
failures for -m32 -fpic.
Bootstrapped and reg-tested on x86_64 for unix/ and unix/-m32.
Build and reg-tested on x86_64 for unix/fpic and unix/fpic/-m32.
Approved here ( https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64895#c7 ):
...
The patch looks ok to me. Tom, could you prepare the patch (check it mostly for
x86-64 bootstrap and testsuite) and commit it to the trunk. I approve it.
...
Thanks,
- Tom
2015-03-12 Tom de Vries <t...@codesourcery.com>
PR rtl-optimization/64895
* lra-lives.c (check_pseudos_live_through_calls): Use
actual_call_used_reg_set instead of call_used_reg_set, if available.
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)))
--
1.9.1