[vmkit-commits] [vmkit] r83139 - /vmkit/trunk/lib/Mvm/Compiler/LoopSafePoints.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Tue Sep 29 21:03:16 PDT 2009
Author: geoffray
Date: Tue Sep 29 23:03:15 2009
New Revision: 83139
URL: http://llvm.org/viewvc/llvm-project?rev=83139&view=rev
Log:
Inform the loop analysis that new blocks are in the loop when inserting a safe
point.
Modified:
vmkit/trunk/lib/Mvm/Compiler/LoopSafePoints.cpp
Modified: vmkit/trunk/lib/Mvm/Compiler/LoopSafePoints.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Compiler/LoopSafePoints.cpp?rev=83139&r1=83138&r2=83139&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/Compiler/LoopSafePoints.cpp (original)
+++ vmkit/trunk/lib/Mvm/Compiler/LoopSafePoints.cpp Tue Sep 29 23:03:15 2009
@@ -25,9 +25,14 @@
virtual bool runOnLoop(Loop* L, LPPassManager& LPM);
+ virtual void getAnalysisUsage(AnalysisUsage &AU) const {
+ AU.addRequired<LoopInfo>();
+ }
+
+
private:
void insertSafePoint(BasicBlock* BB, Function* SafeFunction,
- Value* YieldPtr);
+ Value* YieldPtr, Loop* L, LoopInfo* LI);
};
char LoopSafePoints::ID = 0;
@@ -35,9 +40,10 @@
"Add safe points in loop headers");
void LoopSafePoints::insertSafePoint(BasicBlock* BB, Function* SafeFunction,
- Value* YieldPtr) {
+ Value* YieldPtr, Loop* L, LoopInfo* LI) {
Instruction* I = BB->getFirstNonPHI();
BasicBlock* NBB = BB->splitBasicBlock(I);
+ L->addBasicBlockToLoop(NBB, LI->getBase());
NBB = NBB->getSinglePredecessor();
I = NBB->getTerminator();
@@ -47,14 +53,20 @@
Value* Ld = new LoadInst(YieldPtr, "", NBB);
BasicBlock* yield = BasicBlock::Create(SafeFunction->getContext(), "",
BB->getParent());
+
BranchInst::Create(yield, SU, Ld, NBB);
CallInst::Create(SafeFunction, "", yield);
BranchInst::Create(SU, yield);
+
+ L->addBasicBlockToLoop(yield, LI->getBase());
+
}
+
bool LoopSafePoints::runOnLoop(Loop* L, LPPassManager& LPM) {
-
+
+ LoopInfo* LI = &getAnalysis<LoopInfo>();
BasicBlock* Header = L->getHeader();
Function *F = Header->getParent();
Function* SafeFunction =
@@ -101,18 +113,18 @@
bool containsSecond = L->contains(Second);
if (!containsFirst) {
- insertSafePoint(Second, SafeFunction, YieldPtr);
+ insertSafePoint(Second, SafeFunction, YieldPtr, L, LI);
return true;
}
if (!containsSecond) {
- insertSafePoint(First, SafeFunction, YieldPtr);
+ insertSafePoint(First, SafeFunction, YieldPtr, L, LI);
return true;
}
}
}
- insertSafePoint(Header, SafeFunction, YieldPtr);
+ insertSafePoint(Header, SafeFunction, YieldPtr, L, LI);
return true;
}
More information about the vmkit-commits
mailing list