summaryrefslogtreecommitdiff
path: root/gcc/lra-lives.c
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2019-07-31 07:33:11 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2019-07-31 07:33:11 +0000
commita25f3e8efbbc7182fa58c445574848a73856e9b4 (patch)
tree42b669136d615c100af11e64f472bc253a61d708 /gcc/lra-lives.c
parent68c86af248f736a7fa3c8059c7df41ed5d6dff37 (diff)
Make lra use per-alternative earlyclobber info
lra_insn_reg and lra_operand_data have both a bitmask of earlyclobber alternatives and an overall boolean. The danger is that we then test the overall boolean when really we should be testing for a particular alternative. This patch gets rid of the boolean and tests the mask against zero when we really do need to test "any alternative might be earlyclobber". (I think the only instance of that is the LRA_UNKNOWN_ALT handling in lra-lives.c:reg_early_clobber_p.) This is needed (and tested) by an upcoming SVE patch. 2019-07-31 Richard Sandiford <richard.sandiford@arm.com> gcc/ * lra-int.h (lra_operand_data): Remove early_clobber field. (lra_insn_reg): Likewise. * lra.c (debug_operand_data): Update accordingly. (setup_operand_alternative): Likewise. (new_insn_reg): Likewise. Remove early_clobber parameter. (collect_non_operand_hard_regs): Update call accordingly. Don't assign to lra_insn_reg::early_clobber. (add_regs_to_insn_regno_info): Remove early_clobber parameter and update calls to new_insn_reg. (lra_update_insn_regno_info): Update calls accordingly. * lra-constraints.c (update_and_check_small_class_inputs): Take the alternative number as a parameter and test whether the operand is earlyclobbered in that particular alternative. (process_alt_operands): Update call accordingly. Use per-alternative checks for earyclobber here too. * lra-lives.c (reg_early_clobber_p): Check early_clobber_alts against zero for IRA_UNKNOWN_ALT. From-SVN: r273921
Diffstat (limited to 'gcc/lra-lives.c')
-rw-r--r--gcc/lra-lives.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/gcc/lra-lives.c b/gcc/lra-lives.c
index 96aa7c4717b..057ef8cab4d 100644
--- a/gcc/lra-lives.c
+++ b/gcc/lra-lives.c
@@ -624,10 +624,10 @@ check_pseudos_live_through_calls (int regno,
static inline bool
reg_early_clobber_p (const struct lra_insn_reg *reg, int n_alt)
{
- return (reg->early_clobber
- && (n_alt == LRA_UNKNOWN_ALT
- || (n_alt != LRA_NON_CLOBBERED_ALT
- && TEST_BIT (reg->early_clobber_alts, n_alt))));
+ return (n_alt == LRA_UNKNOWN_ALT
+ ? reg->early_clobber_alts != 0
+ : (n_alt != LRA_NON_CLOBBERED_ALT
+ && TEST_BIT (reg->early_clobber_alts, n_alt)));
}
/* Return true if call instructions CALL1 and CALL2 use ABIs that