mirror of
https://github.com/odin-lang/Odin.git
synced 2026-04-19 04:50:29 +00:00
Prepare for LLVM 12.0.1 compatibility
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user