aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/caller-save.c7
-rw-r--r--gcc/hard-reg-set.h6
-rw-r--r--gcc/ira-conflicts.c2
4 files changed, 11 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index aee3190..7c6d9ea 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,13 @@
2019-09-10 Richard Sandiford <richard.sandiford@arm.com>
+ * hard-reg-set.h (target_hard_regs::x_no_caller_save_reg_set): Delete.
+ (no_caller_save_reg_set): Delete.
+ * caller-save.c (init_caller_save): Don't initialize it.
+ * ira-conflicts.c (ira_build_conflicts): Calculate
+ no_caller_save_reg_set locally from call_used_reg_set and savable_regs.
+
+2019-09-10 Richard Sandiford <richard.sandiford@arm.com>
+
* hard-reg-set.h (target_hard_regs::x_call_fixed_reg_set): Delete.
(target_hard_regs::x_savable_regs): New field.
(call_fixed_reg_set): Delete.
diff --git a/gcc/caller-save.c b/gcc/caller-save.c
index 05fbc44..58ea14f 100644
--- a/gcc/caller-save.c
+++ b/gcc/caller-save.c
@@ -192,7 +192,6 @@ init_caller_save (void)
caller_save_initialized_p = true;
- CLEAR_HARD_REG_SET (no_caller_save_reg_set);
/* First find all the registers that we need to deal with and all
the modes that they can have. If we can't find a mode to use,
we can't have the register live over calls. */
@@ -264,11 +263,7 @@ init_caller_save (void)
{
regno_save_mode[i][j] = VOIDmode;
if (j == 1)
- {
- CLEAR_HARD_REG_BIT (savable_regs, i);
- if (call_used_regs[i])
- SET_HARD_REG_BIT (no_caller_save_reg_set, i);
- }
+ CLEAR_HARD_REG_BIT (savable_regs, i);
}
}
diff --git a/gcc/hard-reg-set.h b/gcc/hard-reg-set.h
index 4c8da3a..945e499 100644
--- a/gcc/hard-reg-set.h
+++ b/gcc/hard-reg-set.h
@@ -424,10 +424,6 @@ struct target_hard_regs {
with the local stack frame are safe, but scant others. */
HARD_REG_SET x_regs_invalidated_by_call;
- /* Call used hard registers which cannot be saved because there is no
- insn for this. */
- HARD_REG_SET x_no_caller_save_reg_set;
-
/* Table of register numbers in the order in which to try to use them. */
int x_reg_alloc_order[FIRST_PSEUDO_REGISTER];
@@ -490,8 +486,6 @@ extern struct target_hard_regs *this_target_hard_regs;
(this_target_hard_regs->x_savable_regs)
#define regs_invalidated_by_call \
(this_target_hard_regs->x_regs_invalidated_by_call)
-#define no_caller_save_reg_set \
- (this_target_hard_regs->x_no_caller_save_reg_set)
#define reg_alloc_order \
(this_target_hard_regs->x_reg_alloc_order)
#define inv_reg_alloc_order \
diff --git a/gcc/ira-conflicts.c b/gcc/ira-conflicts.c
index ac8014a..430c6a6 100644
--- a/gcc/ira-conflicts.c
+++ b/gcc/ira-conflicts.c
@@ -765,6 +765,8 @@ ira_build_conflicts (void)
}
else if (ALLOCNO_CALLS_CROSSED_NUM (a) != 0)
{
+ HARD_REG_SET no_caller_save_reg_set
+ = (call_used_reg_set & ~savable_regs);
OBJECT_TOTAL_CONFLICT_HARD_REGS (obj) |= no_caller_save_reg_set;
OBJECT_TOTAL_CONFLICT_HARD_REGS (obj) |= temp_hard_reg_set;
OBJECT_CONFLICT_HARD_REGS (obj) |= no_caller_save_reg_set;