diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2019-07-01 08:57:59 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2019-07-01 08:57:59 +0000 |
commit | 73bb8fe9e915cf3219f16afdc61c308c08aa7659 (patch) | |
tree | 3a497a04ea90a9a9c47a00635c78894df955213f /gcc/ira.c | |
parent | c53930bb4e409a256b9887640d7cd217d0e01b07 (diff) | |
download | gcc-73bb8fe9e915cf3219f16afdc61c308c08aa7659.zip gcc-73bb8fe9e915cf3219f16afdc61c308c08aa7659.tar.gz gcc-73bb8fe9e915cf3219f16afdc61c308c08aa7659.tar.bz2 |
Use alternative_mask for add_insn_allocno_copies
add_insn_allocno_copies and its subroutines used HARD_REG_SET to
represent a bitmask of alternatives. There's not really any connection
between the number of registers and the maximum number of alternatives,
so this patch uses alternative_mask instead (which wasn't around when
this code was added).
This is just a minor clean-up making way for later patches.
2019-07-01 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* ira-int.h (ira_setup_alts, ira_get_dup_out_num): Use
alternative_mask instead of HARD_REG_SET to represent a
bitmask of alternatives.
* ira.c (ira_setup_alts, ira_get_dup_out_num): Likewise.
* ira-conflicts.c (add_insn_allocno_copies): Likewise.
From-SVN: r272847
Diffstat (limited to 'gcc/ira.c')
-rw-r--r-- | gcc/ira.c | 23 |
1 files changed, 13 insertions, 10 deletions
@@ -1784,9 +1784,12 @@ setup_prohibited_mode_move_regs (void) -/* Setup possible alternatives in ALTS for INSN. */ -void -ira_setup_alts (rtx_insn *insn, HARD_REG_SET &alts) +/* Extract INSN and return the set of alternatives that we should consider. + This excludes any alternatives whose constraints are obviously impossible + to meet (e.g. because the constraint requires a constant and the operand + is nonconstant). */ +alternative_mask +ira_setup_alts (rtx_insn *insn) { /* MAP nalt * nop -> start of constraints for given operand and alternative. */ @@ -1798,7 +1801,7 @@ ira_setup_alts (rtx_insn *insn, HARD_REG_SET &alts) extract_insn (insn); alternative_mask preferred = get_preferred_alternatives (insn); - CLEAR_HARD_REG_SET (alts); + alternative_mask alts = 0; insn_constraints.release (); insn_constraints.safe_grow_cleared (recog_data.n_operands * recog_data.n_alternatives + 1); @@ -1833,8 +1836,7 @@ ira_setup_alts (rtx_insn *insn, HARD_REG_SET &alts) } for (nalt = 0; nalt < recog_data.n_alternatives; nalt++) { - if (!TEST_BIT (preferred, nalt) - || TEST_HARD_REG_BIT (alts, nalt)) + if (!TEST_BIT (preferred, nalt) || TEST_BIT (alts, nalt)) continue; for (nop = 0; nop < recog_data.n_operands; nop++) @@ -1906,7 +1908,7 @@ ira_setup_alts (rtx_insn *insn, HARD_REG_SET &alts) ; } if (nop >= recog_data.n_operands) - SET_HARD_REG_BIT (alts, nalt); + alts |= ALTERNATIVE_BIT (nalt); } if (commutative < 0) break; @@ -1916,6 +1918,7 @@ ira_setup_alts (rtx_insn *insn, HARD_REG_SET &alts) if (curr_swapped) break; } + return alts; } /* Return the number of the output non-early clobber operand which @@ -1923,7 +1926,7 @@ ira_setup_alts (rtx_insn *insn, HARD_REG_SET &alts) negative value if there is no such operand). The function takes only really possible alternatives into consideration. */ int -ira_get_dup_out_num (int op_num, HARD_REG_SET &alts) +ira_get_dup_out_num (int op_num, alternative_mask alts) { int curr_alt, c, original, dup; bool ignore_p, use_commut_op_p; @@ -1940,7 +1943,7 @@ ira_get_dup_out_num (int op_num, HARD_REG_SET &alts) { rtx op = recog_data.operand[op_num]; - for (curr_alt = 0, ignore_p = !TEST_HARD_REG_BIT (alts, curr_alt), + for (curr_alt = 0, ignore_p = !TEST_BIT (alts, curr_alt), original = -1;;) { c = *str; @@ -1951,7 +1954,7 @@ ira_get_dup_out_num (int op_num, HARD_REG_SET &alts) else if (c == ',') { curr_alt++; - ignore_p = !TEST_HARD_REG_BIT (alts, curr_alt); + ignore_p = !TEST_BIT (alts, curr_alt); } else if (! ignore_p) switch (c) |