[vmkit-commits] [vmkit] r68644 - in /vmkit/trunk/lib: JnJVM/Compiler/JnjvmModule.cpp Mvm/Compiler/EscapeAnalysis.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Wed Apr 8 14:07:52 PDT 2009
Author: geoffray
Date: Wed Apr 8 16:07:52 2009
New Revision: 68644
URL: http://llvm.org/viewvc/llvm-project?rev=68644&view=rev
Log:
Do not stack allocate allocations which happen during a loop. Hopefully
that will be supported some day...
Modified:
vmkit/trunk/lib/JnJVM/Compiler/JnjvmModule.cpp
vmkit/trunk/lib/Mvm/Compiler/EscapeAnalysis.cpp
Modified: vmkit/trunk/lib/JnJVM/Compiler/JnjvmModule.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JnjvmModule.cpp?rev=68644&r1=68643&r2=68644&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JnjvmModule.cpp Wed Apr 8 16:07:52 2009
@@ -529,7 +529,7 @@
}
namespace mvm {
- llvm::FunctionPass* createEscapeAnalysisPass(llvm::Function*);
+ llvm::FunctionPass* createEscapeAnalysisPass();
}
namespace jnjvm {
@@ -545,7 +545,6 @@
JavaFunctionPasses = new FunctionPassManager(TheModuleProvider);
JavaFunctionPasses->add(new TargetData(TheModule));
- Function* func = JavaIntrinsics.JavaObjectAllocateFunction;
- JavaFunctionPasses->add(mvm::createEscapeAnalysisPass(func));
+ JavaFunctionPasses->add(mvm::createEscapeAnalysisPass());
JavaFunctionPasses->add(createLowerConstantCallsPass());
}
Modified: vmkit/trunk/lib/Mvm/Compiler/EscapeAnalysis.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Compiler/EscapeAnalysis.cpp?rev=68644&r1=68643&r2=68644&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/Compiler/EscapeAnalysis.cpp (original)
+++ vmkit/trunk/lib/Mvm/Compiler/EscapeAnalysis.cpp Wed Apr 8 16:07:52 2009
@@ -11,13 +11,15 @@
#include "llvm/Constants.h"
#include "llvm/Function.h"
#include "llvm/GlobalVariable.h"
+#include "llvm/Module.h"
#include "llvm/Pass.h"
#include "llvm/Instructions.h"
+#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/Debug.h"
+#include <cstddef>
#include <map>
-#include "unistd.h"
#include "mvm/GC/GC.h"
@@ -29,24 +31,38 @@
public:
static char ID;
uint64_t pageSize;
- EscapeAnalysis(Function* alloc = 0) :
- FunctionPass((intptr_t)&ID) {
- Allocator = alloc;
+ EscapeAnalysis() : FunctionPass((intptr_t)&ID) {
pageSize = getpagesize();
}
+ virtual void getAnalysisUsage(AnalysisUsage &AU) const {
+ AU.addRequired<LoopInfo>();
+ }
+
virtual bool runOnFunction(Function &F);
+
private:
- Function* Allocator;
bool processMalloc(Instruction* I, Value* Size, Value* VT);
};
+
char EscapeAnalysis::ID = 0;
RegisterPass<EscapeAnalysis> X("EscapeAnalysis", "Escape Analysis Pass");
bool EscapeAnalysis::runOnFunction(Function& F) {
bool Changed = false;
+ Function* Allocator = F.getParent()->getFunction("gcmalloc");
+ if (!Allocator) return Changed;
+
+ LoopInfo* LI = &getAnalysis<LoopInfo>();
+
for (Function::iterator BI = F.begin(), BE = F.end(); BI != BE; BI++) {
- BasicBlock *Cur = BI;
+ BasicBlock *Cur = BI;
+
+ // Don't bother if we're in a loop. We rely on the memory manager to
+ // allocate with a bump pointer allocator. Sure we could analyze more
+ // to see if the object could in fact be stack allocated, but just be
+ // lazy for now.
+ if (LI->getLoopFor(Cur)) continue;
for (BasicBlock::iterator II = Cur->begin(), IE = Cur->end(); II != IE;) {
Instruction *I = II;
@@ -162,8 +178,8 @@
}
namespace mvm {
-FunctionPass* createEscapeAnalysisPass(llvm::Function* alloc) {
-
- return new EscapeAnalysis(alloc);
+FunctionPass* createEscapeAnalysisPass() {
+ return new EscapeAnalysis();
}
+
}
More information about the vmkit-commits
mailing list