コード例 #1
0
/* llmodule -> int -> ExecutionEngine.t */
CAMLprim LLVMExecutionEngineRef
llvm_ee_create_jit(LLVMModuleRef M, value OptLevel) {
  LLVMExecutionEngineRef JIT;
  char *Error;
  if (LLVMCreateJITCompilerForModule(&JIT, M, Int_val(OptLevel), &Error))
    llvm_raise(*caml_named_value("Llvm_executionengine.Error"), Error);
  return JIT;
}
コード例 #2
0
/* llmodule -> int -> ExecutionEngine.t */
CAMLprim LLVMExecutionEngineRef
llvm_ee_create_jit(LLVMModuleRef M, value OptLevel) {
  LLVMExecutionEngineRef JIT;
  char *Error;
  if (LLVMCreateJITCompilerForModule(&JIT, M, Int_val(OptLevel), &Error))
    llvm_raise(llvm_ee_error_exn, Error);
  return JIT;
}
コード例 #3
0
ファイル: ExecutionEngine_wrap.c プロジェクト: hardvain/jllvm
SWIGEXPORT jint JNICALL Java_org_jllvm_bindings_ExecutionEngineJNI_LLVMCreateJITCompilerForModule(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jlong jarg3, jlong jarg4) {
  jint jresult = 0 ;
  LLVMExecutionEngineRef *arg1 = (LLVMExecutionEngineRef *) 0 ;
  LLVMModuleRef arg2 = (LLVMModuleRef) 0 ;
  unsigned int arg3 ;
  char **arg4 = (char **) 0 ;
  LLVMBool result;
  
  (void)jenv;
  (void)jcls;
  arg1 = *(LLVMExecutionEngineRef **)&jarg1; 
  arg2 = *(LLVMModuleRef *)&jarg2; 
  arg3 = (unsigned int)jarg3; 
  arg4 = *(char ***)&jarg4; 
  result = (LLVMBool)LLVMCreateJITCompilerForModule(arg1,arg2,arg3,arg4);
  jresult = (jint)result; 
  return jresult;
}
コード例 #4
0
ファイル: JIT.cpp プロジェクト: hoangt/tool_axe
void JITImpl::init()
{
  if (initialized)
    return;
  LLVMLinkInJIT();
  LLVMInitializeNativeTarget();
  LLVMMemoryBufferRef memBuffer =
    LLVMExtraCreateMemoryBufferWithPtr(instructionBitcode,
                                       instructionBitcodeSize);
  char *outMessage;
  if (LLVMParseBitcode(memBuffer, &module, &outMessage)) {
    std::cerr << "Error loading bitcode: " << outMessage << '\n';
    std::abort();
  }
  // TODO experiment with opt level.
  if (LLVMCreateJITCompilerForModule(&executionEngine, module, 1,
                                      &outMessage)) {
    std::cerr << "Error creating JIT compiler: " << outMessage << '\n';
    std::abort();
  }
  builder = LLVMCreateBuilder();
  LLVMValueRef callee = LLVMGetNamedFunction(module, "jitInstructionTemplate");
  assert(callee && "jitInstructionTemplate() not found in module");
  jitFunctionType = LLVMGetElementType(LLVMTypeOf(callee));
  functions.init(module);
  FPM = LLVMCreateFunctionPassManagerForModule(module);
  LLVMAddTargetData(LLVMGetExecutionEngineTargetData(executionEngine), FPM);
  LLVMAddBasicAliasAnalysisPass(FPM);
  LLVMAddJumpThreadingPass(FPM);
  LLVMAddGVNPass(FPM);
  LLVMAddJumpThreadingPass(FPM);
  LLVMAddCFGSimplificationPass(FPM);
  LLVMAddDeadStoreEliminationPass(FPM);
  LLVMAddInstructionCombiningPass(FPM);
  LLVMInitializeFunctionPassManager(FPM);
  if (DEBUG_JIT) {
    LLVMExtraRegisterJitDisassembler(executionEngine, LLVMGetTarget(module));
  }
  initialized = true;
}
コード例 #5
0
ファイル: core.c プロジェクト: wedesoft/aiscm
SCM llvm_compile_module(SCM scm_llvm, SCM scm_name)
{
  struct llvm_module_t *self = get_llvm(scm_llvm);
  if (self->engine != NULL)
    scm_misc_error("llvm-compile", "LLVM module already compiled", SCM_EOL);

  char *error = NULL;
  if (LLVMCreateJITCompilerForModule(&self->engine, self->module, 2, &error)) {
    SCM scm_error = scm_from_locale_string(error);
    LLVMDisposeMessage(error);
    scm_misc_error("llvm-compile", "Error initialising JIT engine: ~a", scm_list_1(scm_error));
  };

  LLVMPassManagerRef pass_manager = LLVMCreatePassManager();
  LLVMAddConstantPropagationPass(pass_manager);
  LLVMAddInstructionCombiningPass(pass_manager);
  LLVMAddPromoteMemoryToRegisterPass(pass_manager);
  LLVMAddGVNPass(pass_manager);
  LLVMAddCFGSimplificationPass(pass_manager);
  LLVMRunPassManager(pass_manager, self->module);
  LLVMDisposePassManager(pass_manager);

  return SCM_UNSPECIFIED;
}