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;
 4137       if (match(B, m_ConstantInt(C1)) && match(D, m_ConstantInt(C2)) &&
 4146         return new ICmpInst(Pred, B, D);
 4148         return new ICmpInst(Pred, B, C);
 4149       if (B == C)
 4151       if (B == D)
 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;
 4163   if (match(Op0, m_OneUse(m_And(m_Value(A), m_Value(B)))) &&
 4168       X = B;
 4172       X = B;
 4175     } else if (B == C) {
 4178       Z = B;
 4179     } else if (B == D) {
 4182       Z = B;
 4198        match(Op1, m_And(m_Value(B), m_ConstantInt(Cst1)))) ||
 4199       (Op1->hasOneUse() && match(Op0, m_And(m_Value(B), m_ConstantInt(Cst1))) &&
 4204       return new ICmpInst(Pred, A, Builder.CreateTrunc(B, A->getType()));
 4210        match(Op1, m_OneUse(m_LShr(m_Value(B), m_Specific(Cst1))))) ||
 4212        match(Op1, m_OneUse(m_AShr(m_Value(B), m_Specific(Cst1)))))) {
 4218       Value *Xor = Builder.CreateXor(A, B, I.getName() + ".unshifted");
 4226       match(Op1, m_OneUse(m_Shl(m_Value(B), m_Specific(Cst1))))) {
 4230       Value *Xor = Builder.CreateXor(A, B, I.getName() + ".unshifted");
 4266   if ((match(Op0, m_BSwap(m_Value(A))) && match(Op1, m_BSwap(m_Value(B)))) ||
 4268        match(Op1, m_BitReverse(m_Value(B)))))
 4269     return new ICmpInst(Pred, A, B);