reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced

References

lib/Transforms/InstCombine/InstCombineAddSub.cpp
 1687   if (Value *V = dyn_castNegVal(Op1)) {
 1690     if (const auto *BO = dyn_cast<BinaryOperator>(Op1)) {
 1696       if (cast<Constant>(Op1)->isNotMinSignedValue() && I.hasNoSignedWrap())
 1704     return BinaryOperator::CreateXor(Op0, Op1);
 1708     return BinaryOperator::CreateNot(Op1);
 1712   if (match(Op0, m_Not(m_Value(X))) && match(Op1, m_Not(m_Value(Y))))
 1717     return BinaryOperator::CreateAdd(Builder.CreateNot(Op1), X);
 1720   if (match(Op1, m_OneUse(m_Add(m_Value(X), m_One()))))
 1724   if (match(Op1, m_OneUse(m_Not(m_Value(X))))) {
 1732     if (match(Op1, m_ZExt(m_Value(X))) && X->getType()->isIntOrIntVectorTy(1)) {
 1739     if (match(Op1, m_SExt(m_Value(X))) && X->getType()->isIntOrIntVectorTy(1)) {
 1748     if (match(Op1, m_Not(m_Value(X))))
 1752     if (SelectInst *SI = dyn_cast<SelectInst>(Op1))
 1757     if (PHINode *PN = dyn_cast<PHINode>(Op1))
 1764     if (match(Op1, m_Sub(m_Constant(C2), m_Value(X))))
 1768     if (match(Op1, m_Add(m_Value(X), m_Constant(C2))))
 1777       match(Op1, m_TruncOrSelf(m_Value(Op1Wide)));
 1778       bool HadTrunc = Op1Wide != Op1;
 1779       bool NoTruncOrTruncIsOneUse = !HadTrunc || Op1->hasOneUse();
 1794         return TruncInst::CreateTruncOrBitCast(NewShift, Op1->getType());
 1806         return TruncInst::CreateTruncOrBitCast(NewShift, Op1->getType());
 1809       if (!HadTrunc && Op1->hasOneUse()) {
 1811         SelectPatternFlavor SPF = matchSelectPattern(Op1, LHS, RHS).Flavor;
 1815           cast<SelectInst>(Op1)->swapValues();
 1817           return replaceInstUsesWith(I, Op1);
 1825       KnownBits RHSKnown = computeKnownBits(Op1, 0, &I);
 1827         return BinaryOperator::CreateXor(Op1, Op0);
 1834     if (match(Op1, m_c_Add(m_Specific(Op0), m_Value(Y))))
 1838     if (match(Op0, m_Sub(m_Specific(Op1), m_Value(Y))))
 1845     if (match(Op1, m_And(m_Value(A), m_Value(B))) &&
 1854         match(Op1, m_c_Or(m_Specific(A), m_Specific(B))) &&
 1855         (Op0->hasOneUse() || Op1->hasOneUse()))
 1862     if (match(Op1, m_Xor(m_Value(A), m_Value(B))) &&
 1871         match(Op1, m_c_Or(m_Specific(A), m_Specific(B))) &&
 1872         (Op0->hasOneUse() || Op1->hasOneUse()))
 1879     if (match(Op0, m_OneUse(m_c_Or(m_Value(Y), m_Specific(Op1)))))
 1881           Y, Builder.CreateNot(Op1, Op1->getName() + ".not"));
 1881           Y, Builder.CreateNot(Op1, Op1->getName() + ".not"));
 1884   if (Op1->hasOneUse()) {
 1889     if (match(Op1, m_Sub(m_Value(Y), m_Value(Z))))
 1891                                       Builder.CreateSub(Z, Y, Op1->getName()));
 1894     if (match(Op1, m_c_And(m_Value(Y), m_Specific(Op0))))
 1901     if (match(Op0, m_Zero()) && match(Op1, m_SDiv(m_Value(X), m_APInt(DivC))) &&
 1905       BO->setIsExact(cast<BinaryOperator>(Op1)->isExact());
 1910     if (match(Op1, m_Shl(m_Value(X), m_Value(Y))) && match(Op0, m_Zero()))
 1917     if (match(Op1, m_SExt(m_Value(Y))) &&
 1928     if (match(Op1, m_c_Mul(m_Value(A), m_Neg(m_Value(B)))))
 1934     if (match(Op1, m_Mul(m_Value(A), m_Constant(C))) && !isa<ConstantExpr>(C)) {
 1947     Value *NotA = Op0, *MinMax = Op1;
 1950       NotA = Op1;
 1977       match(Op1, m_PtrToInt(m_Value(RHSOp))))
 1983       match(Op1, m_Trunc(m_PtrToInt(m_Value(RHSOp)))))
 1995   if (match(Op1, m_AShr(m_Value(A), m_APInt(ShAmt))) &&
 1996       Op1->hasNUses(2) && *ShAmt == Ty->getScalarSizeInBits() - 1 &&
 1997       match(Op0, m_OneUse(m_c_Xor(m_Specific(A), m_Specific(Op1))))) {
 2016   if (!I.hasNoSignedWrap() && willNotOverflowSignedSub(Op0, Op1, I)) {
 2020   if (!I.hasNoUnsignedWrap() && willNotOverflowUnsignedSub(Op0, Op1, I)) {