forked from OSchip/llvm-project
[LoopInfo] Faster implementation of setLoopID. NFC.
Summary: This change was part of D46460. However, in the meantime rL341926 fixed the correctness issue here. What remained was the performance issue in setLoopID where it would iterate through all blocks in the loop and their successors, rather than just the predecessor of the header (the later presumably being much faster). We already have the `getLoopLatches` to compute precisely these basic blocks in an efficient manner, so just use it (as the original commit did for `getLoopID`). Reviewed By: jdoerfert Differential Revision: https://reviews.llvm.org/D61215 llvm-svn: 359684
This commit is contained in:
parent
6e32dd6cfd
commit
d8f856d265
|
@ -254,16 +254,10 @@ void Loop::setLoopID(MDNode *LoopID) const {
|
|||
assert((!LoopID || LoopID->getOperand(0) == LoopID) &&
|
||||
"Loop ID should refer to itself");
|
||||
|
||||
BasicBlock *H = getHeader();
|
||||
for (BasicBlock *BB : this->blocks()) {
|
||||
Instruction *TI = BB->getTerminator();
|
||||
for (BasicBlock *Successor : successors(TI)) {
|
||||
if (Successor == H) {
|
||||
TI->setMetadata(LLVMContext::MD_loop, LoopID);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
SmallVector<BasicBlock *, 4> LoopLatches;
|
||||
getLoopLatches(LoopLatches);
|
||||
for (BasicBlock *BB : LoopLatches)
|
||||
BB->getTerminator()->setMetadata(LLVMContext::MD_loop, LoopID);
|
||||
}
|
||||
|
||||
void Loop::setLoopAlreadyUnrolled() {
|
||||
|
|
Loading…
Reference in New Issue