[llvm] [LLVM][CanonicalizeFreezeInLoops] fix duplicate removal (PR #74714)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Dec 7 05:26:20 PST 2023
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-transforms
Author: Wei Tao (Friedrich20)
<details>
<summary>Changes</summary>
This PR fixes #<!-- -->74572 where the the freeze instruction could be found twice by the pass CanonicalizeFreezeInLoops, and then the compiling may crash in second removal since the instruction has already gone.
---
Full diff: https://github.com/llvm/llvm-project/pull/74714.diff
1 Files Affected:
- (modified) llvm/lib/Transforms/Utils/CanonicalizeFreezeInLoops.cpp (+7)
``````````diff
diff --git a/llvm/lib/Transforms/Utils/CanonicalizeFreezeInLoops.cpp b/llvm/lib/Transforms/Utils/CanonicalizeFreezeInLoops.cpp
index fb4d828853772..af9dad143e2ed 100644
--- a/llvm/lib/Transforms/Utils/CanonicalizeFreezeInLoops.cpp
+++ b/llvm/lib/Transforms/Utils/CanonicalizeFreezeInLoops.cpp
@@ -151,11 +151,18 @@ bool CanonicalizeFreezeInLoopsImpl::run() {
}
}
+ bool Exist = false;
auto Visit = [&](User *U) {
if (auto *FI = dyn_cast<FreezeInst>(U)) {
+ for (const auto &Candidate : Candidates) {
+ auto *FI_cand = Candidate.FI;
+ Exist = (FI_cand == FI) ? true : Exist;
+ }
+ if (!Exist) {
LLVM_DEBUG(dbgs() << "canonfr: found: " << *FI << "\n");
Info.FI = FI;
Candidates.push_back(Info);
+ }
}
};
for_each(PHI.users(), Visit);
``````````
</details>
https://github.com/llvm/llvm-project/pull/74714
More information about the llvm-commits
mailing list