mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-02 16:36:40 +00:00
The second part of the change from -fast to -O#. This changes the JIT to accept
an optimization level instead of a simple boolean telling it to generate code "fast" or the other type of "fast". llvm-svn: 70347
This commit is contained in:
parent
7546bed590
commit
50971fd69c
@ -62,7 +62,7 @@ int LLVMCreateInterpreter(LLVMExecutionEngineRef *OutInterp,
|
||||
|
||||
int LLVMCreateJITCompiler(LLVMExecutionEngineRef *OutJIT,
|
||||
LLVMModuleProviderRef MP,
|
||||
int Fast,
|
||||
unsigned OptLevel,
|
||||
char **OutError);
|
||||
|
||||
void LLVMDisposeExecutionEngine(LLVMExecutionEngineRef EE);
|
||||
|
@ -84,7 +84,7 @@ protected:
|
||||
// libraries, the JIT and Interpreter set these functions to ctor pointers
|
||||
// at startup time if they are linked in.
|
||||
typedef ExecutionEngine *(*EECtorFn)(ModuleProvider*, std::string*,
|
||||
bool Fast);
|
||||
unsigned OptLevel);
|
||||
static EECtorFn JITCtor, InterpCtor;
|
||||
|
||||
/// LazyFunctionCreator - If an unknown function is needed, this function
|
||||
@ -114,7 +114,7 @@ public:
|
||||
static ExecutionEngine *create(ModuleProvider *MP,
|
||||
bool ForceInterpreter = false,
|
||||
std::string *ErrorStr = 0,
|
||||
bool Fast = false);
|
||||
unsigned OptLevel = 3);
|
||||
|
||||
/// create - This is the factory method for creating an execution engine which
|
||||
/// is appropriate for the current machine. This takes ownership of the
|
||||
@ -127,7 +127,7 @@ public:
|
||||
static ExecutionEngine *createJIT(ModuleProvider *MP,
|
||||
std::string *ErrorStr = 0,
|
||||
JITMemoryManager *JMM = 0,
|
||||
bool Fast = false);
|
||||
unsigned OptLevel = 3);
|
||||
|
||||
|
||||
|
||||
|
@ -383,7 +383,7 @@ int ExecutionEngine::runFunctionAsMain(Function *Fn,
|
||||
ExecutionEngine *ExecutionEngine::create(ModuleProvider *MP,
|
||||
bool ForceInterpreter,
|
||||
std::string *ErrorStr,
|
||||
bool Fast) {
|
||||
unsigned OptLevel) {
|
||||
ExecutionEngine *EE = 0;
|
||||
|
||||
// Make sure we can resolve symbols in the program as well. The zero arg
|
||||
@ -393,11 +393,11 @@ ExecutionEngine *ExecutionEngine::create(ModuleProvider *MP,
|
||||
|
||||
// Unless the interpreter was explicitly selected, try making a JIT.
|
||||
if (!ForceInterpreter && JITCtor)
|
||||
EE = JITCtor(MP, ErrorStr, Fast);
|
||||
EE = JITCtor(MP, ErrorStr, OptLevel);
|
||||
|
||||
// If we can't make a JIT, make an interpreter instead.
|
||||
if (EE == 0 && InterpCtor)
|
||||
EE = InterpCtor(MP, ErrorStr, Fast);
|
||||
EE = InterpCtor(MP, ErrorStr, OptLevel);
|
||||
|
||||
return EE;
|
||||
}
|
||||
|
@ -114,11 +114,11 @@ int LLVMCreateInterpreter(LLVMExecutionEngineRef *OutInterp,
|
||||
|
||||
int LLVMCreateJITCompiler(LLVMExecutionEngineRef *OutJIT,
|
||||
LLVMModuleProviderRef MP,
|
||||
int Fast,
|
||||
unsigned OptLevel,
|
||||
char **OutError) {
|
||||
std::string Error;
|
||||
if (ExecutionEngine *JIT = ExecutionEngine::createJIT(unwrap(MP), &Error, 0,
|
||||
Fast != 0)) {
|
||||
OptLevel)) {
|
||||
*OutJIT = wrap(JIT);
|
||||
return 0;
|
||||
}
|
||||
|
@ -37,7 +37,7 @@ namespace llvm {
|
||||
/// create - Create a new interpreter object. This can never fail.
|
||||
///
|
||||
ExecutionEngine *Interpreter::create(ModuleProvider *MP, std::string* ErrStr,
|
||||
bool Fast /*unused*/) {
|
||||
unsigned OptLevel /*unused*/) {
|
||||
// Tell this ModuleProvide to materialize and release the module
|
||||
if (!MP->materializeModule(ErrStr))
|
||||
// We got an error, just return 0
|
||||
|
@ -108,7 +108,7 @@ public:
|
||||
/// create - Create an interpreter ExecutionEngine. This can never fail.
|
||||
///
|
||||
static ExecutionEngine *create(ModuleProvider *M, std::string *ErrorStr = 0,
|
||||
bool Fast /*unused*/ = 0);
|
||||
unsigned OptLevel /*unused*/ = 3);
|
||||
|
||||
/// run - Start execution with the specified function and arguments.
|
||||
///
|
||||
|
@ -196,8 +196,8 @@ void DarwinRegisterFrame(void* FrameBegin) {
|
||||
ExecutionEngine *ExecutionEngine::createJIT(ModuleProvider *MP,
|
||||
std::string *ErrorStr,
|
||||
JITMemoryManager *JMM,
|
||||
bool Fast) {
|
||||
ExecutionEngine *EE = JIT::createJIT(MP, ErrorStr, JMM, Fast);
|
||||
unsigned OptLevel) {
|
||||
ExecutionEngine *EE = JIT::createJIT(MP, ErrorStr, JMM, OptLevel);
|
||||
if (!EE) return 0;
|
||||
|
||||
// Make sure we can resolve symbols in the program as well. The zero arg
|
||||
@ -207,7 +207,7 @@ ExecutionEngine *ExecutionEngine::createJIT(ModuleProvider *MP,
|
||||
}
|
||||
|
||||
JIT::JIT(ModuleProvider *MP, TargetMachine &tm, TargetJITInfo &tji,
|
||||
JITMemoryManager *JMM, bool Fast)
|
||||
JITMemoryManager *JMM, unsigned OptLevel)
|
||||
: ExecutionEngine(MP), TM(tm), TJI(tji) {
|
||||
setTargetData(TM.getTargetData());
|
||||
|
||||
@ -223,7 +223,7 @@ JIT::JIT(ModuleProvider *MP, TargetMachine &tm, TargetJITInfo &tji,
|
||||
|
||||
// Turn the machine code intermediate representation into bytes in memory that
|
||||
// may be executed.
|
||||
if (TM.addPassesToEmitMachineCode(PM, *MCE, Fast)) {
|
||||
if (TM.addPassesToEmitMachineCode(PM, *MCE, OptLevel)) {
|
||||
cerr << "Target does not support machine code emission!\n";
|
||||
abort();
|
||||
}
|
||||
@ -272,7 +272,7 @@ void JIT::addModuleProvider(ModuleProvider *MP) {
|
||||
|
||||
// Turn the machine code intermediate representation into bytes in memory
|
||||
// that may be executed.
|
||||
if (TM.addPassesToEmitMachineCode(PM, *MCE, false /*fast*/)) {
|
||||
if (TM.addPassesToEmitMachineCode(PM, *MCE, 3 /* OptLevel */)) {
|
||||
cerr << "Target does not support machine code emission!\n";
|
||||
abort();
|
||||
}
|
||||
@ -305,7 +305,7 @@ Module *JIT::removeModuleProvider(ModuleProvider *MP, std::string *E) {
|
||||
|
||||
// Turn the machine code intermediate representation into bytes in memory
|
||||
// that may be executed.
|
||||
if (TM.addPassesToEmitMachineCode(PM, *MCE, false /*fast*/)) {
|
||||
if (TM.addPassesToEmitMachineCode(PM, *MCE, 3 /* OptLevel */)) {
|
||||
cerr << "Target does not support machine code emission!\n";
|
||||
abort();
|
||||
}
|
||||
@ -337,7 +337,7 @@ void JIT::deleteModuleProvider(ModuleProvider *MP, std::string *E) {
|
||||
|
||||
// Turn the machine code intermediate representation into bytes in memory
|
||||
// that may be executed.
|
||||
if (TM.addPassesToEmitMachineCode(PM, *MCE, false /*fast*/)) {
|
||||
if (TM.addPassesToEmitMachineCode(PM, *MCE, 3 /* OptLevel */)) {
|
||||
cerr << "Target does not support machine code emission!\n";
|
||||
abort();
|
||||
}
|
||||
|
@ -55,7 +55,7 @@ class JIT : public ExecutionEngine {
|
||||
JITState *jitstate;
|
||||
|
||||
JIT(ModuleProvider *MP, TargetMachine &tm, TargetJITInfo &tji,
|
||||
JITMemoryManager *JMM, bool Fast);
|
||||
JITMemoryManager *JMM, unsigned OptLevel);
|
||||
public:
|
||||
~JIT();
|
||||
|
||||
@ -71,8 +71,8 @@ public:
|
||||
/// for the current target. Otherwise, return null.
|
||||
///
|
||||
static ExecutionEngine *create(ModuleProvider *MP, std::string *Err,
|
||||
bool Fast = false) {
|
||||
return createJIT(MP, Err, 0, Fast);
|
||||
unsigned OptLevel = 3) {
|
||||
return createJIT(MP, Err, 0, OptLevel);
|
||||
}
|
||||
|
||||
virtual void addModuleProvider(ModuleProvider *MP);
|
||||
@ -148,7 +148,7 @@ public:
|
||||
MachineCodeEmitter *getCodeEmitter() const { return MCE; }
|
||||
|
||||
static ExecutionEngine *createJIT(ModuleProvider *MP, std::string *Err,
|
||||
JITMemoryManager *JMM, bool Fast);
|
||||
JITMemoryManager *JMM, unsigned OptLevel);
|
||||
|
||||
private:
|
||||
static MachineCodeEmitter *createEmitter(JIT &J, JITMemoryManager *JMM);
|
||||
|
@ -42,7 +42,7 @@ MAttrs("mattr",
|
||||
/// available for the current target. Otherwise, return null.
|
||||
///
|
||||
ExecutionEngine *JIT::createJIT(ModuleProvider *MP, std::string *ErrorStr,
|
||||
JITMemoryManager *JMM, bool Fast) {
|
||||
JITMemoryManager *JMM, unsigned OptLevel) {
|
||||
const TargetMachineRegistry::entry *TheArch = MArch;
|
||||
if (TheArch == 0) {
|
||||
std::string Error;
|
||||
@ -74,7 +74,7 @@ ExecutionEngine *JIT::createJIT(ModuleProvider *MP, std::string *ErrorStr,
|
||||
|
||||
// If the target supports JIT code generation, return a new JIT now.
|
||||
if (TargetJITInfo *TJ = Target->getJITInfo())
|
||||
return new JIT(MP, *Target, *TJ, JMM, Fast);
|
||||
return new JIT(MP, *Target, *TJ, JMM, OptLevel);
|
||||
|
||||
if (ErrorStr)
|
||||
*ErrorStr = "target does not support JIT code generation";
|
||||
|
Loading…
Reference in New Issue
Block a user