From 2747332723652b3915436a5b039123c5bc7545e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sat, 27 Mar 2021 05:34:16 -0400 Subject: [PATCH] amd: drop support for LLVM 9 This would be easy to support except that it doesn't support RDNA 2. Reviewed-by: Samuel Pitoiset Reviewed-by: Pierre-Eric Pelloux-Prayer Part-of: --- meson.build | 4 +--- src/amd/llvm/ac_llvm_helper.cpp | 12 ------------ src/amd/llvm/ac_llvm_util.c | 2 -- src/amd/llvm/ac_nir_to_llvm.c | 13 +------------ src/amd/vulkan/radv_device.c | 3 +-- src/gallium/drivers/radeonsi/si_get.c | 3 +-- 6 files changed, 4 insertions(+), 33 deletions(-) diff --git a/meson.build b/meson.build index 9188961d0f9..794d46fdbc8 100644 --- a/meson.build +++ b/meson.build @@ -1536,10 +1536,8 @@ if with_tests or with_gallium_softpipe llvm_modules += 'native' endif -if with_microsoft_clc +if with_microsoft_clc or with_amd_vk or with_gallium_radeonsi _llvm_version = '>= 10.0.0' -elif with_amd_vk or with_gallium_radeonsi - _llvm_version = '>= 9.0.0' elif with_gallium_opencl _llvm_version = '>= 8.0.0' elif with_gallium_swr diff --git a/src/amd/llvm/ac_llvm_helper.cpp b/src/amd/llvm/ac_llvm_helper.cpp index 0ab9517f431..0316e1d9f98 100644 --- a/src/amd/llvm/ac_llvm_helper.cpp +++ b/src/amd/llvm/ac_llvm_helper.cpp @@ -51,14 +51,8 @@ void ac_add_attr_dereferenceable(LLVMValueRef val, uint64_t bytes) void ac_add_attr_alignment(LLVMValueRef val, uint64_t bytes) { -#if LLVM_VERSION_MAJOR >= 10 llvm::Argument *A = llvm::unwrap(val); A->addAttr(llvm::Attribute::getWithAlignment(A->getContext(), llvm::Align(bytes))); -#else - /* Avoid unused parameter warnings. */ - (void)val; - (void)bytes; -#endif } bool ac_is_sgpr_param(LLVMValueRef arg) @@ -235,11 +229,7 @@ struct ac_compiler_passes *ac_create_llvm_passes(LLVMTargetMachineRef tm) llvm::TargetMachine *TM = reinterpret_cast(tm); if (TM->addPassesToEmitFile(p->passmgr, p->ostream, nullptr, -#if LLVM_VERSION_MAJOR >= 10 llvm::CGFT_ObjectFile)) { -#else - llvm::TargetMachine::CGFT_ObjectFile)) { -#endif fprintf(stderr, "amd: TargetMachine can't emit a file of this type!\n"); delete p; return NULL; @@ -309,11 +299,9 @@ LLVMValueRef ac_build_atomic_rmw(struct ac_llvm_context *ctx, LLVMAtomicRMWBinOp case LLVMAtomicRMWBinOpUMin: binop = llvm::AtomicRMWInst::UMin; break; -#if LLVM_VERSION_MAJOR >= 10 case LLVMAtomicRMWBinOpFAdd: binop = llvm::AtomicRMWInst::FAdd; break; -#endif default: unreachable("invalid LLVMAtomicRMWBinOp"); break; diff --git a/src/amd/llvm/ac_llvm_util.c b/src/amd/llvm/ac_llvm_util.c index b820a5577a3..54baa356238 100644 --- a/src/amd/llvm/ac_llvm_util.c +++ b/src/amd/llvm/ac_llvm_util.c @@ -67,10 +67,8 @@ static void ac_init_llvm_target(void) "mesa", "-simplifycfg-sink-common=false", "-global-isel-abort=2", -#if LLVM_VERSION_MAJOR >= 10 /* Atomic optimizations require LLVM 10.0 for gfx10 support. */ "-amdgpu-atomic-optimizations=true", -#endif #if LLVM_VERSION_MAJOR >= 11 /* This was disabled by default in: https://reviews.llvm.org/D77228 */ "-structurizecfg-skip-uniform-regions", diff --git a/src/amd/llvm/ac_nir_to_llvm.c b/src/amd/llvm/ac_nir_to_llvm.c index 823a931d98d..2309e015893 100644 --- a/src/amd/llvm/ac_nir_to_llvm.c +++ b/src/amd/llvm/ac_nir_to_llvm.c @@ -3013,11 +3013,9 @@ static LLVMValueRef visit_var_atomic(struct ac_nir_context *ctx, const nir_intri case nir_intrinsic_shared_atomic_exchange: op = LLVMAtomicRMWBinOpXchg; break; -#if LLVM_VERSION_MAJOR >= 10 case nir_intrinsic_shared_atomic_fadd: op = LLVMAtomicRMWBinOpFAdd; break; -#endif default: return NULL; } @@ -5038,17 +5036,8 @@ static void setup_constant_data(struct ac_nir_context *ctx, struct nir_shader *s LLVMValueRef data = LLVMConstStringInContext(ctx->ac.context, shader->constant_data, shader->constant_data_size, true); LLVMTypeRef type = LLVMArrayType(ctx->ac.i8, shader->constant_data_size); - - /* We want to put the constant data in the CONST address space so that - * we can use scalar loads. However, LLVM versions before 10 put these - * variables in the same section as the code, which is unacceptable - * for RadeonSI as it needs to relocate all the data sections after - * the code sections. See https://reviews.llvm.org/D65813. - */ - unsigned address_space = LLVM_VERSION_MAJOR < 10 ? AC_ADDR_SPACE_GLOBAL : AC_ADDR_SPACE_CONST; - LLVMValueRef global = - LLVMAddGlobalInAddressSpace(ctx->ac.module, type, "const_data", address_space); + LLVMAddGlobalInAddressSpace(ctx->ac.module, type, "const_data", AC_ADDR_SPACE_CONST); LLVMSetInitializer(global, data); LLVMSetGlobalConstant(global, true); diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c index ca05e17d33b..b9f0507f94e 100644 --- a/src/amd/vulkan/radv_device.c +++ b/src/amd/vulkan/radv_device.c @@ -1579,8 +1579,7 @@ radv_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, features->shaderBufferFloat64Atomics = true; features->shaderBufferFloat64AtomicAdd = false; features->shaderSharedFloat32Atomics = true; - features->shaderSharedFloat32AtomicAdd = pdevice->rad_info.chip_class >= GFX8 && - (!pdevice->use_llvm || LLVM_VERSION_MAJOR >= 10); + features->shaderSharedFloat32AtomicAdd = pdevice->rad_info.chip_class >= GFX8; features->shaderSharedFloat64Atomics = true; features->shaderSharedFloat64AtomicAdd = false; features->shaderImageFloat32Atomics = true; diff --git a/src/gallium/drivers/radeonsi/si_get.c b/src/gallium/drivers/radeonsi/si_get.c index 745cccc1dca..2924498b9e9 100644 --- a/src/gallium/drivers/radeonsi/si_get.c +++ b/src/gallium/drivers/radeonsi/si_get.c @@ -161,6 +161,7 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param) case PIPE_CAP_DEMOTE_TO_HELPER_INVOCATION: case PIPE_CAP_PREFER_REAL_BUFFER_IN_CONSTBUF0: case PIPE_CAP_COMPUTE_SHADER_DERIVATIVES: + case PIPE_CAP_TGSI_ATOMINC_WRAP: return 1; case PIPE_CAP_GLSL_ZERO_INIT: @@ -337,8 +338,6 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param) return sscreen->info.pci_dev; case PIPE_CAP_PCI_FUNCTION: return sscreen->info.pci_func; - case PIPE_CAP_TGSI_ATOMINC_WRAP: - return LLVM_VERSION_MAJOR >= 10; default: return u_pipe_screen_get_param_defaults(pscreen, param);