From 4552aea992f75ab21bfeb2c0124c9b148f92f512 Mon Sep 17 00:00:00 2001 From: Quinton Miller Date: Wed, 5 Feb 2025 03:31:40 +0800 Subject: [PATCH] Support LLVM 20 --- src/llvm/enums.cr | 7 ++++++- src/llvm/ext/llvm-versions.txt | 2 +- src/llvm/function_collection.cr | 8 +++++++- src/llvm/global_collection.cr | 8 +++++++- src/llvm/lib_llvm.cr | 1 + src/llvm/lib_llvm/core.cr | 12 ++++++++++-- 6 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/llvm/enums.cr b/src/llvm/enums.cr index ac23fa711560..7fb7c59b60df 100644 --- a/src/llvm/enums.cr +++ b/src/llvm/enums.cr @@ -249,7 +249,12 @@ module LLVM Pointer Vector Metadata - X86_MMX + X86_MMX # deleted in LLVM 20 + Token + ScalableVector + BFloat + X86_AMX + TargetExt end end diff --git a/src/llvm/ext/llvm-versions.txt b/src/llvm/ext/llvm-versions.txt index 6f4d3d4816d0..a5d4cfac2515 100644 --- a/src/llvm/ext/llvm-versions.txt +++ b/src/llvm/ext/llvm-versions.txt @@ -1 +1 @@ -19.1 18.1 17.0 16.0 15.0 14.0 13.0 12.0 11.1 11.0 10.0 9.0 8.0 +20.1 19.1 18.1 17.0 16.0 15.0 14.0 13.0 12.0 11.1 11.0 10.0 9.0 8.0 diff --git a/src/llvm/function_collection.cr b/src/llvm/function_collection.cr index 62e2bd2e6fc2..d2fdb75a97a1 100644 --- a/src/llvm/function_collection.cr +++ b/src/llvm/function_collection.cr @@ -30,7 +30,13 @@ struct LLVM::FunctionCollection end def []?(name) - func = LibLLVM.get_named_function(@mod, name) + func = + {% if LibLLVM::IS_LT_200 %} + LibLLVM.get_named_function(@mod, name) + {% else %} + LibLLVM.get_named_function_with_length(@mod, name, name.bytesize) + {% end %} + func ? Function.new(func) : nil end diff --git a/src/llvm/global_collection.cr b/src/llvm/global_collection.cr index 06d27a98de5e..7b214aed34af 100644 --- a/src/llvm/global_collection.cr +++ b/src/llvm/global_collection.cr @@ -9,7 +9,13 @@ struct LLVM::GlobalCollection end def []?(name) - global = LibLLVM.get_named_global(@mod, name) + global = + {% if LibLLVM::IS_LT_200 %} + LibLLVM.get_named_global(@mod, name) + {% else %} + LibLLVM.get_named_global_with_length(@mod, name, name.bytesize) + {% end %} + global ? Value.new(global) : nil end diff --git a/src/llvm/lib_llvm.cr b/src/llvm/lib_llvm.cr index 1349d5bf6a91..d12f00ba862a 100644 --- a/src/llvm/lib_llvm.cr +++ b/src/llvm/lib_llvm.cr @@ -71,6 +71,7 @@ IS_LT_170 = {{compare_versions(LibLLVM::VERSION, "17.0.0") < 0}} IS_LT_180 = {{compare_versions(LibLLVM::VERSION, "18.0.0") < 0}} IS_LT_190 = {{compare_versions(LibLLVM::VERSION, "19.0.0") < 0}} + IS_LT_200 = {{compare_versions(LibLLVM::VERSION, "20.0.0") < 0}} end {% end %} diff --git a/src/llvm/lib_llvm/core.cr b/src/llvm/lib_llvm/core.cr index ef7b8f10b567..1c5a580e6c5b 100644 --- a/src/llvm/lib_llvm/core.cr +++ b/src/llvm/lib_llvm/core.cr @@ -50,7 +50,11 @@ lib LibLLVM fun get_module_context = LLVMGetModuleContext(m : ModuleRef) : ContextRef fun add_function = LLVMAddFunction(m : ModuleRef, name : Char*, function_ty : TypeRef) : ValueRef - fun get_named_function = LLVMGetNamedFunction(m : ModuleRef, name : Char*) : ValueRef + {% if LibLLVM::IS_LT_200 %} + fun get_named_function = LLVMGetNamedFunction(m : ModuleRef, name : Char*) : ValueRef + {% else %} + fun get_named_function_with_length = LLVMGetNamedFunctionWithLength(m : ModuleRef, name : Char*, length : SizeT) : ValueRef + {% end %} fun get_first_function = LLVMGetFirstFunction(m : ModuleRef) : ValueRef fun get_next_function = LLVMGetNextFunction(fn : ValueRef) : ValueRef @@ -144,7 +148,11 @@ lib LibLLVM fun set_alignment = LLVMSetAlignment(v : ValueRef, bytes : UInt) fun add_global = LLVMAddGlobal(m : ModuleRef, ty : TypeRef, name : Char*) : ValueRef - fun get_named_global = LLVMGetNamedGlobal(m : ModuleRef, name : Char*) : ValueRef + {% if LibLLVM::IS_LT_200 %} + fun get_named_global = LLVMGetNamedGlobal(m : ModuleRef, name : Char*) : ValueRef + {% else %} + fun get_named_global_with_length = LLVMGetNamedGlobalWithLength(m : ModuleRef, name : Char*, length : SizeT) : ValueRef + {% end %} fun get_initializer = LLVMGetInitializer(global_var : ValueRef) : ValueRef fun set_initializer = LLVMSetInitializer(global_var : ValueRef, constant_val : ValueRef) fun is_thread_local = LLVMIsThreadLocal(global_var : ValueRef) : Bool