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-06-21 Richard Sandiford <richard.sandif...@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. Index: gcc/ira-int.h =================================================================== --- gcc/ira-int.h 2019-06-21 14:34:05.000000000 +0100 +++ gcc/ira-int.h 2019-06-21 14:34:05.883715050 +0100 @@ -963,8 +963,8 @@ extern void ira_print_disposition (FILE extern void ira_debug_disposition (void); extern void ira_debug_allocno_classes (void); extern void ira_init_register_move_cost (machine_mode); -extern void ira_setup_alts (rtx_insn *insn, HARD_REG_SET &alts); -extern int ira_get_dup_out_num (int op_num, HARD_REG_SET &alts); +extern alternative_mask ira_setup_alts (rtx_insn *); +extern int ira_get_dup_out_num (int, alternative_mask); /* ira-build.c */ Index: gcc/ira.c =================================================================== --- gcc/ira.c 2019-06-21 14:34:05.000000000 +0100 +++ gcc/ira.c 2019-06-21 14:34:05.887715020 +0100 @@ -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 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 } 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 ; } 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 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 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_RE { 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_RE 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) Index: gcc/ira-conflicts.c =================================================================== --- gcc/ira-conflicts.c 2019-06-21 14:34:05.000000000 +0100 +++ gcc/ira-conflicts.c 2019-06-21 14:34:05.883715050 +0100 @@ -358,7 +358,7 @@ add_insn_allocno_copies (rtx_insn *insn) rtx set, operand, dup; bool bound_p[MAX_RECOG_OPERANDS]; int i, n, freq; - HARD_REG_SET alts; + alternative_mask alts; freq = REG_FREQ_FROM_BB (BLOCK_FOR_INSN (insn)); if (freq == 0) @@ -379,7 +379,7 @@ add_insn_allocno_copies (rtx_insn *insn) there are no dead registers, there will be no such copies. */ if (! find_reg_note (insn, REG_DEAD, NULL_RTX)) return; - ira_setup_alts (insn, alts); + alts = ira_setup_alts (insn); for (i = 0; i < recog_data.n_operands; i++) bound_p[i] = false; for (i = 0; i < recog_data.n_operands; i++)