bool codegen_llvm_init() { LLVMLinkInMCJIT(); LLVMInitializeNativeTarget(); LLVMInitializeAllTargets(); LLVMInitializeAllTargetMCs(); LLVMInitializeAllTargetInfos(); LLVMInitializeAllAsmPrinters(); LLVMInitializeAllAsmParsers(); LLVMEnablePrettyStackTrace(); LLVMInstallFatalErrorHandler(fatal_error); LLVMPassRegistryRef passreg = LLVMGetGlobalPassRegistry(); LLVMInitializeCore(passreg); LLVMInitializeTransformUtils(passreg); LLVMInitializeScalarOpts(passreg); LLVMInitializeObjCARCOpts(passreg); LLVMInitializeVectorization(passreg); LLVMInitializeInstCombine(passreg); LLVMInitializeIPO(passreg); LLVMInitializeInstrumentation(passreg); LLVMInitializeAnalysis(passreg); LLVMInitializeIPA(passreg); LLVMInitializeCodeGen(passreg); LLVMInitializeTarget(passreg); return true; }
bool codegen_init(pass_opt_t* opt) { LLVMInitializeNativeTarget(); LLVMInitializeAllTargets(); LLVMInitializeAllTargetMCs(); LLVMInitializeAllTargetInfos(); LLVMInitializeAllAsmPrinters(); LLVMInitializeAllAsmParsers(); LLVMEnablePrettyStackTrace(); LLVMInstallFatalErrorHandler(fatal_error); LLVMPassRegistryRef passreg = LLVMGetGlobalPassRegistry(); LLVMInitializeCore(passreg); LLVMInitializeTransformUtils(passreg); LLVMInitializeScalarOpts(passreg); LLVMInitializeObjCARCOpts(passreg); LLVMInitializeVectorization(passreg); LLVMInitializeInstCombine(passreg); LLVMInitializeIPO(passreg); LLVMInitializeInstrumentation(passreg); LLVMInitializeAnalysis(passreg); LLVMInitializeIPA(passreg); LLVMInitializeCodeGen(passreg); LLVMInitializeTarget(passreg); // Default triple, cpu and features. if(opt->triple != NULL) { opt->triple = LLVMCreateMessage(opt->triple); } else { #ifdef PLATFORM_IS_MACOSX // This is to prevent XCode 7+ from claiming OSX 14.5 is required. opt->triple = LLVMCreateMessage("x86_64-apple-macosx"); #else opt->triple = LLVMGetDefaultTargetTriple(); #endif } if(opt->cpu != NULL) opt->cpu = LLVMCreateMessage(opt->cpu); else opt->cpu = LLVMGetHostCPUName(); if(opt->features != NULL) opt->features = LLVMCreateMessage(opt->features); else opt->features = LLVMCreateMessage(""); return true; }
extern "C" JSC::LLVMAPI* initializeAndGetJSCLLVMAPI(void (*callback)(const char*, ...)) { g_llvmTrapCallback = callback; LLVMInstallFatalErrorHandler(llvmCrash); if (!LLVMStartMultithreaded()) callback("Could not start LLVM multithreading"); LLVMLinkInMCJIT(); // You think you want to call LLVMInitializeNativeTarget()? Think again. This presumes that // LLVM was ./configured correctly, which won't be the case in cross-compilation situations. #if CPU(X86_64) LLVMInitializeX86TargetInfo(); LLVMInitializeX86Target(); LLVMInitializeX86TargetMC(); LLVMInitializeX86AsmPrinter(); LLVMInitializeX86Disassembler(); #elif CPU(ARM64) LLVMInitializeARM64TargetInfo(); LLVMInitializeARM64Target(); LLVMInitializeARM64TargetMC(); LLVMInitializeARM64AsmPrinter(); LLVMInitializeARM64Disassembler(); #else UNREACHABLE_FOR_PLATFORM(); #endif const char* args[] = { "llvmForJSC.dylib", "-enable-stackmap-liveness=true", "-enable-patchpoint-liveness=true" }; llvm::cl::ParseCommandLineOptions(sizeof(args) / sizeof(const char*), args); JSC::LLVMAPI* result = new JSC::LLVMAPI; #define LLVM_API_FUNCTION_ASSIGNMENT(returnType, name, signature) \ result->name = LLVM##name; FOR_EACH_LLVM_API_FUNCTION(LLVM_API_FUNCTION_ASSIGNMENT); #undef LLVM_API_FUNCTION_ASSIGNMENT return result; }
bool codegen_init(pass_opt_t* opt) { LLVMInitializeNativeTarget(); LLVMInitializeAllTargets(); LLVMInitializeAllTargetMCs(); LLVMInitializeAllAsmPrinters(); LLVMInitializeAllAsmParsers(); LLVMEnablePrettyStackTrace(); LLVMInstallFatalErrorHandler(fatal_error); LLVMPassRegistryRef passreg = LLVMGetGlobalPassRegistry(); LLVMInitializeCore(passreg); LLVMInitializeTransformUtils(passreg); LLVMInitializeScalarOpts(passreg); LLVMInitializeObjCARCOpts(passreg); LLVMInitializeVectorization(passreg); LLVMInitializeInstCombine(passreg); LLVMInitializeIPO(passreg); LLVMInitializeInstrumentation(passreg); LLVMInitializeAnalysis(passreg); LLVMInitializeIPA(passreg); LLVMInitializeCodeGen(passreg); LLVMInitializeTarget(passreg); // Default triple, cpu and features. if(opt->triple != NULL) opt->triple = LLVMCreateMessage(opt->triple); else opt->triple = LLVMGetDefaultTargetTriple(); if(opt->cpu != NULL) opt->cpu = LLVMCreateMessage(opt->cpu); else opt->cpu = LLVMGetHostCPUName(); if(opt->features != NULL) opt->features = LLVMCreateMessage(opt->features); else opt->features = LLVMCreateMessage(""); return true; }
extern "C" JSC::LLVMAPI* initializeAndGetJSCLLVMAPI(void (*callback)(const char*, ...)) { g_llvmTrapCallback = callback; LLVMInstallFatalErrorHandler(llvmCrash); if (!LLVMStartMultithreaded()) callback("Could not start LLVM multithreading"); LLVMLinkInMCJIT(); LLVMInitializeNativeTarget(); LLVMInitializeX86AsmPrinter(); LLVMInitializeX86Disassembler(); JSC::LLVMAPI* result = new JSC::LLVMAPI; #define LLVM_API_FUNCTION_ASSIGNMENT(returnType, name, signature) \ result->name = LLVM##name; FOR_EACH_LLVM_API_FUNCTION(LLVM_API_FUNCTION_ASSIGNMENT); #undef LLVM_API_FUNCTION_ASSIGNMENT return result; }