From b878444c3a3819386697361a976b5df30a96cf1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sat, 27 Mar 2021 05:38:57 -0400 Subject: [PATCH] amd: drop support for LLVM 10 It doesn't support RDNA 2. Reviewed-by: Samuel Pitoiset Reviewed-by: Pierre-Eric Pelloux-Prayer Part-of: --- meson.build | 4 +++- src/amd/compiler/aco_print_asm.cpp | 6 ------ src/amd/compiler/tests/helpers.cpp | 4 +--- src/amd/llvm/ac_llvm_build.c | 12 +++++------- src/amd/llvm/ac_llvm_util.c | 5 +---- src/amd/vulkan/radv_device.c | 6 +++--- src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c | 6 ------ src/gallium/drivers/radeonsi/si_pipe.c | 10 ---------- 8 files changed, 13 insertions(+), 40 deletions(-) diff --git a/meson.build b/meson.build index 794d46fdbc8..2849ae00492 100644 --- a/meson.build +++ b/meson.build @@ -1536,7 +1536,9 @@ if with_tests or with_gallium_softpipe llvm_modules += 'native' endif -if with_microsoft_clc or with_amd_vk or with_gallium_radeonsi +if with_amd_vk or with_gallium_radeonsi + _llvm_version = '>= 11.0.0' +elif with_microsoft_clc _llvm_version = '>= 10.0.0' elif with_gallium_opencl _llvm_version = '>= 8.0.0' diff --git a/src/amd/compiler/aco_print_asm.cpp b/src/amd/compiler/aco_print_asm.cpp index 01c5bc4c59a..ae6731e1d08 100644 --- a/src/amd/compiler/aco_print_asm.cpp +++ b/src/amd/compiler/aco_print_asm.cpp @@ -5,9 +5,7 @@ #include "ac_llvm_util.h" #include -#if LLVM_VERSION_MAJOR >= 11 #include -#endif namespace aco { namespace { @@ -161,11 +159,7 @@ bool print_asm(Program *program, std::vector& binary, referenced_blocks[succ] = true; } - #if LLVM_VERSION_MAJOR >= 11 std::vector symbols; - #else - std::vector> symbols; - #endif std::vector> block_names; block_names.reserve(program->blocks.size()); for (Block& block : program->blocks) { diff --git a/src/amd/compiler/tests/helpers.cpp b/src/amd/compiler/tests/helpers.cpp index 3d5c5524c88..87f085fbd6d 100644 --- a/src/amd/compiler/tests/helpers.cpp +++ b/src/amd/compiler/tests/helpers.cpp @@ -205,9 +205,7 @@ void finish_assembler_test() /* we could use CLRX for disassembly but that would require it to be * installed */ - if (program->chip_class == GFX10_3 && LLVM_VERSION_MAJOR < 11) { - skip_test("LLVM 11 needed for GFX10_3 disassembly"); - } else if (program->chip_class >= GFX8) { + if (program->chip_class >= GFX8) { print_asm(program.get(), binary, exec_size / 4u, output); } else { //TODO: maybe we should use CLRX and skip this test if it's not available? diff --git a/src/amd/llvm/ac_llvm_build.c b/src/amd/llvm/ac_llvm_build.c index 63e87dd00b5..f9934dc4161 100644 --- a/src/amd/llvm/ac_llvm_build.c +++ b/src/amd/llvm/ac_llvm_build.c @@ -4698,13 +4698,11 @@ LLVMValueRef ac_build_main(const struct ac_shader_args *args, struct ac_llvm_con ctx->main_function = main_function; - if (LLVM_VERSION_MAJOR >= 11) { - /* Enable denormals for FP16 and FP64: */ - LLVMAddTargetDependentFunctionAttr(main_function, "denormal-fp-math", "ieee,ieee"); - /* Disable denormals for FP32: */ - LLVMAddTargetDependentFunctionAttr(main_function, "denormal-fp-math-f32", - "preserve-sign,preserve-sign"); - } + /* Enable denormals for FP16 and FP64: */ + LLVMAddTargetDependentFunctionAttr(main_function, "denormal-fp-math", "ieee,ieee"); + /* Disable denormals for FP32: */ + LLVMAddTargetDependentFunctionAttr(main_function, "denormal-fp-math-f32", + "preserve-sign,preserve-sign"); return main_function; } diff --git a/src/amd/llvm/ac_llvm_util.c b/src/amd/llvm/ac_llvm_util.c index 54baa356238..f8d8c2d329d 100644 --- a/src/amd/llvm/ac_llvm_util.c +++ b/src/amd/llvm/ac_llvm_util.c @@ -69,10 +69,8 @@ static void ac_init_llvm_target(void) "-global-isel-abort=2", /* Atomic optimizations require LLVM 10.0 for gfx10 support. */ "-amdgpu-atomic-optimizations=true", -#if LLVM_VERSION_MAJOR >= 11 /* This was disabled by default in: https://reviews.llvm.org/D77228 */ "-structurizecfg-skip-uniform-regions", -#endif }; LLVMParseCommandLineOptions(ARRAY_SIZE(argv), argv, NULL); } @@ -194,8 +192,7 @@ static LLVMTargetMachineRef ac_create_target_machine(enum radeon_family family, const char *triple = (tm_options & AC_TM_SUPPORTS_SPILL) ? "amdgcn-mesa-mesa3d" : "amdgcn--"; LLVMTargetRef target = ac_get_llvm_target(triple); - snprintf(features, sizeof(features), "+DumpCode%s%s%s", - LLVM_VERSION_MAJOR >= 11 ? "" : ",-fp32-denormals,+fp64-denormals", + snprintf(features, sizeof(features), "+DumpCode%s%s", family >= CHIP_NAVI10 && !(tm_options & AC_TM_WAVE32) ? ",+wavefrontsize64,-wavefrontsize32" : "", diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c index b9f0507f94e..44ffeba07d3 100644 --- a/src/amd/vulkan/radv_device.c +++ b/src/amd/vulkan/radv_device.c @@ -461,7 +461,7 @@ radv_physical_device_get_supported_extensions(const struct radv_physical_device .EXT_scalar_block_layout = device->rad_info.chip_class >= GFX7, .EXT_shader_atomic_float = true, .EXT_shader_demote_to_helper_invocation = true, - .EXT_shader_image_atomic_int64 = LLVM_VERSION_MAJOR >= 11 || !device->use_llvm, + .EXT_shader_image_atomic_int64 = true, .EXT_shader_stencil_export = true, .EXT_shader_subgroup_ballot = true, .EXT_shader_subgroup_vote = true, @@ -1604,8 +1604,8 @@ radv_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT: { VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT *features = (VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT *)ext; - features->shaderImageInt64Atomics = LLVM_VERSION_MAJOR >= 11 || !pdevice->use_llvm; - features->sparseImageInt64Atomics = LLVM_VERSION_MAJOR >= 11 || !pdevice->use_llvm; + features->shaderImageInt64Atomics = true; + features->sparseImageInt64Atomics = true; break; } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE: { diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c index 789eff18529..e6bff9bb64a 100644 --- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c +++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c @@ -49,12 +49,6 @@ do_winsys_init(struct radv_amdgpu_winsys *ws, int fd) return false; } - /* LLVM 11 is required for GFX10.3. */ - if (ws->info.chip_class == GFX10_3 && ws->use_llvm && LLVM_VERSION_MAJOR < 11) { - fprintf(stderr, "radv: GFX 10.3 requires LLVM 11 or higher\n"); - return false; - } - ws->addrlib = ac_addrlib_create(&ws->info, &ws->info.max_alignment); if (!ws->addrlib) { fprintf(stderr, "amdgpu: Cannot create addrlib.\n"); diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c index fe1dfce19e7..7f23d8474ab 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.c +++ b/src/gallium/drivers/radeonsi/si_pipe.c @@ -1013,16 +1013,6 @@ static struct pipe_screen *radeonsi_screen_create_impl(struct radeon_winsys *ws, sscreen->options.enable_sam, sscreen->options.disable_sam); - /* Older LLVM have buggy v_pk_* instructions. */ - if (!sscreen->info.has_packed_math_16bit || LLVM_VERSION_MAJOR < 11) - sscreen->options.fp16 = false; - - if (sscreen->info.chip_class == GFX10_3 && LLVM_VERSION_MAJOR < 11) { - fprintf(stderr, "radeonsi: GFX 10.3 requires LLVM 11 or higher\n"); - FREE(sscreen); - return NULL; - } - if (sscreen->info.chip_class >= GFX9) { sscreen->se_tile_repeat = 32 * sscreen->info.max_se; } else {