diff options
| author | gingerBill <bill@gingerbill.org> | 2021-09-11 16:53:18 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2021-09-11 16:53:18 +0100 |
| commit | e3359a2639fdcba83d9ba7b43fefeaf1915f8f26 (patch) | |
| tree | ba8c2f022f0d2b6da4467ab82238e055c4652c5c /src | |
| parent | 344abf2cb2e9c1b27d6e786618aed633f72b89af (diff) | |
Prepare for LLVM 12.0.1 compatibility
Diffstat (limited to 'src')
| -rw-r--r-- | src/llvm_backend_general.cpp | 38 | ||||
| -rw-r--r-- | src/llvm_backend_opt.cpp | 22 |
2 files changed, 37 insertions, 23 deletions
diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp index 1bf3bab7c..113c9ba62 100644 --- a/src/llvm_backend_general.cpp +++ b/src/llvm_backend_general.cpp @@ -1968,24 +1968,32 @@ void lb_add_procedure_value(lbModule *m, lbProcedure *p) { LLVMAttributeRef lb_create_enum_attribute_with_type(LLVMContextRef ctx, char const *name, LLVMTypeRef type) { + unsigned kind = 0; String s = make_string_c(name); - // NOTE(2021-02-25, bill); All this attributes require a type associated with them - // and the current LLVM C API does not expose this functionality yet. - // It is better to ignore the attributes for the time being - if (s == "byval") { - // return nullptr; - } else if (s == "byref") { - return nullptr; - } else if (s == "preallocated") { - return nullptr; - } else if (s == "sret") { - // return nullptr; - } + #if (LLVM_VERSION_MAJOR > 12 || (LLVM_VERSION_MAJOR == 12 && (LLVM_VERSION_MINOR > 0 || LLVM_VERSION_PATCH >= 1))) + kind = LLVMGetEnumAttributeKindForName(name, s.len); + GB_ASSERT_MSG(kind != 0, "unknown attribute: %s", name); + return LLVMCreateTypeAttribute(ctx, kind, type); + #else + // NOTE(2021-02-25, bill); All this attributes require a type associated with them + // and the current LLVM C API does not expose this functionality yet. + // It is better to ignore the attributes for the time being + if (s == "byval") { + // return nullptr; + } else if (s == "byref") { + return nullptr; + } else if (s == "preallocated") { + return nullptr; + } else if (s == "sret") { + // return nullptr; + } + - unsigned kind = LLVMGetEnumAttributeKindForName(name, s.len); - GB_ASSERT_MSG(kind != 0, "unknown attribute: %s", name); - return LLVMCreateEnumAttribute(ctx, kind, 0); + kind = LLVMGetEnumAttributeKindForName(name, s.len); + GB_ASSERT_MSG(kind != 0, "unknown attribute: %s", name); + return LLVMCreateEnumAttribute(ctx, kind, 0); + #endif } LLVMAttributeRef lb_create_enum_attribute(LLVMContextRef ctx, char const *name, u64 value) { diff --git a/src/llvm_backend_opt.cpp b/src/llvm_backend_opt.cpp index 213005f8f..b3f1fbb95 100644 --- a/src/llvm_backend_opt.cpp +++ b/src/llvm_backend_opt.cpp @@ -21,13 +21,19 @@ void lb_add_must_preserve_predicate_pass(lbModule *m, LLVMPassManagerRef fpm, i3 } +#if LLVM_VERSION_MAJOR < 12 +#define LLVM_ADD_CONSTNAT_VALUE_PASS LLVMAddConstantPropagationPass +#else +#define LLVM_ADD_CONSTNAT_VALUE_PASS LLVMAddCorrelatedValuePropagationPass +#endif + void lb_basic_populate_function_pass_manager(LLVMPassManagerRef fpm) { LLVMAddPromoteMemoryToRegisterPass(fpm); LLVMAddMergedLoadStoreMotionPass(fpm); - LLVMAddConstantPropagationPass(fpm); + LLVM_ADD_CONSTNAT_VALUE_PASS(fpm); LLVMAddEarlyCSEPass(fpm); - LLVMAddConstantPropagationPass(fpm); + LLVM_ADD_CONSTNAT_VALUE_PASS(fpm); LLVMAddMergedLoadStoreMotionPass(fpm); LLVMAddPromoteMemoryToRegisterPass(fpm); LLVMAddCFGSimplificationPass(fpm); @@ -58,10 +64,10 @@ void lb_populate_function_pass_manager(lbModule *m, LLVMPassManagerRef fpm, bool LLVMAddMemCpyOptPass(fpm); LLVMAddPromoteMemoryToRegisterPass(fpm); LLVMAddMergedLoadStoreMotionPass(fpm); - LLVMAddConstantPropagationPass(fpm); + LLVM_ADD_CONSTNAT_VALUE_PASS(fpm); LLVMAddEarlyCSEPass(fpm); - LLVMAddConstantPropagationPass(fpm); + LLVM_ADD_CONSTNAT_VALUE_PASS(fpm); LLVMAddMergedLoadStoreMotionPass(fpm); LLVMAddPromoteMemoryToRegisterPass(fpm); LLVMAddCFGSimplificationPass(fpm); @@ -99,10 +105,10 @@ void lb_populate_function_pass_manager_specific(lbModule *m, LLVMPassManagerRef LLVMAddMemCpyOptPass(fpm); LLVMAddPromoteMemoryToRegisterPass(fpm); LLVMAddMergedLoadStoreMotionPass(fpm); - LLVMAddConstantPropagationPass(fpm); + LLVM_ADD_CONSTNAT_VALUE_PASS(fpm); LLVMAddEarlyCSEPass(fpm); - LLVMAddConstantPropagationPass(fpm); + LLVM_ADD_CONSTNAT_VALUE_PASS(fpm); LLVMAddMergedLoadStoreMotionPass(fpm); LLVMAddPromoteMemoryToRegisterPass(fpm); LLVMAddCFGSimplificationPass(fpm); @@ -159,7 +165,7 @@ void lb_add_function_simplifcation_passes(LLVMPassManagerRef mpm, i32 optimizati LLVMAddInstructionCombiningPass(mpm); LLVMAddJumpThreadingPass(mpm); - LLVMAddCorrelatedValuePropagationPass(mpm); + LLVM_ADD_CONSTNAT_VALUE_PASS(mpm); LLVMAddDeadStoreEliminationPass(mpm); LLVMAddLICMPass(mpm); @@ -225,7 +231,7 @@ void lb_populate_module_pass_manager(LLVMTargetMachineRef target_machine, LLVMPa LLVMAddInstructionCombiningPass(mpm); if (optimization_level >= 2) { LLVMAddEarlyCSEPass(mpm); - LLVMAddCorrelatedValuePropagationPass(mpm); + LLVM_ADD_CONSTNAT_VALUE_PASS(mpm); LLVMAddLICMPass(mpm); LLVMAddLoopUnswitchPass(mpm); LLVMAddCFGSimplificationPass(mpm); |