diff options
| author | Evan Cheng <evan.cheng@apple.com> | 2008-08-08 08:11:34 +0000 | 
|---|---|---|
| committer | Evan Cheng <evan.cheng@apple.com> | 2008-08-08 08:11:34 +0000 | 
| commit | 502f20b17ede40de84503010b7699b328a4f2867 (patch) | |
| tree | 5c2ccb21d8acceb0846fb0f5e0b162509310cb01 /lib/ExecutionEngine | |
| parent | 381cb07544a2bc119e39969d7d508a6247773e1c (diff) | |
| download | external_llvm-502f20b17ede40de84503010b7699b328a4f2867.zip external_llvm-502f20b17ede40de84503010b7699b328a4f2867.tar.gz external_llvm-502f20b17ede40de84503010b7699b328a4f2867.tar.bz2  | |
Add new parameter Fast to createJIT to enable the fast codegen path.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@54523 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/ExecutionEngine')
| -rw-r--r-- | lib/ExecutionEngine/ExecutionEngine.cpp | 7 | ||||
| -rw-r--r-- | lib/ExecutionEngine/ExecutionEngineBindings.cpp | 6 | ||||
| -rw-r--r-- | lib/ExecutionEngine/Interpreter/Interpreter.cpp | 3 | ||||
| -rw-r--r-- | lib/ExecutionEngine/Interpreter/Interpreter.h | 3 | ||||
| -rw-r--r-- | lib/ExecutionEngine/JIT/JIT.cpp | 9 | ||||
| -rw-r--r-- | lib/ExecutionEngine/JIT/JIT.h | 9 | ||||
| -rw-r--r-- | lib/ExecutionEngine/JIT/TargetSelect.cpp | 4 | 
7 files changed, 24 insertions, 17 deletions
diff --git a/lib/ExecutionEngine/ExecutionEngine.cpp b/lib/ExecutionEngine/ExecutionEngine.cpp index b3dfe01..aae0cf7 100644 --- a/lib/ExecutionEngine/ExecutionEngine.cpp +++ b/lib/ExecutionEngine/ExecutionEngine.cpp @@ -345,7 +345,8 @@ int ExecutionEngine::runFunctionAsMain(Function *Fn,  ///  ExecutionEngine *ExecutionEngine::create(ModuleProvider *MP,                                           bool ForceInterpreter, -                                         std::string *ErrorStr) { +                                         std::string *ErrorStr, +                                         bool Fast) {    ExecutionEngine *EE = 0;    // Make sure we can resolve symbols in the program as well. The zero arg @@ -355,11 +356,11 @@ ExecutionEngine *ExecutionEngine::create(ModuleProvider *MP,    // Unless the interpreter was explicitly selected, try making a JIT.    if (!ForceInterpreter && JITCtor) -    EE = JITCtor(MP, ErrorStr); +    EE = JITCtor(MP, ErrorStr, Fast);    // If we can't make a JIT, make an interpreter instead.    if (EE == 0 && InterpCtor) -    EE = InterpCtor(MP, ErrorStr); +    EE = InterpCtor(MP, ErrorStr, Fast);    return EE;  } diff --git a/lib/ExecutionEngine/ExecutionEngineBindings.cpp b/lib/ExecutionEngine/ExecutionEngineBindings.cpp index 54340fb..5ceeb90 100644 --- a/lib/ExecutionEngine/ExecutionEngineBindings.cpp +++ b/lib/ExecutionEngine/ExecutionEngineBindings.cpp @@ -114,9 +114,11 @@ int LLVMCreateInterpreter(LLVMExecutionEngineRef *OutInterp,  int LLVMCreateJITCompiler(LLVMExecutionEngineRef *OutJIT,                            LLVMModuleProviderRef MP, -                          char **OutError) { +                          char **OutError, +                          bool Fast = false) {    std::string Error; -  if (ExecutionEngine *JIT = ExecutionEngine::createJIT(unwrap(MP), &Error)) { +  if (ExecutionEngine *JIT = ExecutionEngine::createJIT(unwrap(MP), &Error, 0, +                                                        Fast)) {      *OutJIT = wrap(JIT);      return 0;    } diff --git a/lib/ExecutionEngine/Interpreter/Interpreter.cpp b/lib/ExecutionEngine/Interpreter/Interpreter.cpp index 4234bd9..ac0ee3f 100644 --- a/lib/ExecutionEngine/Interpreter/Interpreter.cpp +++ b/lib/ExecutionEngine/Interpreter/Interpreter.cpp @@ -36,7 +36,8 @@ namespace llvm {  /// create - Create a new interpreter object.  This can never fail.  /// -ExecutionEngine *Interpreter::create(ModuleProvider *MP, std::string* ErrStr) { +ExecutionEngine *Interpreter::create(ModuleProvider *MP, std::string* ErrStr, +                                     bool Fast /*unused*/) {    // Tell this ModuleProvide to materialize and release the module    if (!MP->materializeModule(ErrStr))      // We got an error, just return 0 diff --git a/lib/ExecutionEngine/Interpreter/Interpreter.h b/lib/ExecutionEngine/Interpreter/Interpreter.h index 02edaa0..fc7da18 100644 --- a/lib/ExecutionEngine/Interpreter/Interpreter.h +++ b/lib/ExecutionEngine/Interpreter/Interpreter.h @@ -108,7 +108,8 @@ public:    /// create - Create an interpreter ExecutionEngine. This can never fail.    /// -  static ExecutionEngine *create(ModuleProvider *M, std::string *ErrorStr = 0); +  static ExecutionEngine *create(ModuleProvider *M, std::string *ErrorStr = 0, +                                 bool Fast /*unused*/ = 0);    /// run - Start execution with the specified function and arguments.    /// diff --git a/lib/ExecutionEngine/JIT/JIT.cpp b/lib/ExecutionEngine/JIT/JIT.cpp index d4f190b..af8fd8f 100644 --- a/lib/ExecutionEngine/JIT/JIT.cpp +++ b/lib/ExecutionEngine/JIT/JIT.cpp @@ -73,8 +73,9 @@ extern "C" void __register_frame(void*);  /// of the module provider.  ExecutionEngine *ExecutionEngine::createJIT(ModuleProvider *MP,                                              std::string *ErrorStr, -                                            JITMemoryManager *JMM) { -  ExecutionEngine *EE = JIT::createJIT(MP, ErrorStr, JMM); +                                            JITMemoryManager *JMM, +                                            bool Fast) { +  ExecutionEngine *EE = JIT::createJIT(MP, ErrorStr, JMM, Fast);    if (!EE) return 0;    // Register routine for informing unwinding runtime about new EH frames @@ -89,7 +90,7 @@ ExecutionEngine *ExecutionEngine::createJIT(ModuleProvider *MP,  }  JIT::JIT(ModuleProvider *MP, TargetMachine &tm, TargetJITInfo &tji, -         JITMemoryManager *JMM) +         JITMemoryManager *JMM, bool Fast)    : ExecutionEngine(MP), TM(tm), TJI(tji) {    setTargetData(TM.getTargetData()); @@ -105,7 +106,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, false /*fast*/)) { +  if (TM.addPassesToEmitMachineCode(PM, *MCE, Fast)) {      cerr << "Target does not support machine code emission!\n";      abort();    } diff --git a/lib/ExecutionEngine/JIT/JIT.h b/lib/ExecutionEngine/JIT/JIT.h index 6e6b8c2..41fa9bd 100644 --- a/lib/ExecutionEngine/JIT/JIT.h +++ b/lib/ExecutionEngine/JIT/JIT.h @@ -56,7 +56,7 @@ class JIT : public ExecutionEngine {    JITState *jitstate;    JIT(ModuleProvider *MP, TargetMachine &tm, TargetJITInfo &tji,  -      JITMemoryManager *JMM); +      JITMemoryManager *JMM, bool Fast);  public:    ~JIT(); @@ -71,8 +71,9 @@ public:    /// create - Create an return a new JIT compiler if there is one available    /// for the current target.  Otherwise, return null.    /// -  static ExecutionEngine *create(ModuleProvider *MP, std::string *Err) { -    return createJIT(MP, Err, 0); +  static ExecutionEngine *create(ModuleProvider *MP, std::string *Err, +                                 bool Fast = false) { +    return createJIT(MP, Err, 0, Fast);    }    virtual void addModuleProvider(ModuleProvider *MP); @@ -128,7 +129,7 @@ public:    MachineCodeEmitter *getCodeEmitter() const { return MCE; }    static ExecutionEngine *createJIT(ModuleProvider *MP, std::string *Err, -                                    JITMemoryManager *JMM); +                                    JITMemoryManager *JMM, bool Fast);  private:    static MachineCodeEmitter *createEmitter(JIT &J, JITMemoryManager *JMM); diff --git a/lib/ExecutionEngine/JIT/TargetSelect.cpp b/lib/ExecutionEngine/JIT/TargetSelect.cpp index 0654f34..5402085 100644 --- a/lib/ExecutionEngine/JIT/TargetSelect.cpp +++ b/lib/ExecutionEngine/JIT/TargetSelect.cpp @@ -41,7 +41,7 @@ MAttrs("mattr",  /// available for the current target.  Otherwise, return null.  ///  ExecutionEngine *JIT::createJIT(ModuleProvider *MP, std::string *ErrorStr, -                                JITMemoryManager *JMM) { +                                JITMemoryManager *JMM, bool Fast) {    const TargetMachineRegistry::entry *TheArch = MArch;    if (TheArch == 0) {      std::string Error; @@ -73,7 +73,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); +    return new JIT(MP, *Target, *TJ, JMM, Fast);    if (ErrorStr)      *ErrorStr = "target does not support JIT code generation";  | 
