Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include "llvm-c/Core.h"
- #include "llvm-c/ExecutionEngine.h"
- int main() {
- LLVMContextRef llvmCtx = LLVMContextCreate();
- LLVMBuilderRef builder = LLVMCreateBuilderInContext(llvmCtx);
- LLVMModuleRef m1 = LLVMModuleCreateWithNameInContext("m1", llvmCtx);
- LLVMInitializeX86Target();
- LLVMInitializeX86TargetInfo();
- LLVMInitializeX86TargetMC();
- LLVMInitializeX86AsmPrinter();
- LLVMLinkInMCJIT();
- char* errorPtr;
- LLVMExecutionEngineRef jit;
- if (LLVMCreateMCJITCompilerForModule(&jit, m1, NULL, 0, &errorPtr)) {
- printf("%s\n", errorPtr);
- LLVMDisposeMessage(errorPtr);
- return 1;
- }
- LLVMModuleRef m2 = LLVMModuleCreateWithNameInContext("m2", llvmCtx);
- LLVMAddModule(jit, m2);
- LLVMTypeRef type = LLVMInt32TypeInContext(llvmCtx);
- LLVMTypeRef funType = LLVMFunctionType(type, NULL, 0, 0);
- LLVMValueRef fun = LLVMAddFunction(m2, "foo", funType);
- LLVMBasicBlockRef bodyBB = LLVMAppendBasicBlockInContext(llvmCtx, fun, "");
- LLVMPositionBuilderAtEnd(builder, bodyBB);
- LLVMBuildRet(builder, LLVMConstInt(type, 42, 0));
- LLVMDumpModule(m1);
- LLVMDumpModule(m2);
- LLVMGenericValueRef result = LLVMRunFunction(jit, fun, 0, NULL);
- printf("%d\n", LLVMGenericValueToInt(result, 0));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement