mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-25 23:45:36 +00:00
Add a new getLoopLatch() method.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23315 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
331a1833e1
commit
b6a69e70e0
@ -373,12 +373,36 @@ BasicBlock *Loop::getLoopPreheader() const {
|
|||||||
if (SI != succ_end(Out))
|
if (SI != succ_end(Out))
|
||||||
return 0; // Multiple exits from the block, must not be a preheader.
|
return 0; // Multiple exits from the block, must not be a preheader.
|
||||||
|
|
||||||
|
|
||||||
// If there is exactly one preheader, return it. If there was zero, then Out
|
// If there is exactly one preheader, return it. If there was zero, then Out
|
||||||
// is still null.
|
// is still null.
|
||||||
return Out;
|
return Out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// getLoopLatch - If there is a latch block for this loop, return it. A
|
||||||
|
/// latch block is the canonical backedge for a loop. A loop header in normal
|
||||||
|
/// form has two edges into it: one from a preheader and one from a latch
|
||||||
|
/// block.
|
||||||
|
BasicBlock *Loop::getLoopLatch() const {
|
||||||
|
BasicBlock *Header = getHeader();
|
||||||
|
pred_iterator PI = pred_begin(Header), PE = pred_end(Header);
|
||||||
|
if (PI == PE) return 0; // no preds?
|
||||||
|
|
||||||
|
BasicBlock *Latch = 0;
|
||||||
|
if (contains(*PI))
|
||||||
|
Latch = *PI;
|
||||||
|
++PI;
|
||||||
|
if (PI == PE) return 0; // only one pred?
|
||||||
|
|
||||||
|
if (contains(*PI)) {
|
||||||
|
if (Latch) return 0; // multiple backedges
|
||||||
|
Latch = *PI;
|
||||||
|
}
|
||||||
|
++PI;
|
||||||
|
if (PI != PE) return 0; // more than two preds
|
||||||
|
|
||||||
|
return Latch;
|
||||||
|
}
|
||||||
|
|
||||||
/// getCanonicalInductionVariable - Check to see if the loop has a canonical
|
/// getCanonicalInductionVariable - Check to see if the loop has a canonical
|
||||||
/// induction variable: an integer recurrence that starts at 0 and increments by
|
/// induction variable: an integer recurrence that starts at 0 and increments by
|
||||||
/// one each time through the loop. If so, return the phi node that corresponds
|
/// one each time through the loop. If so, return the phi node that corresponds
|
||||||
|
Loading…
x
Reference in New Issue
Block a user