From: Richard Sandiford Date: Mon, 1 Jul 2019 08:57:59 +0000 (+0000) Subject: Use alternative_mask for add_insn_allocno_copies X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=73bb8fe9e915cf3219f16afdc61c308c08aa7659;p=gcc.git 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 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fc6e6ef32a5..9b57385f5c0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2019-07-01 Richard Sandiford + + * 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. + 2019-07-01 Martin Liska * edit-context.c (test_applying_fixits_unreadable_file): Do not diff --git a/gcc/ira-conflicts.c b/gcc/ira-conflicts.c index 9a3e3811dbd..813a6d4103c 100644 --- a/gcc/ira-conflicts.c +++ b/gcc/ira-conflicts.c @@ -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++) diff --git a/gcc/ira-int.h b/gcc/ira-int.h index 3c7fe4e6450..1ea35f7e364 100644 --- a/gcc/ira-int.h +++ b/gcc/ira-int.h @@ -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 */ diff --git a/gcc/ira.c b/gcc/ira.c index d4ea68f17c0..808f02bfbd0 100644 --- a/gcc/ira.c +++ b/gcc/ira.c @@ -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)