summaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/InstructionSimplify.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Analysis/InstructionSimplify.cpp')
-rw-r--r--llvm/lib/Analysis/InstructionSimplify.cpp3
1 files changed, 3 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/InstructionSimplify.cpp b/llvm/lib/Analysis/InstructionSimplify.cpp
index cb1dae92faf9..90baa054eed4 100644
--- a/llvm/lib/Analysis/InstructionSimplify.cpp
+++ b/llvm/lib/Analysis/InstructionSimplify.cpp
@@ -6793,6 +6793,9 @@ static Value *simplifyIntrinsic(CallBase *Call, Value *Callee,
Function *F = cast<Function>(Callee);
Intrinsic::ID IID = F->getIntrinsicID();
+ if (IID != Intrinsic::not_intrinsic && intrinsicPropagatesPoison(IID) &&
+ any_of(Args, IsaPred<PoisonValue>))
+ return PoisonValue::get(F->getReturnType());
// Most of the intrinsics with no operands have some kind of side effect.
// Don't simplify.
if (!NumOperands) {