diff --git a/llvm/lib/Analysis/InstructionSimplify.cpp b/llvm/lib/Analysis/InstructionSimplify.cpp index 90baa054eed4c..82530e7d5b6c6 100644 --- a/llvm/lib/Analysis/InstructionSimplify.cpp +++ b/llvm/lib/Analysis/InstructionSimplify.cpp @@ -6484,9 +6484,6 @@ Value *llvm::simplifyBinaryIntrinsic(Intrinsic::ID IID, Type *ReturnType, break; } case Intrinsic::ptrmask: { - if (isa(Op0) || isa(Op1)) - return PoisonValue::get(Op0->getType()); - // NOTE: We can't apply this simplifications based on the value of Op1 // because we need to preserve provenance. if (Q.isUndefValue(Op0) || match(Op0, m_Zero())) @@ -6533,10 +6530,6 @@ Value *llvm::simplifyBinaryIntrinsic(Intrinsic::ID IID, Type *ReturnType, if (match(Op0, m_ImmConstant())) std::swap(Op0, Op1); - // Propagate poison. - if (isa(Op1)) - return Op1; - // Assume undef is the limit value. if (Q.isUndefValue(Op1)) return ConstantInt::get( @@ -6696,9 +6689,6 @@ Value *llvm::simplifyBinaryIntrinsic(Intrinsic::ID IID, Type *ReturnType, return Op1; break; case Intrinsic::is_fpclass: { - if (isa(Op0)) - return PoisonValue::get(ReturnType); - uint64_t Mask = cast(Op1)->getZExtValue(); // If all tests are made, it doesn't matter what the value is. if ((Mask & fcAllFlags) == fcAllFlags) diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp index 09745ed6eac6a..0e2a94b01bdb4 100644 --- a/llvm/lib/Analysis/ValueTracking.cpp +++ b/llvm/lib/Analysis/ValueTracking.cpp @@ -7901,6 +7901,8 @@ bool llvm::intrinsicPropagatesPoison(Intrinsic::ID IID) { case Intrinsic::umax: case Intrinsic::umin: case Intrinsic::scmp: + case Intrinsic::is_fpclass: + case Intrinsic::ptrmask: case Intrinsic::ucmp: case Intrinsic::bitreverse: case Intrinsic::bswap: