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

References

lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
 2497   if (match(Op0, m_And(m_Value(A), m_Value(C))) &&
 2506         if (match(A, m_Or(m_Value(V1), m_Value(V2))) &&
 2511           return BinaryOperator::CreateAnd(A,
 2515             ((V1 == A &&
 2517              (V2 == A &&
 2525         if (match(A, m_Or(m_Value(V1), m_ConstantInt(C3))) &&
 2539         if (match(A, m_c_Or(m_Value(X), m_Specific(B))))
 2542         if (match(B, m_c_Or(m_Specific(A), m_Value(X))))
 2543           return BinaryOperator::CreateOr(Builder.CreateAnd(X, C2), A);
 2546         if (match(A, m_c_Xor(m_Value(X), m_Specific(B))))
 2549         if (match(B, m_c_Xor(m_Specific(A), m_Value(X))))
 2550           return BinaryOperator::CreateXor(Builder.CreateAnd(X, C2), A);
 2559       if (Value *V = matchSelectFromAndOr(A, C, B, D))
 2561       if (Value *V = matchSelectFromAndOr(A, C, D, B))
 2563       if (Value *V = matchSelectFromAndOr(C, A, B, D))
 2565       if (Value *V = matchSelectFromAndOr(C, A, D, B))
 2567       if (Value *V = matchSelectFromAndOr(B, D, A, C))
 2569       if (Value *V = matchSelectFromAndOr(B, D, C, A))
 2571       if (Value *V = matchSelectFromAndOr(D, B, A, C))
 2573       if (Value *V = matchSelectFromAndOr(D, B, C, A))
 2579   if (match(Op0, m_Xor(m_Value(A), m_Value(B))))
 2580     if (match(Op1, m_Xor(m_Xor(m_Specific(B), m_Value(C)), m_Specific(A))))
 2584   if (match(Op0, m_Xor(m_Xor(m_Value(A), m_Value(C)), m_Value(B))))
 2585     if (match(Op1, m_Xor(m_Specific(B), m_Specific(A))))
 2589   if (match(Op0, m_And(m_Or(m_Specific(Op1), m_Value(C)), m_Value(A))))
 2590     return BinaryOperator::CreateOr(Op1, Builder.CreateAnd(A, C));
 2605   if (match(Op1, m_Xor(m_Value(A), m_Value(B)))) {
 2606     if (Op0 == A || Op0 == B)
 2607       return BinaryOperator::CreateOr(A, B);
 2609     if (match(Op0, m_And(m_Specific(A), m_Specific(B))) ||
 2610         match(Op0, m_And(m_Specific(B), m_Specific(A))))
 2611       return BinaryOperator::CreateOr(A, B);
 2613     if (Op1->hasOneUse() && match(A, m_Not(m_Specific(Op0)))) {
 2618       Value *Not = Builder.CreateNot(A, A->getName() + ".not");
 2618       Value *Not = Builder.CreateNot(A, A->getName() + ".not");
 2625   if (match(Op1, m_Not(m_Value(A))))
 2626     if (BinaryOperator *B = dyn_cast<BinaryOperator>(A))
 2679   if (match(Op0, m_OneUse(m_SExt(m_Value(A)))) &&
 2680       A->getType()->isIntOrIntVectorTy(1))
 2681     return SelectInst::Create(A, ConstantInt::getSigned(I.getType(), -1), Op1);
 2682   if (match(Op1, m_OneUse(m_SExt(m_Value(A)))) &&
 2683       A->getType()->isIntOrIntVectorTy(1))
 2684     return SelectInst::Create(A, ConstantInt::getSigned(I.getType(), -1), Op0);
 2693       match(Op0, m_Or(m_Value(A), m_ConstantInt(CI)))) {
 2694     Value *Inner = Builder.CreateOr(A, Op1);
 2705         match(Op0, m_Select(m_Value(X), m_Value(A), m_Value(B))) &&
 2707       Value *orTrue = Builder.CreateOr(A, C);