Lines Matching defs:Pred

89 /// Struct to express a condition of the form %Op0 Pred %Op1.
91 CmpInst::Predicate Pred;
96 : Pred(CmpInst::BAD_ICMP_PREDICATE), Op0(nullptr), Op1(nullptr) {}
97 ConditionTy(CmpInst::Predicate Pred, Value *Op0, Value *Op1)
98 : Pred(Pred), Op0(Op0), Op1(Op1) {}
139 FactOrCheck(DomTreeNode *DTN, CmpInst::Predicate Pred, Value *Op0, Value *Op1,
141 : Cond(Pred, Op0, Op1), DoesHold(Precond), NumIn(DTN->getDFSNumIn()),
144 static FactOrCheck getConditionFact(DomTreeNode *DTN, CmpInst::Predicate Pred,
147 return FactOrCheck(DTN, Pred, Op0, Op1, Precond);
307 bool doesHold(CmpInst::Predicate Pred, Value *A, Value *B) const;
309 void addFact(CmpInst::Predicate Pred, Value *A, Value *B, unsigned NumIn,
312 /// Turn a comparison of the form \p Op0 \p Pred \p Op1 into a vector of
316 ConstraintTy getConstraint(CmpInst::Predicate Pred, Value *Op0, Value *Op1,
319 /// Turns a comparison of the form \p Op0 \p Pred \p Op1 into a vector of
326 ConstraintTy getConstraintForSolving(CmpInst::Predicate Pred, Value *Op0,
329 /// Try to add information from \p A \p Pred \p B to the unsigned/signed
330 /// system if \p Pred is signed/unsigned.
331 void transferToOtherSystem(CmpInst::Predicate Pred, Value *A, Value *B,
618 ConstraintInfo::getConstraint(CmpInst::Predicate Pred, Value *Op0, Value *Op1,
624 // Try to convert Pred to one of ULE/SLT/SLE/SLT.
625 switch (Pred) {
630 Pred = CmpInst::getSwappedPredicate(Pred);
636 Pred = CmpInst::ICMP_ULE;
639 Pred = CmpInst::ICMP_ULE;
644 Pred = CmpInst::getSwappedPredicate(CmpInst::ICMP_UGT);
648 Pred = CmpInst::ICMP_ULE;
655 if (Pred != CmpInst::ICMP_ULE && Pred != CmpInst::ICMP_ULT &&
656 Pred != CmpInst::ICMP_SLE && Pred != CmpInst::ICMP_SLT)
660 bool IsSigned = CmpInst::isSigned(Pred);
720 if (Pred == (IsSigned ? CmpInst::ICMP_SLT : CmpInst::ICMP_ULT))
749 ConstraintTy ConstraintInfo::getConstraintForSolving(CmpInst::Predicate Pred,
755 if ((Pred == CmpInst::ICMP_ULE && Op0 == NullC) ||
756 (Pred == CmpInst::ICMP_UGE && Op1 == NullC)) {
766 if (CmpInst::isSigned(Pred) &&
769 Pred = CmpInst::getUnsignedPredicate(Pred);
772 ConstraintTy R = getConstraint(Pred, Op0, Op1, NewVariables);
781 return Info.doesHold(C.Pred, C.Op0, C.Op1);
829 bool ConstraintInfo::doesHold(CmpInst::Predicate Pred, Value *A,
831 auto R = getConstraintForSolving(Pred, A, B);
837 CmpInst::Predicate Pred, Value *A, Value *B, unsigned NumIn,
850 switch (Pred) {
859 addFact(CmpInst::getSignedPredicate(Pred), A, B, NumIn, NumOut,
869 addFact(CmpInst::getSignedPredicate(Pred), A, B, NumIn, NumOut,
910 CmpInst::Predicate Pred;
913 m_Br(m_ICmp(Pred, m_Value(A), m_Value(B)), m_Value(), m_Value())))
917 Pred = CmpInst::getSwappedPredicate(Pred);
927 if (Pred == CmpInst::ICMP_NE)
929 else if (Pred == CmpInst::ICMP_EQ)
1040 assert((Pred == CmpInst::ICMP_EQ || Pred == CmpInst::ICMP_NE) &&
1077 CmpInst::Predicate Pred;
1078 if (!match(I.getOperand(0), m_ICmp(Pred, m_Value(A), m_Value(B))))
1084 DT.getNode(I.getParent()), Pred, A, B));
1199 static void dumpUnpackedICmp(raw_ostream &OS, ICmpInst::Predicate Pred,
1201 OS << "icmp " << Pred << ' ';
1211 /// Pred == Predicate::BAD_ICMP_PREDICATE indicates that this entry is a
1214 ICmpInst::Predicate Pred;
1218 ReproducerEntry(ICmpInst::Predicate Pred, Value *LHS, Value *RHS)
1219 : Pred(Pred), LHS(LHS), RHS(RHS) {}
1273 if (Entry.Pred != ICmpInst::BAD_ICMP_PREDICATE)
1274 CollectArguments({Entry.LHS, Entry.RHS}, ICmpInst::isSigned(Entry.Pred));
1337 if (Entry.Pred == ICmpInst::BAD_ICMP_PREDICATE)
1341 dumpUnpackedICmp(dbgs(), Entry.Pred, Entry.LHS, Entry.RHS);
1343 CloneInstructions({Entry.LHS, Entry.RHS}, CmpInst::isSigned(Entry.Pred));
1345 auto *Cmp = Builder.CreateICmp(Entry.Pred, Entry.LHS, Entry.RHS);
1358 static std::optional<bool> checkCondition(CmpInst::Predicate Pred, Value *A,
1363 auto R = Info.getConstraintForSolving(Pred, A, B);
1388 dbgs(), *ImpliedCondition ? Pred : CmpInst::getInversePredicate(Pred),
1445 ICmpInst::Predicate Pred =
1448 Pred, MinMax->getOperand(0), MinMax->getOperand(1), MinMax, Info))
1451 Pred, MinMax->getOperand(1), MinMax->getOperand(0), MinMax, Info))
1501 CmpInst::Predicate Pred;
1514 m_ICmp(Pred, m_Value(A), m_Value(B))))
1520 Pred = CmpInst::getInversePredicate(Pred);
1524 Info.addFact(Pred, A, B, CB.NumIn, CB.NumOut, DFSInStack);
1554 void ConstraintInfo::addFact(CmpInst::Predicate Pred, Value *A, Value *B,
1560 auto R = getConstraint(Pred, A, B, NewVariables);
1566 LLVM_DEBUG(dbgs() << "Adding '"; dumpUnpackedICmp(dbgs(), Pred, A, B);
1652 auto DoesConditionHold = [](CmpInst::Predicate Pred, Value *A, Value *B,
1654 auto R = Info.getConstraintForSolving(Pred, A, B);
1786 auto AddFact = [&](CmpInst::Predicate Pred, Value *A, Value *B) {
1788 dumpUnpackedICmp(dbgs(), Pred, A, B); dbgs() << "\n");
1789 if (Info.getCS(CmpInst::isSigned(Pred)).size() > MaxRows) {
1796 Info.addFact(Pred, A, B, CB.NumIn, CB.NumOut, DFSInStack);
1798 ReproducerCondStack.emplace_back(Pred, A, B);
1800 Info.transferToOtherSystem(Pred, A, B, CB.NumIn, CB.NumOut, DFSInStack);
1813 ICmpInst::Predicate Pred;
1826 Pred = ICmpInst::getNonStrictPredicate(MinMax->getPredicate());
1827 AddFact(Pred, MinMax, MinMax->getLHS());
1828 AddFact(Pred, MinMax, MinMax->getRHS());
1835 Pred = CB.Cond.Pred;
1838 if (CB.DoesHold.Pred != CmpInst::BAD_ICMP_PREDICATE &&
1839 !Info.doesHold(CB.DoesHold.Pred, CB.DoesHold.Op0, CB.DoesHold.Op1)) {
1842 dumpUnpackedICmp(dbgs(), Pred, A, B);
1844 dumpUnpackedICmp(dbgs(), CB.DoesHold.Pred, CB.DoesHold.Op0,
1852 m_ICmp(Pred, m_Value(A), m_Value(B))));
1856 AddFact(Pred, A, B);