summaryrefslogtreecommitdiff
path: root/gcc/lra-spills.c
diff options
context:
space:
mode:
authorTom de Vries <tom@codesourcery.com>2018-03-01 05:51:08 +0000
committerTom de Vries <vries@gcc.gnu.org>2018-03-01 05:51:08 +0000
commit54178a01107b911813609693dd8d91968ac06819 (patch)
treed07c5b1a1c94714f4b24f7a5d327eefc320c6bf7 /gcc/lra-spills.c
parent7540ea866ad77094e6f77023558378ce9b196fd5 (diff)
Fix liveness analysis in lra for spilled-into hard regs
2018-03-01 Tom de Vries <tom@codesourcery.com> PR rtl-optimization/83327 * lra-int.h (hard_regs_spilled_into): Declare. * lra.c (hard_regs_spilled_into): Define. (init_reg_info): Init hard_regs_spilled_into. * lra-spills.c (assign_spill_hard_regs): Update hard_regs_spilled_into. * lra-lives.c (make_hard_regno_born, make_hard_regno_dead) (process_bb_lives): Handle hard_regs_spilled_into. (lra_create_live_ranges_1): Before doing liveness propagation, clear regs in all_hard_regs_bitmap if set in hard_regs_spilled_into. From-SVN: r258093
Diffstat (limited to 'gcc/lra-spills.c')
-rw-r--r--gcc/lra-spills.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/gcc/lra-spills.c b/gcc/lra-spills.c
index 8f6278acae4..33caf9f4564 100644
--- a/gcc/lra-spills.c
+++ b/gcc/lra-spills.c
@@ -294,6 +294,8 @@ assign_spill_hard_regs (int *pseudo_regnos, int n)
}
if (lra_dump_file != NULL)
fprintf (lra_dump_file, " Spill r%d into hr%d\n", regno, hard_regno);
+ add_to_hard_reg_set (&hard_regs_spilled_into,
+ lra_reg_info[regno].biggest_mode, hard_regno);
/* Update reserved_hard_regs. */
for (r = lra_reg_info[regno].live_ranges; r != NULL; r = r->next)
for (p = r->start; p <= r->finish; p++)