1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 11:02:59 +02:00

ExecutionEngine.cpp: Move execution engine creation stuff into a new

static method here.
 Remove some extra blank lines.
ExecutionEngine.h: Add its prototype.
lli.cpp: Call it.

Make creation method for each type of EE into a static method of its
own subclass.

Interpreter/Interpreter.cpp: ExecutionEngine::createInterpreter -->
 Interpreter::create
Interpreter/Interpreter.h: Likewise.
JIT/JIT.cpp: ExecutionEngine::createJIT --> VM::create
JIT/VM.h: Likewise.

llvm-svn: 8343
This commit is contained in:
Brian Gaeke 2003-09-03 20:34:19 +00:00
parent 0b78090518
commit cec978e0ed
7 changed files with 39 additions and 21 deletions

View File

@ -48,6 +48,9 @@ public:
const std::vector<std::string> &Args,
const char ** envp) = 0;
static ExecutionEngine *create (Module *M, bool ForceInterpreter,
bool DebugMode, bool TraceMode);
/// createJIT - Create an return a new JIT compiler if there is one available
/// for the current target. Otherwise it returns null.
///

View File

@ -15,9 +15,25 @@
#include "Support/Debug.h"
#include "Support/Statistic.h"
#include "Config/dlfcn.h"
#include "JIT/VM.h"
#include "Interpreter/Interpreter.h"
Statistic<> NumInitBytes("lli", "Number of bytes of global vars initialized");
ExecutionEngine *ExecutionEngine::create (Module *M, bool ForceInterpreter,
bool DebugMode, bool TraceMode) {
ExecutionEngine *EE = 0;
// If there is nothing that is forcing us to use the interpreter, make a JIT.
if (!ForceInterpreter && !DebugMode && !TraceMode)
EE = VM::create(M);
// If we can't make a JIT, make an interpreter instead.
if (EE == 0)
EE = Interpreter::create(M, DebugMode, TraceMode);
return EE;
}
// getPointerToGlobal - This returns the address of the specified global
// value. This may involve code generation if it's a function.
//
@ -29,7 +45,6 @@ void *ExecutionEngine::getPointerToGlobal(const GlobalValue *GV) {
return GlobalAddress[GV];
}
GenericValue ExecutionEngine::getConstantValue(const Constant *C) {
GenericValue Result;
@ -259,7 +274,6 @@ GenericValue ExecutionEngine::LoadValueFromMemory(GenericValue *Ptr,
return Result;
}
// InitializeMemory - Recursive function to apply a Constant value into the
// specified memory location...
//

View File

@ -9,11 +9,9 @@
#include "Interpreter.h"
#include "llvm/Module.h"
/// createInterpreter - Create a new interpreter object. This can never fail.
/// create - Create a new interpreter object. This can never fail.
///
ExecutionEngine *ExecutionEngine::createInterpreter(Module *M,
bool DebugMode,
bool TraceMode) {
ExecutionEngine *Interpreter::create(Module *M, bool DebugMode, bool TraceMode){
bool isLittleEndian;
switch (M->getEndianness()) {
case Module::LittleEndian: isLittleEndian = true; break;

View File

@ -91,8 +91,13 @@ public:
bool DebugMode, bool TraceMode);
inline ~Interpreter() { CW.setModule(0); }
// getExitCode - return the code that should be the exit code for the lli
// utility.
/// create - Create an interpreter ExecutionEngine. This can never fail.
///
static ExecutionEngine *create(Module *M, bool DebugMode, bool TraceMode);
/// getExitCode - return the code that should be the exit code for the lli
/// utility.
///
inline int getExitCode() const { return ExitCode; }
/// run - Start execution with the specified function and arguments.

View File

@ -41,11 +41,10 @@ namespace {
#endif /* NO_JITS_ENABLED */
}
/// createJIT - Create an return a new JIT compiler if there is one available
/// for the current target. Otherwise it returns null.
/// create - Create an return a new JIT compiler if there is one available
/// for the current target. Otherwise, return null.
///
ExecutionEngine *ExecutionEngine::createJIT(Module *M) {
ExecutionEngine *VM::create(Module *M) {
TargetMachine* (*TargetMachineAllocator)(const Module &) = 0;
// Allow a command-line switch to override what *should* be the default target

View File

@ -26,6 +26,11 @@ public:
VM(Module *M, TargetMachine *tm);
~VM();
/// create - Create an return a new JIT compiler if there is one available
/// for the current target. Otherwise, return null.
///
static ExecutionEngine *create(Module *M);
/// run - Start execution with the specified function and arguments.
///
virtual int run(const std::string &FnName,

View File

@ -59,15 +59,9 @@ int main(int argc, char** argv, const char ** envp) {
exit(1);
}
ExecutionEngine *EE = 0;
// If there is nothing that is forcing us to use the interpreter, make a JIT.
if (!ForceInterpreter && !DebugMode && !TraceMode)
EE = ExecutionEngine::createJIT(M);
// If we can't make a JIT, make an interpreter instead.
if (EE == 0)
EE = ExecutionEngine::createInterpreter(M, DebugMode, TraceMode);
ExecutionEngine *EE =
ExecutionEngine::create (M, ForceInterpreter, DebugMode, TraceMode);
assert (EE && "Couldn't create an ExecutionEngine, not even an interpreter?");
// Add the module name to the start of the argv vector...
// But delete .bc first, since programs (and users) might not expect to