diff --git a/lib/ExecutionEngine/JIT/JIT.cpp b/lib/ExecutionEngine/JIT/JIT.cpp index 5a3245b91b6..229754775c1 100644 --- a/lib/ExecutionEngine/JIT/JIT.cpp +++ b/lib/ExecutionEngine/JIT/JIT.cpp @@ -15,18 +15,23 @@ #include "llvm/PassManager.h" namespace { - cl::opt - Arch("march", cl::desc("Architecture: `x86' or `sparc'"), cl::Prefix, - cl::value_desc("machine architecture")); - - static std::string DefaultArch = -#if defined(i386) || defined(__i386__) || defined(__x86__) - "x86"; -#elif defined(sparc) || defined(__sparc__) || defined(__sparcv9) - "sparc"; -#else - ""; + enum ArchName { nojit, x86, sparc }; + + cl::opt + Arch("march", cl::desc("Architecture to JIT to:"), cl::Prefix, + cl::values(clEnumVal(x86, " IA-32 (pentium and above)"), +#if defined(sparc) || defined(__sparc__) || defined(__sparcv9) + clEnumVal(sparc, " Sparc-V9"), #endif + 0), +#if defined(i386) || defined(__i386__) || defined(__x86__) + cl::init(x86) +#elif defined(sparc) || defined(__sparc__) || defined(__sparcv9) + cl::init(sparc) +#else + cl::init(nojit) +#endif + ); } /// createJIT - Create an return a new JIT compiler if there is one available @@ -35,30 +40,31 @@ namespace { ExecutionEngine *ExecutionEngine::createJIT(Module *M, unsigned Config) { TargetMachine* (*TargetMachineAllocator)(unsigned) = 0; - if (Arch == "") - Arch = DefaultArch; // Allow a command-line switch to override what *should* be the default target // machine for this platform. This allows for debugging a Sparc JIT on X86 -- // our X86 machines are much faster at recompiling LLVM and linking lli. - if (Arch == "x86") { + switch (Arch) { + case x86: TargetMachineAllocator = allocateX86TargetMachine; + break; #if defined(sparc) || defined(__sparc__) || defined(__sparcv9) - } else if (Arch == "sparc") { + case sparc: TargetMachineAllocator = allocateSparcTargetMachine; + break; #endif - } - - if (TargetMachineAllocator) { - // Allocate a target... - TargetMachine *Target = (*TargetMachineAllocator)(Config); - assert(Target && "Could not allocate target machine!"); - - // Create the virtual machine object... - return new VM(M, Target); - } else { + default: + assert(0 && "-march flag not supported on this host!"); + case nojit: return 0; } + + // Allocate a target... + TargetMachine *Target = (*TargetMachineAllocator)(Config); + assert(Target && "Could not allocate target machine!"); + + // Create the virtual machine object... + return new VM(M, Target); } VM::VM(Module *M, TargetMachine *tm) : ExecutionEngine(M), TM(*tm) { diff --git a/lib/ExecutionEngine/Makefile b/lib/ExecutionEngine/Makefile index 54ed699f9e1..b97e4115ac0 100644 --- a/lib/ExecutionEngine/Makefile +++ b/lib/ExecutionEngine/Makefile @@ -2,25 +2,9 @@ LEVEL = ../.. TOOLNAME = lli PARALLEL_DIRS = Interpreter JIT -# FIXME: This enables testing the Sparc JIT on x86. -# Perhaps in the future this should be a ./configure option. - -# Generic JIT libraries -JITLIBS = lli-jit codegen -ARCHLIBS = - -# What the X86 JIT requires -JITLIBS += x86 -ARCHLIBS += - -# What the Sparc JIT requires -JITLIBS += sparc -ARCHLIBS = sched livevar instrument.a profpaths transformutils.a \ - bcwriter transforms.a ipo.a ipa.a datastructure.a regalloc \ - mapping select postopts.a preopts - -USEDLIBS = lli-interpreter $(JITLIBS) bcreader vmcore scalaropts \ - analysis.a support.a target.a $(ARCHLIBS) +JITLIBS = lli-jit codegen x86 +USEDLIBS = lli-interpreter $(JITLIBS) bcreader vmcore scalaropts.a \ + analysis.a support.a target.a # Have gcc tell the linker to export symbols from the program so that # dynamically loaded modules can be linked against them. diff --git a/tools/lli/Makefile b/tools/lli/Makefile index 54ed699f9e1..b97e4115ac0 100644 --- a/tools/lli/Makefile +++ b/tools/lli/Makefile @@ -2,25 +2,9 @@ LEVEL = ../.. TOOLNAME = lli PARALLEL_DIRS = Interpreter JIT -# FIXME: This enables testing the Sparc JIT on x86. -# Perhaps in the future this should be a ./configure option. - -# Generic JIT libraries -JITLIBS = lli-jit codegen -ARCHLIBS = - -# What the X86 JIT requires -JITLIBS += x86 -ARCHLIBS += - -# What the Sparc JIT requires -JITLIBS += sparc -ARCHLIBS = sched livevar instrument.a profpaths transformutils.a \ - bcwriter transforms.a ipo.a ipa.a datastructure.a regalloc \ - mapping select postopts.a preopts - -USEDLIBS = lli-interpreter $(JITLIBS) bcreader vmcore scalaropts \ - analysis.a support.a target.a $(ARCHLIBS) +JITLIBS = lli-jit codegen x86 +USEDLIBS = lli-interpreter $(JITLIBS) bcreader vmcore scalaropts.a \ + analysis.a support.a target.a # Have gcc tell the linker to export symbols from the program so that # dynamically loaded modules can be linked against them.