diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp index a6bb2bc9d6cf6..6b88cd05b2d70 100644 --- a/llvm/lib/Analysis/ValueTracking.cpp +++ b/llvm/lib/Analysis/ValueTracking.cpp @@ -4522,6 +4522,13 @@ bool llvm::isGuaranteedNotToBeUndefOrPoison(const Value *V) { if (isa(V) || isa(V)) return true; + if (auto PN = dyn_cast(V)) { + if (llvm::all_of(PN->incoming_values(), [](const Use &U) { + return isa(U.get()); + })) + return true; + } + return false; }