[Bug target/91522] [10 Regression] STV is slow
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Aug 22 13:31:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91522
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
So in particular
for (ref = DF_INSN_UID_DEFS (insn_uid); ref; ref = DF_REF_NEXT_LOC (ref))
if (!HARD_REGISTER_P (DF_REF_REG (ref)))
for (def = DF_REG_DEF_CHAIN (DF_REF_REGNO (ref));
def;
def = DF_REF_NEXT_REG (def))
analyze_register_chain (candidates, ref);
looks odd since that iterates over all defs in insn_uid, then over
all defs of that register everywhere else in the function and
analyze_register_chain then iterating over the corresponding def->use
chain. I'd say the iteration over all defs everywhere else is
not necessary and it should be simply
Index: config/i386/i386-features.c
===================================================================
--- config/i386/i386-features.c (revision 274764)
+++ config/i386/i386-features.c (working copy)
@@ -419,10 +419,7 @@ scalar_chain::add_insn (bitmap candidate
df_ref def;
for (ref = DF_INSN_UID_DEFS (insn_uid); ref; ref = DF_REF_NEXT_LOC (ref))
if (!HARD_REGISTER_P (DF_REF_REG (ref)))
- for (def = DF_REG_DEF_CHAIN (DF_REF_REGNO (ref));
- def;
- def = DF_REF_NEXT_REG (def))
- analyze_register_chain (candidates, def);
+ analyze_register_chain (candidates, ref);
for (ref = DF_INSN_UID_USES (insn_uid); ref; ref = DF_REF_NEXT_LOC (ref))
if (!DF_REF_REG_MEM_P (ref))
analyze_register_chain (candidates, ref);
which fixes the slowness. I'm going to test that.
More information about the Gcc-bugs
mailing list