Lines Matching refs:Cond
52 ConditionInfo &Cond, const Loop &L) { in analyzeICmp() argument
53 Cond.ICmp = ICmp; in analyzeICmp()
54 if (match(ICmp, m_ICmp(Cond.Pred, m_Value(Cond.AddRecValue), in analyzeICmp()
55 m_Value(Cond.BoundValue)))) { in analyzeICmp()
56 const SCEV *AddRecSCEV = SE.getSCEV(Cond.AddRecValue); in analyzeICmp()
57 const SCEV *BoundSCEV = SE.getSCEV(Cond.BoundValue); in analyzeICmp()
62 std::swap(Cond.AddRecValue, Cond.BoundValue); in analyzeICmp()
64 Cond.Pred = ICmpInst::getSwappedPredicate(Cond.Pred); in analyzeICmp()
67 Cond.AddRecSCEV = dyn_cast<SCEVAddRecExpr>(AddRecSCEV); in analyzeICmp()
68 Cond.BoundSCEV = BoundSCEV; in analyzeICmp()
69 Cond.NonPHIAddRecValue = Cond.AddRecValue; in analyzeICmp()
73 if (Cond.AddRecSCEV && isa<PHINode>(Cond.AddRecValue)) { in analyzeICmp()
74 PHINode *PN = cast<PHINode>(Cond.AddRecValue); in analyzeICmp()
75 Cond.NonPHIAddRecValue = PN->getIncomingValueForBlock(L.getLoopLatch()); in analyzeICmp()
81 ConditionInfo &Cond, bool IsExitCond) { in calculateUpperBound() argument
83 const SCEV *ExitCount = SE.getExitCount(&L, Cond.ICmp->getParent()); in calculateUpperBound()
87 Cond.BoundSCEV = ExitCount; in calculateUpperBound()
92 if (Cond.Pred == ICmpInst::ICMP_SLT || Cond.Pred == ICmpInst::ICMP_ULT) in calculateUpperBound()
98 if (Cond.Pred != ICmpInst::ICMP_ULE && Cond.Pred != ICmpInst::ICMP_SLE) in calculateUpperBound()
102 dyn_cast<IntegerType>(Cond.BoundSCEV->getType())) { in calculateUpperBound()
104 APInt Max = ICmpInst::isSigned(Cond.Pred) in calculateUpperBound()
110 ICmpInst::isSigned(Cond.Pred) ? ICmpInst::ICMP_SLT : ICmpInst::ICMP_ULT; in calculateUpperBound()
111 if (SE.isKnownPredicate(Pred, Cond.BoundSCEV, MaxSCEV)) { in calculateUpperBound()
113 SE.getAddExpr(Cond.BoundSCEV, SE.getOne(BoundSCEVIntType)); in calculateUpperBound()
114 Cond.BoundSCEV = BoundPlusOneSCEV; in calculateUpperBound()
115 Cond.Pred = Pred; in calculateUpperBound()
126 ICmpInst *ICmp, ConditionInfo &Cond, in hasProcessableCondition() argument
128 analyzeICmp(SE, ICmp, Cond, L); in hasProcessableCondition()
131 if (!SE.isAvailableAtLoopEntry(Cond.BoundSCEV, &L)) in hasProcessableCondition()
135 if (!Cond.AddRecSCEV) in hasProcessableCondition()
138 if (!Cond.AddRecSCEV->isAffine()) in hasProcessableCondition()
141 const SCEV *StepRecSCEV = Cond.AddRecSCEV->getStepRecurrence(SE); in hasProcessableCondition()
153 if (!calculateUpperBound(L, SE, Cond, IsExitCond)) in hasProcessableCondition()
180 ScalarEvolution &SE, ConditionInfo &Cond) { in canSplitLoopBound() argument
216 if (!hasProcessableCondition(L, SE, ICmp, Cond, /*IsExitCond*/ true)) in canSplitLoopBound()
219 Cond.BI = ExitingBI; in canSplitLoopBound()
395 Value *Cond = in splitLoopBound() local
397 Builder.CreateCondBr(Cond, PostLoop->getHeader(), PostLoop->getExitBlock()); in splitLoopBound()