[PATCH] D137027: [llvm] Improve performance of programUndefinedIfUndefOrPoison
Nikita Popov via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 31 02:22:24 PDT 2022
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGd5e59e99f404: [ValueTracking] Improve performance of programUndefinedIfUndefOrPoison (NFC) (authored by gezalore, committed by nikic).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D137027/new/
https://reviews.llvm.org/D137027
Files:
llvm/lib/Analysis/ValueTracking.cpp
Index: llvm/lib/Analysis/ValueTracking.cpp
===================================================================
--- llvm/lib/Analysis/ValueTracking.cpp
+++ llvm/lib/Analysis/ValueTracking.cpp
@@ -5722,11 +5722,6 @@
SmallSet<const BasicBlock *, 4> Visited;
YieldsPoison.insert(V);
- auto Propagate = [&](const User *User) {
- if (propagatesPoison(cast<Operator>(User)))
- YieldsPoison.insert(User);
- };
- for_each(V->users(), Propagate);
Visited.insert(BB);
while (true) {
@@ -5740,9 +5735,16 @@
if (!isGuaranteedToTransferExecutionToSuccessor(&I))
return false;
- // Mark poison that propagates from I through uses of I.
- if (YieldsPoison.count(&I))
- for_each(I.users(), Propagate);
+ // If this instruction propagates poison, mark it as poison if any of
+ // its operands are poison
+ if (propagatesPoison(cast<Operator>(&I))) {
+ for (const Value *Op : I.operands()) {
+ if (YieldsPoison.count(Op)) {
+ YieldsPoison.insert(&I);
+ break;
+ }
+ }
+ }
}
BB = BB->getSingleSuccessor();
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D137027.471932.patch
Type: text/x-patch
Size: 1134 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20221031/eccb3a76/attachment.bin>
More information about the llvm-commits
mailing list