diff options
Diffstat (limited to 'llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp')
| -rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp b/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp index e5c3a20e1a64..21588aca5127 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp @@ -1232,7 +1232,8 @@ static Instruction *foldToUnsignedSaturatedAdd(BinaryOperator &I) { assert(I.getOpcode() == Instruction::Add && "Expecting add instruction"); Type *Ty = I.getType(); auto getUAddSat = [&]() { - return Intrinsic::getDeclaration(I.getModule(), Intrinsic::uadd_sat, Ty); + return Intrinsic::getOrInsertDeclaration(I.getModule(), Intrinsic::uadd_sat, + Ty); }; // add (umin X, ~Y), Y --> uaddsat X, Y @@ -2127,7 +2128,7 @@ static Instruction *foldSubOfMinMax(BinaryOperator &I, if (match(Op0, m_c_Add(m_Specific(X), m_Specific(Y))) && (Op0->hasOneUse() || Op1->hasOneUse())) { Intrinsic::ID InvID = getInverseMinMaxIntrinsic(MinMax->getIntrinsicID()); - Function *F = Intrinsic::getDeclaration(I.getModule(), InvID, Ty); + Function *F = Intrinsic::getOrInsertDeclaration(I.getModule(), InvID, Ty); return CallInst::Create(F, {X, Y}); } @@ -2150,7 +2151,7 @@ static Instruction *foldSubOfMinMax(BinaryOperator &I, if (MinMax->isSigned() && match(Y, m_ZeroInt()) && match(X, m_NSWSub(m_Specific(Op0), m_Value(Z)))) { Intrinsic::ID InvID = getInverseMinMaxIntrinsic(MinMax->getIntrinsicID()); - Function *F = Intrinsic::getDeclaration(I.getModule(), InvID, Ty); + Function *F = Intrinsic::getOrInsertDeclaration(I.getModule(), InvID, Ty); return CallInst::Create(F, {Op0, Z}); } |
