[vmkit-commits] [vmkit] r62233 - in /vmkit/trunk: include/mvm/JIT.h lib/JnJVM/VMCore/JnjvmModule.cpp lib/JnJVM/VMCore/JnjvmModuleProvider.cpp lib/Mvm/Runtime/JIT.cpp tools/vmjc/vmjc.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Wed Jan 14 09:15:23 PST 2009
Author: geoffray
Date: Wed Jan 14 11:15:22 2009
New Revision: 62233
URL: http://llvm.org/viewvc/llvm-project?rev=62233&view=rev
Log:
Don't reference the executionEngine when static compiling.
Modified:
vmkit/trunk/include/mvm/JIT.h
vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp
vmkit/trunk/lib/Mvm/Runtime/JIT.cpp
vmkit/trunk/tools/vmjc/vmjc.cpp
Modified: vmkit/trunk/include/mvm/JIT.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/JIT.h?rev=62233&r1=62232&r2=62233&view=diff
==============================================================================
--- vmkit/trunk/include/mvm/JIT.h (original)
+++ vmkit/trunk/include/mvm/JIT.h Wed Jan 14 11:15:22 2009
@@ -27,6 +27,7 @@
class FunctionPassManager;
class PointerType;
class TargetData;
+ class TargetMachine;
class Type;
}
@@ -167,7 +168,8 @@
static uint64 getTypeSize(const llvm::Type* type);
static void runPasses(llvm::Function* func, llvm::FunctionPassManager*);
- static void initialise(bool Fast = false);
+ static void initialise(bool Fast = false, llvm::Module* TheModule = 0,
+ llvm::TargetMachine* TheTarget = 0);
static int disassemble(unsigned int* addr);
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp?rev=62233&r1=62232&r2=62233&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp Wed Jan 14 11:15:22 2009
@@ -2128,10 +2128,6 @@
JnjvmModule::JnjvmModule(const std::string &ModuleID, bool sc) :
MvmModule(ModuleID) {
- if (!sc) {
- std::string str = TheTargetData->getStringRepresentation();
- setDataLayout(str);
- }
staticCompilation = sc;
if (!VTType) initialise();
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp?rev=62233&r1=62232&r2=62233&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp Wed Jan 14 11:15:22 2009
@@ -65,12 +65,13 @@
bool JnjvmModuleProvider::materializeFunction(Function *F,
std::string *ErrInfo) {
+ if (!(F->hasNotBeenReadFromBitcode()))
+ return false;
+
+ assert(mvm::MvmModule::executionEngine && "No execution engine");
if (mvm::MvmModule::executionEngine->getPointerToGlobalIfAvailable(F))
return false;
- if (!(F->hasNotBeenReadFromBitcode()))
- return false;
-
JavaMethod* meth = LLVMMethodInfo::get(F);
if (!meth) {
Modified: vmkit/trunk/lib/Mvm/Runtime/JIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Runtime/JIT.cpp?rev=62233&r1=62232&r2=62233&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/Runtime/JIT.cpp (original)
+++ vmkit/trunk/lib/Mvm/Runtime/JIT.cpp Wed Jan 14 11:15:22 2009
@@ -19,6 +19,7 @@
#include <llvm/ExecutionEngine/ExecutionEngine.h>
#include <llvm/Support/MutexGuard.h>
#include <llvm/Target/TargetData.h>
+#include <llvm/Target/TargetMachine.h>
#include <llvm/Target/TargetOptions.h>
@@ -38,25 +39,29 @@
}
}
-void MvmModule::initialise(bool Fast) {
+void MvmModule::initialise(bool Fast, Module* M, TargetMachine* T) {
llvm::NoFramePointerElim = true;
llvm::ExceptionHandling = true;
- globalModule = new llvm::Module("bootstrap module");
- globalModuleProvider = new ExistingModuleProvider (globalModule);
-
-
- executionEngine = ExecutionEngine::createJIT(globalModuleProvider, 0,
- 0, Fast);
-
- std::string str =
- executionEngine->getTargetData()->getStringRepresentation();
- globalModule->setDataLayout(str);
-
- TheTargetData = executionEngine->getTargetData();
+ if (!M) {
+ globalModule = new llvm::Module("bootstrap module");
+ globalModuleProvider = new ExistingModuleProvider (globalModule);
+
+ executionEngine = ExecutionEngine::createJIT(globalModuleProvider, 0,
+ 0, Fast);
+
+ std::string str =
+ executionEngine->getTargetData()->getStringRepresentation();
+ globalModule->setDataLayout(str);
+
+ TheTargetData = executionEngine->getTargetData();
+ } else {
+ globalModule = M;
+ TheTargetData = T->getTargetData();
+ }
Module module("unused");
- module.setDataLayout(str);
+ module.setDataLayout(globalModule->getDataLayout());
mvm::llvm_runtime::makeLLVMModuleContents(&module);
// Type declaration
@@ -118,8 +123,8 @@
MvmModule::MvmModule(const std::string& ModuleID) : llvm::Module(ModuleID) {
Module* module = this;
- std::string str = executionEngine->getTargetData()->getStringRepresentation();
- module->setDataLayout(str);
+ module->setDataLayout(globalModule->getDataLayout());
+ module->setTargetTriple(globalModule->getTargetTriple());
mvm::llvm_runtime::makeLLVMModuleContents(module);
Modified: vmkit/trunk/tools/vmjc/vmjc.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/vmjc/vmjc.cpp?rev=62233&r1=62232&r2=62233&view=diff
==============================================================================
--- vmkit/trunk/tools/vmjc/vmjc.cpp (original)
+++ vmkit/trunk/tools/vmjc/vmjc.cpp Wed Jan 14 11:15:22 2009
@@ -28,6 +28,9 @@
#include "llvm/Support/SystemUtils.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/System/Signals.h"
+#include "llvm/Target/TargetData.h"
+#include "llvm/Target/TargetMachineRegistry.h"
+#include "llvm/Target/TargetMachine.h"
#include "MvmGC.h"
#include "mvm/JIT.h"
@@ -133,21 +136,38 @@
cl::PrintHelpMessage();
return 0;
}
+
+ Module* TheModule = new Module("bootstrap module");
+ if (!TargetTriple.empty())
+ TheModule->setTargetTriple(TargetTriple);
+ else
+ TheModule->setTargetTriple(LLVM_HOSTTRIPLE);
+
+ // Create the TargetMachine we will be generating code with.
+ std::string Err;
+ const TargetMachineRegistry::entry *TME =
+ TargetMachineRegistry::getClosestStaticTargetForModule(*TheModule, Err);
+ if (!TME) {
+ cerr << "Did not get a target machine!\n";
+ exit(1);
+ }
+
+ std::string FeatureStr;
+ TargetMachine* TheTarget = TME->CtorFn(*TheModule, FeatureStr);
+
+ // Install information about target datalayout stuff into the module for
+ // optimizer use.
+ TheModule->setDataLayout(TheTarget->getTargetData()->
+ getStringRepresentation());
- mvm::MvmModule::initialise();
+
+ mvm::MvmModule::initialise(false, TheModule, TheTarget);
mvm::Object::initialise();
Collector::initialise(0);
Collector::enable(0);
mvm::CompilationUnit* CU = mvm::VirtualMachine::initialiseJVM(true);
-
- if (!TargetTriple.empty())
- CU->TheModule->setTargetTriple(TargetTriple);
- else
- CU->TheModule->setTargetTriple(LLVM_HOSTTRIPLE);
-
-
- addCommandLinePass(CU, argv);
+ addCommandLinePass(CU, argv);
mvm::VirtualMachine* vm = mvm::VirtualMachine::createJVM(CU);
vm->compile(InputFilename.c_str());
vm->waitForExit();
More information about the vmkit-commits
mailing list