aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorVladimir N. Makarov <vmakarov@redhat.com>2025-03-19 16:06:41 -0400
committerVladimir N. Makarov <vmakarov@redhat.com>2025-03-19 16:10:37 -0400
commit6c443e128802bd93158a3db7c4edf5fc1fc76c8d (patch)
tree760a078c9602bda4bd945ec93e77b694a53cbc80 /gcc
parentb9b25c108b054a3cb0fb449f2e9889e3bff71443 (diff)
downloadgcc-6c443e128802bd93158a3db7c4edf5fc1fc76c8d.zip
gcc-6c443e128802bd93158a3db7c4edf5fc1fc76c8d.tar.gz
gcc-6c443e128802bd93158a3db7c4edf5fc1fc76c8d.tar.bz2
[PR119270][IRA]: Ignore equiv init insns for cost calculation for invariants only
My previous patch for PR114991 contains code ignoring equiv init insns for increasing cost of usage the equivalence. Although common sense says it is right thing to do, this results in more aggressive usage of memory equivalence and significant performance degradation of SPEC2017 cactuBSSM. Given patch restores previous cost calculation for all equivalences except for invariant ones. gcc/ChangeLog: PR target/119270 * ira-costs.cc (calculate_equiv_gains): Ignore equiv init insns only for invariants.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ira-costs.cc15
1 files changed, 9 insertions, 6 deletions
diff --git a/gcc/ira-costs.cc b/gcc/ira-costs.cc
index 70cba94..faf706c 100644
--- a/gcc/ira-costs.cc
+++ b/gcc/ira-costs.cc
@@ -1926,12 +1926,15 @@ calculate_equiv_gains (void)
|| !bitmap_bit_p (&equiv_pseudos, regno))
continue;
- rtx_insn_list *x;
- for (x = ira_reg_equiv[regno].init_insns; x != NULL; x = x->next ())
- if (insn == x->insn ())
- break;
- if (x != NULL)
- continue; /* skip equiv init insn */
+ if (ira_reg_equiv[regno].invariant != NULL)
+ {
+ rtx_insn_list *x = ira_reg_equiv[regno].init_insns;
+ for (; x != NULL; x = x->next ())
+ if (insn == x->insn ())
+ break;
+ if (x != NULL)
+ continue; /* skip equiv init insn for invariant */
+ }
rtx subst = ira_reg_equiv[regno].memory;