forked from OSchip/llvm-project
Use more structured command line option processing
llvm-svn: 6742
This commit is contained in:
parent
a5741aca3a
commit
d9e6bfae0e
|
@ -15,18 +15,23 @@
|
|||
#include "llvm/PassManager.h"
|
||||
|
||||
namespace {
|
||||
cl::opt<std::string>
|
||||
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<ArchName>
|
||||
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) {
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue