Browse Source

Prepare for LLVM 12.0.1 compatibility

gingerBill 3 years ago
parent
commit
e3359a2639
2 changed files with 37 additions and 23 deletions
  1. 23 15
      src/llvm_backend_general.cpp
  2. 14 8
      src/llvm_backend_opt.cpp

+ 23 - 15
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) {

+ 14 - 8
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);