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

References

lib/Transforms/InstCombine/InstCombineCompares.cpp
 4128   if (match(Op0, m_Xor(m_Value(A), m_Value(B)))) {
 4129     if (A == Op1 || B == Op1) { // (A^B) == A  ->  B == 0
 4130       Value *OtherVal = A == Op1 ? B : A;
 4130       Value *OtherVal = A == Op1 ? B : A;
 4131       return new ICmpInst(Pred, OtherVal, Constant::getNullValue(A->getType()));
 4141         return new ICmpInst(Pred, A, Xor);
 4145       if (A == C)
 4147       if (A == D)
 4150         return new ICmpInst(Pred, A, D);
 4152         return new ICmpInst(Pred, A, C);
 4156   if (match(Op1, m_Xor(m_Value(A), m_Value(B))) && (A == Op0 || B == Op0)) {
 4156   if (match(Op1, m_Xor(m_Value(A), m_Value(B))) && (A == Op0 || B == Op0)) {
 4158     Value *OtherVal = A == Op0 ? B : A;
 4158     Value *OtherVal = A == Op0 ? B : A;
 4159     return new ICmpInst(Pred, OtherVal, Constant::getNullValue(A->getType()));
 4163   if (match(Op0, m_OneUse(m_And(m_Value(A), m_Value(B)))) &&
 4167     if (A == C) {
 4170       Z = A;
 4171     } else if (A == D) {
 4174       Z = A;
 4176       X = A;
 4180       X = A;
 4197   if ((Op0->hasOneUse() && match(Op0, m_ZExt(m_Value(A))) &&
 4200        match(Op1, m_ZExt(m_Value(A))))) {
 4202     if (Pow2.isPowerOf2() && isa<IntegerType>(A->getType()) &&
 4203         Pow2.logBase2() == cast<IntegerType>(A->getType())->getBitWidth())
 4204       return new ICmpInst(Pred, A, Builder.CreateTrunc(B, A->getType()));
 4204       return new ICmpInst(Pred, A, Builder.CreateTrunc(B, A->getType()));
 4209   if ((match(Op0, m_OneUse(m_LShr(m_Value(A), m_ConstantInt(Cst1)))) &&
 4211       (match(Op0, m_OneUse(m_AShr(m_Value(A), m_ConstantInt(Cst1)))) &&
 4218       Value *Xor = Builder.CreateXor(A, B, I.getName() + ".unshifted");
 4225   if (match(Op0, m_OneUse(m_Shl(m_Value(A), m_ConstantInt(Cst1)))) &&
 4230       Value *Xor = Builder.CreateXor(A, B, I.getName() + ".unshifted");
 4242       match(Op0, m_Trunc(m_OneUse(m_LShr(m_Value(A), m_ConstantInt(ShAmt))))) &&
 4246       !A->hasOneUse()) {
 4247     unsigned ASize = cast<IntegerType>(A->getType())->getPrimitiveSizeInBits();
 4257       Value *Mask = Builder.CreateAnd(A, Builder.getInt(MaskV));
 4266   if ((match(Op0, m_BSwap(m_Value(A))) && match(Op1, m_BSwap(m_Value(B)))) ||
 4267       (match(Op0, m_BitReverse(m_Value(A))) &&
 4269     return new ICmpInst(Pred, A, B);
 4274   if (!match(Op0, m_OneUse(m_c_And(m_Add(m_Value(A), m_AllOnes()),
 4275                                    m_Deferred(A)))) ||
 4277     A = nullptr;
 4282     A = Op1;
 4285     A = Op0;
 4287   if (A) {
 4288     Type *Ty = A->getType();
 4289     CallInst *CtPop = Builder.CreateUnaryIntrinsic(Intrinsic::ctpop, A);