From: Vladimir N. Makarov Date: Fri, 27 Oct 2023 12:28:24 +0000 (-0400) Subject: [RA]: Add cost calculation for reg equivalence invariants X-Git-Tag: basepoints/gcc-15~5167 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8aa47713701b1f1878b81169852269a299272e87;p=thirdparty%2Fgcc.git [RA]: Add cost calculation for reg equivalence invariants My recent patch improving cost calculation for pseudos with equivalence resulted in failure of gcc.target/arm/eliminate.c on aarch64. This patch fixes this failure. gcc/ChangeLog: * ira-costs.cc: (get_equiv_regno, calculate_equiv_gains): Process reg equivalence invariants. --- diff --git a/gcc/ira-costs.cc b/gcc/ira-costs.cc index a59d45a6e24c..c40868070765 100644 --- a/gcc/ira-costs.cc +++ b/gcc/ira-costs.cc @@ -1784,6 +1784,7 @@ get_equiv_regno (rtx x, int ®no, rtx &subreg) } if (REG_P (x) && (ira_reg_equiv[REGNO (x)].memory != NULL + || ira_reg_equiv[REGNO (x)].invariant != NULL || ira_reg_equiv[REGNO (x)].constant != NULL)) { regno = REGNO (x); @@ -1826,6 +1827,7 @@ calculate_equiv_gains (void) for (regno = max_reg_num () - 1; regno >= FIRST_PSEUDO_REGISTER; regno--) if (ira_reg_equiv[regno].init_insns != NULL && (ira_reg_equiv[regno].memory != NULL + || ira_reg_equiv[regno].invariant != NULL || (ira_reg_equiv[regno].constant != NULL /* Ignore complicated constants which probably will be placed in memory: */ @@ -1876,6 +1878,8 @@ calculate_equiv_gains (void) if (subst == NULL) subst = ira_reg_equiv[regno].constant; + if (subst == NULL) + subst = ira_reg_equiv[regno].invariant; ira_assert (subst != NULL); mode = PSEUDO_REGNO_MODE (regno); ira_init_register_move_cost_if_necessary (mode);