[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