Home | History | Annotate | Download | only in Scalar

Lines Matching defs:IV

79 // %iv = phi [ (preheader, ...), (body, %iv.next) ]
80 // f(%iv)
81 // %iv.1 = add %iv, 1 <-- a root increment
82 // f(%iv.1)
83 // %iv.2 = add %iv, 2 <-- a root increment
84 // f(%iv.2)
85 // %iv.scale_m_1 = add %iv, scale-1 <-- a root increment
86 // f(%iv.scale_m_1)
88 // %iv.next = add %iv, scale
89 // %cmp = icmp(%iv, ...)
115 // %iv = phi [ (preheader, ...), (body, %iv.next) ]
116 // %scaled.iv = mul %iv, scale
117 // f(%scaled.iv)
118 // %scaled.iv.1 = add %scaled.iv, 1
119 // f(%scaled.iv.1)
120 // %scaled.iv.2 = add %scaled.iv, 2
121 // f(%scaled.iv.2)
122 // %scaled.iv.scale_m_1 = add %scaled.iv, scale-1
123 // f(%scaled.iv.scale_m_1)
125 // %iv.next = add %iv, 1
126 // %cmp = icmp(%iv, ...)
348 // The instructions between IV and BaseInst (but not including BaseInst).
355 DAGRootTracker(LoopReroll *Parent, Loop *L, Instruction *IV,
361 PreserveLCSSA(PreserveLCSSA), IV(IV), IVToIncMap(IncrMap) {}
412 Instruction *IV;
421 // All increment instructions for IV.
434 bool reroll(Instruction *IV, Loop *L, BasicBlock *Header, const SCEV *IterCount,
487 DEBUG(dbgs() << "LRR: Possible IV: " << *I << " = " << *PHISCEV
566 // including root increments in the use set of the primary IV.
652 static bool isLoopIncrement(User *U, Instruction *IV) {
659 if (PN && PN == IV)
672 if (isLoopIncrement(I, IV)) {
748 I != IV &&
810 Inc = IVToIncMap[IV];
814 for (auto *IVU : IV->users()) {
815 if (isLoopIncrement(IVU, IV))
818 if (!findRootsRecursive(IV, SmallInstructionSet()))
820 LoopIncs.push_back(IV);
822 if (!findRootsBase(IV, SmallInstructionSet()))
1057 // The map between instructions in f(%iv.(i+1)) and f(%iv).
1070 // Skip over the IV or root instructions; only match their users.
1255 *IV << "\n");
1275 bool Negative = IVToIncMap[IV] < 0;
1289 Value *NewIV = Expander.expandCodeFor(H, IV->getType(), &Header->front());
1409 // %iv = phi [ (preheader, ...), (body, %iv.next) ]
1410 // f(%iv)
1411 // %iv.1 = add %iv, 1 <-- a root increment
1412 // f(%iv.1)
1413 // %iv.2 = add %iv, 2 <-- a root increment
1414 // f(%iv.2)
1415 // %iv.scale_m_1 = add %iv, scale-1 <-- a root increment
1416 // f(%iv.scale_m_1)
1418 // %iv.next = add %iv, scale
1419 // %cmp = icmp(%iv, ...)
1422 // Notably, we do not require that f(%iv), f(%iv.1), etc. be isolated groups of
1423 // instructions. In other words, the instructions in f(%iv), f(%iv.1), etc. can
1425 // that the relative order of the isomorphic instructions in f(%iv), f(%iv.1),
1428 // First, we collect the use set of %iv, excluding the other increment roots.
1429 // This gives us f(%iv). Then we iterate over the loop instructions (scale-1)
1430 // times, having collected the use set of f(%iv.(i+1)), during which we:
1431 // - Ensure that the next unmatched instruction in f(%iv) is isomorphic to
1432 // the next unmatched instruction in f(%iv.(i+1)).
1438 // f(%iv) or f(%iv.(i+1)) has some dependency on instructions in
1439 // f(%iv.(j+1)) for some j > i, and we cannot reroll the loop. Similarly,
1447 // f(%iv) or part of some f(%iv.i). If all of that is true (and all reductions
1449 bool LoopReroll::reroll(Instruction *IV, Loop *L, BasicBlock *Header,
1452 DAGRootTracker DAGRoots(this, L, IV, SE, AA, TLI, DT, LI, PreserveLCSSA,
1458 *IV << "\n");
1517 // For each possible IV, collect the associated possible set of 'root' nodes