[llvm-commits] [vmkit] r50650 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaCache.cpp JavaJIT.cpp JavaJIT.h JavaJITInitialise.cpp JavaRuntimeJIT.cpp LowerArrayLength.cpp LowerConstantCalls.cpp Makefile.am
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Mon May 5 09:20:25 PDT 2008
Author: geoffray
Date: Mon May 5 11:20:25 2008
New Revision: 50650
URL: http://llvm.org/viewvc/llvm-project?rev=50650&view=rev
Log:
Perform constant calls (ie fake readnone) as much as possible.
Added:
vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp
Removed:
vmkit/trunk/lib/JnJVM/VMCore/LowerArrayLength.cpp
Modified:
vmkit/trunk/lib/JnJVM/VMCore/JavaCache.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.h
vmkit/trunk/lib/JnJVM/VMCore/JavaJITInitialise.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
vmkit/trunk/lib/JnJVM/VMCore/Makefile.am
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaCache.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaCache.cpp?rev=50650&r1=50649&r2=50650&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaCache.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaCache.cpp Mon May 5 11:20:25 2008
@@ -111,14 +111,7 @@
"", currentBlock);
Value* cache = new LoadInst(cachePtr, "", currentBlock);
- std::vector<Value*> args2;
- args2.push_back(zero);
- args2.push_back(JavaObject::classOffset());
- Value* classPtr = GetElementPtrInst::Create(args[0], args2.begin(),
- args2.end(), "",
- currentBlock);
-
- Value* cl = new LoadInst(classPtr, "", currentBlock);
+ Value* cl = CallInst::Create(getClassLLVM, args[0], "", currentBlock);
std::vector<Value*> args3;
args3.push_back(zero);
args3.push_back(two);
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp?rev=50650&r1=50649&r2=50650&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp Mon May 5 11:20:25 2008
@@ -121,13 +121,7 @@
JITVerifyNull(args[0]);
- std::vector<Value*> indexes; //[3];
- indexes.push_back(zero);
- indexes.push_back(zero);
- Value* VTPtr = GetElementPtrInst::Create(args[0], indexes.begin(),
- indexes.end(), "", currentBlock);
-
- Value* VT = new LoadInst(VTPtr, "", currentBlock);
+ Value* VT = CallInst::Create(getVTLLVM, args[0], "", currentBlock);
std::vector<Value*> indexes2; //[3];
if (meth) {
indexes2.push_back(meth->offset);
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.h?rev=50650&r1=50649&r2=50650&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.h Mon May 5 11:20:25 2008
@@ -270,6 +270,8 @@
static llvm::Function* getStaticInstanceLLVM;
static llvm::Function* getClassDelegateeLLVM;
static llvm::Function* arrayLengthLLVM;
+ static llvm::Function* getVTLLVM;
+ static llvm::Function* getClassLLVM;
static Class* getCallingClass();
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaJITInitialise.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaJITInitialise.cpp?rev=50650&r1=50649&r2=50650&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJITInitialise.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJITInitialise.cpp Mon May 5 11:20:25 2008
@@ -319,6 +319,44 @@
arrayLengthLLVM->setParamAttrs(func_toto_PAL);
}
+ // Create getVTLLVM
+ {
+ std::vector<const Type*> args;
+ args.push_back(JavaObject::llvmType);
+ const FunctionType* type = FunctionType::get(
+ PointerType::getUnqual(PointerType::getUnqual(Type::Int32Ty)),
+ args, false);
+
+ getVTLLVM = Function::Create(type, GlobalValue::ExternalLinkage,
+ "getVT",
+ module);
+ PAListPtr func_toto_PAL;
+ SmallVector<ParamAttrsWithIndex, 4> Attrs;
+ ParamAttrsWithIndex PAWI;
+ PAWI.Index = 0; PAWI.Attrs = 0 | ParamAttr::ReadNone;
+ Attrs.push_back(PAWI);
+ func_toto_PAL = PAListPtr::get(Attrs.begin(), Attrs.end());
+ getVTLLVM->setParamAttrs(func_toto_PAL);
+ }
+
+ // Create getClassLLVM
+ {
+ std::vector<const Type*> args;
+ args.push_back(JavaObject::llvmType);
+ const FunctionType* type = FunctionType::get(mvm::jit::ptrType, args, false);
+
+ getClassLLVM = Function::Create(type, GlobalValue::ExternalLinkage,
+ "getVT",
+ module);
+ PAListPtr func_toto_PAL;
+ SmallVector<ParamAttrsWithIndex, 4> Attrs;
+ ParamAttrsWithIndex PAWI;
+ PAWI.Index = 0; PAWI.Attrs = 0 | ParamAttr::ReadNone;
+ Attrs.push_back(PAWI);
+ func_toto_PAL = PAListPtr::get(Attrs.begin(), Attrs.end());
+ getClassLLVM->setParamAttrs(func_toto_PAL);
+ }
+
// Create newLookupLLVM
{
std::vector<const Type*> args;
@@ -643,7 +681,7 @@
namespace mvm {
llvm::FunctionPass* createEscapeAnalysisPass(llvm::Function*, llvm::Function*);
-llvm::FunctionPass* createLowerArrayLengthPass();
+llvm::FunctionPass* createLowerConstantCallsPass();
//llvm::FunctionPass* createArrayChecksPass();
}
@@ -701,6 +739,6 @@
addPass(PM, llvm::createDeadStoreEliminationPass()); // Delete dead stores
addPass(PM, llvm::createAggressiveDCEPass()); // SSA based 'Aggressive DCE'
addPass(PM, llvm::createCFGSimplificationPass()); // Merge & remove BBs
- addPass(PM, mvm::createLowerArrayLengthPass());
+ addPass(PM, mvm::createLowerConstantCallsPass());
}
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp?rev=50650&r1=50649&r2=50650&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp Mon May 5 11:20:25 2008
@@ -71,6 +71,8 @@
llvm::Function* JavaJIT::getStaticInstanceLLVM = 0;
llvm::Function* JavaJIT::getClassDelegateeLLVM = 0;
llvm::Function* JavaJIT::arrayLengthLLVM = 0;
+llvm::Function* JavaJIT::getVTLLVM = 0;
+llvm::Function* JavaJIT::getClassLLVM = 0;
#ifdef SERVICE_VM
llvm::Function* JavaJIT::aquireObjectInSharedDomainLLVM = 0;
Removed: vmkit/trunk/lib/JnJVM/VMCore/LowerArrayLength.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/LowerArrayLength.cpp?rev=50649&view=auto
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/LowerArrayLength.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/LowerArrayLength.cpp (removed)
@@ -1,68 +0,0 @@
-//===----- LowerArrayLength.cpp - Changes arrayLength calls --------------===//
-//
-// JnJVM
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-
-#include "llvm/Pass.h"
-#include "llvm/Function.h"
-#include "llvm/Instructions.h"
-#include "llvm/Support/Compiler.h"
-#include "llvm/Support/Debug.h"
-
-#include "mvm/JIT.h"
-
-#include "JavaArray.h"
-#include "JavaJIT.h"
-
-using namespace llvm;
-
-namespace mvm {
-
- class VISIBILITY_HIDDEN LowerArrayLength : public FunctionPass {
- public:
- static char ID;
- LowerArrayLength() : FunctionPass((intptr_t)&ID) { }
-
- virtual bool runOnFunction(Function &F);
- private:
- };
- char LowerArrayLength::ID = 0;
- RegisterPass<LowerArrayLength> X("LowerArrayLength", "Lower Array length");
-
-bool LowerArrayLength::runOnFunction(Function& F) {
- bool Changed = false;
- for (Function::iterator BI = F.begin(), BE = F.end(); BI != BE; BI++) {
- BasicBlock *Cur = BI;
- for (BasicBlock::iterator II = Cur->begin(), IE = Cur->end(); II != IE;) {
- Instruction *I = II;
- II++;
- if (CallInst *CI = dyn_cast<CallInst>(I)) {
- if (CI->getOperand(0) == jnjvm::JavaJIT::arrayLengthLLVM) {
- Changed = true;
- Value* val = CI->getOperand(1); // get the array
- Value* array = new BitCastInst(val, jnjvm::JavaArray::llvmType, "", CI);
- std::vector<Value*> args; //size= 2
- args.push_back(mvm::jit::constantZero);
- args.push_back(jnjvm::JavaArray::sizeOffset());
- Value* ptr = GetElementPtrInst::Create(array, args.begin(), args.end(),
- "", CI);
- Value* load = new LoadInst(ptr, "", CI);
- CI->replaceAllUsesWith(load);
- CI->eraseFromParent();
- }
- }
- }
- }
- return Changed;
-}
-
-
-FunctionPass* createLowerArrayLengthPass() {
- return new LowerArrayLength();
-}
-}
Added: vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp?rev=50650&view=auto
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp (added)
+++ vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp Mon May 5 11:20:25 2008
@@ -0,0 +1,92 @@
+//===----- LowerConstantCalls.cpp - Changes arrayLength calls --------------===//
+//
+// JnJVM
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#include "llvm/Pass.h"
+#include "llvm/Function.h"
+#include "llvm/Instructions.h"
+#include "llvm/Support/Compiler.h"
+#include "llvm/Support/Debug.h"
+
+#include "mvm/JIT.h"
+
+#include "JavaArray.h"
+#include "JavaJIT.h"
+
+using namespace llvm;
+
+namespace mvm {
+
+ class VISIBILITY_HIDDEN LowerConstantCalls : public FunctionPass {
+ public:
+ static char ID;
+ LowerConstantCalls() : FunctionPass((intptr_t)&ID) { }
+
+ virtual bool runOnFunction(Function &F);
+ private:
+ };
+ char LowerConstantCalls::ID = 0;
+ RegisterPass<LowerConstantCalls> X("LowerArrayLength", "Lower Array length");
+
+bool LowerConstantCalls::runOnFunction(Function& F) {
+ bool Changed = false;
+ for (Function::iterator BI = F.begin(), BE = F.end(); BI != BE; BI++) {
+ BasicBlock *Cur = BI;
+ for (BasicBlock::iterator II = Cur->begin(), IE = Cur->end(); II != IE;) {
+ Instruction *I = II;
+ II++;
+ if (CallInst *CI = dyn_cast<CallInst>(I)) {
+ Value* V = CI->getOperand(0);
+ if (V == jnjvm::JavaJIT::arrayLengthLLVM) {
+ Changed = true;
+ Value* val = CI->getOperand(1); // get the array
+ Value* array = new BitCastInst(val, jnjvm::JavaArray::llvmType, "", CI);
+ std::vector<Value*> args; //size= 2
+ args.push_back(mvm::jit::constantZero);
+ args.push_back(jnjvm::JavaArray::sizeOffset());
+ Value* ptr = GetElementPtrInst::Create(array, args.begin(), args.end(),
+ "", CI);
+ Value* load = new LoadInst(ptr, "", CI);
+ CI->replaceAllUsesWith(load);
+ CI->eraseFromParent();
+ } else if (V == jnjvm::JavaJIT::getVTLLVM) {
+ Changed = true;
+ Value* val = CI->getOperand(1); // get the object
+ std::vector<Value*> indexes; //[3];
+ indexes.push_back(mvm::jit::constantZero);
+ indexes.push_back(mvm::jit::constantZero);
+ Value* VTPtr = GetElementPtrInst::Create(val, indexes.begin(),
+ indexes.end(), "", CI);
+ Value* VT = new LoadInst(VTPtr, "", CI);
+ CI->replaceAllUsesWith(VT);
+ CI->eraseFromParent();
+ } else if (V == jnjvm::JavaJIT::getClassLLVM) {
+ Changed = true;
+ Value* val = CI->getOperand(1); // get the object
+ std::vector<Value*> args2;
+ args2.push_back(mvm::jit::constantZero);
+ args2.push_back(jnjvm::JavaObject::classOffset());
+ Value* classPtr = GetElementPtrInst::Create(val, args2.begin(),
+ args2.end(), "",
+ CI);
+ Value* cl = new LoadInst(classPtr, "", CI);
+ CI->replaceAllUsesWith(cl);
+ CI->eraseFromParent();
+ }
+ }
+ }
+ }
+ return Changed;
+}
+
+
+FunctionPass* createLowerConstantCallsPass() {
+ return new LowerConstantCalls();
+}
+}
Modified: vmkit/trunk/lib/JnJVM/VMCore/Makefile.am
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Makefile.am?rev=50650&r1=50649&r2=50650&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Makefile.am (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Makefile.am Mon May 5 11:20:25 2008
@@ -13,7 +13,7 @@
JavaBacktrace.cpp NativeUtil.h NativeUtil.cpp Jni.cpp \
JavaCache.h JavaCache.cpp JavaUpcalls.h JavaUpcalls.cpp \
JnjvmModuleProvider.h JnjvmModuleProvider.cpp JavaRuntimeJIT.cpp JavaMetaJIT.cpp JavaJITInitialise.cpp \
- LowerArrayLength.cpp
+ LowerConstantCalls.cpp
if SERVICE_BUILD
libJnJVM_la_SOURCES += ServiceDomain.cpp
More information about the llvm-commits
mailing list