[llvm] [HashRecognize] Track visited in ValueEvolution (PR #147812)
Ramkumar Ramachandra via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 10 03:13:35 PDT 2025
================
@@ -629,11 +651,23 @@ HashRecognize::recognizeCRC() const {
if (SimpleRecurrence)
PhiEvolutions.emplace_back(SimpleRecurrence.Phi, SimpleRecurrence.BO);
- ValueEvolution VE(TC, *ByteOrderSwapped);
+ // Initialize the Visited set in ValueEvolution with the IndVar-related
+ // instructions.
+ std::initializer_list<const Instruction *> InitVisited = {
+ IndVar, Latch->getTerminator(), L.getLatchCmpInst(),
+ cast<Instruction>(IndVar->getIncomingValueForBlock(Latch))};
+
+ ValueEvolution VE(TC, *ByteOrderSwapped, InitVisited);
if (!VE.computeEvolutions(PhiEvolutions))
return VE.getError();
KnownBits ResultBits = VE.KnownPhis.at(ConditionalRecurrence.Phi);
+ // Any unvisited instructions from the KnownBits propagation can complicate
+ // the optimization, which would just replace the entire loop with the
+ // table-lookup version of the hash algorithm.
+ if (any_of(*Latch, [VE](const Instruction &I) { return !VE.isVisited(&I); }))
----------------
artagnon wrote:
Yes.
https://github.com/llvm/llvm-project/pull/147812
More information about the llvm-commits
mailing list