diff options
Diffstat (limited to 'lib/ExecutionEngine/MCJIT/MCJIT.cpp')
| -rw-r--r-- | lib/ExecutionEngine/MCJIT/MCJIT.cpp | 92 | 
1 files changed, 92 insertions, 0 deletions
diff --git a/lib/ExecutionEngine/MCJIT/MCJIT.cpp b/lib/ExecutionEngine/MCJIT/MCJIT.cpp new file mode 100644 index 000000000000..f1e9dab250bf --- /dev/null +++ b/lib/ExecutionEngine/MCJIT/MCJIT.cpp @@ -0,0 +1,92 @@ +//===-- JIT.cpp - MC-based Just-in-Time Compiler --------------------------===// +// +//                     The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "MCJIT.h" +#include "llvm/ExecutionEngine/GenericValue.h" +#include "llvm/ExecutionEngine/MCJIT.h" +#include "llvm/Support/ErrorHandling.h" +#include "llvm/Support/DynamicLibrary.h" + +using namespace llvm; + +namespace { + +static struct RegisterJIT { +  RegisterJIT() { MCJIT::Register(); } +} JITRegistrator; + +} + +extern "C" void LLVMLinkInMCJIT() { +} + +ExecutionEngine *MCJIT::createJIT(Module *M, +                                  std::string *ErrorStr, +                                  JITMemoryManager *JMM, +                                  CodeGenOpt::Level OptLevel, +                                  bool GVsWithCode, +                                  CodeModel::Model CMM, +                                  StringRef MArch, +                                  StringRef MCPU, +                                  const SmallVectorImpl<std::string>& MAttrs) { +  // Try to register the program as a source of symbols to resolve against. +  // +  // FIXME: Don't do this here. +  sys::DynamicLibrary::LoadLibraryPermanently(0, NULL); + +  // Pick a target either via -march or by guessing the native arch. +  // +  // FIXME: This should be lifted out of here, it isn't something which should +  // be part of the JIT policy, rather the burden for this selection should be +  // pushed to clients. +  TargetMachine *TM = MCJIT::selectTarget(M, MArch, MCPU, MAttrs, ErrorStr); +  if (!TM || (ErrorStr && ErrorStr->length() > 0)) return 0; +  TM->setCodeModel(CMM); + +  // If the target supports JIT code generation, create the JIT. +  if (TargetJITInfo *TJ = TM->getJITInfo()) +    return new MCJIT(M, *TM, *TJ, JMM, OptLevel, GVsWithCode); + +  if (ErrorStr) +    *ErrorStr = "target does not support JIT code generation"; +  return 0; +} + +MCJIT::MCJIT(Module *M, TargetMachine &tm, TargetJITInfo &tji, +             JITMemoryManager *JMM, CodeGenOpt::Level OptLevel, +             bool AllocateGVsWithCode) +  : ExecutionEngine(M) { +} + +MCJIT::~MCJIT() { +} + +void *MCJIT::getPointerToBasicBlock(BasicBlock *BB) { +  report_fatal_error("not yet implemented"); +  return 0; +} + +void *MCJIT::getPointerToFunction(Function *F) { +  report_fatal_error("not yet implemented"); +  return 0; +} + +void *MCJIT::recompileAndRelinkFunction(Function *F) { +  report_fatal_error("not yet implemented"); +} + +void MCJIT::freeMachineCodeForFunction(Function *F) { +  report_fatal_error("not yet implemented"); +} + +GenericValue MCJIT::runFunction(Function *F, +                                const std::vector<GenericValue> &ArgValues) { +  report_fatal_error("not yet implemented"); +  return GenericValue(); +}  | 
