From 00064c4f966cd45af4bebff46b74504cc5505fbc Mon Sep 17 00:00:00 2001 From: eabdullin Date: Tue, 11 Nov 2025 15:35:33 +0000 Subject: [PATCH] import UBI llvm-20.1.8-3.el9 --- .gitignore | 4 +- .llvm.metadata | 4 +- ...-18-Always-build-shared-libs-for-LLD.patch | 29 - ...-Don-t-export-bolt-libraries-in-LLVM.patch | 187 -- SOURCES/0001-20-polly-shared-libs.patch | 59 + ...erts-to-test-added-in-145149-because.patch | 26 + ...-CMake-Add-missing-dependency-108461.patch | 129 -- ...e-Use-correct-exports-for-MLIR-tools.patch | 38 - ...ake-sure-instruction-get-from-SunkAd.patch | 143 ++ ...ling-of-undefs-in-the-PPC-isSplatShu.patch | 67 + ...-ICE-with-i128-i64-uaddo-carry-chain.patch | 81 + ...-symlink-when-finding-install-prefix.patch | 39 + ...pecify-deps-via-LLVM_LINK_COMPONENTS.patch | 80 - ...r-python-Reuse-the-library-directory.patch | 77 - ...-option-to-disable-tsan-tests-111548.patch | 62 - ...-Support-CET-in-z_Linux_asm.S-123213.patch | 51 - ...siblings_list-if-physical_package_id.patch | 205 -- ...-vaddr-for-__llvm_write_binary_ids-n.patch | 86 - SOURCES/18-99273.patch | 893 -------- SOURCES/20-131099.patch | 28 + SOURCES/21-146424.patch | 94 + SOURCES/cstdint.patch | 24 - SPECS/llvm.spec | 2034 ++++++++++------- 23 files changed, 1790 insertions(+), 2650 deletions(-) delete mode 100644 SOURCES/0001-18-Always-build-shared-libs-for-LLD.patch delete mode 100644 SOURCES/0001-19-PATCH-Bolt-CMake-Don-t-export-bolt-libraries-in-LLVM.patch create mode 100644 SOURCES/0001-20-polly-shared-libs.patch create mode 100644 SOURCES/0001-Add-REQUIRES-asserts-to-test-added-in-145149-because.patch delete mode 100644 SOURCES/0001-CMake-Add-missing-dependency-108461.patch delete mode 100644 SOURCES/0001-CMake-Use-correct-exports-for-MLIR-tools.patch create mode 100644 SOURCES/0001-CodeGenPrepare-Make-sure-instruction-get-from-SunkAd.patch create mode 100644 SOURCES/0001-PowerPC-Fix-handling-of-undefs-in-the-PPC-isSplatShu.patch create mode 100644 SOURCES/0001-SystemZ-Fix-ICE-with-i128-i64-uaddo-carry-chain.patch create mode 100644 SOURCES/0001-cmake-Resolve-symlink-when-finding-install-prefix.patch delete mode 100644 SOURCES/0001-mlir-Specify-deps-via-LLVM_LINK_COMPONENTS.patch delete mode 100644 SOURCES/0001-mlir-python-Reuse-the-library-directory.patch delete mode 100644 SOURCES/0001-openmp-Add-option-to-disable-tsan-tests-111548.patch delete mode 100644 SOURCES/0001-openmp-Support-CET-in-z_Linux_asm.S-123213.patch delete mode 100644 SOURCES/0001-openmp-Use-core_siblings_list-if-physical_package_id.patch delete mode 100644 SOURCES/0001-profile-Use-base-vaddr-for-__llvm_write_binary_ids-n.patch delete mode 100644 SOURCES/18-99273.patch create mode 100644 SOURCES/20-131099.patch create mode 100644 SOURCES/21-146424.patch delete mode 100644 SOURCES/cstdint.patch diff --git a/.gitignore b/.gitignore index d5af39e..6e6843b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ -SOURCES/llvm-project-19.1.7.src.tar.xz -SOURCES/llvm-project-19.1.7.src.tar.xz.sig +SOURCES/llvm-project-20.1.8.src.tar.xz +SOURCES/llvm-project-20.1.8.src.tar.xz.sig diff --git a/.llvm.metadata b/.llvm.metadata index 052919e..4146220 100644 --- a/.llvm.metadata +++ b/.llvm.metadata @@ -1,2 +1,2 @@ -6e4033d8b76a89e82220b5445bff58cdce64300e SOURCES/llvm-project-19.1.7.src.tar.xz -48f839c6e47a34a1138862a9db6274c150179532 SOURCES/llvm-project-19.1.7.src.tar.xz.sig +f148d196711cf7cfa0850717a4fd2c4c795d9abe SOURCES/llvm-project-20.1.8.src.tar.xz +3663169aeb9c255bd11d3fa6bbb2c750b52b6fd3 SOURCES/llvm-project-20.1.8.src.tar.xz.sig diff --git a/SOURCES/0001-18-Always-build-shared-libs-for-LLD.patch b/SOURCES/0001-18-Always-build-shared-libs-for-LLD.patch deleted file mode 100644 index 1659800..0000000 --- a/SOURCES/0001-18-Always-build-shared-libs-for-LLD.patch +++ /dev/null @@ -1,29 +0,0 @@ -From b1c60d7fa322a2d208556087df9e7ef94bfbffb8 Mon Sep 17 00:00:00 2001 -From: Nikita Popov -Date: Wed, 8 May 2024 12:30:36 +0900 -Subject: [PATCH] Always build shared libs for LLD - -We don't want to enable BUILD_SHARED_LIBS for the whole build, -but we do want to build lld libraries. ---- - lld/cmake/modules/AddLLD.cmake | 5 ++--- - 1 file changed, 2 insertions(+), 3 deletions(-) - -diff --git a/lld/cmake/modules/AddLLD.cmake b/lld/cmake/modules/AddLLD.cmake -index 2ee066b41535..270c03f096ac 100644 ---- a/lld/cmake/modules/AddLLD.cmake -+++ b/lld/cmake/modules/AddLLD.cmake -@@ -7,9 +7,8 @@ macro(add_lld_library name) - "" - "" - ${ARGN}) -- if(ARG_SHARED) -- set(ARG_ENABLE_SHARED SHARED) -- endif() -+ # Always build shared libs for LLD. -+ set(ARG_ENABLE_SHARED SHARED) - llvm_add_library(${name} ${ARG_ENABLE_SHARED} ${ARG_UNPARSED_ARGUMENTS}) - set_target_properties(${name} PROPERTIES FOLDER "lld libraries") - --- -2.44.0 \ No newline at end of file diff --git a/SOURCES/0001-19-PATCH-Bolt-CMake-Don-t-export-bolt-libraries-in-LLVM.patch b/SOURCES/0001-19-PATCH-Bolt-CMake-Don-t-export-bolt-libraries-in-LLVM.patch deleted file mode 100644 index 5af976e..0000000 --- a/SOURCES/0001-19-PATCH-Bolt-CMake-Don-t-export-bolt-libraries-in-LLVM.patch +++ /dev/null @@ -1,187 +0,0 @@ -From ee0f56cff40b324bb06e034e247ec85ae9a846bf Mon Sep 17 00:00:00 2001 -From: Nikita Popov -Date: Wed, 8 Jan 2025 08:28:18 +0100 -Subject: [PATCH] [PATCH] [Bolt][CMake] Don't export bolt libraries in - LLVMExports.cmake - -Bolt makes use of add_llvm_library and as such ends up exporting -its libraries from LLVMExports.cmake, which is not correct. - -Bolt doesn't have its own exports file, and I assume that there -is no desire to have one either -- Bolt libraries are not intended -to be consumed as a cmake module, right? - -As such, this PR adds a NO_EXPORT option to simplify exclude these -libraries from the exports file. - ---- -This patch originates from this PR: - -https://patch-diff.githubusercontent.com/raw/llvm/llvm-project/pull/121936. - -The commit was: - -https://github.com/nikic/llvm-project/commit/4333a4dd270b5c046c5469b97846e3dae58fb221.patch - -And then it was rebased onto llvmorg-19.1.6. ---- - bolt/lib/Core/CMakeLists.txt | 1 + - bolt/lib/Passes/CMakeLists.txt | 1 + - bolt/lib/Profile/CMakeLists.txt | 1 + - bolt/lib/Rewrite/CMakeLists.txt | 1 + - bolt/lib/RuntimeLibs/CMakeLists.txt | 1 + - bolt/lib/Target/AArch64/CMakeLists.txt | 1 + - bolt/lib/Target/RISCV/CMakeLists.txt | 1 + - bolt/lib/Target/X86/CMakeLists.txt | 1 + - bolt/lib/Utils/CMakeLists.txt | 1 + - llvm/cmake/modules/AddLLVM.cmake | 12 +++++++++--- - 10 files changed, 18 insertions(+), 3 deletions(-) - -diff --git a/bolt/lib/Core/CMakeLists.txt b/bolt/lib/Core/CMakeLists.txt -index bb58667066fd..8c1f5d0bb37b 100644 ---- a/bolt/lib/Core/CMakeLists.txt -+++ b/bolt/lib/Core/CMakeLists.txt -@@ -35,6 +35,7 @@ add_llvm_library(LLVMBOLTCore - ParallelUtilities.cpp - Relocation.cpp - -+ NO_EXPORT - DISABLE_LLVM_LINK_LLVM_DYLIB - LINK_LIBS - ${LLVM_PTHREAD_LIB} -diff --git a/bolt/lib/Passes/CMakeLists.txt b/bolt/lib/Passes/CMakeLists.txt -index 407d8b03f739..7367b541545d 100644 ---- a/bolt/lib/Passes/CMakeLists.txt -+++ b/bolt/lib/Passes/CMakeLists.txt -@@ -45,6 +45,7 @@ add_llvm_library(LLVMBOLTPasses - VeneerElimination.cpp - RetpolineInsertion.cpp - -+ NO_EXPORT - DISABLE_LLVM_LINK_LLVM_DYLIB - - LINK_LIBS -diff --git a/bolt/lib/Profile/CMakeLists.txt b/bolt/lib/Profile/CMakeLists.txt -index 9aa4ba0490b0..a2bb4aa074c7 100644 ---- a/bolt/lib/Profile/CMakeLists.txt -+++ b/bolt/lib/Profile/CMakeLists.txt -@@ -7,6 +7,7 @@ add_llvm_library(LLVMBOLTProfile - YAMLProfileReader.cpp - YAMLProfileWriter.cpp - -+ NO_EXPORT - DISABLE_LLVM_LINK_LLVM_DYLIB - - LINK_COMPONENTS -diff --git a/bolt/lib/Rewrite/CMakeLists.txt b/bolt/lib/Rewrite/CMakeLists.txt -index 34993af2623b..6737e89b8451 100644 ---- a/bolt/lib/Rewrite/CMakeLists.txt -+++ b/bolt/lib/Rewrite/CMakeLists.txt -@@ -26,6 +26,7 @@ add_llvm_library(LLVMBOLTRewrite - RewriteInstance.cpp - SDTRewriter.cpp - -+ NO_EXPORT - DISABLE_LLVM_LINK_LLVM_DYLIB - - LINK_LIBS -diff --git a/bolt/lib/RuntimeLibs/CMakeLists.txt b/bolt/lib/RuntimeLibs/CMakeLists.txt -index d3ac71d3e797..b8db7e4a1553 100644 ---- a/bolt/lib/RuntimeLibs/CMakeLists.txt -+++ b/bolt/lib/RuntimeLibs/CMakeLists.txt -@@ -11,6 +11,7 @@ add_llvm_library(LLVMBOLTRuntimeLibs - HugifyRuntimeLibrary.cpp - InstrumentationRuntimeLibrary.cpp - -+ NO_EXPORT - DISABLE_LLVM_LINK_LLVM_DYLIB - ) - -diff --git a/bolt/lib/Target/AArch64/CMakeLists.txt b/bolt/lib/Target/AArch64/CMakeLists.txt -index be03e247aa96..526a9645cb54 100644 ---- a/bolt/lib/Target/AArch64/CMakeLists.txt -+++ b/bolt/lib/Target/AArch64/CMakeLists.txt -@@ -7,6 +7,7 @@ set(LLVM_LINK_COMPONENTS - add_llvm_library(LLVMBOLTTargetAArch64 - AArch64MCPlusBuilder.cpp - -+ NO_EXPORT - DISABLE_LLVM_LINK_LLVM_DYLIB - - DEPENDS -diff --git a/bolt/lib/Target/RISCV/CMakeLists.txt b/bolt/lib/Target/RISCV/CMakeLists.txt -index 7f9557606320..3955cfc0f089 100644 ---- a/bolt/lib/Target/RISCV/CMakeLists.txt -+++ b/bolt/lib/Target/RISCV/CMakeLists.txt -@@ -7,6 +7,7 @@ set(LLVM_LINK_COMPONENTS - add_llvm_library(LLVMBOLTTargetRISCV - RISCVMCPlusBuilder.cpp - -+ NO_EXPORT - DISABLE_LLVM_LINK_LLVM_DYLIB - - DEPENDS -diff --git a/bolt/lib/Target/X86/CMakeLists.txt b/bolt/lib/Target/X86/CMakeLists.txt -index 2b769bc7e7f5..00100e9b84c9 100644 ---- a/bolt/lib/Target/X86/CMakeLists.txt -+++ b/bolt/lib/Target/X86/CMakeLists.txt -@@ -9,6 +9,7 @@ add_llvm_library(LLVMBOLTTargetX86 - X86MCPlusBuilder.cpp - X86MCSymbolizer.cpp - -+ NO_EXPORT - DISABLE_LLVM_LINK_LLVM_DYLIB - - DEPENDS -diff --git a/bolt/lib/Utils/CMakeLists.txt b/bolt/lib/Utils/CMakeLists.txt -index d1403314274b..ceddcfc8f57a 100644 ---- a/bolt/lib/Utils/CMakeLists.txt -+++ b/bolt/lib/Utils/CMakeLists.txt -@@ -2,6 +2,7 @@ add_llvm_library(LLVMBOLTUtils - CommandLineOpts.cpp - Utils.cpp - -+ NO_EXPORT - DISABLE_LLVM_LINK_LLVM_DYLIB - - LINK_LIBS -diff --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake -index 03f4e1f190fd..addf083b7c71 100644 ---- a/llvm/cmake/modules/AddLLVM.cmake -+++ b/llvm/cmake/modules/AddLLVM.cmake -@@ -897,7 +897,7 @@ endfunction() - - macro(add_llvm_library name) - cmake_parse_arguments(ARG -- "SHARED;BUILDTREE_ONLY;MODULE;INSTALL_WITH_TOOLCHAIN" -+ "SHARED;BUILDTREE_ONLY;MODULE;INSTALL_WITH_TOOLCHAIN;NO_EXPORT" - "" - "" - ${ARGN}) -@@ -932,7 +932,11 @@ macro(add_llvm_library name) - set(umbrella) - endif() - -- get_target_export_arg(${name} LLVM export_to_llvmexports ${umbrella}) -+ if(ARG_NO_EXPORT) -+ set(export_to_llvmexports) -+ else() -+ get_target_export_arg(${name} LLVM export_to_llvmexports ${umbrella}) -+ endif() - install(TARGETS ${name} - ${export_to_llvmexports} - LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX} COMPONENT ${name} -@@ -945,7 +949,9 @@ macro(add_llvm_library name) - COMPONENT ${name}) - endif() - endif() -- set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS ${name}) -+ if(NOT ARG_NO_EXPORT) -+ set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS ${name}) -+ endif() - endif() - - get_subproject_title(subproject_title) --- -2.47.1 - diff --git a/SOURCES/0001-20-polly-shared-libs.patch b/SOURCES/0001-20-polly-shared-libs.patch new file mode 100644 index 0000000..b0c90da --- /dev/null +++ b/SOURCES/0001-20-polly-shared-libs.patch @@ -0,0 +1,59 @@ +From cecb98f56e7d6619d0427fbdbc2f200ce212f0c6 Mon Sep 17 00:00:00 2001 +From: Konrad Kleine +Date: Tue, 28 Jan 2025 08:34:09 +0000 +Subject: [PATCH] [polly] shared libs + +--- + polly/cmake/polly_macros.cmake | 5 ++++- + polly/lib/CMakeLists.txt | 1 + + polly/lib/External/CMakeLists.txt | 1 + + 3 files changed, 6 insertions(+), 1 deletion(-) + +diff --git a/polly/cmake/polly_macros.cmake b/polly/cmake/polly_macros.cmake +index 9bd7b0b0ea59..fc2c3a76901f 100644 +--- a/polly/cmake/polly_macros.cmake ++++ b/polly/cmake/polly_macros.cmake +@@ -1,5 +1,5 @@ + macro(add_polly_library name) +- cmake_parse_arguments(ARG "" "" "" ${ARGN}) ++ cmake_parse_arguments(ARG "SHARED" "" "" ${ARGN}) + set(srcs ${ARG_UNPARSED_ARGUMENTS}) + if(MSVC_IDE OR XCODE) + file( GLOB_RECURSE headers *.h *.td *.def) +@@ -17,6 +17,9 @@ macro(add_polly_library name) + else() + set(libkind) + endif() ++ if (ARG_SHARED) ++ set(libkind SHARED) ++ endif() + add_library( ${name} ${libkind} ${srcs} ) + set_target_properties(${name} PROPERTIES FOLDER "Polly/Libraries") + +diff --git a/polly/lib/CMakeLists.txt b/polly/lib/CMakeLists.txt +index d91f4ecd37e6..965f635b7ff6 100644 +--- a/polly/lib/CMakeLists.txt ++++ b/polly/lib/CMakeLists.txt +@@ -41,6 +41,7 @@ set(POLLY_COMPONENTS + # the sources them to be recompiled for each of them. + add_llvm_pass_plugin(Polly + NO_MODULE ++ SHARED + SUBPROJECT Polly + Analysis/DependenceInfo.cpp + Analysis/PolyhedralInfo.cpp +diff --git a/polly/lib/External/CMakeLists.txt b/polly/lib/External/CMakeLists.txt +index 5dd69b7199dc..f065fbd7b942 100644 +--- a/polly/lib/External/CMakeLists.txt ++++ b/polly/lib/External/CMakeLists.txt +@@ -284,6 +284,7 @@ if (POLLY_BUNDLED_ISL) + ) + + add_polly_library(PollyISL ++ SHARED + ${ISL_FILES} + ) + +-- +2.46.0 + diff --git a/SOURCES/0001-Add-REQUIRES-asserts-to-test-added-in-145149-because.patch b/SOURCES/0001-Add-REQUIRES-asserts-to-test-added-in-145149-because.patch new file mode 100644 index 0000000..26f372c --- /dev/null +++ b/SOURCES/0001-Add-REQUIRES-asserts-to-test-added-in-145149-because.patch @@ -0,0 +1,26 @@ +From ffc7d5ae2d79f98967943fabb2abfbc1b1e047fd Mon Sep 17 00:00:00 2001 +From: Douglas Yung +Date: Tue, 24 Jun 2025 04:08:34 +0000 +Subject: [PATCH] Add `REQUIRES: asserts` to test added in #145149 because it + uses the `-debug-only=` flag. + +This should fix the test failure when building without asserts. +--- + llvm/test/CodeGen/PowerPC/pr141642.ll | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/llvm/test/CodeGen/PowerPC/pr141642.ll b/llvm/test/CodeGen/PowerPC/pr141642.ll +index 38a706574786..61bda4dfaf53 100644 +--- a/llvm/test/CodeGen/PowerPC/pr141642.ll ++++ b/llvm/test/CodeGen/PowerPC/pr141642.ll +@@ -2,6 +2,7 @@ + ; RUN: FileCheck %s + ; CHECK-NOT: lxvdsx + ; CHECK-NOT: LD_SPLAT ++; REQUIRES: asserts + + define weak_odr dso_local void @unpack(ptr noalias noundef %packed_in) local_unnamed_addr { + entry: +-- +2.49.0 + diff --git a/SOURCES/0001-CMake-Add-missing-dependency-108461.patch b/SOURCES/0001-CMake-Add-missing-dependency-108461.patch deleted file mode 100644 index e6862fd..0000000 --- a/SOURCES/0001-CMake-Add-missing-dependency-108461.patch +++ /dev/null @@ -1,129 +0,0 @@ -From 17ff6161b83e6a5e86fcb6a13c5551bba1438405 Mon Sep 17 00:00:00 2001 -From: Erick Ochoa -Date: Thu, 12 Sep 2024 21:16:58 -0400 -Subject: [PATCH 1/9] [CMake] Add missing dependency (#108461) - -The [`mlir-capi-execution-engine-test` test -executable](https://github.com/llvm/llvm-project/blob/main/mlir/test/CAPI/CMakeLists.txt#L26-L34) - -```cmake -if(MLIR_ENABLE_EXECUTION_ENGINE) - _add_capi_test_executable(mlir-capi-execution-engine-test - execution_engine.c - LINK_LIBS PRIVATE - MLIRCAPIConversion - MLIRCAPIExecutionEngine - MLIRCAPIRegisterEverything -) -endif() -``` - - -is run by lit tests, but it is not properly listed as a dependency. It -is added in places conditionally across the file -[`tests/CMakeLists.txt`](https://github.com/llvm/llvm-project/blob/main/mlir/test/CMakeLists.txt#L130-L143) - -```cmake -# The native target may not be enabled, in this case we won't -# run tests that involves executing on the host: do not build -# useless binaries. -if(LLVM_ENABLE_PIC AND TARGET ${LLVM_NATIVE_ARCH}) - list(APPEND MLIR_TEST_DEPENDS - mlir-cpu-runner - llc - mlir_async_runtime - mlir-capi-execution-engine-test - mlir_c_runner_utils - mlir_runner_utils - mlir_float16_utils - ) -endif() -``` - -But this condition is not the same as the one where the test executable -is added. [It has been reported on discord that the following error -occurred:](https://discord.com/channels/636084430946959380/642426447167881246/1283811636725022730) - -``` -FAIL: MLIR :: CAPI/execution_engine.c (2 of 2121) -******************** TEST 'MLIR :: CAPI/execution_engine.c' FAILED ******************** -Exit Code: 127 -Command Output (stdout): --- -# RUN: at line 10 -/usr/bin/mlir-capi-execution-engine-test 2>&1 | /usr/bin/FileCheck /builddir/build/BUILD/mlir-19.1.0_rc4-build/mlir-19.1.0-rc4.src/test/CAPI/execution_engine.c -# executed command: /usr/bin/mlir-capi-execution-engine-test -# .---command stderr------------ -# | '/usr/bin/mlir-capi-execution-engine-test': command not found -# `----------------------------- -``` - -This error will not be deterministic and is dependent on the order in -which tools are built. If by any chance, -`mlir-capi-execution-engine-test` is built before the lit tests run, -then nothing will happen. But lit tests can be run before -`mlir-capi-execution-engine-test` is built. - -This patch adds the `mlir-capi-execution-engine` to the -`MLIR_TEST_DEPENDS` list when the `MLIR_ENABLE_EXECUTION_ENGINE` flag is -present. - -Happy to make changes like: -* removing `mlir-capi-execution-engine-test` from the other place where -it is included in the tests -* and merge and sort alphabetically these two commands - -```cmake -set(MLIR_TEST_DEPENDS -FileCheck count not split-file -mlir-capi-ir-test -mlir-capi-irdl-test -mlir-capi-llvm-test -mlir-capi-pass-test -mlir-capi-quant-test -mlir-capi-rewrite-test -mlir-capi-sparse-tensor-test -mlir-capi-transform-test -mlir-capi-transform-interpreter-test -mlir-capi-translation-test -mlir-linalg-ods-yaml-gen -mlir-lsp-server -mlir-opt - mlir-query - mlir-reduce - mlir-tblgen - mlir-translate - tblgen-lsp-server - tblgen-to-irdl - ) - -set(MLIR_TEST_DEPENDS ${MLIR_TEST_DEPENDS} - mlir-capi-pdl-test - mlir-pdll-lsp-server - mlir-pdll - ) -``` - -Co-authored-by: Erick Ochoa ---- - mlir/test/CMakeLists.txt | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/mlir/test/CMakeLists.txt b/mlir/test/CMakeLists.txt -index df95e5db11f1..4d2d738b734e 100644 ---- a/mlir/test/CMakeLists.txt -+++ b/mlir/test/CMakeLists.txt -@@ -150,6 +150,10 @@ if(MLIR_ENABLE_CUDA_RUNNER) - list(APPEND MLIR_TEST_DEPENDS mlir_cuda_runtime) - endif() - -+if(MLIR_ENABLE_EXECUTION_ENGINE) -+ list(APPEND MLIR_TEST_DEPENDS mlir-capi-execution-engine-test) -+endif() -+ - if(MLIR_ENABLE_ROCM_RUNNER) - list(APPEND MLIR_TEST_DEPENDS mlir_rocm_runtime) - endif() --- -2.46.0 - diff --git a/SOURCES/0001-CMake-Use-correct-exports-for-MLIR-tools.patch b/SOURCES/0001-CMake-Use-correct-exports-for-MLIR-tools.patch deleted file mode 100644 index 71547ae..0000000 --- a/SOURCES/0001-CMake-Use-correct-exports-for-MLIR-tools.patch +++ /dev/null @@ -1,38 +0,0 @@ -From b443e55162861125a50048ae9bc521e98058b273 Mon Sep 17 00:00:00 2001 -From: Nikita Popov -Date: Mon, 16 Dec 2024 14:44:43 +0100 -Subject: [PATCH] [CMake] Use correct exports file for MLIR tools - -llvm_add_tool() currently does not respect the passed project and -puts all tools into LLVMExports.cmake. This means that we end up -with binaries like mlir-opt in LLVMExports.cmake instead of -MLIRTargets.cmake, where they should be. - -Adjust llvm_add_tool() to take the project into account. ---- - llvm/cmake/modules/AddLLVM.cmake | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake -index 006dfb6de3a199..6cf0ee1a54dbdb 100644 ---- a/llvm/cmake/modules/AddLLVM.cmake -+++ b/llvm/cmake/modules/AddLLVM.cmake -@@ -1483,7 +1483,7 @@ macro(llvm_add_tool project name) - - if ( ${name} IN_LIST LLVM_TOOLCHAIN_TOOLS OR NOT LLVM_INSTALL_TOOLCHAIN_ONLY) - if( LLVM_BUILD_TOOLS ) -- get_target_export_arg(${name} LLVM export_to_llvmexports) -+ get_target_export_arg(${name} ${project} export_to_llvmexports) - install(TARGETS ${name} - ${export_to_llvmexports} - RUNTIME DESTINATION ${${project}_TOOLS_INSTALL_DIR} -@@ -1497,7 +1497,8 @@ macro(llvm_add_tool project name) - endif() - endif() - if( LLVM_BUILD_TOOLS ) -- set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS ${name}) -+ string(TOUPPER "${project}" project_upper) -+ set_property(GLOBAL APPEND PROPERTY ${project_upper}_EXPORTS ${name}) - endif() - endif() - get_subproject_title(subproject_title) diff --git a/SOURCES/0001-CodeGenPrepare-Make-sure-instruction-get-from-SunkAd.patch b/SOURCES/0001-CodeGenPrepare-Make-sure-instruction-get-from-SunkAd.patch new file mode 100644 index 0000000..a195bc5 --- /dev/null +++ b/SOURCES/0001-CodeGenPrepare-Make-sure-instruction-get-from-SunkAd.patch @@ -0,0 +1,143 @@ +From c76137f1cfd5758f6889236d49a65f059e6432ff Mon Sep 17 00:00:00 2001 +From: weiguozhi <57237827+weiguozhi@users.noreply.github.com> +Date: Thu, 15 May 2025 09:27:25 -0700 +Subject: [PATCH] [CodeGenPrepare] Make sure instruction get from SunkAddrs is + before MemoryInst (#139303) + +Function optimizeBlock may do optimizations on a block for multiple +times. In the first iteration of the loop, MemoryInst1 may generate a +sunk instruction and store it into SunkAddrs. In the second iteration of +the loop, MemoryInst2 may use the same address and then it can reuse the +sunk instruction stored in SunkAddrs, but MemoryInst2 may be before +MemoryInst1 and the corresponding sunk instruction. In order to avoid +use before def error, we need to find appropriate insert position for the + sunk instruction. + +Fixes #138208. + +(cherry picked from commit 59c6d70ed8120b8864e5f796e2bf3de5518a0ef0) +--- + llvm/lib/CodeGen/CodeGenPrepare.cpp | 41 ++++++++++++++--- + .../CodeGenPrepare/X86/sink-addr-reuse.ll | 44 +++++++++++++++++++ + 2 files changed, 80 insertions(+), 5 deletions(-) + create mode 100644 llvm/test/Transforms/CodeGenPrepare/X86/sink-addr-reuse.ll + +diff --git a/llvm/lib/CodeGen/CodeGenPrepare.cpp b/llvm/lib/CodeGen/CodeGenPrepare.cpp +index 088062afab17..f779f4b782ae 100644 +--- a/llvm/lib/CodeGen/CodeGenPrepare.cpp ++++ b/llvm/lib/CodeGen/CodeGenPrepare.cpp +@@ -5728,6 +5728,35 @@ static bool IsNonLocalValue(Value *V, BasicBlock *BB) { + return false; + } + ++// Find an insert position of Addr for MemoryInst. We can't guarantee MemoryInst ++// is the first instruction that will use Addr. So we need to find the first ++// user of Addr in current BB. ++static BasicBlock::iterator findInsertPos(Value *Addr, Instruction *MemoryInst, ++ Value *SunkAddr) { ++ if (Addr->hasOneUse()) ++ return MemoryInst->getIterator(); ++ ++ // We already have a SunkAddr in current BB, but we may need to insert cast ++ // instruction after it. ++ if (SunkAddr) { ++ if (Instruction *AddrInst = dyn_cast(SunkAddr)) ++ return std::next(AddrInst->getIterator()); ++ } ++ ++ // Find the first user of Addr in current BB. ++ Instruction *Earliest = MemoryInst; ++ for (User *U : Addr->users()) { ++ Instruction *UserInst = dyn_cast(U); ++ if (UserInst && UserInst->getParent() == MemoryInst->getParent()) { ++ if (isa(UserInst) || UserInst->isDebugOrPseudoInst()) ++ continue; ++ if (UserInst->comesBefore(Earliest)) ++ Earliest = UserInst; ++ } ++ } ++ return Earliest->getIterator(); ++} ++ + /// Sink addressing mode computation immediate before MemoryInst if doing so + /// can be done without increasing register pressure. The need for the + /// register pressure constraint means this can end up being an all or nothing +@@ -5852,11 +5881,6 @@ bool CodeGenPrepare::optimizeMemoryInst(Instruction *MemoryInst, Value *Addr, + return Modified; + } + +- // Insert this computation right after this user. Since our caller is +- // scanning from the top of the BB to the bottom, reuse of the expr are +- // guaranteed to happen later. +- IRBuilder<> Builder(MemoryInst); +- + // Now that we determined the addressing expression we want to use and know + // that we have to sink it into this block. Check to see if we have already + // done this for some other load/store instr in this block. If so, reuse +@@ -5867,6 +5891,13 @@ bool CodeGenPrepare::optimizeMemoryInst(Instruction *MemoryInst, Value *Addr, + + Value *SunkAddr = SunkAddrVH.pointsToAliveValue() ? SunkAddrVH : nullptr; + Type *IntPtrTy = DL->getIntPtrType(Addr->getType()); ++ ++ // The current BB may be optimized multiple times, we can't guarantee the ++ // reuse of Addr happens later, call findInsertPos to find an appropriate ++ // insert position. ++ IRBuilder<> Builder(MemoryInst->getParent(), ++ findInsertPos(Addr, MemoryInst, SunkAddr)); ++ + if (SunkAddr) { + LLVM_DEBUG(dbgs() << "CGP: Reusing nonlocal addrmode: " << AddrMode + << " for " << *MemoryInst << "\n"); +diff --git a/llvm/test/Transforms/CodeGenPrepare/X86/sink-addr-reuse.ll b/llvm/test/Transforms/CodeGenPrepare/X86/sink-addr-reuse.ll +new file mode 100644 +index 000000000000..019f31140655 +--- /dev/null ++++ b/llvm/test/Transforms/CodeGenPrepare/X86/sink-addr-reuse.ll +@@ -0,0 +1,44 @@ ++; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 ++; RUN: opt -S -p 'require,codegenprepare' -cgpp-huge-func=0 < %s | FileCheck %s ++ ++target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" ++target triple = "x86_64-grtev4-linux-gnu" ++ ++declare void @g(ptr) ++ ++; %load and %load5 use the same address, %load5 is optimized first, %load is ++; optimized later and reuse the same address computation instruction. We must ++; make sure not to generate use before def error. ++ ++define void @f(ptr %arg) { ++; CHECK-LABEL: define void @f( ++; CHECK-SAME: ptr [[ARG:%.*]]) { ++; CHECK-NEXT: [[BB:.*:]] ++; CHECK-NEXT: [[GETELEMENTPTR:%.*]] = getelementptr i8, ptr [[ARG]], i64 -64 ++; CHECK-NEXT: call void @g(ptr [[GETELEMENTPTR]]) ++; CHECK-NEXT: [[SUNKADDR1:%.*]] = getelementptr i8, ptr [[ARG]], i64 -64 ++; CHECK-NEXT: [[LOAD:%.*]] = load ptr, ptr [[SUNKADDR1]], align 8 ++; CHECK-NEXT: [[SUNKADDR:%.*]] = getelementptr i8, ptr [[ARG]], i64 -56 ++; CHECK-NEXT: [[LOAD4:%.*]] = load i32, ptr [[SUNKADDR]], align 8 ++; CHECK-NEXT: [[LOAD5:%.*]] = load ptr, ptr [[SUNKADDR1]], align 8 ++; CHECK-NEXT: [[TMP0:%.*]] = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 1, i32 0) ++; CHECK-NEXT: [[MATH:%.*]] = extractvalue { i32, i1 } [[TMP0]], 0 ++; CHECK-NEXT: ret void ++; ++bb: ++ %getelementptr = getelementptr i8, ptr %arg, i64 -64 ++ %getelementptr1 = getelementptr i8, ptr %arg, i64 -56 ++ call void @g(ptr %getelementptr) ++ br label %bb3 ++ ++bb3: ++ %load = load ptr, ptr %getelementptr, align 8 ++ %load4 = load i32, ptr %getelementptr1, align 8 ++ %load5 = load ptr, ptr %getelementptr, align 8 ++ %add = add i32 1, 0 ++ %icmp = icmp eq i32 %add, 0 ++ br i1 %icmp, label %bb7, label %bb7 ++ ++bb7: ++ ret void ++} +-- +2.49.0 + diff --git a/SOURCES/0001-PowerPC-Fix-handling-of-undefs-in-the-PPC-isSplatShu.patch b/SOURCES/0001-PowerPC-Fix-handling-of-undefs-in-the-PPC-isSplatShu.patch new file mode 100644 index 0000000..e3d6135 --- /dev/null +++ b/SOURCES/0001-PowerPC-Fix-handling-of-undefs-in-the-PPC-isSplatShu.patch @@ -0,0 +1,67 @@ +From 735d721de451067c3a618b309703d0b8beb9cacc Mon Sep 17 00:00:00 2001 +From: Wael Yehia +Date: Mon, 23 Jun 2025 13:22:33 -0400 +Subject: [PATCH] [PowerPC] Fix handling of undefs in the + PPC::isSplatShuffleMask query (#145149) + +Currently, the query assumes that a single undef byte implies the rest of +the `EltSize - 1` bytes are undefs, but that's not always true. +e.g. isSplatShuffleMask( +<0,1,2,3,4,5,6,7,undef,undef,undef,undef,0,1,2,3>, 8) should return +false. + +--------- + +Co-authored-by: Wael Yehia +--- + llvm/lib/Target/PowerPC/PPCISelLowering.cpp | 13 +++++++++---- + llvm/test/CodeGen/PowerPC/pr141642.ll | 13 +++++++++++++ + 2 files changed, 22 insertions(+), 4 deletions(-) + create mode 100644 llvm/test/CodeGen/PowerPC/pr141642.ll + +diff --git a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp +index 421a808de667..88c6fe632d26 100644 +--- a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp ++++ b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp +@@ -2242,10 +2242,15 @@ bool PPC::isSplatShuffleMask(ShuffleVectorSDNode *N, unsigned EltSize) { + return false; + + for (unsigned i = EltSize, e = 16; i != e; i += EltSize) { +- if (N->getMaskElt(i) < 0) continue; +- for (unsigned j = 0; j != EltSize; ++j) +- if (N->getMaskElt(i+j) != N->getMaskElt(j)) +- return false; ++ // An UNDEF element is a sequence of UNDEF bytes. ++ if (N->getMaskElt(i) < 0) { ++ for (unsigned j = 1; j != EltSize; ++j) ++ if (N->getMaskElt(i + j) >= 0) ++ return false; ++ } else ++ for (unsigned j = 0; j != EltSize; ++j) ++ if (N->getMaskElt(i + j) != N->getMaskElt(j)) ++ return false; + } + return true; + } +diff --git a/llvm/test/CodeGen/PowerPC/pr141642.ll b/llvm/test/CodeGen/PowerPC/pr141642.ll +new file mode 100644 +index 000000000000..38a706574786 +--- /dev/null ++++ b/llvm/test/CodeGen/PowerPC/pr141642.ll +@@ -0,0 +1,13 @@ ++; RUN: llc -mcpu=pwr8 -mtriple=powerpc64le-unknown-linux-gnu -O0 -debug-only=selectiondag -o - < %s 2>&1 | \ ++; RUN: FileCheck %s ++; CHECK-NOT: lxvdsx ++; CHECK-NOT: LD_SPLAT ++ ++define weak_odr dso_local void @unpack(ptr noalias noundef %packed_in) local_unnamed_addr { ++entry: ++ %ld = load <2 x i32>, ptr %packed_in, align 2 ++ %shuf = shufflevector <2 x i32> %ld, <2 x i32> poison, <4 x i32> ++ %ie = insertelement <4 x i32> %shuf, i32 7, i32 2 ++ store <4 x i32> %shuf, ptr %packed_in, align 2 ++ ret void ++} +-- +2.49.0 + diff --git a/SOURCES/0001-SystemZ-Fix-ICE-with-i128-i64-uaddo-carry-chain.patch b/SOURCES/0001-SystemZ-Fix-ICE-with-i128-i64-uaddo-carry-chain.patch new file mode 100644 index 0000000..4ec2d1d --- /dev/null +++ b/SOURCES/0001-SystemZ-Fix-ICE-with-i128-i64-uaddo-carry-chain.patch @@ -0,0 +1,81 @@ +From 6d5697f7cb4e933d2f176c46b7ac05a9cbaeb8b6 Mon Sep 17 00:00:00 2001 +From: Ulrich Weigand +Date: Thu, 23 Jan 2025 19:11:18 +0100 +Subject: [PATCH] [SystemZ] Fix ICE with i128->i64 uaddo carry chain + +We can only optimize a uaddo_carry via specialized instruction +if the carry was produced by another uaddo(_carry) instruction; +there is already a check for that. + +However, i128 uaddo(_carry) use a completely different mechanism; +they indicate carry in a vector register instead of the CC flag. +Thus, we must also check that we don't mix those two - that check +has been missing. + +Fixes: https://github.com/llvm/llvm-project/issues/124001 +--- + .../Target/SystemZ/SystemZISelLowering.cpp | 12 ++++++---- + llvm/test/CodeGen/SystemZ/pr124001.ll | 23 +++++++++++++++++++ + 2 files changed, 31 insertions(+), 4 deletions(-) + create mode 100644 llvm/test/CodeGen/SystemZ/pr124001.ll + +diff --git a/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp b/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp +index 4040ab6d4510..1fb31c26e20d 100644 +--- a/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp ++++ b/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp +@@ -4708,15 +4708,19 @@ SDValue SystemZTargetLowering::lowerXALUO(SDValue Op, + } + + static bool isAddCarryChain(SDValue Carry) { +- while (Carry.getOpcode() == ISD::UADDO_CARRY) ++ while (Carry.getOpcode() == ISD::UADDO_CARRY && ++ Carry->getValueType(0) != MVT::i128) + Carry = Carry.getOperand(2); +- return Carry.getOpcode() == ISD::UADDO; ++ return Carry.getOpcode() == ISD::UADDO && ++ Carry->getValueType(0) != MVT::i128; + } + + static bool isSubBorrowChain(SDValue Carry) { +- while (Carry.getOpcode() == ISD::USUBO_CARRY) ++ while (Carry.getOpcode() == ISD::USUBO_CARRY && ++ Carry->getValueType(0) != MVT::i128) + Carry = Carry.getOperand(2); +- return Carry.getOpcode() == ISD::USUBO; ++ return Carry.getOpcode() == ISD::USUBO && ++ Carry->getValueType(0) != MVT::i128; + } + + // Lower UADDO_CARRY/USUBO_CARRY nodes. +diff --git a/llvm/test/CodeGen/SystemZ/pr124001.ll b/llvm/test/CodeGen/SystemZ/pr124001.ll +new file mode 100644 +index 000000000000..9cf630a55dd6 +--- /dev/null ++++ b/llvm/test/CodeGen/SystemZ/pr124001.ll +@@ -0,0 +1,23 @@ ++; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 ++; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s ++ ++define i64 @test(i128 %in) { ++; CHECK-LABEL: test: ++; CHECK: # %bb.0: ++; CHECK-NEXT: larl %r1, .LCPI0_0 ++; CHECK-NEXT: vl %v0, 0(%r2), 3 ++; CHECK-NEXT: vl %v1, 0(%r1), 3 ++; CHECK-NEXT: vaccq %v0, %v0, %v1 ++; CHECK-NEXT: vlgvg %r1, %v0, 1 ++; CHECK-NEXT: la %r2, 1(%r1) ++; CHECK-NEXT: br %r14 ++ %1 = tail call { i128, i1 } @llvm.uadd.with.overflow.i128(i128 %in, i128 1) ++ %2 = extractvalue { i128, i1 } %1, 1 ++ %3 = zext i1 %2 to i64 ++ %4 = add i64 %3, 1 ++ ret i64 %4 ++} ++ ++declare { i128, i1 } @llvm.uadd.with.overflow.i128(i128, i128) #0 ++ ++attributes #0 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) } +-- +2.48.1 + diff --git a/SOURCES/0001-cmake-Resolve-symlink-when-finding-install-prefix.patch b/SOURCES/0001-cmake-Resolve-symlink-when-finding-install-prefix.patch new file mode 100644 index 0000000..2b62da0 --- /dev/null +++ b/SOURCES/0001-cmake-Resolve-symlink-when-finding-install-prefix.patch @@ -0,0 +1,39 @@ +From 06774eb8a7dc0bc36b59e53310c7f5b5d89f6c29 Mon Sep 17 00:00:00 2001 +From: Nikita Popov +Date: Tue, 28 Jan 2025 12:31:49 +0100 +Subject: [PATCH] [cmake] Resolve symlink when finding install prefix + +When determining the install prefix in LLVMConfig.cmake etc resolve +symlinks in CMAKE_CURRENT_LIST_FILE first. The motivation for this +is to support symlinks like `/usr/lib64/cmake/llvm` to +`/usr/lib64/llvm19/lib/cmake/llvm`. This only works correctly if +the paths are relative to the resolved symlink. + +It's worth noting that this *mostly* already works out of the box, +because cmake automatically does the symlink resolution when the +library is found via CMAKE_PREFIX_PATH. It just doesn't happen +when it's found via the default prefix path. +--- + cmake/Modules/FindPrefixFromConfig.cmake | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/cmake/Modules/FindPrefixFromConfig.cmake b/cmake/Modules/FindPrefixFromConfig.cmake +index 22211e4b72f2..3daff607ff84 100644 +--- a/cmake/Modules/FindPrefixFromConfig.cmake ++++ b/cmake/Modules/FindPrefixFromConfig.cmake +@@ -39,10 +39,10 @@ function(find_prefix_from_config out_var prefix_var path_to_leave) + # install prefix, and avoid hard-coding any absolute paths. + set(config_code + "# Compute the installation prefix from this LLVMConfig.cmake file location." +- "get_filename_component(${prefix_var} \"\${CMAKE_CURRENT_LIST_FILE}\" PATH)") ++ "get_filename_component(${prefix_var} \"\${CMAKE_CURRENT_LIST_FILE}\" REALPATH)") + # Construct the proper number of get_filename_component(... PATH) + # calls to compute the installation prefix. +- string(REGEX REPLACE "/" ";" _count "${path_to_leave}") ++ string(REGEX REPLACE "/" ";" _count "${path_to_leave}/plus_one") + foreach(p ${_count}) + list(APPEND config_code + "get_filename_component(${prefix_var} \"\${${prefix_var}}\" PATH)") +-- +2.48.1 + diff --git a/SOURCES/0001-mlir-Specify-deps-via-LLVM_LINK_COMPONENTS.patch b/SOURCES/0001-mlir-Specify-deps-via-LLVM_LINK_COMPONENTS.patch deleted file mode 100644 index 2178800..0000000 --- a/SOURCES/0001-mlir-Specify-deps-via-LLVM_LINK_COMPONENTS.patch +++ /dev/null @@ -1,80 +0,0 @@ -From c8f93f1958de1f59222a89dd64a573f91105e135 Mon Sep 17 00:00:00 2001 -From: Konrad Kleine -Date: Tue, 3 Dec 2024 20:53:29 +0100 -Subject: [PATCH] [mlir] Specify deps via `LLVM_LINK_COMPONENTS` - -This specifies the dependencies to link against with -`LLVM_LINK_COMPONENTS` for the -`mlir/test/Target/LLVM/MLIRTargetLLVMTests` binary. - -Before, the dependencies where directly added to the -`target_link_libraries()` call which caused the problems I describe -next: - -When doing a build of LLVM with MLIR I want to link against -`libLLVM.so` instead of statically linking `libLLVMSupport.a`. -MLIR on the other side seems to statically link against -`libLLVMSupport.a` because when I link to the shared library `libLLVM.so` I get: - -``` -CommandLine Error: Option 'aarch64-ptrauth-auth-checks' registered more than once! -``` - -This error indicates that the `Support` library is linked twice in the `MLIRTargetLLVMTest` binary. - -Here's the creation of the `MLIRTargetLLVMTest` binary before (Notice the -`libLLVMSupport.a`): - -``` -[6535/6847] : && /usr/bin/clang++ -O2 -flto=thin -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS --config=/usr/lib/rpm/redhat/redhat-hardened-clang.cfg -fstack-protector-strong -mbranch-protection=standard -fasynchronous-unwind-tables -D_DEFAULT_SOURCE -Dasm=__asm__ -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wc++98-compat-extra-semi -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion -Wmisleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -Wundef -Werror=mismatched-tags -O2 -g -DNDEBUG -Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now --config=/usr/lib/rpm/redhat/redhat-hardened-clang-ld.cfg -flto=thin -ffat-lto-objects -Wl,--build-id=sha1 -Wl,--gc-sections -fno-lto tools/mlir/unittests/Target/LLVM/CMakeFiles/MLIRTargetLLVMTests.dir/SerializeNVVMTarget.cpp.o tools/mlir/unittests/Target/LLVM/CMakeFiles/MLIRTargetLLVMTests.dir/SerializeROCDLTarget.cpp.o tools/mlir/unittests/Target/LLVM/CMakeFiles/MLIRTargetLLVMTests.dir/SerializeToLLVMBitcode.cpp.o -o tools/mlir/unittests/Target/LLVM/MLIRTargetLLVMTests -Wl,-rpath,/builddir/build/BUILD/llvm-19.1.3-build/llvm-project-19.1.3.src/llvm/redhat-linux-build/lib64 lib64/libllvm_gtest_main.a lib64/libllvm_gtest.a lib64/libMLIRTargetLLVM.a lib64/libMLIRNVVMTarget.a lib64/libMLIRROCDLTarget.a lib64/libMLIRGPUDialect.a lib64/libMLIRNVVMDialect.a lib64/libMLIRLLVMDialect.a lib64/libMLIRLLVMToLLVMIRTranslation.a lib64/libMLIRBuiltinToLLVMIRTranslation.a lib64/libMLIRNVVMToLLVMIRTranslation.a lib64/libMLIRROCDLToLLVMIRTranslation.a lib64/libMLIRGPUToLLVMIRTranslation.a lib64/libLLVMAArch64CodeGen.a lib64/libLLVMAArch64Desc.a lib64/libLLVMAArch64Info.a -lpthread lib64/libMLIRTargetLLVM.a lib64/libMLIRROCDLDialect.a lib64/libMLIRExecutionEngineUtils.a lib64/libMLIRGPUDialect.a lib64/libMLIRMemRefDialect.a lib64/libMLIRArithUtils.a lib64/libMLIRDialectUtils.a lib64/libMLIRComplexDialect.a lib64/libMLIRArithAttrToLLVMConversion.a lib64/libMLIRArithDialect.a lib64/libMLIRCastInterfaces.a lib64/libMLIRDialect.a lib64/libMLIRInferIntRangeCommon.a lib64/libMLIRUBDialect.a lib64/libMLIRShapedOpInterfaces.a lib64/libMLIRTargetLLVMIRExport.a lib64/libMLIRDLTIDialect.a lib64/libMLIRLLVMIRTransforms.a lib64/libMLIRNVVMDialect.a lib64/libMLIRLLVMDialect.a lib64/libMLIRFuncDialect.a lib64/libMLIRTransforms.a lib64/libMLIRMemorySlotInterfaces.a lib64/libMLIRCopyOpInterface.a lib64/libMLIRRuntimeVerifiableOpInterface.a lib64/libMLIRTranslateLib.a lib64/libMLIRParser.a lib64/libMLIRBytecodeReader.a lib64/libMLIRAsmParser.a lib64/libMLIRTransformUtils.a lib64/libMLIRSubsetOpInterface.a lib64/libMLIRValueBoundsOpInterface.a lib64/libMLIRDestinationStyleOpInterface.a lib64/libMLIRRewrite.a lib64/libMLIRRewritePDL.a lib64/libMLIRPDLToPDLInterp.a lib64/libMLIRPass.a lib64/libMLIRAnalysis.a lib64/libMLIRControlFlowInterfaces.a lib64/libMLIRInferIntRangeInterface.a lib64/libMLIRCallInterfaces.a lib64/libMLIRDataLayoutInterfaces.a lib64/libMLIRViewLikeInterface.a lib64/libMLIRLoopLikeInterface.a lib64/libMLIRPresburger.a lib64/libMLIRPDLInterpDialect.a lib64/libMLIRFunctionInterfaces.a lib64/libMLIRPDLDialect.a lib64/libMLIRSideEffectInterfaces.a lib64/libMLIRInferTypeOpInterface.a lib64/libMLIRIR.a lib64/libMLIRSupport.a lib64/libLLVM.so.19.1 lib64/libLLVMAArch64Utils.a lib64/libLLVMAsmPrinter.a lib64/libLLVMCFGuard.a lib64/libLLVMGlobalISel.a lib64/libLLVMSelectionDAG.a lib64/libLLVMCodeGen.a lib64/libLLVMScalarOpts.a lib64/libLLVMAggressiveInstCombine.a lib64/libLLVMInstCombine.a lib64/libLLVMBitWriter.a lib64/libLLVMObjCARCOpts.a lib64/libLLVMCodeGenTypes.a lib64/libLLVMTarget.a lib64/libLLVMVectorize.a lib64/libLLVMTransformUtils.a lib64/libLLVMAnalysis.a lib64/libLLVMProfileData.a lib64/libLLVMSymbolize.a lib64/libLLVMDebugInfoDWARF.a lib64/libLLVMDebugInfoPDB.a lib64/libLLVMObject.a lib64/libLLVMMCParser.a lib64/libLLVMMC.a lib64/libLLVMIRReader.a lib64/libLLVMBitReader.a lib64/libLLVMAsmParser.a lib64/libLLVMTextAPI.a lib64/libLLVMDebugInfoCodeView.a lib64/libLLVMDebugInfoMSF.a lib64/libLLVMDebugInfoBTF.a lib64/libLLVMCore.a lib64/libLLVMBinaryFormat.a lib64/libLLVMRemarks.a lib64/libLLVMBitstreamReader.a lib64/libLLVMTargetParser.a lib64/libLLVMSupport.a lib64/libLLVMDemangle.a -lrt -ldl -lm /usr/lib64/libz.so /usr/lib64/libzstd.so && : -``` - -Here's the full error: - -``` -[24/25] cd /builddir/build/BUILD/llvm-19.1.3-build/llvm-project-19.1.3.src/llvm/redhat-linux-build/tools/mlir/test && /usr/bin/python3 /builddir/build/BUILD/llvm-19.1.3-build/llvm-project-19.1.3.src/llvm/redhat-linux-build/./bin/llvm-lit -vv /builddir/build/BUILD/llvm-19.1.3-build/llvm-project-19.1.3.src/llvm/redhat-linux-build/tools/mlir/test -: CommandLine Error: Option 'aarch64-ptrauth-auth-checks' registered more than once! -LLVM ERROR: inconsistency in registered CommandLine options -llvm-lit: /builddir/build/BUILD/llvm-19.1.3-build/llvm-project-19.1.3.src/llvm/utils/lit/lit/formats/googletest.py:38: warning: unable to discover google-tests in '/builddir/build/BUILD/llvm-19.1.3-build/llvm-project-19.1.3.src/llvm/redhat-linux-build/tools/mlir/unittests/Target/LLVM/./MLIRTargetLLVMTests': Command '['/builddir/build/BUILD/llvm-19.1.3-build/llvm-project-19.1.3.src/llvm/redhat-linux-build/tools/mlir/unittests/Target/LLVM/./MLIRTargetLLVMTests', '--gtest_list_tests', '--gtest_filter=-*DISABLED_*']' died with .. Process output: b'' -error: filter did not match any tests (of 2704 discovered). Use '--allow-empty-runs' to suppress this error. -FAILED: tools/mlir/test/CMakeFiles/check-mlir /builddir/build/BUILD/llvm-19.1.3-build/llvm-project-19.1.3.src/llvm/redhat-linux-build/tools/mlir/test/CMakeFiles/check-mlir -``` - -Here's the CMake invocation: - -``` -/usr/bin/cmake -S . -B redhat-linux-build -DCMAKE_C_FLAGS_RELEASE:STRING=-DNDEBUG -DCMAKE_CXX_FLAGS_RELEASE:STRING=-DNDEBUG -DCMAKE_Fortran_FLAGS_RELEASE:STRING=-DNDEBUG -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_INSTALL_DO_STRIP:BOOL=OFF -DCMAKE_INSTALL_PREFIX:PATH=/usr -DINCLUDE_INSTALL_DIR:PATH=/usr/include -DLIB_INSTALL_DIR:PATH=/usr/lib64 -DSYSCONF_INSTALL_DIR:PATH=/etc -DSHARE_INSTALL_PREFIX:PATH=/usr/share -DLIB_SUFFIX=64 -DBUILD_SHARED_LIBS:BOOL=ON -G Ninja '' -DCLANG_BUILD_EXAMPLES:BOOL=OFF -DCLANG_CONFIG_FILE_SYSTEM_DIR=/etc/clang/ -DCLANG_DEFAULT_PIE_ON_LINUX=OFF -DCLANG_DEFAULT_UNWINDLIB=libgcc -DCLANG_ENABLE_ARCMT:BOOL=ON -DCLANG_ENABLE_STATIC_ANALYZER:BOOL=ON -DCLANG_INCLUDE_DOCS:BOOL=ON -DCLANG_INCLUDE_TESTS:BOOL=ON -DCLANG_LINK_CLANG_DYLIB=ON -DCLANG_PLUGIN_SUPPORT:BOOL=ON '-DCLANG_REPOSITORY_STRING=Fedora 19.1.3-5.fc42' -DLLVM_EXTERNAL_CLANG_TOOLS_EXTRA_SOURCE_DIR=../clang-tools-extra -DCLANG_RESOURCE_DIR=../lib/clang/19 -DCOMPILER_RT_INCLUDE_TESTS:BOOL=OFF -DCOMPILER_RT_INSTALL_PATH=/usr/lib/clang/19 -DLLVM_ENABLE_DOXYGEN:BOOL=OFF -DLLVM_ENABLE_SPHINX:BOOL=ON -DLLVM_BUILD_DOCS:BOOL=ON -DSPHINX_EXECUTABLE=/usr/bin/sphinx-build-3 -DSPHINX_OUTPUT_HTML:BOOL=OFF -DSPHINX_OUTPUT_MAN:BOOL=ON -DSPHINX_WARNINGS_AS_ERRORS=OFF -DLLDB_DISABLE_CURSES:BOOL=OFF -DLLDB_DISABLE_LIBEDIT:BOOL=OFF -DLLDB_DISABLE_PYTHON:BOOL=OFF -DLLDB_ENFORCE_STRICT_TEST_REQUIREMENTS:BOOL=ON -DLLVM_APPEND_VC_REV:BOOL=OFF -DLLVM_BUILD_EXAMPLES:BOOL=OFF -DLLVM_BUILD_EXTERNAL_COMPILER_RT:BOOL=ON -DLLVM_BUILD_LLVM_DYLIB:BOOL=ON -DLLVM_BUILD_RUNTIME:BOOL=ON -DLLVM_BUILD_TOOLS:BOOL=ON -DLLVM_BUILD_UTILS:BOOL=ON -DLLVM_COMMON_CMAKE_UTILS=/usr/share/llvm/cmake -DLLVM_DEFAULT_TARGET_TRIPLE=aarch64-redhat-linux-gnu -DLLVM_DYLIB_COMPONENTS=all -DLLVM_ENABLE_EH=ON -DLLVM_ENABLE_FFI:BOOL=ON -DLLVM_ENABLE_LIBCXX:BOOL=OFF -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON '-DLLVM_ENABLE_PROJECTS=clang;clang-tools-extra;lld;lldb;mlir' -DLLVM_ENABLE_RTTI:BOOL=ON '-DLLVM_ENABLE_RUNTIMES=compiler-rt;openmp;offload' -DLLVM_ENABLE_ZLIB:BOOL=ON -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=AVR -DLLVM_INCLUDE_BENCHMARKS=OFF -DLLVM_INCLUDE_EXAMPLES:BOOL=ON -DLLVM_INCLUDE_TOOLS:BOOL=ON -DLLVM_INCLUDE_UTILS:BOOL=ON -DLLVM_INSTALL_TOOLCHAIN_ONLY:BOOL=OFF -DLLVM_INSTALL_UTILS:BOOL=ON -DLLVM_LINK_LLVM_DYLIB:BOOL=ON -DLLVM_PARALLEL_LINK_JOBS=1 -DLLVM_TARGETS_TO_BUILD=all -DLLVM_TOOLS_INSTALL_DIR:PATH=bin -DLLVM_UNREACHABLE_OPTIMIZE:BOOL=OFF -DLLVM_USE_PERF:BOOL=ON -DLLVM_UTILS_INSTALL_DIR:PATH=bin -DMLIR_INCLUDE_DOCS:BOOL=ON -DMLIR_INCLUDE_TESTS:BOOL=ON -DMLIR_INCLUDE_INTEGRATION_TESTS:BOOL=OFF -DMLIR_INSTALL_AGGREGATE_OBJECTS=OFF -DMLIR_BUILD_MLIR_C_DYLIB=ON -DMLIR_ENABLE_BINDINGS_PYTHON:BOOL=ON -DOPENMP_INSTALL_LIBDIR=lib64 -DLIBOMP_INSTALL_ALIASES=OFF -DLLVM_BUILD_TESTS:BOOL=ON -DLLVM_INCLUDE_TESTS:BOOL=ON -DLLVM_INSTALL_GTEST:BOOL=ON -DLLVM_LIT_ARGS=-vv -DLLVM_UNITTEST_LINK_FLAGS=-fno-lto -DBUILD_SHARED_LIBS:BOOL=OFF -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=/usr -DENABLE_LINKER_BUILD_ID:BOOL=ON -DOFFLOAD_INSTALL_LIBDIR=lib64 -DPython3_EXECUTABLE=/usr/bin/python3 -DCMAKE_SKIP_INSTALL_RPATH:BOOL=ON -DPPC_LINUX_DEFAULT_IEEELONGDOUBLE=ON -DLLVM_LIBDIR_SUFFIX=64 -DLLVM_BINUTILS_INCDIR=/usr/include -DLLVM_VERSION_SUFFIX= -``` ---- - mlir/unittests/Target/LLVM/CMakeLists.txt | 5 ++--- - 1 file changed, 2 insertions(+), 3 deletions(-) - -diff --git a/mlir/unittests/Target/LLVM/CMakeLists.txt b/mlir/unittests/Target/LLVM/CMakeLists.txt -index 6d612548a94c..0c61d222dedf 100644 ---- a/mlir/unittests/Target/LLVM/CMakeLists.txt -+++ b/mlir/unittests/Target/LLVM/CMakeLists.txt -@@ -1,11 +1,11 @@ -+set(LLVM_LINK_COMPONENTS nativecodegen) -+ - add_mlir_unittest(MLIRTargetLLVMTests - SerializeNVVMTarget.cpp - SerializeROCDLTarget.cpp - SerializeToLLVMBitcode.cpp - ) - --llvm_map_components_to_libnames(llvm_libs nativecodegen) -- - target_link_libraries(MLIRTargetLLVMTests - PRIVATE - MLIRTargetLLVM -@@ -19,7 +19,6 @@ target_link_libraries(MLIRTargetLLVMTests - MLIRNVVMToLLVMIRTranslation - MLIRROCDLToLLVMIRTranslation - MLIRGPUToLLVMIRTranslation -- ${llvm_libs} - ) - - if (DEFINED LLVM_NATIVE_TARGET) --- -2.46.0 - diff --git a/SOURCES/0001-mlir-python-Reuse-the-library-directory.patch b/SOURCES/0001-mlir-python-Reuse-the-library-directory.patch deleted file mode 100644 index 7590347..0000000 --- a/SOURCES/0001-mlir-python-Reuse-the-library-directory.patch +++ /dev/null @@ -1,77 +0,0 @@ -From 1d043550c7601ca776b0318b9b913e5ecf325baf Mon Sep 17 00:00:00 2001 -From: Tulio Magno Quites Machado Filho -Date: Tue, 5 Sep 2023 10:35:37 -0300 -Subject: [PATCH] Reuse the library directory - -Prefer to get the path to the shared libraries from config.llvm_shlib_dir. -Fallback to the previous path only if config.llvm_shlib_dir is not -defined. - -This ensures the test will pass regardless of the build configuration -used downstream. ---- - mlir/test/lit.cfg.py | 1 + - mlir/test/python/execution_engine.py | 12 +++++++----- - 2 files changed, 8 insertions(+), 5 deletions(-) - -diff --git a/mlir/test/lit.cfg.py b/mlir/test/lit.cfg.py ---- a/mlir/test/lit.cfg.py 2024-08-05 10:40:33.000000000 +0200 -+++ b/mlir/test/lit.cfg.py 2024-08-14 19:17:55.160470316 +0200 -@@ -164,6 +164,7 @@ - ToolSubst("transform-opt-ch2", unresolved="ignore"), - ToolSubst("transform-opt-ch3", unresolved="ignore"), - ToolSubst("transform-opt-ch4", unresolved="ignore"), -+ ToolSubst("%llvm_shlib_dir", config.llvm_shlib_dir, unresolved="ignore"), - ToolSubst("mlir-transform-opt", unresolved="ignore"), - ToolSubst("%mlir_lib_dir", config.mlir_lib_dir, unresolved="ignore"), - ToolSubst("%mlir_src_dir", config.mlir_src_root, unresolved="ignore"), -diff -ruN mlir-19.1.0-rc2.src.orig/test/python/execution_engine.py mlir-19.1.0-rc2.src/test/python/execution_engine.py ---- a/mlir/test/python/execution_engine.py 2024-08-05 10:40:33.000000000 +0200 -+++ b/mlir/test/python/execution_engine.py 2024-08-14 19:17:20.822219824 +0200 -@@ -1,4 +1,4 @@ --# RUN: %PYTHON %s 2>&1 | FileCheck %s -+# RUN: env LLVM_SHLIB_DIR=%llvm_shlib_dir %PYTHON %s 2>&1 | FileCheck %s - # REQUIRES: host-supports-jit - import gc, sys, os, tempfile - from mlir.ir import * -@@ -6,6 +6,9 @@ - from mlir.execution_engine import * - from mlir.runtime import * - -+_DEFAULT_LIB_DIR = "../../../../lib" -+LIB_DIR = os.getenv("LLVM_SHLIB_DIR", _DEFAULT_LIB_DIR) -+ - - # Log everything to stderr and flush so that we have a unified stream to match - # errors/info emitted by MLIR to stderr. -@@ -613,6 +616,7 @@ - shared_libs = [ - "../../../../bin/mlir_runner_utils.dll", - "../../../../bin/mlir_c_runner_utils.dll", -+ - ] - elif sys.platform == "darwin": - shared_libs = [ -@@ -621,8 +625,9 @@ - ] - else: - shared_libs = [ -- "../../../../lib/libmlir_runner_utils.so", -- "../../../../lib/libmlir_c_runner_utils.so", -+ LIB_DIR + "/libmlir_runner_utils.so", -+ LIB_DIR + "/libmlir_c_runner_utils.so", -+ - ] - - execution_engine = ExecutionEngine( -@@ -664,8 +669,8 @@ - ] - else: - shared_libs = [ -- "../../../../lib/libmlir_runner_utils.so", -- "../../../../lib/libmlir_c_runner_utils.so", -+ LIB_DIR + "/libmlir_runner_utils.so", -+ LIB_DIR + "/libmlir_c_runner_utils.so", - ] - - execution_engine = ExecutionEngine( diff --git a/SOURCES/0001-openmp-Add-option-to-disable-tsan-tests-111548.patch b/SOURCES/0001-openmp-Add-option-to-disable-tsan-tests-111548.patch deleted file mode 100644 index 0e30347..0000000 --- a/SOURCES/0001-openmp-Add-option-to-disable-tsan-tests-111548.patch +++ /dev/null @@ -1,62 +0,0 @@ -From b2edeb58b8cb3268acee425cd52b406eb60a8095 Mon Sep 17 00:00:00 2001 -From: Nikita Popov -Date: Wed, 9 Oct 2024 11:29:30 +0200 -Subject: [PATCH] [openmp] Add option to disable tsan tests (#111548) - -This adds a OPENMP_TEST_ENABLE_TSAN option that allows to override -whether tests using tsan will be enabled. The option defaults to the -existing auto-detection. - -The background here is -https://github.com/llvm/llvm-project/issues/111492, where we have some -systems where tsan doesn't work, but we do still want to build it and -run tests that don't use tsan. ---- - openmp/cmake/OpenMPTesting.cmake | 3 +++ - openmp/tools/archer/tests/CMakeLists.txt | 2 +- - openmp/tools/archer/tests/lit.site.cfg.in | 2 +- - 3 files changed, 5 insertions(+), 2 deletions(-) - -diff --git a/openmp/cmake/OpenMPTesting.cmake b/openmp/cmake/OpenMPTesting.cmake -index c67ad8b1cbd9..14cc5c67d84c 100644 ---- a/openmp/cmake/OpenMPTesting.cmake -+++ b/openmp/cmake/OpenMPTesting.cmake -@@ -163,6 +163,9 @@ else() - set(OPENMP_TEST_COMPILER_HAS_OMIT_FRAME_POINTER_FLAGS 1) - endif() - -+set(OPENMP_TEST_ENABLE_TSAN "${OPENMP_TEST_COMPILER_HAS_TSAN_FLAGS}" CACHE BOOL -+ "Whether to enable tests using tsan") -+ - # Function to set compiler features for use in lit. - function(update_test_compiler_features) - set(FEATURES "[") -diff --git a/openmp/tools/archer/tests/CMakeLists.txt b/openmp/tools/archer/tests/CMakeLists.txt -index 5de91148fa4b..412c7d63725e 100644 ---- a/openmp/tools/archer/tests/CMakeLists.txt -+++ b/openmp/tools/archer/tests/CMakeLists.txt -@@ -28,7 +28,7 @@ macro(pythonize_bool var) - endmacro() - - pythonize_bool(LIBARCHER_HAVE_LIBATOMIC) --pythonize_bool(OPENMP_TEST_COMPILER_HAS_TSAN_FLAGS) -+pythonize_bool(OPENMP_TEST_ENABLE_TSAN) - - set(ARCHER_TSAN_TEST_DEPENDENCE "") - if(TARGET tsan) -diff --git a/openmp/tools/archer/tests/lit.site.cfg.in b/openmp/tools/archer/tests/lit.site.cfg.in -index 55edfde9738e..ddcb7b8bc3a5 100644 ---- a/openmp/tools/archer/tests/lit.site.cfg.in -+++ b/openmp/tools/archer/tests/lit.site.cfg.in -@@ -12,7 +12,7 @@ config.omp_library_dir = "@LIBOMP_LIBRARY_DIR@" - config.omp_header_dir = "@LIBOMP_INCLUDE_DIR@" - config.operating_system = "@CMAKE_SYSTEM_NAME@" - config.has_libatomic = @LIBARCHER_HAVE_LIBATOMIC@ --config.has_tsan = @OPENMP_TEST_COMPILER_HAS_TSAN_FLAGS@ -+config.has_tsan = @OPENMP_TEST_ENABLE_TSAN@ - - config.test_archer_flags = "@LIBARCHER_TEST_FLAGS@" - config.libarcher_obj_root = "@CMAKE_CURRENT_BINARY_DIR@" --- -2.46.0 - diff --git a/SOURCES/0001-openmp-Support-CET-in-z_Linux_asm.S-123213.patch b/SOURCES/0001-openmp-Support-CET-in-z_Linux_asm.S-123213.patch deleted file mode 100644 index 3fd4cd1..0000000 --- a/SOURCES/0001-openmp-Support-CET-in-z_Linux_asm.S-123213.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 90a05f32166c4a45224a5eedbec9c5c7e21d2dbf Mon Sep 17 00:00:00 2001 -From: Nikita Popov -Date: Fri, 17 Jan 2025 09:26:49 +0100 -Subject: [PATCH] [openmp] Support CET in z_Linux_asm.S (#123213) - -When libomp is built with -cf-protection, add endbr instructions to the -start of functions for Intel CET support. ---- - openmp/runtime/src/z_Linux_asm.S | 12 ++++++++++++ - 1 file changed, 12 insertions(+) - -diff --git a/openmp/runtime/src/z_Linux_asm.S b/openmp/runtime/src/z_Linux_asm.S -index cc5344cdd124..0bf9f07a13f1 100644 ---- a/openmp/runtime/src/z_Linux_asm.S -+++ b/openmp/runtime/src/z_Linux_asm.S -@@ -19,6 +19,16 @@ - - #if KMP_ARCH_X86 || KMP_ARCH_X86_64 - -+# if defined(__ELF__) && defined(__CET__) && defined(__has_include) -+# if __has_include() -+# include -+# endif -+# endif -+ -+# if !defined(_CET_ENDBR) -+# define _CET_ENDBR -+# endif -+ - # if KMP_MIC - // the 'delay r16/r32/r64' should be used instead of the 'pause'. - // The delay operation has the effect of removing the current thread from -@@ -66,6 +76,7 @@ - ALIGN 4 - .globl KMP_PREFIX_UNDERSCORE($0) - KMP_PREFIX_UNDERSCORE($0): -+ _CET_ENDBR - .endmacro - # else // KMP_OS_DARWIN - # define KMP_PREFIX_UNDERSCORE(x) x //no extra underscore for Linux* OS symbols -@@ -92,6 +103,7 @@ KMP_PREFIX_UNDERSCORE($0): - .globl KMP_PREFIX_UNDERSCORE(\proc) - KMP_PREFIX_UNDERSCORE(\proc): - .cfi_startproc -+ _CET_ENDBR - .endm - .macro KMP_CFI_DEF_OFFSET sz - .cfi_def_cfa_offset \sz --- -2.47.1 - diff --git a/SOURCES/0001-openmp-Use-core_siblings_list-if-physical_package_id.patch b/SOURCES/0001-openmp-Use-core_siblings_list-if-physical_package_id.patch deleted file mode 100644 index bacb81f..0000000 --- a/SOURCES/0001-openmp-Use-core_siblings_list-if-physical_package_id.patch +++ /dev/null @@ -1,205 +0,0 @@ -From 5fb4d7f6079a76b2907ccc8c53c7c509c30a3dca Mon Sep 17 00:00:00 2001 -From: Nikita Popov -Date: Thu, 10 Oct 2024 12:47:33 +0000 -Subject: [PATCH] [openmp] Use core_siblings_list if physical_package_id not - available - -On powerpc, physical_package_id may not be available. Currently, -this causes openmp to fall back to flat topology and various -affinity tests fail. - -Fix this by parsing core_siblings_list to deterimine which cpus -belong to the same socket. This matches what the testing code -does. The code to parse the CPU list format thankfully already -exists. - -Fixes https://github.com/llvm/llvm-project/issues/111809. ---- - openmp/runtime/src/kmp_affinity.cpp | 100 +++++++++++++------ - openmp/runtime/test/affinity/kmp-hw-subset.c | 2 +- - 2 files changed, 72 insertions(+), 30 deletions(-) - -diff --git a/openmp/runtime/src/kmp_affinity.cpp b/openmp/runtime/src/kmp_affinity.cpp -index cf5cad04eb57..c3d5ecf1345e 100644 ---- a/openmp/runtime/src/kmp_affinity.cpp -+++ b/openmp/runtime/src/kmp_affinity.cpp -@@ -1589,15 +1589,13 @@ kmp_str_buf_t *__kmp_affinity_str_buf_mask(kmp_str_buf_t *buf, - return buf; - } - --// Return (possibly empty) affinity mask representing the offline CPUs --// Caller must free the mask --kmp_affin_mask_t *__kmp_affinity_get_offline_cpus() { -- kmp_affin_mask_t *offline; -- KMP_CPU_ALLOC(offline); -- KMP_CPU_ZERO(offline); -+static kmp_affin_mask_t *__kmp_parse_cpu_list(const char *path) { -+ kmp_affin_mask_t *mask; -+ KMP_CPU_ALLOC(mask); -+ KMP_CPU_ZERO(mask); - #if KMP_OS_LINUX - int n, begin_cpu, end_cpu; -- kmp_safe_raii_file_t offline_file; -+ kmp_safe_raii_file_t file; - auto skip_ws = [](FILE *f) { - int c; - do { -@@ -1606,29 +1604,29 @@ kmp_affin_mask_t *__kmp_affinity_get_offline_cpus() { - if (c != EOF) - ungetc(c, f); - }; -- // File contains CSV of integer ranges representing the offline CPUs -+ // File contains CSV of integer ranges representing the CPUs - // e.g., 1,2,4-7,9,11-15 -- int status = offline_file.try_open("/sys/devices/system/cpu/offline", "r"); -+ int status = file.try_open(path, "r"); - if (status != 0) -- return offline; -- while (!feof(offline_file)) { -- skip_ws(offline_file); -- n = fscanf(offline_file, "%d", &begin_cpu); -+ return mask; -+ while (!feof(file)) { -+ skip_ws(file); -+ n = fscanf(file, "%d", &begin_cpu); - if (n != 1) - break; -- skip_ws(offline_file); -- int c = fgetc(offline_file); -+ skip_ws(file); -+ int c = fgetc(file); - if (c == EOF || c == ',') { - // Just single CPU - end_cpu = begin_cpu; - } else if (c == '-') { - // Range of CPUs -- skip_ws(offline_file); -- n = fscanf(offline_file, "%d", &end_cpu); -+ skip_ws(file); -+ n = fscanf(file, "%d", &end_cpu); - if (n != 1) - break; -- skip_ws(offline_file); -- c = fgetc(offline_file); // skip ',' -+ skip_ws(file); -+ c = fgetc(file); // skip ',' - } else { - // Syntax problem - break; -@@ -1638,13 +1636,19 @@ kmp_affin_mask_t *__kmp_affinity_get_offline_cpus() { - end_cpu >= __kmp_xproc || begin_cpu > end_cpu) { - continue; - } -- // Insert [begin_cpu, end_cpu] into offline mask -+ // Insert [begin_cpu, end_cpu] into mask - for (int cpu = begin_cpu; cpu <= end_cpu; ++cpu) { -- KMP_CPU_SET(cpu, offline); -+ KMP_CPU_SET(cpu, mask); - } - } - #endif -- return offline; -+ return mask; -+} -+ -+// Return (possibly empty) affinity mask representing the offline CPUs -+// Caller must free the mask -+kmp_affin_mask_t *__kmp_affinity_get_offline_cpus() { -+ return __kmp_parse_cpu_list("/sys/devices/system/cpu/offline"); - } - - // Return the number of available procs -@@ -3175,6 +3179,37 @@ static inline const char *__kmp_cpuinfo_get_envvar() { - return envvar; - } - -+static bool __kmp_package_id_from_core_siblings_list(unsigned **threadInfo, -+ unsigned num_avail, -+ unsigned idx) { -+ if (!KMP_AFFINITY_CAPABLE()) -+ return false; -+ -+ char path[256]; -+ KMP_SNPRINTF(path, sizeof(path), -+ "/sys/devices/system/cpu/cpu%u/topology/core_siblings_list", -+ threadInfo[idx][osIdIndex]); -+ kmp_affin_mask_t *siblings = __kmp_parse_cpu_list(path); -+ for (unsigned i = 0; i < num_avail; ++i) { -+ unsigned cpu_id = threadInfo[i][osIdIndex]; -+ KMP_ASSERT(cpu_id < __kmp_affin_mask_size * CHAR_BIT); -+ if (!KMP_CPU_ISSET(cpu_id, siblings)) -+ continue; -+ if (threadInfo[i][pkgIdIndex] == UINT_MAX) { -+ // Arbitrarily pick the first index we encounter, it only matters that -+ // the value is the same for all siblings. -+ threadInfo[i][pkgIdIndex] = idx; -+ } else if (threadInfo[i][pkgIdIndex] != idx) { -+ // Contradictory sibling lists. -+ KMP_CPU_FREE(siblings); -+ return false; -+ } -+ } -+ KMP_ASSERT(threadInfo[idx][pkgIdIndex] != UINT_MAX); -+ KMP_CPU_FREE(siblings); -+ return true; -+} -+ - // Parse /proc/cpuinfo (or an alternate file in the same format) to obtain the - // affinity map. On AIX, the map is obtained through system SRAD (Scheduler - // Resource Allocation Domain). -@@ -3550,18 +3585,13 @@ static bool __kmp_affinity_create_cpuinfo_map(int *line, - return false; - } - -- // Check for missing fields. The osId field must be there, and we -- // currently require that the physical id field is specified, also. -+ // Check for missing fields. The osId field must be there. The physical -+ // id field will be checked later. - if (threadInfo[num_avail][osIdIndex] == UINT_MAX) { - CLEANUP_THREAD_INFO; - *msg_id = kmp_i18n_str_MissingProcField; - return false; - } -- if (threadInfo[0][pkgIdIndex] == UINT_MAX) { -- CLEANUP_THREAD_INFO; -- *msg_id = kmp_i18n_str_MissingPhysicalIDField; -- return false; -- } - - // Skip this proc if it is not included in the machine model. - if (KMP_AFFINITY_CAPABLE() && -@@ -3591,6 +3621,18 @@ static bool __kmp_affinity_create_cpuinfo_map(int *line, - } - *line = 0; - -+ // At least on powerpc, Linux may return -1 for physical_package_id. Try -+ // to reconstruct topology from core_siblings_list in that case. -+ for (i = 0; i < num_avail; ++i) { -+ if (threadInfo[i][pkgIdIndex] == UINT_MAX) { -+ if (!__kmp_package_id_from_core_siblings_list(threadInfo, num_avail, i)) { -+ CLEANUP_THREAD_INFO; -+ *msg_id = kmp_i18n_str_MissingPhysicalIDField; -+ return false; -+ } -+ } -+ } -+ - #if KMP_MIC && REDUCE_TEAM_SIZE - unsigned teamSize = 0; - #endif // KMP_MIC && REDUCE_TEAM_SIZE -diff --git a/openmp/runtime/test/affinity/kmp-hw-subset.c b/openmp/runtime/test/affinity/kmp-hw-subset.c -index 606fcdfbada9..0b49969bd3b1 100644 ---- a/openmp/runtime/test/affinity/kmp-hw-subset.c -+++ b/openmp/runtime/test/affinity/kmp-hw-subset.c -@@ -25,7 +25,7 @@ static int compare_hw_subset_places(const place_list_t *openmp_places, - expected_per_place = nthreads_per_core; - } else { - expected_total = nsockets; -- expected_per_place = ncores_per_socket; -+ expected_per_place = ncores_per_socket * nthreads_per_core; - } - if (openmp_places->num_places != expected_total) { - fprintf(stderr, "error: KMP_HW_SUBSET did not half each resource layer!\n"); --- -2.47.0 - diff --git a/SOURCES/0001-profile-Use-base-vaddr-for-__llvm_write_binary_ids-n.patch b/SOURCES/0001-profile-Use-base-vaddr-for-__llvm_write_binary_ids-n.patch deleted file mode 100644 index 7f0a7cf..0000000 --- a/SOURCES/0001-profile-Use-base-vaddr-for-__llvm_write_binary_ids-n.patch +++ /dev/null @@ -1,86 +0,0 @@ -From ccc2b792e57d632bc887b226a4e7f0a8189eab8b Mon Sep 17 00:00:00 2001 -From: Josh Stone -Date: Mon, 4 Nov 2024 16:37:49 -0800 -Subject: [PATCH] [profile] Use base+vaddr for `__llvm_write_binary_ids` note - pointers - -This function is always examining its own ELF headers in memory, but it -was trying to use conditions between examining files or memory, and it -wasn't accounting for LOAD offsets at runtime. This is especially bad if -a loaded segment has additional padding that's not in the file offsets. - -Now we do a first scan of the program headers to figure out the runtime -base address based on `PT_PHDR` and/or `PT_DYNAMIC` (else assume zero), -similar to libc's `do_start`. Then each `PT_NOTE` pointer is simply the -base plus the segments's `pt_vaddr`, which includes LOAD offsets. - -Fixes #114605 ---- - .../lib/profile/InstrProfilingPlatformLinux.c | 40 ++++++++----------- - 1 file changed, 16 insertions(+), 24 deletions(-) - -diff --git a/compiler-rt/lib/profile/InstrProfilingPlatformLinux.c b/compiler-rt/lib/profile/InstrProfilingPlatformLinux.c -index e2c06d51e0c6..c365129a0768 100644 ---- a/compiler-rt/lib/profile/InstrProfilingPlatformLinux.c -+++ b/compiler-rt/lib/profile/InstrProfilingPlatformLinux.c -@@ -194,41 +194,33 @@ static int WriteBinaryIds(ProfDataWriter *Writer, const ElfW(Nhdr) * Note, - */ - COMPILER_RT_VISIBILITY int __llvm_write_binary_ids(ProfDataWriter *Writer) { - extern const ElfW(Ehdr) __ehdr_start __attribute__((visibility("hidden"))); -+ extern ElfW(Dyn) _DYNAMIC[] __attribute__((weak, visibility("hidden"))); -+ - const ElfW(Ehdr) *ElfHeader = &__ehdr_start; - const ElfW(Phdr) *ProgramHeader = - (const ElfW(Phdr) *)((uintptr_t)ElfHeader + ElfHeader->e_phoff); - -+ /* Compute the added base address in case of position-independent code. */ -+ uintptr_t Base = 0; -+ for (uint32_t I = 0; I < ElfHeader->e_phnum; I++) { -+ if (ProgramHeader[I].p_type == PT_PHDR) -+ Base = (uintptr_t)ProgramHeader - ProgramHeader[I].p_vaddr; -+ if (ProgramHeader[I].p_type == PT_DYNAMIC && _DYNAMIC) -+ Base = (uintptr_t)_DYNAMIC - ProgramHeader[I].p_vaddr; -+ } -+ - int TotalBinaryIdsSize = 0; -- uint32_t I; - /* Iterate through entries in the program header. */ -- for (I = 0; I < ElfHeader->e_phnum; I++) { -+ for (uint32_t I = 0; I < ElfHeader->e_phnum; I++) { - /* Look for the notes segment in program header entries. */ - if (ProgramHeader[I].p_type != PT_NOTE) - continue; - - /* There can be multiple notes segment, and examine each of them. */ -- const ElfW(Nhdr) * Note; -- const ElfW(Nhdr) * NotesEnd; -- /* -- * When examining notes in file, use p_offset, which is the offset within -- * the elf file, to find the start of notes. -- */ -- if (ProgramHeader[I].p_memsz == 0 || -- ProgramHeader[I].p_memsz == ProgramHeader[I].p_filesz) { -- Note = (const ElfW(Nhdr) *)((uintptr_t)ElfHeader + -- ProgramHeader[I].p_offset); -- NotesEnd = (const ElfW(Nhdr) *)((const char *)(Note) + -- ProgramHeader[I].p_filesz); -- } else { -- /* -- * When examining notes in memory, use p_vaddr, which is the address of -- * section after loaded to memory, to find the start of notes. -- */ -- Note = -- (const ElfW(Nhdr) *)((uintptr_t)ElfHeader + ProgramHeader[I].p_vaddr); -- NotesEnd = -- (const ElfW(Nhdr) *)((const char *)(Note) + ProgramHeader[I].p_memsz); -- } -+ const ElfW(Nhdr) *Note = -+ (const ElfW(Nhdr) *)(Base + ProgramHeader[I].p_vaddr); -+ const ElfW(Nhdr) *NotesEnd = -+ (const ElfW(Nhdr) *)((const char *)(Note) + ProgramHeader[I].p_memsz); - - int BinaryIdsSize = WriteBinaryIds(Writer, Note, NotesEnd); - if (TotalBinaryIdsSize == -1) --- -2.47.0 - diff --git a/SOURCES/18-99273.patch b/SOURCES/18-99273.patch deleted file mode 100644 index bacb46b..0000000 --- a/SOURCES/18-99273.patch +++ /dev/null @@ -1,893 +0,0 @@ -From 91052169960477fbc39169c10f9fae3bec732510 Mon Sep 17 00:00:00 2001 -From: Carl Ritson -Date: Wed, 17 Jul 2024 15:07:42 +0900 -Subject: [PATCH 1/3] [AMDGPU] Implement workaround for GFX11.5 export priority - -On GFX11.5 shaders having completed exports need to execute/wait -at a lower priority than shaders still executing exports. -Add code to maintain normal priority of 2 for shaders that export -and drop to priority 0 after exports. ---- - llvm/lib/Target/AMDGPU/AMDGPU.td | 15 +- - .../lib/Target/AMDGPU/GCNHazardRecognizer.cpp | 112 ++++++ - llvm/lib/Target/AMDGPU/GCNHazardRecognizer.h | 1 + - llvm/lib/Target/AMDGPU/GCNSubtarget.h | 3 + - .../AMDGPU/required-export-priority.ll | 344 ++++++++++++++++++ - .../AMDGPU/required-export-priority.mir | 293 +++++++++++++++ - 6 files changed, 765 insertions(+), 3 deletions(-) - create mode 100644 llvm/test/CodeGen/AMDGPU/required-export-priority.ll - create mode 100644 llvm/test/CodeGen/AMDGPU/required-export-priority.mir - -diff --git a/llvm/lib/Target/AMDGPU/AMDGPU.td b/llvm/lib/Target/AMDGPU/AMDGPU.td -index dfc8eaea66f7b..14fcf6a210a78 100644 ---- a/llvm/lib/Target/AMDGPU/AMDGPU.td -+++ b/llvm/lib/Target/AMDGPU/AMDGPU.td -@@ -947,6 +947,12 @@ def FeatureHasRestrictedSOffset : SubtargetFeature<"restricted-soffset", - "Has restricted SOffset (immediate not supported)." - >; - -+def FeatureRequiredExportPriority : SubtargetFeature<"required-export-priority", -+ "HasRequiredExportPriority", -+ "true", -+ "Export priority must be explicitly manipulated on GFX11.5" -+>; -+ - //===------------------------------------------------------------===// - // Subtarget Features (options and debugging) - //===------------------------------------------------------------===// -@@ -1597,14 +1603,16 @@ def FeatureISAVersion11_5_0 : FeatureSet< - !listconcat(FeatureISAVersion11_Common.Features, - [FeatureSALUFloatInsts, - FeatureDPPSrc1SGPR, -- FeatureVGPRSingleUseHintInsts])>; -+ FeatureVGPRSingleUseHintInsts, -+ FeatureRequiredExportPriority])>; - - def FeatureISAVersion11_5_1 : FeatureSet< - !listconcat(FeatureISAVersion11_Common.Features, - [FeatureSALUFloatInsts, - FeatureDPPSrc1SGPR, - FeatureVGPRSingleUseHintInsts, -- FeatureGFX11FullVGPRs])>; -+ FeatureGFX11FullVGPRs, -+ FeatureRequiredExportPriority])>; - - def FeatureISAVersion12 : FeatureSet< - [FeatureGFX12, -diff --git a/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp b/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp -index a402fc6d7e611..a8b171aa82840 100644 ---- a/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp -+++ b/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp -@@ -14,6 +14,7 @@ - #include "GCNSubtarget.h" - #include "MCTargetDesc/AMDGPUMCTargetDesc.h" - #include "SIMachineFunctionInfo.h" -+#include "llvm/CodeGen/MachineFrameInfo.h" - #include "llvm/CodeGen/MachineFunction.h" - #include "llvm/CodeGen/ScheduleDAG.h" - #include "llvm/TargetParser/TargetParser.h" -@@ -1104,6 +1105,7 @@ void GCNHazardRecognizer::fixHazards(MachineInstr *MI) { - fixWMMAHazards(MI); - fixShift64HighRegBug(MI); - fixVALUMaskWriteHazard(MI); -+ fixRequiredExportPriority(MI); - } - - bool GCNHazardRecognizer::fixVcmpxPermlaneHazards(MachineInstr *MI) { -@@ -2895,3 +2897,113 @@ bool GCNHazardRecognizer::fixVALUMaskWriteHazard(MachineInstr *MI) { - - return true; - } -+ -+static bool ensureEntrySetPrio(MachineFunction *MF, int Priority, -+ const SIInstrInfo &TII) { -+ MachineBasicBlock &EntryMBB = MF->front(); -+ if (EntryMBB.begin() != EntryMBB.end()) { -+ auto &EntryMI = *EntryMBB.begin(); -+ if (EntryMI.getOpcode() == AMDGPU::S_SETPRIO && -+ EntryMI.getOperand(0).getImm() >= Priority) -+ return false; -+ } -+ -+ BuildMI(EntryMBB, EntryMBB.begin(), DebugLoc(), TII.get(AMDGPU::S_SETPRIO)) -+ .addImm(Priority); -+ return true; -+} -+ -+bool GCNHazardRecognizer::fixRequiredExportPriority(MachineInstr *MI) { -+ if (!ST.hasRequiredExportPriority()) -+ return false; -+ -+ // Assume the following shader types will never have exports, -+ // and avoid adding or adjusting S_SETPRIO. -+ MachineBasicBlock *MBB = MI->getParent(); -+ MachineFunction *MF = MBB->getParent(); -+ auto CC = MF->getFunction().getCallingConv(); -+ switch (CC) { -+ case CallingConv::AMDGPU_CS: -+ case CallingConv::AMDGPU_CS_Chain: -+ case CallingConv::AMDGPU_CS_ChainPreserve: -+ case CallingConv::AMDGPU_KERNEL: -+ return false; -+ default: -+ break; -+ } -+ -+ const int MaxPriority = 3; -+ const int NormalPriority = 2; -+ const int PostExportPriority = 0; -+ -+ auto It = MI->getIterator(); -+ switch (MI->getOpcode()) { -+ case AMDGPU::S_ENDPGM: -+ case AMDGPU::S_ENDPGM_SAVED: -+ case AMDGPU::S_ENDPGM_ORDERED_PS_DONE: -+ case AMDGPU::SI_RETURN_TO_EPILOG: -+ // Ensure shader with calls raises priority at entry. -+ // This ensures correct priority if exports exist in callee. -+ if (MF->getFrameInfo().hasCalls()) -+ return ensureEntrySetPrio(MF, NormalPriority, TII); -+ return false; -+ case AMDGPU::S_SETPRIO: { -+ // Raise minimum priority unless in workaround. -+ auto &PrioOp = MI->getOperand(0); -+ int Prio = PrioOp.getImm(); -+ bool InWA = (Prio == PostExportPriority) && -+ (It != MBB->begin() && TII.isEXP(*std::prev(It))); -+ if (InWA || Prio >= NormalPriority) -+ return false; -+ PrioOp.setImm(std::min(Prio + NormalPriority, MaxPriority)); -+ return true; -+ } -+ default: -+ if (!TII.isEXP(*MI)) -+ return false; -+ break; -+ } -+ -+ // Check entry priority at each export (as there will only be a few). -+ // Note: amdgpu_gfx can only be a callee, so defer to caller setprio. -+ bool Changed = false; -+ if (CC != CallingConv::AMDGPU_Gfx) -+ Changed = ensureEntrySetPrio(MF, NormalPriority, TII); -+ -+ auto NextMI = std::next(It); -+ bool EndOfShader = false; -+ if (NextMI != MBB->end()) { -+ // Only need WA at end of sequence of exports. -+ if (TII.isEXP(*NextMI)) -+ return Changed; -+ // Assume appropriate S_SETPRIO after export means WA already applied. -+ if (NextMI->getOpcode() == AMDGPU::S_SETPRIO && -+ NextMI->getOperand(0).getImm() == PostExportPriority) -+ return Changed; -+ EndOfShader = NextMI->getOpcode() == AMDGPU::S_ENDPGM; -+ } -+ -+ const DebugLoc &DL = MI->getDebugLoc(); -+ -+ // Lower priority. -+ BuildMI(*MBB, NextMI, DL, TII.get(AMDGPU::S_SETPRIO)) -+ .addImm(PostExportPriority); -+ -+ if (!EndOfShader) { -+ // Wait for exports to complete. -+ BuildMI(*MBB, NextMI, DL, TII.get(AMDGPU::S_WAITCNT_EXPCNT)) -+ .addReg(AMDGPU::SGPR_NULL) -+ .addImm(0); -+ } -+ -+ BuildMI(*MBB, NextMI, DL, TII.get(AMDGPU::S_NOP)).addImm(0); -+ BuildMI(*MBB, NextMI, DL, TII.get(AMDGPU::S_NOP)).addImm(0); -+ -+ if (!EndOfShader) { -+ // Return to normal (higher) priority. -+ BuildMI(*MBB, NextMI, DL, TII.get(AMDGPU::S_SETPRIO)) -+ .addImm(NormalPriority); -+ } -+ -+ return true; -+} -diff --git a/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.h b/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.h -index 3ccca527c626b..f2a64ab48e180 100644 ---- a/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.h -+++ b/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.h -@@ -107,6 +107,7 @@ class GCNHazardRecognizer final : public ScheduleHazardRecognizer { - bool fixWMMAHazards(MachineInstr *MI); - bool fixShift64HighRegBug(MachineInstr *MI); - bool fixVALUMaskWriteHazard(MachineInstr *MI); -+ bool fixRequiredExportPriority(MachineInstr *MI); - - int checkMAIHazards(MachineInstr *MI); - int checkMAIHazards908(MachineInstr *MI); -diff --git a/llvm/lib/Target/AMDGPU/GCNSubtarget.h b/llvm/lib/Target/AMDGPU/GCNSubtarget.h -index e5817594a4521..def89c785b855 100644 ---- a/llvm/lib/Target/AMDGPU/GCNSubtarget.h -+++ b/llvm/lib/Target/AMDGPU/GCNSubtarget.h -@@ -238,6 +238,7 @@ class GCNSubtarget final : public AMDGPUGenSubtargetInfo, - bool HasVOPDInsts = false; - bool HasVALUTransUseHazard = false; - bool HasForceStoreSC0SC1 = false; -+ bool HasRequiredExportPriority = false; - - // Dummy feature to use for assembler in tablegen. - bool FeatureDisable = false; -@@ -1282,6 +1283,8 @@ class GCNSubtarget final : public AMDGPUGenSubtargetInfo, - - bool hasRestrictedSOffset() const { return HasRestrictedSOffset; } - -+ bool hasRequiredExportPriority() const { return HasRequiredExportPriority; } -+ - /// \returns true if the target uses LOADcnt/SAMPLEcnt/BVHcnt, DScnt/KMcnt - /// and STOREcnt rather than VMcnt, LGKMcnt and VScnt respectively. - bool hasExtendedWaitCounts() const { return getGeneration() >= GFX12; } -diff --git a/llvm/test/CodeGen/AMDGPU/required-export-priority.ll b/llvm/test/CodeGen/AMDGPU/required-export-priority.ll -new file mode 100644 -index 0000000000000..377902f3f0d1a ---- /dev/null -+++ b/llvm/test/CodeGen/AMDGPU/required-export-priority.ll -@@ -0,0 +1,344 @@ -+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 -+; RUN: llc -mtriple=amdgcn -mcpu=gfx1150 -amdgpu-enable-vopd=0 -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s -+ -+define amdgpu_ps void @test_export_zeroes_f32() #0 { -+; GCN-LABEL: test_export_zeroes_f32: -+; GCN: ; %bb.0: -+; GCN-NEXT: s_setprio 2 -+; GCN-NEXT: v_mov_b32_e32 v0, 0 -+; GCN-NEXT: exp mrt0 off, off, off, off -+; GCN-NEXT: exp mrt0 off, off, off, off done -+; GCN-NEXT: s_setprio 0 -+; GCN-NEXT: s_nop 0 -+; GCN-NEXT: s_nop 0 -+; GCN-NEXT: s_endpgm -+ call void @llvm.amdgcn.exp.f32(i32 0, i32 0, float 0.0, float 0.0, float 0.0, float 0.0, i1 false, i1 false) -+ call void @llvm.amdgcn.exp.f32(i32 0, i32 0, float 0.0, float 0.0, float 0.0, float 0.0, i1 true, i1 false) -+ ret void -+} -+ -+define amdgpu_ps void @test_export_en_src0_f32() #0 { -+; GCN-LABEL: test_export_en_src0_f32: -+; GCN: ; %bb.0: -+; GCN-NEXT: s_setprio 2 -+; GCN-NEXT: v_mov_b32_e32 v0, 4.0 -+; GCN-NEXT: v_mov_b32_e32 v1, 0.5 -+; GCN-NEXT: v_mov_b32_e32 v2, 2.0 -+; GCN-NEXT: v_mov_b32_e32 v3, 1.0 -+; GCN-NEXT: exp mrt0 v3, off, off, off done -+; GCN-NEXT: s_setprio 0 -+; GCN-NEXT: s_nop 0 -+; GCN-NEXT: s_nop 0 -+; GCN-NEXT: s_endpgm -+ call void @llvm.amdgcn.exp.f32(i32 0, i32 1, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false) -+ ret void -+} -+ -+define amdgpu_gs void @test_export_gs() #0 { -+; GCN-LABEL: test_export_gs: -+; GCN: ; %bb.0: -+; GCN-NEXT: s_setprio 2 -+; GCN-NEXT: v_mov_b32_e32 v0, 4.0 -+; GCN-NEXT: v_mov_b32_e32 v1, 0.5 -+; GCN-NEXT: v_mov_b32_e32 v2, 2.0 -+; GCN-NEXT: v_mov_b32_e32 v3, 1.0 -+; GCN-NEXT: exp mrt0 off, v2, off, off done -+; GCN-NEXT: s_setprio 0 -+; GCN-NEXT: s_nop 0 -+; GCN-NEXT: s_nop 0 -+; GCN-NEXT: s_endpgm -+ call void @llvm.amdgcn.exp.f32(i32 0, i32 2, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false) -+ ret void -+} -+ -+define amdgpu_hs void @test_export_hs() #0 { -+; GCN-LABEL: test_export_hs: -+; GCN: ; %bb.0: -+; GCN-NEXT: s_setprio 2 -+; GCN-NEXT: v_mov_b32_e32 v0, 4.0 -+; GCN-NEXT: v_mov_b32_e32 v1, 0.5 -+; GCN-NEXT: v_mov_b32_e32 v2, 2.0 -+; GCN-NEXT: v_mov_b32_e32 v3, 1.0 -+; GCN-NEXT: exp mrt0 off, v2, off, off done -+; GCN-NEXT: s_setprio 0 -+; GCN-NEXT: s_nop 0 -+; GCN-NEXT: s_nop 0 -+; GCN-NEXT: s_endpgm -+ call void @llvm.amdgcn.exp.f32(i32 0, i32 2, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false) -+ ret void -+} -+ -+define amdgpu_gfx void @test_export_gfx(float %v) #0 { -+; GCN-LABEL: test_export_gfx: -+; GCN: ; %bb.0: -+; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) -+; GCN-NEXT: v_mov_b32_e32 v1, 4.0 -+; GCN-NEXT: v_mov_b32_e32 v2, 0.5 -+; GCN-NEXT: v_mov_b32_e32 v3, 2.0 -+; GCN-NEXT: exp mrt0 off, v3, off, off done -+; GCN-NEXT: s_setprio 0 -+; GCN-NEXT: s_waitcnt_expcnt null, 0x0 -+; GCN-NEXT: s_nop 0 -+; GCN-NEXT: s_nop 0 -+; GCN-NEXT: s_setprio 2 -+; GCN-NEXT: s_waitcnt expcnt(0) -+; GCN-NEXT: s_setpc_b64 s[30:31] -+ call void @llvm.amdgcn.exp.f32(i32 0, i32 2, float %v, float 2.0, float 0.5, float 4.0, i1 true, i1 false) -+ ret void -+} -+ -+define amdgpu_cs void @test_export_cs() #0 { -+; GCN-LABEL: test_export_cs: -+; GCN: ; %bb.0: -+; GCN-NEXT: v_mov_b32_e32 v0, 4.0 -+; GCN-NEXT: v_mov_b32_e32 v1, 0.5 -+; GCN-NEXT: v_mov_b32_e32 v2, 2.0 -+; GCN-NEXT: v_mov_b32_e32 v3, 1.0 -+; GCN-NEXT: exp mrt0 off, v2, off, off done -+; GCN-NEXT: s_endpgm -+ call void @llvm.amdgcn.exp.f32(i32 0, i32 2, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false) -+ ret void -+} -+ -+define amdgpu_kernel void @test_export_kernel() #0 { -+; GCN-LABEL: test_export_kernel: -+; GCN: ; %bb.0: -+; GCN-NEXT: v_mov_b32_e32 v0, 4.0 -+; GCN-NEXT: v_mov_b32_e32 v1, 0.5 -+; GCN-NEXT: v_mov_b32_e32 v2, 2.0 -+; GCN-NEXT: v_mov_b32_e32 v3, 1.0 -+; GCN-NEXT: exp mrt0 off, v2, off, off done -+; GCN-NEXT: s_endpgm -+ call void @llvm.amdgcn.exp.f32(i32 0, i32 2, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false) -+ ret void -+} -+ -+define amdgpu_gfx void @test_no_export_gfx(float %v) #0 { -+; GCN-LABEL: test_no_export_gfx: -+; GCN: ; %bb.0: -+; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) -+; GCN-NEXT: s_setpc_b64 s[30:31] -+ ret void -+} -+ -+define amdgpu_ps void @test_no_export_ps(float %v) #0 { -+; GCN-LABEL: test_no_export_ps: -+; GCN: ; %bb.0: -+; GCN-NEXT: s_endpgm -+ ret void -+} -+ -+define amdgpu_ps void @test_if_export_f32(i32 %flag, float %x, float %y, float %z, float %w) #0 { -+; GCN-LABEL: test_if_export_f32: -+; GCN: ; %bb.0: -+; GCN-NEXT: s_setprio 2 -+; GCN-NEXT: s_mov_b32 s0, exec_lo -+; GCN-NEXT: v_cmpx_ne_u32_e32 0, v0 -+; GCN-NEXT: s_cbranch_execz .LBB9_2 -+; GCN-NEXT: ; %bb.1: ; %exp -+; GCN-NEXT: exp mrt0 v1, v2, v3, v4 -+; GCN-NEXT: s_setprio 0 -+; GCN-NEXT: s_waitcnt_expcnt null, 0x0 -+; GCN-NEXT: s_nop 0 -+; GCN-NEXT: s_nop 0 -+; GCN-NEXT: s_setprio 2 -+; GCN-NEXT: .LBB9_2: ; %end -+; GCN-NEXT: s_endpgm -+ %cc = icmp eq i32 %flag, 0 -+ br i1 %cc, label %end, label %exp -+ -+exp: -+ call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %x, float %y, float %z, float %w, i1 false, i1 false) -+ br label %end -+ -+end: -+ ret void -+} -+ -+define amdgpu_ps void @test_if_export_vm_f32(i32 %flag, float %x, float %y, float %z, float %w) #0 { -+; GCN-LABEL: test_if_export_vm_f32: -+; GCN: ; %bb.0: -+; GCN-NEXT: s_setprio 2 -+; GCN-NEXT: s_mov_b32 s0, exec_lo -+; GCN-NEXT: v_cmpx_ne_u32_e32 0, v0 -+; GCN-NEXT: s_cbranch_execz .LBB10_2 -+; GCN-NEXT: ; %bb.1: ; %exp -+; GCN-NEXT: exp mrt0 v1, v2, v3, v4 -+; GCN-NEXT: s_setprio 0 -+; GCN-NEXT: s_waitcnt_expcnt null, 0x0 -+; GCN-NEXT: s_nop 0 -+; GCN-NEXT: s_nop 0 -+; GCN-NEXT: s_setprio 2 -+; GCN-NEXT: .LBB10_2: ; %end -+; GCN-NEXT: s_endpgm -+ %cc = icmp eq i32 %flag, 0 -+ br i1 %cc, label %end, label %exp -+ -+exp: -+ call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %x, float %y, float %z, float %w, i1 false, i1 true) -+ br label %end -+ -+end: -+ ret void -+} -+ -+define amdgpu_ps void @test_if_export_done_f32(i32 %flag, float %x, float %y, float %z, float %w) #0 { -+; GCN-LABEL: test_if_export_done_f32: -+; GCN: ; %bb.0: -+; GCN-NEXT: s_setprio 2 -+; GCN-NEXT: s_mov_b32 s0, exec_lo -+; GCN-NEXT: v_cmpx_ne_u32_e32 0, v0 -+; GCN-NEXT: s_cbranch_execz .LBB11_2 -+; GCN-NEXT: ; %bb.1: ; %exp -+; GCN-NEXT: exp mrt0 v1, v2, v3, v4 done -+; GCN-NEXT: s_setprio 0 -+; GCN-NEXT: s_waitcnt_expcnt null, 0x0 -+; GCN-NEXT: s_nop 0 -+; GCN-NEXT: s_nop 0 -+; GCN-NEXT: s_setprio 2 -+; GCN-NEXT: .LBB11_2: ; %end -+; GCN-NEXT: s_endpgm -+ %cc = icmp eq i32 %flag, 0 -+ br i1 %cc, label %end, label %exp -+ -+exp: -+ call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %x, float %y, float %z, float %w, i1 true, i1 false) -+ br label %end -+ -+end: -+ ret void -+} -+ -+define amdgpu_ps void @test_if_export_vm_done_f32(i32 %flag, float %x, float %y, float %z, float %w) #0 { -+; GCN-LABEL: test_if_export_vm_done_f32: -+; GCN: ; %bb.0: -+; GCN-NEXT: s_setprio 2 -+; GCN-NEXT: s_mov_b32 s0, exec_lo -+; GCN-NEXT: v_cmpx_ne_u32_e32 0, v0 -+; GCN-NEXT: s_cbranch_execz .LBB12_2 -+; GCN-NEXT: ; %bb.1: ; %exp -+; GCN-NEXT: exp mrt0 v1, v2, v3, v4 done -+; GCN-NEXT: s_setprio 0 -+; GCN-NEXT: s_waitcnt_expcnt null, 0x0 -+; GCN-NEXT: s_nop 0 -+; GCN-NEXT: s_nop 0 -+; GCN-NEXT: s_setprio 2 -+; GCN-NEXT: .LBB12_2: ; %end -+; GCN-NEXT: s_endpgm -+ %cc = icmp eq i32 %flag, 0 -+ br i1 %cc, label %end, label %exp -+ -+exp: -+ call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %x, float %y, float %z, float %w, i1 true, i1 true) -+ br label %end -+ -+end: -+ ret void -+} -+ -+define amdgpu_ps void @test_export_pos_before_param_across_load(i32 %idx) #0 { -+; GCN-LABEL: test_export_pos_before_param_across_load: -+; GCN: ; %bb.0: -+; GCN-NEXT: s_setprio 2 -+; GCN-NEXT: buffer_load_b32 v0, v0, s[0:3], 0 offen -+; GCN-NEXT: v_mov_b32_e32 v1, 0 -+; GCN-NEXT: v_mov_b32_e32 v2, 1.0 -+; GCN-NEXT: v_mov_b32_e32 v3, 0.5 -+; GCN-NEXT: s_waitcnt vmcnt(0) -+; GCN-NEXT: exp pos0 v1, v1, v1, v0 done -+; GCN-NEXT: exp invalid_target_32 v2, v2, v2, v2 -+; GCN-NEXT: exp invalid_target_33 v2, v2, v2, v3 -+; GCN-NEXT: s_setprio 0 -+; GCN-NEXT: s_nop 0 -+; GCN-NEXT: s_nop 0 -+; GCN-NEXT: s_endpgm -+ call void @llvm.amdgcn.exp.f32(i32 32, i32 15, float 1.0, float 1.0, float 1.0, float 1.0, i1 false, i1 false) -+ call void @llvm.amdgcn.exp.f32(i32 33, i32 15, float 1.0, float 1.0, float 1.0, float 0.5, i1 false, i1 false) -+ %load = call float @llvm.amdgcn.raw.ptr.buffer.load.f32(ptr addrspace(8) undef, i32 %idx, i32 0, i32 0) -+ call void @llvm.amdgcn.exp.f32(i32 12, i32 15, float 0.0, float 0.0, float 0.0, float %load, i1 true, i1 false) -+ ret void -+} -+ -+define amdgpu_ps void @test_export_across_store_load(i32 %idx, float %v) #0 { -+; GCN-LABEL: test_export_across_store_load: -+; GCN: ; %bb.0: -+; GCN-NEXT: s_setprio 2 -+; GCN-NEXT: v_mov_b32_e32 v2, 24 -+; GCN-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v0 -+; GCN-NEXT: s_delay_alu instid0(VALU_DEP_2) -+; GCN-NEXT: v_cndmask_b32_e64 v0, v2, 8, vcc_lo -+; GCN-NEXT: v_mov_b32_e32 v2, 0 -+; GCN-NEXT: scratch_store_b32 v0, v1, off -+; GCN-NEXT: scratch_load_b32 v0, off, off -+; GCN-NEXT: v_mov_b32_e32 v1, 1.0 -+; GCN-NEXT: exp pos0 v2, v2, v2, v1 done -+; GCN-NEXT: s_setprio 0 -+; GCN-NEXT: s_waitcnt_expcnt null, 0x0 -+; GCN-NEXT: s_nop 0 -+; GCN-NEXT: s_nop 0 -+; GCN-NEXT: s_setprio 2 -+; GCN-NEXT: s_waitcnt vmcnt(0) -+; GCN-NEXT: exp invalid_target_32 v0, v2, v1, v2 -+; GCN-NEXT: exp invalid_target_33 v0, v2, v1, v2 -+; GCN-NEXT: s_setprio 0 -+; GCN-NEXT: s_nop 0 -+; GCN-NEXT: s_nop 0 -+; GCN-NEXT: s_endpgm -+ %data0 = alloca <4 x float>, align 8, addrspace(5) -+ %data1 = alloca <4 x float>, align 8, addrspace(5) -+ %cmp = icmp eq i32 %idx, 1 -+ %data = select i1 %cmp, ptr addrspace(5) %data0, ptr addrspace(5) %data1 -+ store float %v, ptr addrspace(5) %data, align 8 -+ call void @llvm.amdgcn.exp.f32(i32 12, i32 15, float 0.0, float 0.0, float 0.0, float 1.0, i1 true, i1 false) -+ %load0 = load float, ptr addrspace(5) %data0, align 8 -+ call void @llvm.amdgcn.exp.f32(i32 32, i32 15, float %load0, float 0.0, float 1.0, float 0.0, i1 false, i1 false) -+ call void @llvm.amdgcn.exp.f32(i32 33, i32 15, float %load0, float 0.0, float 1.0, float 0.0, i1 false, i1 false) -+ ret void -+} -+ -+define amdgpu_ps void @test_export_in_callee(float %v) #0 { -+; GCN-LABEL: test_export_in_callee: -+; GCN: ; %bb.0: -+; GCN-NEXT: s_setprio 2 -+; GCN-NEXT: s_getpc_b64 s[0:1] -+; GCN-NEXT: s_add_u32 s0, s0, test_export_gfx@gotpcrel32@lo+4 -+; GCN-NEXT: s_addc_u32 s1, s1, test_export_gfx@gotpcrel32@hi+12 -+; GCN-NEXT: v_add_f32_e32 v0, 1.0, v0 -+; GCN-NEXT: s_load_b64 s[0:1], s[0:1], 0x0 -+; GCN-NEXT: s_mov_b32 s32, 0 -+; GCN-NEXT: s_waitcnt lgkmcnt(0) -+; GCN-NEXT: s_swappc_b64 s[30:31], s[0:1] -+; GCN-NEXT: s_endpgm -+ %x = fadd float %v, 1.0 -+ call void @test_export_gfx(float %x) -+ ret void -+} -+ -+define amdgpu_ps void @test_export_in_callee_prio(float %v) #0 { -+; GCN-LABEL: test_export_in_callee_prio: -+; GCN: ; %bb.0: -+; GCN-NEXT: s_setprio 2 -+; GCN-NEXT: s_mov_b32 s32, 0 -+; GCN-NEXT: v_add_f32_e32 v0, 1.0, v0 -+; GCN-NEXT: s_setprio 2 -+; GCN-NEXT: s_getpc_b64 s[0:1] -+; GCN-NEXT: s_add_u32 s0, s0, test_export_gfx@gotpcrel32@lo+4 -+; GCN-NEXT: s_addc_u32 s1, s1, test_export_gfx@gotpcrel32@hi+12 -+; GCN-NEXT: s_load_b64 s[0:1], s[0:1], 0x0 -+; GCN-NEXT: s_waitcnt lgkmcnt(0) -+; GCN-NEXT: s_swappc_b64 s[30:31], s[0:1] -+; GCN-NEXT: s_endpgm -+ %x = fadd float %v, 1.0 -+ call void @llvm.amdgcn.s.setprio(i16 0) -+ call void @test_export_gfx(float %x) -+ ret void -+} -+ -+declare void @llvm.amdgcn.exp.f32(i32, i32, float, float, float, float, i1, i1) #1 -+declare void @llvm.amdgcn.exp.i32(i32, i32, i32, i32, i32, i32, i1, i1) #1 -+declare float @llvm.amdgcn.raw.ptr.buffer.load.f32(ptr addrspace(8), i32, i32, i32) #2 -+declare void @llvm.amdgcn.s.setprio(i16) -+ -+attributes #0 = { nounwind } -+attributes #1 = { nounwind inaccessiblememonly } -+attributes #2 = { nounwind readnone } -diff --git a/llvm/test/CodeGen/AMDGPU/required-export-priority.mir b/llvm/test/CodeGen/AMDGPU/required-export-priority.mir -new file mode 100644 -index 0000000000000..eee04468036e5 ---- /dev/null -+++ b/llvm/test/CodeGen/AMDGPU/required-export-priority.mir -@@ -0,0 +1,293 @@ -+# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5 -+# RUN: llc -mtriple=amdgcn -mcpu=gfx1150 -mattr=-wavefrontsize32,+wavefrontsize64 -run-pass=post-RA-hazard-rec -verify-machineinstrs %s -o - | FileCheck -check-prefixes=GFX1150 %s -+ -+--- | -+ define amdgpu_ps void @end_of_shader() { -+ ret void -+ } -+ define amdgpu_ps void @end_of_shader_return_to_epilogue() { -+ ret void -+ } -+ define amdgpu_ps void @end_of_block() { -+ ret void -+ } -+ define amdgpu_ps void @start_of_block() { -+ ret void -+ } -+ define amdgpu_ps void @block_of_exports() { -+ ret void -+ } -+ define amdgpu_ps void @sparse_exports() { -+ ret void -+ } -+ define amdgpu_ps void @existing_setprio_1() { -+ ret void -+ } -+ define amdgpu_ps void @existing_setprio_2() { -+ ret void -+ } -+... -+ -+--- -+name: end_of_shader -+tracksRegLiveness: true -+liveins: -+ - { reg: '$vgpr0' } -+body: | -+ bb.0: -+ liveins: $vgpr0 -+ ; GFX1150-LABEL: name: end_of_shader -+ ; GFX1150: liveins: $vgpr0 -+ ; GFX1150-NEXT: {{ $}} -+ ; GFX1150-NEXT: S_SETPRIO 2 -+ ; GFX1150-NEXT: EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec -+ ; GFX1150-NEXT: S_SETPRIO 0 -+ ; GFX1150-NEXT: S_NOP 0 -+ ; GFX1150-NEXT: S_NOP 0 -+ ; GFX1150-NEXT: S_ENDPGM 0 -+ EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec -+ S_ENDPGM 0 -+... -+ -+--- -+name: end_of_shader_return_to_epilogue -+tracksRegLiveness: true -+liveins: -+ - { reg: '$vgpr0' } -+body: | -+ bb.0: -+ liveins: $vgpr0 -+ ; GFX1150-LABEL: name: end_of_shader_return_to_epilogue -+ ; GFX1150: liveins: $vgpr0 -+ ; GFX1150-NEXT: {{ $}} -+ ; GFX1150-NEXT: S_SETPRIO 2 -+ ; GFX1150-NEXT: EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec -+ ; GFX1150-NEXT: S_SETPRIO 0 -+ ; GFX1150-NEXT: S_WAITCNT_EXPCNT $sgpr_null, 0 -+ ; GFX1150-NEXT: S_NOP 0 -+ ; GFX1150-NEXT: S_NOP 0 -+ ; GFX1150-NEXT: S_SETPRIO 2 -+ ; GFX1150-NEXT: SI_RETURN_TO_EPILOG $vgpr0 -+ EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec -+ SI_RETURN_TO_EPILOG $vgpr0 -+... -+ -+--- -+name: end_of_block -+tracksRegLiveness: true -+liveins: -+ - { reg: '$vgpr0' } -+body: | -+ ; GFX1150-LABEL: name: end_of_block -+ ; GFX1150: bb.0: -+ ; GFX1150-NEXT: successors: %bb.1(0x80000000) -+ ; GFX1150-NEXT: liveins: $vgpr0 -+ ; GFX1150-NEXT: {{ $}} -+ ; GFX1150-NEXT: S_SETPRIO 2 -+ ; GFX1150-NEXT: EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec -+ ; GFX1150-NEXT: S_SETPRIO 0 -+ ; GFX1150-NEXT: S_WAITCNT_EXPCNT $sgpr_null, 0 -+ ; GFX1150-NEXT: S_NOP 0 -+ ; GFX1150-NEXT: S_NOP 0 -+ ; GFX1150-NEXT: S_SETPRIO 2 -+ ; GFX1150-NEXT: {{ $}} -+ ; GFX1150-NEXT: bb.1: -+ ; GFX1150-NEXT: S_ENDPGM 0 -+ bb.0: -+ liveins: $vgpr0 -+ EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec -+ -+ bb.1: -+ S_ENDPGM 0 -+... -+ -+--- -+name: start_of_block -+tracksRegLiveness: true -+liveins: -+ - { reg: '$vgpr0' } -+body: | -+ ; GFX1150-LABEL: name: start_of_block -+ ; GFX1150: bb.0: -+ ; GFX1150-NEXT: successors: %bb.1(0x80000000) -+ ; GFX1150-NEXT: liveins: $vgpr0 -+ ; GFX1150-NEXT: {{ $}} -+ ; GFX1150-NEXT: S_SETPRIO 2 -+ ; GFX1150-NEXT: {{ $}} -+ ; GFX1150-NEXT: bb.1: -+ ; GFX1150-NEXT: successors: %bb.2(0x80000000) -+ ; GFX1150-NEXT: liveins: $vgpr0 -+ ; GFX1150-NEXT: {{ $}} -+ ; GFX1150-NEXT: EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec -+ ; GFX1150-NEXT: S_SETPRIO 0 -+ ; GFX1150-NEXT: S_WAITCNT_EXPCNT $sgpr_null, 0 -+ ; GFX1150-NEXT: S_NOP 0 -+ ; GFX1150-NEXT: S_NOP 0 -+ ; GFX1150-NEXT: S_SETPRIO 2 -+ ; GFX1150-NEXT: {{ $}} -+ ; GFX1150-NEXT: bb.2: -+ ; GFX1150-NEXT: S_ENDPGM 0 -+ bb.0: -+ liveins: $vgpr0 -+ -+ bb.1: -+ liveins: $vgpr0 -+ EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec -+ -+ bb.2: -+ S_ENDPGM 0 -+... -+ -+--- -+name: block_of_exports -+tracksRegLiveness: true -+liveins: -+ - { reg: '$vgpr0' } -+body: | -+ bb.0: -+ liveins: $vgpr0 -+ ; GFX1150-LABEL: name: block_of_exports -+ ; GFX1150: liveins: $vgpr0 -+ ; GFX1150-NEXT: {{ $}} -+ ; GFX1150-NEXT: S_SETPRIO 2 -+ ; GFX1150-NEXT: EXP 2, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec -+ ; GFX1150-NEXT: EXP 1, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec -+ ; GFX1150-NEXT: EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec -+ ; GFX1150-NEXT: S_SETPRIO 0 -+ ; GFX1150-NEXT: S_NOP 0 -+ ; GFX1150-NEXT: S_NOP 0 -+ ; GFX1150-NEXT: S_ENDPGM 0 -+ EXP 2, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec -+ EXP 1, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec -+ EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec -+ S_ENDPGM 0 -+... -+ -+--- -+name: sparse_exports -+tracksRegLiveness: true -+liveins: -+ - { reg: '$vgpr0' } -+body: | -+ bb.0: -+ liveins: $vgpr0 -+ ; GFX1150-LABEL: name: sparse_exports -+ ; GFX1150: liveins: $vgpr0 -+ ; GFX1150-NEXT: {{ $}} -+ ; GFX1150-NEXT: S_SETPRIO 2 -+ ; GFX1150-NEXT: EXP 2, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec -+ ; GFX1150-NEXT: S_SETPRIO 0 -+ ; GFX1150-NEXT: S_WAITCNT_EXPCNT $sgpr_null, 0 -+ ; GFX1150-NEXT: S_NOP 0 -+ ; GFX1150-NEXT: S_NOP 0 -+ ; GFX1150-NEXT: S_SETPRIO 2 -+ ; GFX1150-NEXT: $vgpr0 = V_AND_B32_e32 1, $vgpr0, implicit $exec -+ ; GFX1150-NEXT: EXP 1, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec -+ ; GFX1150-NEXT: S_SETPRIO 0 -+ ; GFX1150-NEXT: S_WAITCNT_EXPCNT $sgpr_null, 0 -+ ; GFX1150-NEXT: S_NOP 0 -+ ; GFX1150-NEXT: S_NOP 0 -+ ; GFX1150-NEXT: S_SETPRIO 2 -+ ; GFX1150-NEXT: $vgpr0 = V_OR_B32_e32 2, $vgpr0, implicit $exec -+ ; GFX1150-NEXT: EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec -+ ; GFX1150-NEXT: S_SETPRIO 0 -+ ; GFX1150-NEXT: S_NOP 0 -+ ; GFX1150-NEXT: S_NOP 0 -+ ; GFX1150-NEXT: S_ENDPGM 0 -+ EXP 2, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec -+ $vgpr0 = V_AND_B32_e32 1, $vgpr0, implicit $exec -+ EXP 1, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec -+ $vgpr0 = V_OR_B32_e32 2, $vgpr0, implicit $exec -+ EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec -+ S_ENDPGM 0 -+... -+ -+--- -+name: existing_setprio_1 -+tracksRegLiveness: true -+liveins: -+ - { reg: '$vgpr0' } -+body: | -+ ; GFX1150-LABEL: name: existing_setprio_1 -+ ; GFX1150: bb.0: -+ ; GFX1150-NEXT: successors: %bb.1(0x80000000) -+ ; GFX1150-NEXT: liveins: $vgpr0 -+ ; GFX1150-NEXT: {{ $}} -+ ; GFX1150-NEXT: S_SETPRIO 2 -+ ; GFX1150-NEXT: $vgpr0 = V_AND_B32_e32 1, $vgpr0, implicit $exec -+ ; GFX1150-NEXT: {{ $}} -+ ; GFX1150-NEXT: bb.1: -+ ; GFX1150-NEXT: successors: %bb.2(0x80000000) -+ ; GFX1150-NEXT: liveins: $vgpr0 -+ ; GFX1150-NEXT: {{ $}} -+ ; GFX1150-NEXT: S_SETPRIO 3 -+ ; GFX1150-NEXT: $vgpr0 = V_OR_B32_e32 2, $vgpr0, implicit $exec -+ ; GFX1150-NEXT: S_SETPRIO 2 -+ ; GFX1150-NEXT: {{ $}} -+ ; GFX1150-NEXT: bb.2: -+ ; GFX1150-NEXT: successors: %bb.3(0x80000000) -+ ; GFX1150-NEXT: liveins: $vgpr0 -+ ; GFX1150-NEXT: {{ $}} -+ ; GFX1150-NEXT: S_SETPRIO 3 -+ ; GFX1150-NEXT: $vgpr0 = V_OR_B32_e32 3, $vgpr0, implicit $exec -+ ; GFX1150-NEXT: S_SETPRIO 2 -+ ; GFX1150-NEXT: {{ $}} -+ ; GFX1150-NEXT: bb.3: -+ ; GFX1150-NEXT: liveins: $vgpr0 -+ ; GFX1150-NEXT: {{ $}} -+ ; GFX1150-NEXT: EXP 1, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec -+ ; GFX1150-NEXT: EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec -+ ; GFX1150-NEXT: S_SETPRIO 0 -+ ; GFX1150-NEXT: S_NOP 0 -+ ; GFX1150-NEXT: S_NOP 0 -+ ; GFX1150-NEXT: S_ENDPGM 0 -+ bb.0: -+ liveins: $vgpr0 -+ $vgpr0 = V_AND_B32_e32 1, $vgpr0, implicit $exec -+ -+ bb.1: -+ liveins: $vgpr0 -+ S_SETPRIO 3 -+ $vgpr0 = V_OR_B32_e32 2, $vgpr0, implicit $exec -+ S_SETPRIO 0 -+ -+ bb.2: -+ liveins: $vgpr0 -+ S_SETPRIO 1 -+ $vgpr0 = V_OR_B32_e32 3, $vgpr0, implicit $exec -+ S_SETPRIO 0 -+ -+ bb.3: -+ liveins: $vgpr0 -+ EXP 1, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec -+ EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec -+ S_ENDPGM 0 -+... -+ -+--- -+name: existing_setprio_2 -+tracksRegLiveness: true -+liveins: -+ - { reg: '$vgpr0' } -+body: | -+ bb.0: -+ liveins: $vgpr0 -+ ; GFX1150-LABEL: name: existing_setprio_2 -+ ; GFX1150: liveins: $vgpr0 -+ ; GFX1150-NEXT: {{ $}} -+ ; GFX1150-NEXT: S_SETPRIO 3 -+ ; GFX1150-NEXT: EXP 1, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec -+ ; GFX1150-NEXT: EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec -+ ; GFX1150-NEXT: S_SETPRIO 0 -+ ; GFX1150-NEXT: S_WAITCNT_EXPCNT $sgpr_null, 0 -+ ; GFX1150-NEXT: S_NOP 0 -+ ; GFX1150-NEXT: S_NOP 0 -+ ; GFX1150-NEXT: S_SETPRIO 2 -+ ; GFX1150-NEXT: S_SETPRIO 3 -+ ; GFX1150-NEXT: S_ENDPGM 0 -+ S_SETPRIO 3 -+ EXP 1, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec -+ EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec -+ S_SETPRIO 3 -+ S_ENDPGM 0 -+... - -From 8ea44e65f2c19facff751aeb2ac960f907fb210f Mon Sep 17 00:00:00 2001 -From: Carl Ritson -Date: Wed, 17 Jul 2024 16:18:02 +0900 -Subject: [PATCH 2/3] Remove -verify-machineinstrs from test. - ---- - llvm/test/CodeGen/AMDGPU/required-export-priority.ll | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/llvm/test/CodeGen/AMDGPU/required-export-priority.ll b/llvm/test/CodeGen/AMDGPU/required-export-priority.ll -index 377902f3f0d1a..ebc209bd4d451 100644 ---- a/llvm/test/CodeGen/AMDGPU/required-export-priority.ll -+++ b/llvm/test/CodeGen/AMDGPU/required-export-priority.ll -@@ -1,5 +1,5 @@ - ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 --; RUN: llc -mtriple=amdgcn -mcpu=gfx1150 -amdgpu-enable-vopd=0 -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s -+; RUN: llc -mtriple=amdgcn -mcpu=gfx1150 -amdgpu-enable-vopd=0 < %s | FileCheck -check-prefix=GCN %s - - define amdgpu_ps void @test_export_zeroes_f32() #0 { - ; GCN-LABEL: test_export_zeroes_f32: diff --git a/SOURCES/20-131099.patch b/SOURCES/20-131099.patch new file mode 100644 index 0000000..0b66256 --- /dev/null +++ b/SOURCES/20-131099.patch @@ -0,0 +1,28 @@ +From e43271ec7438ecb78f99db134aeca274a47f6c28 Mon Sep 17 00:00:00 2001 +From: Konrad Kleine +Date: Thu, 13 Mar 2025 09:12:24 +0100 +Subject: [PATCH] Filter out configuration file from compile commands + +The commands to run the compilation when printed with `-###` contain +various irrelevant lines for the perf-training. Most of them are +filtered out already but when configured with +`CLANG_CONFIG_FILE_SYSTEM_DIR` a new line like the following is +added and needs to be filtered out: + +`Configuration file: /etc/clang/x86_64-redhat-linux-gnu-clang.cfg` +--- + clang/utils/perf-training/perf-helper.py | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/clang/utils/perf-training/perf-helper.py b/clang/utils/perf-training/perf-helper.py +index 80c6356d0497c..29904aded5ab0 100644 +--- a/clang/utils/perf-training/perf-helper.py ++++ b/clang/utils/perf-training/perf-helper.py +@@ -237,6 +237,7 @@ def get_cc1_command_for_args(cmd, env): + or ln.startswith("InstalledDir:") + or ln.startswith("LLVM Profile Note") + or ln.startswith(" (in-process)") ++ or ln.startswith("Configuration file:") + or " version " in ln + ): + continue diff --git a/SOURCES/21-146424.patch b/SOURCES/21-146424.patch new file mode 100644 index 0000000..5b95886 --- /dev/null +++ b/SOURCES/21-146424.patch @@ -0,0 +1,94 @@ +From eba58195932f37fb461ae17c69fc517181b99c9a Mon Sep 17 00:00:00 2001 +From: Paul Murphy +Date: Mon, 30 Jun 2025 10:13:37 -0500 +Subject: [PATCH] [PowerPC] fix lowering of SPILL_CRBIT on pwr9 and pwr10 + +If a copy exists between creation of a crbit and a spill, machine-cp +may delete the copy since it seems unaware of the relation between a cr +and crbit. A fix was previously made for the generic ppc64 lowering. It +should be applied to the pwr9 and pwr10 variants too. + +Likewise, relax and extend the pwr8 test to verify pwr9 and pwr10 +codegen too. + +This fixes #143989. +--- + llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp | 17 +++++++++++------ + .../PowerPC/NoCRFieldRedefWhenSpillingCRBIT.mir | 8 +++++++- + 2 files changed, 18 insertions(+), 7 deletions(-) + +diff --git a/llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp b/llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp +index 76dca4794e05..78d254a55fd9 100644 +--- a/llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp ++++ b/llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp +@@ -1102,13 +1102,20 @@ void PPCRegisterInfo::lowerCRBitSpilling(MachineBasicBlock::iterator II, + SpillsKnownBit = true; + break; + default: ++ // When spilling a CR bit, The super register may not be explicitly defined ++ // (i.e. it can be defined by a CR-logical that only defines the subreg) so ++ // we state that the CR field is undef. Also, in order to preserve the kill ++ // flag on the CR bit, we add it as an implicit use. ++ + // On Power10, we can use SETNBC to spill all CR bits. SETNBC will set all + // bits (specifically, it produces a -1 if the CR bit is set). Ultimately, + // the bit that is of importance to us is bit 32 (bit 0 of a 32-bit + // register), and SETNBC will set this. + if (Subtarget.isISA3_1()) { + BuildMI(MBB, II, dl, TII.get(LP64 ? PPC::SETNBC8 : PPC::SETNBC), Reg) +- .addReg(SrcReg, RegState::Undef); ++ .addReg(SrcReg, RegState::Undef) ++ .addReg(SrcReg, RegState::Implicit | ++ getKillRegState(MI.getOperand(0).isKill())); + break; + } + +@@ -1122,16 +1129,14 @@ void PPCRegisterInfo::lowerCRBitSpilling(MachineBasicBlock::iterator II, + SrcReg == PPC::CR4LT || SrcReg == PPC::CR5LT || + SrcReg == PPC::CR6LT || SrcReg == PPC::CR7LT) { + BuildMI(MBB, II, dl, TII.get(LP64 ? PPC::SETB8 : PPC::SETB), Reg) +- .addReg(getCRFromCRBit(SrcReg), RegState::Undef); ++ .addReg(getCRFromCRBit(SrcReg), RegState::Undef) ++ .addReg(SrcReg, RegState::Implicit | ++ getKillRegState(MI.getOperand(0).isKill())); + break; + } + } + + // We need to move the CR field that contains the CR bit we are spilling. +- // The super register may not be explicitly defined (i.e. it can be defined +- // by a CR-logical that only defines the subreg) so we state that the CR +- // field is undef. Also, in order to preserve the kill flag on the CR bit, +- // we add it as an implicit use. + BuildMI(MBB, II, dl, TII.get(LP64 ? PPC::MFOCRF8 : PPC::MFOCRF), Reg) + .addReg(getCRFromCRBit(SrcReg), RegState::Undef) + .addReg(SrcReg, +diff --git a/llvm/test/CodeGen/PowerPC/NoCRFieldRedefWhenSpillingCRBIT.mir b/llvm/test/CodeGen/PowerPC/NoCRFieldRedefWhenSpillingCRBIT.mir +index 41e21248a3f0..2796cdb3ae87 100644 +--- a/llvm/test/CodeGen/PowerPC/NoCRFieldRedefWhenSpillingCRBIT.mir ++++ b/llvm/test/CodeGen/PowerPC/NoCRFieldRedefWhenSpillingCRBIT.mir +@@ -1,6 +1,12 @@ + # RUN: llc -mcpu=pwr8 -mtriple=powerpc64le-unknown-linux-gnu -start-after \ + # RUN: virtregrewriter -ppc-asm-full-reg-names -verify-machineinstrs %s \ + # RUN: -o - | FileCheck %s ++# RUN: llc -mcpu=pwr9 -mtriple=powerpc64le-unknown-linux-gnu -start-after \ ++# RUN: virtregrewriter -ppc-asm-full-reg-names -verify-machineinstrs %s \ ++# RUN: -o - | FileCheck %s ++# RUN: llc -mcpu=pwr10 -mtriple=powerpc64le-unknown-linux-gnu -start-after \ ++# RUN: virtregrewriter -ppc-asm-full-reg-names -verify-machineinstrs %s \ ++# RUN: -o - | FileCheck %s + + --- | + ; ModuleID = 'a.ll' +@@ -30,7 +36,7 @@ + ; Function Attrs: nounwind + declare void @llvm.stackprotector(ptr, ptr) #1 + +- attributes #0 = { nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "frame-pointer"="none" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="ppc64le" "target-features"="+altivec,+bpermd,+crypto,+direct-move,+extdiv,+htm,+power8-vector,+vsx,-power9-vector" "unsafe-fp-math"="false" "use-soft-float"="false" } ++ attributes #0 = { nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "frame-pointer"="none" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } + attributes #1 = { nounwind } + + !llvm.ident = !{!0} +-- +2.49.0 + diff --git a/SOURCES/cstdint.patch b/SOURCES/cstdint.patch deleted file mode 100644 index d0b575c..0000000 --- a/SOURCES/cstdint.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff -ruN llvm-19.1.7-build.orig/llvm-project-19.1.7.src/mlir/include/mlir/Dialect/Affine/IR/ValueBoundsOpInterfaceImpl.h llvm-19.1.7-build/llvm-project-19.1.7.src/mlir/include/mlir/Dialect/Affine/IR/ValueBoundsOpInterfaceImpl.h ---- a/mlir/include/mlir/Dialect/Affine/IR/ValueBoundsOpInterfaceImpl.h 2025-01-14 10:41:02.000000000 +0100 -+++ b/mlir/include/mlir/Dialect/Affine/IR/ValueBoundsOpInterfaceImpl.h 2025-01-17 08:31:49.581864809 +0100 -@@ -9,6 +9,7 @@ - #ifndef MLIR_DIALECT_AFFINE_IR_VALUEBOUNDSOPINTERFACEIMPL_H - #define MLIR_DIALECT_AFFINE_IR_VALUEBOUNDSOPINTERFACEIMPL_H - -+#include - #include "mlir/Support/LLVM.h" - - namespace mlir { -diff -ruN llvm-19.1.7-build.orig/llvm-project-19.1.7.src/mlir/include/mlir/Support/LLVM.h llvm-19.1.7-build/llvm-project-19.1.7.src/mlir/include/mlir/Support/LLVM.h ---- a/mlir/include/mlir/Support/LLVM.h 2025-01-14 10:41:02.000000000 +0100 -+++ b/mlir/include/mlir/Support/LLVM.h 2025-01-17 10:20:19.356337873 +0100 -@@ -18,6 +18,9 @@ - #ifndef MLIR_SUPPORT_LLVM_H - #define MLIR_SUPPORT_LLVM_H - -+ -+ -+#include - // We include this header because it cannot be practically forward - // declared, and are effectively language features. - #include "llvm/Support/Casting.h" diff --git a/SPECS/llvm.spec b/SPECS/llvm.spec index ec6271d..90a1a6e 100644 --- a/SPECS/llvm.spec +++ b/SPECS/llvm.spec @@ -1,9 +1,9 @@ #region globals #region version -%global maj_ver 19 +%global maj_ver 20 %global min_ver 1 -%global patch_ver 7 -#global rc_ver 4 +%global patch_ver 8 +#global rc_ver 3 %bcond_with snapshot_build %if %{with snapshot_build} @@ -28,17 +28,32 @@ %bcond_without check %if %{with bundle_compat_lib} -%global compat_maj_ver 18 -%global compat_ver %{compat_maj_ver}.1.8 +%global compat_maj_ver 19 +%global compat_ver %{compat_maj_ver}.1.7 %endif -# Compat builds do not include python-lit and lldb +# Compat builds do not include python-lit %if %{with compat_build} %bcond_with python_lit -%bcond_with lldb %else %bcond_without python_lit +%endif + %bcond_without lldb + +%ifarch ppc64le +%if %{defined rhel} && 0%{?rhel} < 10 && %{maj_ver} >= 21 +# RHEL <= 9 use the IBM long double format, which is not supported by libc. +# Since LLVM 21, parts of libc are required in order to build offload. +%bcond_with offload +%else +%bcond_without offload +%endif +%elifarch %{ix86} +# libomptarget is not supported on 32-bit systems. +%bcond_with offload +%else +%bcond_without offload %endif %if %{without compat_build} && 0%{?fedora} >= 41 @@ -73,6 +88,43 @@ %bcond_with build_bolt %endif +%if %{without compat_build} && 0%{?fedora} >= 41 +%bcond_without polly +%else +%bcond_with polly +%endif + +#region pgo +%ifarch %{ix86} +%bcond_with pgo +%else +%if 0%{?fedora} >= 43 || (0%{?rhel} >= 9 && %{maj_ver} >= 21) +%bcond_without pgo +%else +%bcond_with pgo +%endif +%endif + +# We only want to run the performance comparison on snapshot builds. +# centos-streams/RHEL do not have all the requirements. We tried to use pip, +# but we've seen issues on some architectures. We're now restricting this +# to Fedora. +%if %{with pgo} && %{with snapshot_build} && %{defined fedora} +%global run_pgo_perf_comparison 1 +%else +%global run_pgo_perf_comparison %{nil} +%endif + +# Sanity checks for PGO and bootstrapping +#---------------------------------------- +%if %{with pgo} +%ifarch %{ix86} +%{error:Your architecture is not allowed for PGO because it is in this list: %{ix86}} +%endif +%endif +#---------------------------------------- +#endregion pgo + # Disable LTO on x86 and riscv in order to reduce memory consumption. %ifarch %ix86 riscv64 %bcond_with lto_build @@ -80,7 +132,9 @@ %bcond_without lto_build %endif -%if %{without lto_build} +# For PGO Disable LTO for now because of LLVMgold.so not found error +# Use LLVM_ENABLE_LTO:BOOL=ON flags to enable LTO instead +%if 0%{without lto_build} || 0%{with pgo} %global _lto_cflags %nil %endif @@ -88,11 +142,30 @@ # See https://docs.fedoraproject.org/en-US/packaging-guidelines/#_compiler_macros %global toolchain clang +# Make sure that we are not building with a newer compiler than the targeted +# version. For example, if we build LLVM 19 with Clang 20, then we'd build +# LLVM libraries with Clang 20, and then the runtimes build would use the +# just-built Clang 19. Runtimes that link against LLVM libraries would then +# try to make Clang 19 perform LTO involving LLVM 20 bitcode. +%if %{with compat_build} +%global host_clang_maj_ver %{maj_ver} +%endif + +%if %{defined host_clang_maj_ver} +%global __cc /usr/bin/clang-%{host_clang_maj_ver} +%global __cxx /usr/bin/clang++-%{host_clang_maj_ver} +%endif %if %{defined rhel} && 0%{?rhel} < 10 %global gts_version 14 %endif +%if %{defined rhel} && 0%{?rhel} <= 8 +%bcond_with libedit +%else +%bcond_without libedit +%endif + # Opt out of https://fedoraproject.org/wiki/Changes/fno-omit-frame-pointer # https://bugzilla.redhat.com/show_bug.cgi?id=2158587 %undefine _include_frame_pointers @@ -104,42 +177,48 @@ %global src_tarball_dir llvm-project-%{maj_ver}.%{min_ver}.%{patch_ver}%{?rc_ver:-rc%{rc_ver}}.src %endif +%global has_crtobjs 1 +%if %{maj_ver} < 21 +%ifarch s390x +%global has_crtobjs 0 +%endif +%endif + +# LLD uses "fast" as the algortithm for generating build-id +# values while ld.bfd uses "sha1" by default. We need to get lld +# to use the same algorithm or otherwise we end up with errors like thise one: +# +# "build-id found in [...]/usr/lib64/llvm21/bin/llvm-debuginfod-find too small" +# +# NOTE: Originally this is only needed for PGO but it doesn't hurt to have it on all the time. +%global build_ldflags %{?build_ldflags} -Wl,--build-id=sha1 + #region LLVM globals %if %{with compat_build} %global pkg_name_llvm llvm%{maj_ver} %global pkg_suffix %{maj_ver} %global exec_suffix -%{maj_ver} -%global install_prefix %{_libdir}/%{pkg_name_llvm} -%global install_bindir %{install_prefix}/bin -%global install_includedir %{install_prefix}/include -%global install_libdir %{install_prefix}/lib -%global install_datadir %{install_prefix}/share -%global install_libexecdir %{install_prefix}/libexec -%global install_docdir %{install_datadir}/doc -%global unprefixed_libdir lib -%global build_libdir llvm/%{_vpath_builddir}/lib - -%global pkg_includedir %{_includedir}/%{pkg_name_llvm} -%global pkg_datadir %{install_prefix}/share %else %global pkg_name_llvm llvm -%global install_prefix /usr -%global install_bindir %{_bindir} -%global install_datadir %{_datadir} -%global install_libdir %{_libdir} -%global install_includedir %{_includedir} -%global install_libexecdir %{_libexecdir} -%global install_docdir %{_docdir} -%global unprefixed_libdir %{_lib} -%global build_libdir llvm/%{_vpath_builddir}/%{_lib} -%global pkg_datadir %{_datadir} %global pkg_suffix %{nil} %global exec_suffix %{nil} %endif +# Apart from compiler-rt and libcxx, everything is installed into a +# version-specific prefix. Non-compat packages add symlinks to this prefix. +%global install_prefix %{_libdir}/llvm%{maj_ver} +%global install_bindir %{install_prefix}/bin +%global install_includedir %{install_prefix}/include +%global install_libdir %{install_prefix}/%{_lib} +%global install_datadir %{install_prefix}/share +%global install_mandir %{install_prefix}/share/man +%global install_libexecdir %{install_prefix}/libexec +%global build_libdir llvm/%{_vpath_builddir}/%{_lib} +%global unprefixed_libdir %{_lib} + %if 0%{?rhel} -%global targets_to_build "X86;AMDGPU;PowerPC;NVPTX;SystemZ;AArch64;ARM;Mips;BPF;WebAssembly" +%global targets_to_build "X86;AMDGPU;PowerPC;NVPTX;SystemZ;AArch64;BPF;WebAssembly;RISCV" %global experimental_targets_to_build "" %else %global targets_to_build "all" @@ -204,9 +283,8 @@ #endregion LLD globals #region LLDB globals -%global pkg_name_lldb lldb +%global pkg_name_lldb lldb%{pkg_suffix} #endregion LLDB globals -#endregion globals #region MLIR globals %global pkg_name_mlir mlir%{pkg_suffix} @@ -222,11 +300,23 @@ %global pkg_name_bolt llvm-bolt%{pkg_suffix} #endregion BOLT globals +#region polly globals +%global pkg_name_polly polly%{pkg_suffix} +#endregion polly globals + +#region PGO globals +%if 0%{run_pgo_perf_comparison} +%global llvm_test_suite_dir %{_datadir}/llvm-test-suite +%endif +#endregion PGO globals + +#endregion globals + #region packages #region main package Name: %{pkg_name_llvm} Version: %{maj_ver}.%{min_ver}.%{patch_ver}%{?rc_ver:~rc%{rc_ver}}%{?llvm_snapshot_version_suffix:~%{llvm_snapshot_version_suffix}} -Release: 2%{?dist} +Release: 3%{?dist} Summary: The Low Level Virtual Machine License: Apache-2.0 WITH LLVM-exception OR NCSA @@ -280,16 +370,10 @@ Source1000: version.spec.inc # situations. Remember that a compat library is always at least one major version # behind the latest packaged LLVM version. -#region OpenMP patches -Patch1900: 0001-openmp-Add-option-to-disable-tsan-tests-111548.patch -Patch1901: 0001-openmp-Use-core_siblings_list-if-physical_package_id.patch -Patch1910: 0001-openmp-Support-CET-in-z_Linux_asm.S-123213.patch -#endregion OpenMP patches - #region CLANG patches Patch101: 0001-PATCH-clang-Make-funwind-tables-the-default-on-all-a.patch Patch102: 0003-PATCH-clang-Don-t-install-static-libraries.patch -#endregion CLANG patches +Patch2002: 20-131099.patch # Workaround a bug in ORC on ppc64le. # More info is available here: https://reviews.llvm.org/D159115#4641826 @@ -298,43 +382,41 @@ Patch103: 0001-Workaround-a-bug-in-ORC-on-ppc64le.patch # With the introduction of --gcc-include-dir in the clang config file, # this might no longer be needed. Patch104: 0001-Driver-Give-devtoolset-path-precedence-over-Installe.patch +#endregion CLANG patches -#region MLIR patches -# See https://github.com/llvm/llvm-project/pull/108579 -Patch1904: 0001-mlir-python-Reuse-the-library-directory.patch -# See https://github.com/llvm/llvm-project/pull/108461 -Patch1905: 0001-CMake-Add-missing-dependency-108461.patch -# See https://github.com/llvm/llvm-project/pull/118542 -Patch1906: 0001-mlir-Specify-deps-via-LLVM_LINK_COMPONENTS.patch -# See https://github.com/llvm/llvm-project/pull/120079 -Patch1907: 0001-CMake-Use-correct-exports-for-MLIR-tools.patch -Patch1908: cstdint.patch -#endregion MLIR patches - -#region BOLT patches -Patch1909: 0001-19-PATCH-Bolt-CMake-Don-t-export-bolt-libraries-in-LLVM.patch -#endregion BOLT patches +# Fix LLVMConfig.cmake when symlinks are used. +# (https://github.com/llvm/llvm-project/pull/124743 landed in LLVM 21) +Patch1902: 0001-cmake-Resolve-symlink-when-finding-install-prefix.patch +Patch2003: 0001-cmake-Resolve-symlink-when-finding-install-prefix.patch #region LLD patches -Patch1800: 0001-18-Always-build-shared-libs-for-LLD.patch -Patch1902: 0001-19-Always-build-shared-libs-for-LLD.patch -Patch2000: 0001-19-Always-build-shared-libs-for-LLD.patch +Patch106: 0001-19-Always-build-shared-libs-for-LLD.patch #endregion LLD patches +#region polly patches +Patch107: 0001-20-polly-shared-libs.patch +#endregion polly patches + #region RHEL patches # RHEL 8 only Patch501: 0001-Fix-page-size-constant-on-aarch64-and-ppc64le.patch #endregion RHEL patches -# Backport with modifications from -# https://github.com/llvm/llvm-project/pull/99273 -# Fixes RHEL-49517. -Patch1801: 18-99273.patch +# Fix an isel error triggered by Rust 1.85 on s390x +# https://github.com/llvm/llvm-project/issues/124001 +Patch1901: 0001-SystemZ-Fix-ICE-with-i128-i64-uaddo-carry-chain.patch -# Fix profiling after a binutils NOTE change. -# https://github.com/llvm/llvm-project/pull/114907 -Patch1802: 0001-profile-Use-base-vaddr-for-__llvm_write_binary_ids-n.patch -Patch1903: 0001-profile-Use-base-vaddr-for-__llvm_write_binary_ids-n.patch +# Fix a pgo miscompilation triggered by building Rust 1.87 with pgo on ppc64le. +# https://github.com/llvm/llvm-project/issues/138208 +Patch2004: 0001-CodeGenPrepare-Make-sure-instruction-get-from-SunkAd.patch + +# Fix Power9/Power10 crbit spilling +# https://github.com/llvm/llvm-project/pull/146424 +Patch108: 21-146424.patch + +# Fix for highway package build on ppc64le +Patch2005: 0001-PowerPC-Fix-handling-of-undefs-in-the-PPC-isSplatShu.patch +Patch2006: 0001-Add-REQUIRES-asserts-to-test-added-in-145149-because.patch %if 0%{?rhel} == 8 %global python3_pkgversion 3.12 @@ -348,7 +430,11 @@ BuildRequires: gcc-toolset-%{gts_version}-gcc-c++ %endif BuildRequires: gcc BuildRequires: gcc-c++ +%if %{defined host_clang_maj_ver} +BuildRequires: clang(major) = %{host_clang_maj_ver} +%else BuildRequires: clang +%endif BuildRequires: cmake BuildRequires: chrpath BuildRequires: ninja-build @@ -356,6 +442,28 @@ BuildRequires: zlib-devel BuildRequires: libzstd-devel BuildRequires: libffi-devel BuildRequires: ncurses-devel + +%if %{with pgo} +BuildRequires: lld +BuildRequires: compiler-rt +BuildRequires: llvm + +%if 0%{run_pgo_perf_comparison} +BuildRequires: llvm-test-suite +BuildRequires: tcl-devel +BuildRequires: which +# pandas and scipy are needed for running llvm-test-suite/utils/compare.py +# For RHEL we have to install it from pip and for fedora we take the RPM package. +%if 0%{?rhel} +BuildRequires: python3-pip +%else +BuildRequires: python3-pandas +BuildRequires: python3-scipy +%endif +%endif + +%endif + # This intentionally does not use python3_pkgversion. RHEL 8 does not have # python3.12-sphinx, and we are only using it as a binary anyway. BuildRequires: python3-sphinx @@ -380,8 +488,10 @@ BuildRequires: binutils-gold # Enable extra functionality when run the LLVM JIT under valgrind. BuildRequires: valgrind-devel %endif +%if %{with libedit} # LLVM's LineEditor library will use libedit if it is available. BuildRequires: libedit-devel +%endif # We need python3-devel for %%py3_shebang_fix BuildRequires: python%{python3_pkgversion}-devel BuildRequires: python%{python3_pkgversion}-setuptools @@ -429,10 +539,8 @@ BuildRequires: perl(Sys::Hostname) BuildRequires: python%{python3_pkgversion}-numpy BuildRequires: python%{python3_pkgversion}-pybind11 BuildRequires: python%{python3_pkgversion}-pyyaml -%if %{maj_ver} >= 20 BuildRequires: python%{python3_pkgversion}-nanobind-devel %endif -%endif BuildRequires: graphviz @@ -464,7 +572,6 @@ tools as well as libraries with equivalent functionality. Summary: LLVM lit test runner for Python 3 BuildArch: noarch -Requires: python%{python3_pkgversion}-setuptools %if 0%{?rhel} == 8 # Became python3.12-clang in LLVM 19 Obsoletes: python3-lit < 18.9 @@ -480,6 +587,14 @@ lit is a tool used by the LLVM project for executing its test suites. #region LLVM packages +%package -n %{pkg_name_llvm}-filesystem +Summary: Filesystem package that owns the versioned llvm prefix +# Was renamed immediately after introduction. +Obsoletes: %{pkg_name_llvm}-resource-filesystem < 20 + +%description -n %{pkg_name_llvm}-filesystem +This packages owns the versioned llvm prefix directory: $libdir/llvm$version + %package -n %{pkg_name_llvm}-devel Summary: Libraries and header files for LLVM Requires: %{pkg_name_llvm}%{?_isa} = %{version}-%{release} @@ -487,7 +602,9 @@ Requires: %{pkg_name_llvm}-libs%{?_isa} = %{version}-%{release} # The installed LLVM cmake files will add -ledit to the linker flags for any # app that requires the libLLVMLineEditor, so we need to make sure # libedit-devel is available. +%if %{with libedit} Requires: libedit-devel +%endif Requires: libzstd-devel # The installed cmake files reference binaries from llvm-test, llvm-static, and # llvm-gtest. We tried in the past to split the cmake exports for these binaries @@ -499,8 +616,8 @@ Requires: %{pkg_name_llvm}-test%{?_isa} = %{version}-%{release} Requires: %{pkg_name_llvm}-googletest%{?_isa} = %{version}-%{release} -Requires(post): %{_sbindir}/alternatives -Requires(postun): %{_sbindir}/alternatives +Requires(post): alternatives +Requires(postun): alternatives Provides: llvm-devel(major) = %{maj_ver} @@ -518,12 +635,14 @@ Documentation for the LLVM compiler infrastructure. %package -n %{pkg_name_llvm}-libs Summary: LLVM shared libraries +Requires: %{pkg_name_llvm}-filesystem%{?_isa} = %{version}-%{release} %description -n %{pkg_name_llvm}-libs Shared libraries for the LLVM compiler infrastructure. %package -n %{pkg_name_llvm}-static Summary: LLVM static libraries +Requires: %{pkg_name_llvm}-filesystem%{?_isa} = %{version}-%{release} Conflicts: %{pkg_name_llvm}-devel < 8 Provides: llvm-static(major) = %{maj_ver} @@ -533,6 +652,7 @@ Static libraries for the LLVM compiler infrastructure. %package -n %{pkg_name_llvm}-cmake-utils Summary: CMake utilities shared across LLVM subprojects +Requires: %{pkg_name_llvm}-filesystem%{?_isa} = %{version}-%{release} %description -n %{pkg_name_llvm}-cmake-utils CMake utilities shared across LLVM subprojects. @@ -549,6 +669,7 @@ Provides: llvm-test(major) = %{maj_ver} LLVM regression tests. %package -n %{pkg_name_llvm}-googletest +Requires: %{pkg_name_llvm}-filesystem%{?_isa} = %{version}-%{release} Summary: LLVM's modified googletest sources %description -n %{pkg_name_llvm}-googletest @@ -619,6 +740,8 @@ Requires: %{pkg_name_clang}-libs = %{version}-%{release} Requires: %{pkg_name_clang}%{?_isa} = %{version}-%{release} # The clang CMake files reference tools from clang-tools-extra. Requires: %{pkg_name_clang}-tools-extra%{?_isa} = %{version}-%{release} +# The clang cmake package depends on the LLVM cmake package. +Requires: %{pkg_name_llvm}-devel%{?_isa} = %{version}-%{release} Provides: clang-devel(major) = %{maj_ver} # For the clangd language server contained in this subpackage, # add a Provides so users can just run "dnf install clangd." @@ -641,7 +764,6 @@ This package owns the clang resouce directory: $libdir/clang/$version/ %package -n %{pkg_name_clang}-analyzer Summary: A source code analysis framework License: Apache-2.0 WITH LLVM-exception OR NCSA OR MIT -BuildArch: noarch Requires: %{pkg_name_clang} = %{version}-%{release} %description -n %{pkg_name_clang}-analyzer @@ -687,7 +809,7 @@ Requires: python%{python3_pkgversion} Obsoletes: python3-clang < 18.9 %endif %description -n python%{python3_pkgversion}-clang -%{summary}. +Python3 bindings for clang. %endif @@ -701,7 +823,7 @@ Summary: LLVM "compiler-rt" runtime libraries License: Apache-2.0 WITH LLVM-exception OR NCSA OR MIT -Requires: clang-resource-filesystem%{?_isa} = %{version}-%{release} +Requires: %{pkg_name_clang}-resource-filesystem%{?_isa} = %{version}-%{release} Provides: compiler-rt(major) = %{maj_ver} %description -n %{pkg_name_compiler_rt} @@ -733,7 +855,7 @@ Summary: OpenMP header files URL: http://openmp.llvm.org Requires: %{pkg_name_libomp}%{?_isa} = %{version}-%{release} -Requires: clang-resource-filesystem%{?_isa} = %{version}-%{release} +Requires: %{pkg_name_clang}-resource-filesystem%{?_isa} = %{version}-%{release} Provides: libomp-devel(major) = %{maj_ver} @@ -748,8 +870,8 @@ URL: http://openmp.llvm.org %package -n %{pkg_name_lld} Summary: The LLVM Linker -Requires(post): %{_sbindir}/update-alternatives -Requires(preun): %{_sbindir}/update-alternatives +Requires(post): alternatives +Requires(preun): alternatives Requires: %{pkg_name_lld}-libs = %{version}-%{release} Provides: lld(major) = %{maj_ver} @@ -802,7 +924,9 @@ License: Apache-2.0 WITH LLVM-exception OR NCSA URL: http://lldb.llvm.org/ Requires: %{pkg_name_clang}-libs%{?_isa} = %{version}-%{release} +%if %{without compat_build} Requires: python%{python3_pkgversion}-lldb +%endif %description -n %{pkg_name_lldb} LLDB is a next generation, high-performance debugger. It is built as a set @@ -817,6 +941,7 @@ Requires: %{pkg_name_lldb}%{?_isa} = %{version}-%{release} %description -n %{pkg_name_lldb}-devel The package contains header files for the LLDB debugger. +%if %{without compat_build} %package -n python%{python3_pkgversion}-lldb %{?python_provide:%python_provide python%{python3_pkgversion}-lldb} Summary: Python module for LLDB @@ -831,6 +956,7 @@ Obsoletes: python3-lldb < 18.9 %description -n python%{python3_pkgversion}-lldb The package contains the LLDB Python module. %endif +%endif #endregion LLDB packages #region MLIR packages @@ -839,6 +965,7 @@ The package contains the LLDB Python module. Summary: Multi-Level Intermediate Representation Overview License: Apache-2.0 WITH LLVM-exception URL: http://mlir.llvm.org +Requires: %{pkg_name_llvm}-libs = %{version}-%{release} %description -n %{pkg_name_mlir} The MLIR project is a novel approach to building reusable and extensible @@ -954,6 +1081,7 @@ Static library for LLVM libunwind. Summary: A post-link optimizer developed to speed up large applications License: Apache-2.0 WITH LLVM-exception URL: https://github.com/llvm/llvm-project/tree/main/bolt +Requires: %{pkg_name_llvm}-filesystem%{?_isa} = %{version}-%{release} # As hinted by bolt documentation Recommends: gperftools-devel @@ -966,6 +1094,33 @@ execution profile gathered by sampling profiler, such as Linux `perf` tool. %endif #endregion BOLT packages +#region polly packages +%if %{with polly} +%package -n %{pkg_name_polly} +Summary: LLVM Framework for High-Level Loop and Data-Locality Optimizations +License: Apache-2.0 WITH LLVM-exception +URL: http://polly.llvm.org +Requires: %{pkg_name_llvm}-libs = %{version}-%{release} + +# We no longer ship polly-doc. +Obsoletes: %{pkg_name_polly}-doc < 20 + +%description -n %{pkg_name_polly} + +Polly is a high-level loop and data-locality optimizer and optimization +infrastructure for LLVM. It uses an abstract mathematical representation based +on integer polyhedron to analyze and optimize the memory access pattern of a +program. + +%package -n %{pkg_name_polly}-devel +Summary: Polly header files +Requires: %{pkg_name_polly} = %{version}-%{release} + +%description -n %{pkg_name_polly}-devel +Polly header files. +%endif +#endregion polly packages + #endregion packages #region prep @@ -1039,6 +1194,13 @@ execution profile gathered by sampling profiler, such as Linux `perf` tool. #endregion COMPILER-RT preparation +#region lldb preparation +# Compat builds don't build python bindings, but should still build man pages. +%if %{with compat_build} +sed -i 's/LLDB_ENABLE_PYTHON/TRUE/' lldb/docs/CMakeLists.txt +%endif +#endregion + #region libcxx preparation %if %{with libcxx} %py3_shebang_fix libcxx/utils/ @@ -1065,7 +1227,7 @@ execution profile gathered by sampling profiler, such as Linux `perf` tool. %endif %global projects clang;clang-tools-extra;lld -%global runtimes compiler-rt;openmp;offload +%global runtimes compiler-rt;openmp %if %{with lldb} %global projects %{projects};lldb @@ -1079,10 +1241,18 @@ execution profile gathered by sampling profiler, such as Linux `perf` tool. %global projects %{projects};bolt %endif +%if %{with polly} +%global projects %{projects};polly +%endif + %if %{with libcxx} %global runtimes %{runtimes};libcxx;libcxxabi;libunwind %endif +%if %{with offload} +%global runtimes %{runtimes};offload +%endif + %global cfg_file_content --gcc-triple=%{_target_cpu}-redhat-linux # We want to use DWARF-5 on all snapshot builds. @@ -1117,6 +1287,17 @@ export ASMFLAGS="%{build_cflags}" cd llvm +# Remember old values to reset to +OLD_PATH="$PATH" +OLD_LD_LIBRARY_PATH="$LD_LIBRARY_PATH" +OLD_CWD="$PWD" + +%global builddir_instrumented $RPM_BUILD_DIR/instrumented-llvm +%if 0%{run_pgo_perf_comparison} +%global builddir_perf_pgo $RPM_BUILD_DIR/performance-of-pgoed-clang +%global builddir_perf_system $RPM_BUILD_DIR/performance-of-system-clang +%endif + #region LLVM lit %if %{with python_lit} pushd utils/lit @@ -1134,12 +1315,16 @@ popd # Common cmake arguments used by both the normal build and bundle_compat_lib. # Any ABI-affecting flags should be in here. %global cmake_common_args \\\ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \\\ -DLLVM_ENABLE_EH=ON \\\ -DLLVM_ENABLE_RTTI=ON \\\ -DLLVM_USE_PERF=ON \\\ -DLLVM_TARGETS_TO_BUILD=%{targets_to_build} \\\ -DBUILD_SHARED_LIBS=OFF \\\ - -DLLVM_BUILD_LLVM_DYLIB=ON + -DLLVM_BUILD_LLVM_DYLIB=ON \\\ + -DLLVM_LINK_LLVM_DYLIB=ON \\\ + -DCLANG_LINK_CLANG_DYLIB=ON \\\ + -DLLVM_ENABLE_FFI:BOOL=ON %global cmake_config_args %{cmake_common_args} @@ -1153,14 +1338,16 @@ popd -DCLANG_ENABLE_STATIC_ANALYZER:BOOL=ON \\\ -DCLANG_INCLUDE_DOCS:BOOL=ON \\\ -DCLANG_INCLUDE_TESTS:BOOL=ON \\\ - -DCLANG_LINK_CLANG_DYLIB=ON \\\ -DCLANG_PLUGIN_SUPPORT:BOOL=ON \\\ -DCLANG_REPOSITORY_STRING="%{?dist_vendor} %{version}-%{release}" \\\ -DLLVM_EXTERNAL_CLANG_TOOLS_EXTRA_SOURCE_DIR=../clang-tools-extra + %if %{with compat_build} - %global cmake_config_args %{cmake_config_args} -DCLANG_RESOURCE_DIR=../../../lib/clang/%{maj_ver} +%global cmake_config_args %{cmake_config_args} \\\ + -DCLANG_RESOURCE_DIR=../../../lib/clang/%{maj_ver} %else - %global cmake_config_args %{cmake_config_args} -DCLANG_RESOURCE_DIR=../lib/clang/%{maj_ver} +%global cmake_config_args %{cmake_config_args} \\\ + -DCLANG_RESOURCE_DIR=../lib/clang/%{maj_ver} %endif #endregion clang options @@ -1181,7 +1368,7 @@ popd # Configure sphinx: # Build man-pages but no HTML docs using sphinx %global cmake_config_args %{cmake_config_args} \\\ - -DSPHINX_EXECUTABLE=%{_bindir}/sphinx-build-3 \\\ + -DSPHINX_EXECUTABLE=/usr/bin/sphinx-build-3 \\\ -DSPHINX_OUTPUT_HTML:BOOL=OFF \\\ -DSPHINX_OUTPUT_MAN:BOOL=ON \\\ -DSPHINX_WARNINGS_AS_ERRORS=OFF @@ -1189,9 +1376,9 @@ popd #region lldb options %if %{with lldb} - %global cmake_config_args %{cmake_config_args} -DLLDB_DISABLE_CURSES:BOOL=OFF - %global cmake_config_args %{cmake_config_args} -DLLDB_DISABLE_LIBEDIT:BOOL=OFF - %global cmake_config_args %{cmake_config_args} -DLLDB_DISABLE_PYTHON:BOOL=OFF +%if %{with compat_build} + %global cmake_config_args %{cmake_config_args} -DLLDB_ENABLE_PYTHON=OFF +%endif %ifarch ppc64le %global cmake_config_args %{cmake_config_args} -DLLDB_TEST_USER_ARGS=--skip-category=watchpoint %endif @@ -1223,7 +1410,10 @@ popd # If we don't adjust this, we will install into this unwanted location: # /usr/include/i686-redhat-linux-gnu/c++/v1/__config_site %global cmake_config_args %{cmake_config_args} \\\ - -DLIBCXX_INSTALL_INCLUDE_TARGET_DIR=%{_includedir}/c++/v1 + -DLIBCXX_INSTALL_INCLUDE_TARGET_DIR=%{_includedir}/c++/v1 \\\ + -DLIBCXX_INSTALL_INCLUDE_DIR=%{_includedir}/c++/v1 \\\ + -DLIBCXX_INSTALL_MODULES_DIR=%{_datadir}/libc++/v1 \\\ + -DLIBCXXABI_INSTALL_INCLUDE_DIR=%{_includedir}/c++/v1 %endif #endregion libcxx options @@ -1236,10 +1426,7 @@ popd -DLLVM_BUILD_RUNTIME:BOOL=ON \\\ -DLLVM_BUILD_TOOLS:BOOL=ON \\\ -DLLVM_BUILD_UTILS:BOOL=ON \\\ - -DLLVM_COMMON_CMAKE_UTILS=%{install_datadir}/llvm/cmake \\\ -DLLVM_DEFAULT_TARGET_TRIPLE=%{llvm_triple} \\\ - -DLLVM_DYLIB_COMPONENTS="all" \\\ - -DLLVM_ENABLE_FFI:BOOL=ON \\\ -DLLVM_ENABLE_LIBCXX:BOOL=OFF \\\ -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON \\\ -DLLVM_ENABLE_PROJECTS="%{projects}" \\\ @@ -1253,7 +1440,6 @@ popd -DLLVM_INCLUDE_UTILS:BOOL=ON \\\ -DLLVM_INSTALL_TOOLCHAIN_ONLY:BOOL=OFF \\\ -DLLVM_INSTALL_UTILS:BOOL=ON \\\ - -DLLVM_LINK_LLVM_DYLIB:BOOL=ON \\\ -DLLVM_PARALLEL_LINK_JOBS=1 \\\ -DLLVM_TOOLS_INSTALL_DIR:PATH=bin \\\ -DLLVM_UNREACHABLE_OPTIMIZE:BOOL=OFF \\\ @@ -1278,6 +1464,14 @@ popd -DLIBOMP_INSTALL_ALIASES=OFF #endregion openmp options +#region polly options +%if %{with polly} +%global cmake_config_args %{cmake_config_args} \\\ + -DLLVM_POLLY_LINK_INTO_TOOLS=OFF +%endif +#endregion polly options + + #region test options %global cmake_config_args %{cmake_config_args} \\\ -DLLVM_BUILD_TESTS:BOOL=ON \\\ @@ -1296,12 +1490,15 @@ popd #region misc options %global cmake_config_args %{cmake_config_args} \\\ - -DCMAKE_BUILD_TYPE=RelWithDebInfo \\\ -DCMAKE_INSTALL_PREFIX=%{install_prefix} \\\ -DENABLE_LINKER_BUILD_ID:BOOL=ON \\\ - -DOFFLOAD_INSTALL_LIBDIR=%{unprefixed_libdir} \\\ -DPython3_EXECUTABLE=%{__python3} +%if %{with offload} +%global cmake_config_args %{cmake_config_args} \\\ + -DOFFLOAD_INSTALL_LIBDIR=%{unprefixed_libdir} +%endif + # During the build, we use both the system clang and the just-built clang, and # they need to use the system and just-built shared objects respectively. If # we use LD_LIBRARY_PATH to point to our build directory, the system clang @@ -1320,12 +1517,8 @@ popd %global cmake_config_args %{cmake_config_args} -DCMAKE_CXX_FLAGS_RELWITHDEBINFO="%{optflags} -DNDEBUG" %endif -%if %{without compat_build} %if 0%{?__isa_bits} == 64 %global cmake_config_args %{cmake_config_args} -DLLVM_LIBDIR_SUFFIX=64 -%else - %global cmake_config_args %{cmake_config_args} -DLLVM_LIBDIR_SUFFIX= -%endif %endif %if %{with gold} @@ -1345,8 +1538,13 @@ popd %endif %if 0%{?rhel} == 8 +%ifnarch s390x + # This option uses the NUMBER_OF_LOGICAL_CORES query in CMake which doesn't + # work on s390x. + # https://gitlab.kitware.com/cmake/cmake/-/issues/26619 %global cmake_config_args %{cmake_config_args} -DLLVM_RAM_PER_COMPILE_JOB=2048 %endif +%endif #endregion misc options extra_cmake_args='' @@ -1357,7 +1555,126 @@ if grep 'flags.*la57' /proc/cpuinfo; then fi #endregion cmake options -%cmake -G Ninja %cmake_config_args $extra_cmake_args +%if %{with pgo} +#region Instrument LLVM +%global __cmake_builddir %{builddir_instrumented} + +# For -Wno-backend-plugin see https://llvm.org/docs/HowToBuildWithPGO.html +#%%global optflags_for_instrumented %(echo %{optflags} -Wno-backend-plugin) + +%global cmake_config_args_instrumented %{cmake_config_args} \\\ + -DLLVM_ENABLE_PROJECTS:STRING="clang;lld" \\\ + -DLLVM_ENABLE_RUNTIMES="compiler-rt" \\\ + -DLLVM_TARGETS_TO_BUILD=Native \\\ + -DCMAKE_BUILD_TYPE:STRING=Release \\\ + -DCMAKE_INSTALL_PREFIX=%{builddir_instrumented} \\\ + -DCLANG_INCLUDE_DOCS:BOOL=OFF \\\ + -DLLVM_BUILD_DOCS:BOOL=OFF \\\ + -DLLVM_BUILD_UTILS:BOOL=OFF \\\ + -DLLVM_ENABLE_DOXYGEN:BOOL=OFF \\\ + -DLLVM_ENABLE_SPHINX:BOOL=OFF \\\ + -DLLVM_INCLUDE_DOCS:BOOL=OFF \\\ + -DLLVM_INCLUDE_TESTS:BOOL=OFF \\\ + -DLLVM_INSTALL_UTILS:BOOL=OFF \\\ + -DCLANG_BUILD_EXAMPLES:BOOL=OFF \\\ + \\\ + -DLLVM_BUILD_INSTRUMENTED=IR \\\ + -DLLVM_BUILD_RUNTIME=No \\\ + -DLLVM_ENABLE_LTO:BOOL=Thin \\\ + -DLLVM_USE_LINKER=lld + +# CLANG_INCLUDE_TESTS=ON is needed to make the target "generate-profdata" available +%global cmake_config_args_instrumented %{cmake_config_args_instrumented} \\\ + -DCLANG_INCLUDE_TESTS:BOOL=ON + +# LLVM_INCLUDE_UTILS=ON is needed because the tests enabled by CLANG_INCLUDE_TESTS=ON +# require "FileCheck", "not", "count", etc. +%global cmake_config_args_instrumented %{cmake_config_args_instrumented} \\\ + -DLLVM_INCLUDE_UTILS:BOOL=ON + +# LLVM Profile Warning: Unable to track new values: Running out of static counters. +# Consider using option -mllvm -vp-counters-per-site= to allocate more value profile +# counters at compile time. +%global cmake_config_args_instrumented %{cmake_config_args_instrumented} \\\ + -DLLVM_VP_COUNTERS_PER_SITE=8 + +# TODO(kkleine): Should we see warnings like: +# "function control flow change detected (hash mismatch)" +# then read https://issues.chromium.org/issues/40633598 again. +%cmake -G Ninja %{cmake_config_args_instrumented} $extra_cmake_args + +# Build all the tools we need in order to build generate-profdata and llvm-profdata +%cmake_build --target libclang-cpp.so +%cmake_build --target clang +%cmake_build --target lld +%cmake_build --target llvm-profdata +%cmake_build --target llvm-ar +%cmake_build --target llvm-ranlib +%cmake_build --target llvm-cxxfilt +#endregion Instrument LLVM + +#region Perf training +# Without these exports the function count is ~160 and with them it is ~200,000. +export LD_LIBRARY_PATH="%{builddir_instrumented}/%{_lib}:%{builddir_instrumented}/lib:$OLD_LD_LIBRARY_PATH" +export PATH="%{builddir_instrumented}/bin:$OLD_PATH" + +%cmake_build --target generate-profdata + +# Use the newly compiled llvm-profdata to avoid profile version mismatches like: +# "raw profile version mismatch: Profile uses raw profile format version = 10; expected version = 9" +%global llvm_profdata_bin %{builddir_instrumented}/bin/llvm-profdata +%global llvm_cxxfilt_bin %{builddir_instrumented}/bin/llvm-cxxfilt + +# Show top 10 functions in the profile +%llvm_profdata_bin show --topn=10 %{builddir_instrumented}/tools/clang/utils/perf-training/clang.profdata | %llvm_cxxfilt_bin + +cp %{builddir_instrumented}/tools/clang/utils/perf-training/clang.profdata $RPM_BUILD_DIR/result.profdata + +#endregion Perf training +%endif + +#region Final stage + +#region reset paths and globals +function reset_paths { + export PATH="$OLD_PATH" + export LD_LIBRARY_PATH="$OLD_LD_LIBRARY_PATH" +} +reset_paths + +cd $OLD_CWD +%global _vpath_srcdir . +%global __cmake_builddir %{_vpath_builddir} +#endregion reset paths and globals + +%global extra_cmake_opts %{nil} + +%if %{with pgo} + %global extra_cmake_opts %{extra_cmake_opts} -DLLVM_PROFDATA_FILE=$RPM_BUILD_DIR/result.profdata + # There were a couple of errors that I ran into. One basically said: + # + # Error: LLVM Profile Warning: Unable to track new values: Running out of + # static counters. Consider using option -mllvm -vp-counters-per-site= to + # allocate more value profile counters at compile time. + # + # As a solution I’ve added the --vp-counters-per-site option but this resulted + # in a follow-up error: + # + # Error: clang (LLVM option parsing): for the --vp-counters-per-site option: + # may only occur zero or one times! + # + # The solution was to modify vp-counters-per-site option through + # LLVM_VP_COUNTERS_PER_SITE instead of adding it, hence the + # -DLLVM_VP_COUNTERS_PER_SITE=8. + %global extra_cmake_opts %{extra_cmake_opts} -DLLVM_VP_COUNTERS_PER_SITE=8 +%if 0%{with lto_build} + %global extra_cmake_opts %{extra_cmake_opts} -DLLVM_ENABLE_LTO:BOOL=Thin + %global extra_cmake_opts %{extra_cmake_opts} -DLLVM_ENABLE_FATLTO=ON +%endif + %global extra_cmake_opts %{extra_cmake_opts} -DLLVM_USE_LINKER=lld +%endif + +%cmake -G Ninja %{cmake_config_args} %{extra_cmake_opts} $extra_cmake_args # Build libLLVM.so first. This ensures that when libLLVM.so is linking, there # are no other compile jobs running. This will help reduce OOM errors on the @@ -1368,6 +1685,13 @@ fi # This is to fix occasional OOM errors on the ppc64le COPR builders. %cmake_build --target libclang-cpp.so +# Same for the three large MLIR dylibs. +%if %{with mlir} +%cmake_build --target libMLIR.so +%cmake_build --target libMLIR-C.so +%cmake_build --target libMLIRPythonCAPI.so +%endif + %cmake_build # If we don't build the runtimes target here, we'll have to wait for the %%check @@ -1376,21 +1700,92 @@ fi # /usr/lib64/libomptarget.devicertl.a # /usr/lib64/libomptarget-amdgpu-*.bc # /usr/lib64/libomptarget-nvptx-*.bc - %cmake_build --target runtimes +#endregion Final stage + +#region Performance comparison +%if 0%{run_pgo_perf_comparison} + +function run_perf_test { + local build_dir=$1 + + cd %{llvm_test_suite_dir} + %__cmake -G Ninja \ + -S "%{llvm_test_suite_dir}" \ + -B "${build_dir}" \ + -DCMAKE_GENERATOR=Ninja \ + -DCMAKE_C_COMPILER=clang \ + -DCMAKE_CXX_COMPILER=clang++ \ + -DTEST_SUITE_BENCHMARKING_ONLY=ON \ + -DTEST_SUITE_COLLECT_STATS=ON \ + -DTEST_SUITE_USE_PERF=OFF \ + -DTEST_SUITE_SUBDIRS=CTMark \ + -DTEST_SUITE_RUN_BENCHMARKS=OFF \ + -DTEST_SUITE_COLLECT_CODE_SIZE=OFF \ + -C%{llvm_test_suite_dir}/cmake/caches/O3.cmake + + # Build the test-suite + %__cmake --build "${build_dir}" -j1 --verbose + + # Run the tests with lit: + %{builddir_instrumented}/bin/llvm-lit -v -o ${build_dir}/results.json ${build_dir} || true + cd $OLD_CWD +} + +# Run performance test for system clang +reset_paths +run_perf_test %{builddir_perf_system} + +# Run performance test for PGOed clang +reset_paths +FINAL_BUILD_DIR=`pwd`/%{_vpath_builddir} +export LD_LIBRARY_PATH="${FINAL_BUILD_DIR}/lib:${FINAL_BUILD_DIR}/lib64:${LD_LIBRARY_PATH}" +export PATH="${FINAL_BUILD_DIR}/bin:${OLD_PATH}" +run_perf_test %{builddir_perf_pgo} + +# Compare the performance of system and PGOed clang +%if 0%{?rhel} +python3 -m venv compare-env +source ./compare-env/bin/activate +pip install "pandas>=2.2.3" +pip install "scipy>=1.13.1" +MY_PYTHON_BIN=./compare-env/bin/python3 +%endif + +system_llvm_release=$(/usr/bin/clang --version | grep -Po '[0-9]+\.[0-9]+\.[0-9]' | head -n1) +${MY_PYTHON_BIN} %{llvm_test_suite_dir}/utils/compare.py \ + --metric compile_time \ + --lhs-name ${system_llvm_release} \ + --rhs-name pgo-%{version} \ + %{builddir_perf_system}/results.json vs %{builddir_perf_pgo}/results.json > %{builddir_perf_pgo}/results-system-vs-pgo.txt || true + +echo "Result of Performance comparison between system and PGOed clang" +cat %{builddir_perf_pgo}/results-system-vs-pgo.txt + +%if 0%{?rhel} +# Deactivate virtual python environment created ealier +deactivate +%endif +%endif +#endregion Performance comparison #region compat lib cd .. %if %{with bundle_compat_lib} +# MIPS and Arm targets were disabled in LLVM 20, but we still need them +# enabled for the compat libraries. %cmake -S ../llvm-project-%{compat_ver}.src/llvm -B ../llvm-compat-libs -G Ninja \ -DCMAKE_INSTALL_PREFIX=%{buildroot}%{_libdir}/llvm%{compat_maj_ver}/ \ -DCMAKE_SKIP_RPATH=ON \ - -DCMAKE_BUILD_TYPE=Release \ -DLLVM_ENABLE_PROJECTS="clang;lldb" \ -DLLVM_INCLUDE_BENCHMARKS=OFF \ -DLLVM_INCLUDE_TESTS=OFF \ - %{cmake_common_args} + %{cmake_common_args} \ +%if %{compat_maj_ver} <= 19 + -DLLVM_TARGETS_TO_BUILD="$(echo %{targets_to_build});Mips;ARM" \ +%endif + %{nil} %ninja_build -C ../llvm-compat-libs LLVM %ninja_build -C ../llvm-compat-libs libclang.so @@ -1440,9 +1835,6 @@ install %{build_libdir}/libLLVMTestingAnnotations.a %{buildroot}%{install_libdir %if %{without compat_build} -# Fix some man pages -ln -s llvm-config.1 %{buildroot}%{_mandir}/man1/llvm-config%{exec_suffix}-%{__isa_bits}.1 - %if %{with gold} # Add symlink to lto plugin in the binutils plugin directory. %{__mkdir_p} %{buildroot}%{_libdir}/bfd-plugins/ @@ -1457,17 +1849,10 @@ cat >> %{buildroot}%{_sysconfdir}/ld.so.conf.d/%{pkg_name_llvm}-%{_arch}.conf << %{install_libdir} EOF -# Add version suffix to man pages and move them to mandir. -mkdir -p %{buildroot}/%{_mandir}/man1 -for f in %{build_install_prefix}/share/man/man1/*; do - filename=`basename $f | cut -f 1 -d '.'` - mv $f %{buildroot}%{_mandir}/man1/$filename%{exec_suffix}.1 -done - %endif -mkdir -p %{buildroot}%{pkg_datadir}/llvm/cmake -cp -Rv cmake/* %{buildroot}%{pkg_datadir}/llvm/cmake +mkdir -p %{buildroot}%{install_datadir}/llvm-cmake +cp -Rv cmake/* %{buildroot}%{install_datadir}/llvm-cmake # Install a placeholder to redirect users of the formerly shipped # HTML documentation to the upstream HTML documentation. @@ -1502,8 +1887,16 @@ EOF #region CLANG installation -# Add a symlink in /usr/bin to clang-format-diff -ln -s %{install_datadir}/clang/clang-format-diff.py %{buildroot}%{install_bindir}/clang-format-diff +# Add a symlink in bindir to clang-format-diff +ln -s ../share/clang/clang-format-diff.py %{buildroot}%{install_bindir}/clang-format-diff + +# Install the PGO profile that was used to build this LLVM into the clang package +%if 0%{with pgo} +cp -v $RPM_BUILD_DIR/result.profdata %{buildroot}%{install_datadir}/llvm-pgo.profdata +%if 0%{run_pgo_perf_comparison} +cp -v %{builddir_perf_pgo}/results-system-vs-pgo.txt %{buildroot}%{install_datadir}/results-system-vs-pgo.txt +%endif +%endif # File in the macros file for other packages to use. We are not doing this # in the compat package, because the version macros would # conflict with @@ -1525,7 +1918,7 @@ install -p -m644 clang/bindings/python/clang/* %{buildroot}%{python3_sitelib}/cl %py_byte_compile %{__python3} %{buildroot}%{python3_sitelib}/clang # install scanbuild-py to python sitelib. -mv %{buildroot}%{_prefix}/lib/{libear,libscanbuild} %{buildroot}%{python3_sitelib} +mv %{buildroot}%{install_prefix}/lib/{libear,libscanbuild} %{buildroot}%{python3_sitelib} # Cannot use {libear,libscanbuild} style expansion in py_byte_compile. %py_byte_compile %{__python3} %{buildroot}%{python3_sitelib}/libear %py_byte_compile %{__python3} %{buildroot}%{python3_sitelib}/libscanbuild @@ -1533,37 +1926,22 @@ mv %{buildroot}%{_prefix}/lib/{libear,libscanbuild} %{buildroot}%{python3_siteli # Move emacs integration files to the correct directory mkdir -p %{buildroot}%{_emacs_sitestartdir} for f in clang-format.el clang-include-fixer.el; do -mv %{buildroot}{%{_datadir}/clang,%{_emacs_sitestartdir}}/$f +mv %{buildroot}{%{install_datadir}/clang,%{_emacs_sitestartdir}}/$f done -%if %{maj_ver} < 20 -mv %{buildroot}{%{_datadir}/clang,%{_emacs_sitestartdir}}/clang-rename.el -%endif - -# Add clang++-{version} symlink -ln -s clang++ %{buildroot}%{_bindir}/clang++-%{maj_ver} %else -# Fix permission -chmod u-x %{buildroot}%{_mandir}/man1/scan-build%{exec_suffix}.1* - # Not sure where to put these python modules for the compat build. -rm -Rf %{buildroot}%{install_libdir}/{libear,libscanbuild} +rm -Rf %{buildroot}%{install_prefix}/lib/{libear,libscanbuild} +rm %{buildroot}%{install_bindir}/scan-build-py # Not sure where to put the emacs integration files for the compat build. rm -Rf %{buildroot}%{install_datadir}/clang/*.el -# Add clang++-{version} symlink -ln -s clang++ %{buildroot}%{install_bindir}/clang++-%{maj_ver} - %endif -# Create Manpage symlinks -ln -s clang%{exec_suffix}.1.gz %{buildroot}%{_mandir}/man1/clang++%{exec_suffix}.1.gz -%if %{without compat_build} -ln -s clang.1.gz %{buildroot}%{_mandir}/man1/clang-%{maj_ver}.1.gz -ln -s clang.1.gz %{buildroot}%{_mandir}/man1/clang++-%{maj_ver}.1.gz -%endif +# Create manpage symlink for clang++ +ln -s clang-%{maj_ver}.1 %{buildroot}%{install_mandir}/man1/clang++.1 # Fix permissions of scan-view scripts chmod a+x %{buildroot}%{install_datadir}/scan-view/{Reporter.py,startfile.py} @@ -1576,33 +1954,23 @@ rm -vf %{buildroot}%{install_datadir}/clang/clang-format-bbedit.applescript rm -vf %{buildroot}%{install_datadir}/clang/clang-format-sublime.py* # Remove unpackaged files -rm -Rvf %{buildroot}%{install_datadir}/clang-doc/clang-doc-default-stylesheet.css -rm -Rvf %{buildroot}%{install_datadir}/clang-doc/index.js +rm -Rvf %{buildroot}%{install_datadir}/clang-doc # TODO: What are the Fedora guidelines for packaging bash autocomplete files? rm -vf %{buildroot}%{install_datadir}/clang/bash-autocomplete.sh -# Create sub-directories in the clang resource directory that will be -# populated by other packages +%if %{without compat_build} +# Move clang resource directory to default prefix. +mkdir -p %{buildroot}%{_prefix}/lib/clang +mv %{buildroot}%{install_prefix}/lib/clang/%{maj_ver} %{buildroot}%{_prefix}/lib/clang/%{maj_ver} +%endif +# Create any missing sub-directories in the clang resource directory. mkdir -p %{buildroot}%{_prefix}/lib/clang/%{maj_ver}/{bin,include,lib,share}/ # Add versioned resource directory macro mkdir -p %{buildroot}%{_rpmmacrodir}/ echo "%%clang%{maj_ver}_resource_dir %%{_prefix}/lib/clang/%{maj_ver}" >> %{buildroot}%{_rpmmacrodir}/macros.%{pkg_name_clang} -# Install config file for clang -%if %{maj_ver} >=18 -%global cfg_file_content --gcc-triple=%{_target_cpu}-redhat-linux - -# We want to use DWARF-5 on all snapshot builds. -%if %{without snapshot_build} && %{defined rhel} && 0%{?rhel} < 10 -%global cfg_file_content %{cfg_file_content} -gdwarf-4 -g0 -%endif - -%if %{defined gts_version} -%global cfg_file_content %{cfg_file_content} --gcc-install-dir=/opt/rh/gcc-toolset-%{gts_version}/root/%{_exec_prefix}/lib/gcc/%{_target_cpu}-redhat-linux/%{gts_version} -%endif - mkdir -p %{buildroot}%{_sysconfdir}/%{pkg_name_clang}/ echo " %{cfg_file_content}" >> %{buildroot}%{_sysconfdir}/%{pkg_name_clang}/%{_target_platform}-clang.cfg echo " %{cfg_file_content}" >> %{buildroot}%{_sysconfdir}/%{pkg_name_clang}/%{_target_platform}-clang++.cfg @@ -1611,7 +1979,6 @@ echo " %{cfg_file_content}" >> %{buildroot}%{_sysconfdir}/%{pkg_name_clang}/%{_t echo " %{cfg_file_content}" >> %{buildroot}%{_sysconfdir}/%{pkg_name_clang}/i386-redhat-linux-gnu-clang.cfg echo " %{cfg_file_content}" >> %{buildroot}%{_sysconfdir}/%{pkg_name_clang}/i386-redhat-linux-gnu-clang++.cfg %endif -%endif #endregion CLANG installation @@ -1650,13 +2017,9 @@ rm -rf %{buildroot}/%{install_datadir}/gdb # chmod go+w %{buildroot}/%{_datarootdir}/gdb/python/ompd/ompdModule.so # chmod +w %{buildroot}/%{_datarootdir}/gdb/python/ompd/ompdModule.so -%ifnarch %{ix86} +%if %{with offload} # Remove files that we don't package, yet. -%if %{maj_ver} >= 20 rm %{buildroot}%{install_bindir}/llvm-offload-device-info -%else -rm %{buildroot}%{install_bindir}/llvm-omp-device-info -%endif rm %{buildroot}%{install_bindir}/llvm-omp-kernel-replay %endif @@ -1668,31 +2031,39 @@ rm %{buildroot}%{install_bindir}/llvm-omp-kernel-replay # Required when using update-alternatives: # https://docs.fedoraproject.org/en-US/packaging-guidelines/Alternatives/ touch %{buildroot}%{_bindir}/ld - -install -D -m 644 -t %{buildroot}%{_mandir}/man1/ lld/docs/ld.lld.1 %endif +install -D -m 644 -t %{buildroot}%{install_mandir}/man1/ lld/docs/ld.lld.1 + #endregion LLD installation #region LLDB installation %if %{with lldb} %multilib_fix_c_header --file %{install_includedir}/lldb/Host/Config.h +%if %{without compat_build} +# Move python package out of llvm prefix. +mkdir -p %{buildroot}%{python3_sitearch} +mv %{buildroot}%{install_prefix}/%{_lib}/python%{python3_version}/site-packages/lldb %{buildroot}/%{python3_sitearch} +rmdir %{buildroot}%{install_prefix}/%{_lib}/python%{python3_version}/site-packages +rmdir %{buildroot}%{install_prefix}/%{_lib}/python%{python3_version} + # python: fix binary libraries location -liblldb=$(basename $(readlink -e %{buildroot}%{_libdir}/liblldb.so)) +liblldb=$(basename $(readlink -e %{buildroot}%{install_libdir}/liblldb.so)) ln -vsf "../../../${liblldb}" %{buildroot}%{python3_sitearch}/lldb/_lldb.so %py_byte_compile %{__python3} %{buildroot}%{python3_sitearch}/lldb %endif +%endif #endregion LLDB installation #region mlir installation %if %{with mlir} mkdir -p %{buildroot}/%{python3_sitearch} -mv %{buildroot}%{_prefix}/python_packages/mlir_core/mlir %{buildroot}/%{python3_sitearch} +mv %{buildroot}%{install_prefix}/python_packages/mlir_core/mlir %{buildroot}/%{python3_sitearch} # These directories should be empty now. -rmdir %{buildroot}%{_prefix}/python_packages/mlir_core %{buildroot}%{_prefix}/python_packages +rmdir %{buildroot}%{install_prefix}/python_packages/mlir_core %{buildroot}%{install_prefix}/python_packages # Unneeded files. -rm -rf %{buildroot}%{_prefix}/src/python +rm -rf %{buildroot}%{install_prefix}/src/python %endif #endregion mlir installation @@ -1717,46 +2088,79 @@ popd #region BOLT installation # We don't ship libLLVMBOLT*.a -rm -f %{buildroot}%{_libdir}/libLLVMBOLT*.a +rm -f %{buildroot}%{install_libdir}/libLLVMBOLT*.a #endregion BOLT installation -%if %{with compat_build} -# Add version suffix to binaries. Do this at the end so it includes any -# additional binaries that may be been added by other steps. -for f in %{buildroot}/%{install_bindir}/*; do - filename=`basename $f` - if echo $filename | grep -e '%{maj_ver}'; then - continue - fi - ln -s ../../%{install_bindir}/$filename %{buildroot}/%{_bindir}/$filename%{exec_suffix} -done -%endif +# Move files from src to dest and replace the old files in src with relative +# symlinks. +move_and_replace_with_symlinks() { + local src="$1" + local dest="$2" + mkdir -p "$dest" -# llvm-config special casing. llvm-config is managed by update-alternatives. -# the original file must remain available for compatibility with the CMake -# infrastructure. Without compat, cmake points to the symlink, with compat it -# points to the original file. + # Change to source directory to simplify relative paths + (cd "$src" && \ + find * -type d -exec mkdir -p "$dest/{}" \; && \ + find * \( -type f -o -type l \) -exec mv "$src/{}" "$dest/{}" \; \ + -exec ln -s --relative "$dest/{}" "$src/{}" \;) +} %if %{without compat_build} - -mv %{buildroot}/%{install_bindir}/llvm-config %{buildroot}/%{install_bindir}/llvm-config%{exec_suffix}-%{__isa_bits} -# We still maintain a versionned symlink for consistency across llvm versions. -# This is specific to the non-compat build and matches the exec prefix for -# compat builds. An isa-agnostic versionned symlink is also maintained in the (un)install -# steps. -(cd %{buildroot}/%{install_bindir} ; ln -s llvm-config%{exec_suffix}-%{__isa_bits} llvm-config-%{maj_ver}-%{__isa_bits} ) -# ghost presence -touch %{buildroot}%{_bindir}/llvm-config-%{maj_ver} - -%else - -rm %{buildroot}%{_bindir}/llvm-config%{exec_suffix} -(cd %{buildroot}/%{install_bindir} ; ln -s llvm-config llvm-config%{exec_suffix}-%{__isa_bits} ) - +# Move files from the llvm prefix to the system prefix and replace them with +# symlinks. We do it this way around because symlinks between multilib packages +# would conflict otherwise. +move_and_replace_with_symlinks %{buildroot}%{install_bindir} %{buildroot}%{_bindir} +move_and_replace_with_symlinks %{buildroot}%{install_libdir} %{buildroot}%{_libdir} +move_and_replace_with_symlinks %{buildroot}%{install_libexecdir} %{buildroot}%{_libexecdir} +move_and_replace_with_symlinks %{buildroot}%{install_includedir} %{buildroot}%{_includedir} +move_and_replace_with_symlinks %{buildroot}%{install_datadir} %{buildroot}%{_datadir} %endif -# ghost presence -touch %{buildroot}%{_bindir}/llvm-config%{exec_suffix} +# Create versioned symlinks for binaries. +# Do this at the end so it includes any files added by preceding steps. +mkdir -p %{buildroot}%{_bindir} +for f in %{buildroot}%{install_bindir}/*; do + filename=`basename $f` + if [[ "$filename" =~ ^(lit|ld|clang-%{maj_ver})$ ]]; then + continue + fi + %if %{with compat_build} + ln -s ../../%{install_bindir}/$filename %{buildroot}/%{_bindir}/$filename-%{maj_ver} + %else + # clang-NN is already created by the build system. + if [[ "$filename" == "clang" ]]; then + continue + fi + ln -s $filename %{buildroot}/%{_bindir}/$filename-%{maj_ver} + %endif +done + +mkdir -p %{buildroot}%{_mandir}/man1 +for f in %{buildroot}%{install_mandir}/man1/*; do + filename=`basename $f` + filename=${filename%.1} + %if %{with compat_build} + # Move man pages to system install prefix. + mv $f %{buildroot}%{_mandir}/man1/$filename-%{maj_ver}.1 + %else + # Create suffixed symlink. + ln -s $filename.1 %{buildroot}%{_mandir}/man1/$filename-%{maj_ver}.1 + %endif +done +rm -rf %{buildroot}%{install_mandir} + +# As an exception, always keep llvm-config in the versioned prefix. +# The llvm-config in the default prefix will be managed by alternatives. +%if %{without compat_build} +rm %{buildroot}%{install_bindir}/llvm-config +mv %{buildroot}%{_bindir}/llvm-config %{buildroot}%{install_bindir}/llvm-config +%endif + +# ghost presence for llvm-config, managed by alternatives. +touch %{buildroot}%{_bindir}/llvm-config-%{maj_ver} +%if %{without compat_build} +touch %{buildroot}%{_bindir}/llvm-config +%endif %if %{with bundle_compat_lib} install -m 0755 ../llvm-compat-libs/lib/libLLVM.so.%{compat_maj_ver}* %{buildroot}%{_libdir} @@ -1780,17 +2184,14 @@ rm llvm/test/tools/gold/PowerPC/mtriple.ll # TODO(kkleine): Add this to XFAIL instead? rm llvm/test/tools/dsymutil/X86/swift-interface.test -%if %{with check} - cd llvm +%if %{with check} + #region Helper functions # Call this function before setting up a next component to test. function reset_test_opts() { - # Some libraries will not be found if we don't set this - export LD_LIBRARY_PATH="%{buildroot}/%{install_libdir}:%{buildroot}/%{_libdir}"; - # See https://llvm.org/docs/CommandGuide/lit.html#general-options export LIT_OPTS="-vv --time-tests" @@ -1923,12 +2324,14 @@ export LIT_XFAIL="$LIT_XFAIL;api_tests/test_ompd_get_curr_parallel_handle.c" export LIT_XFAIL="$LIT_XFAIL;api_tests/test_ompd_get_display_control_vars.c" export LIT_XFAIL="$LIT_XFAIL;api_tests/test_ompd_get_thread_handle.c" +%if %{with pgo} +# TODO(kkleine): I unset LIT_XFAIL here because the tests above unexpectedly passed since Aug 16th on fedora-40-x86_64 +unset LIT_XFAIL +%endif + # The following test is flaky and we'll filter it out -test_list_filter_out+=("libomp :: ompt/teams/distribute_dispatch.c") test_list_filter_out+=("libomp :: affinity/kmp-abs-hw-subset.c") -test_list_filter_out+=("libomp :: parallel/bug63197.c") -test_list_filter_out+=("libomp :: tasking/issue-69733.c") -test_list_filter_out+=("libarcher :: races/task-taskgroup-unrelated.c") +test_list_filter_out+=("libomp :: ompt/teams/distribute_dispatch.c") # These tests fail more often than not, but not always. test_list_filter_out+=("libomp :: worksharing/for/omp_collapse_many_GELTGT_int.c") @@ -1936,17 +2339,31 @@ test_list_filter_out+=("libomp :: worksharing/for/omp_collapse_many_GTGEGT_int.c test_list_filter_out+=("libomp :: worksharing/for/omp_collapse_many_LTLEGE_int.c") test_list_filter_out+=("libomp :: worksharing/for/omp_collapse_one_int.c") +%if %{maj_ver} < 21 +# The following test is flaky and we'll filter it out +test_list_filter_out+=("libomp :: parallel/bug63197.c") +test_list_filter_out+=("libomp :: tasking/issue-69733.c") +test_list_filter_out+=("libarcher :: races/task-taskgroup-unrelated.c") + +# The following tests have been failing intermittently. +# Issue upstream: https://github.com/llvm/llvm-project/issues/127796 +test_list_filter_out+=("libarcher :: races/task-two.c") +test_list_filter_out+=("libarcher :: races/lock-nested-unrelated.c") +%endif + %ifarch s390x test_list_filter_out+=("libomp :: flush/omp_flush.c") test_list_filter_out+=("libomp :: worksharing/for/omp_for_schedule_guided.c") %endif +%if %{maj_ver} < 21 %ifarch aarch64 s390x # The following test has been failing intermittently on aarch64 and s390x. # Re-enable it after https://github.com/llvm/llvm-project/issues/117773 # gets fixed. test_list_filter_out+=("libarcher :: races/taskwait-depend.c") %endif +%endif # The following tests seem pass on ppc64le and x86_64 and aarch64 only: %ifnarch ppc64le x86_64 s390x aarch64 @@ -1988,9 +2405,9 @@ export LIT_XFAIL="$LIT_XFAIL;races/lock-unrelated.c" export LIT_XFAIL="$LIT_XFAIL;races/parallel-simple.c" export LIT_XFAIL="$LIT_XFAIL;races/task-dependency.c" export LIT_XFAIL="$LIT_XFAIL;races/task-taskgroup-unrelated.c" -export LIT_XFAIL="$LIT_XFAIL;races/task-taskwait-nested.c" export LIT_XFAIL="$LIT_XFAIL;races/task-two.c" export LIT_XFAIL="$LIT_XFAIL;races/taskwait-depend.c" +export LIT_XFAIL="$LIT_XFAIL;races/task-taskwait-nested.c" export LIT_XFAIL="$LIT_XFAIL;reduction/parallel-reduction-nowait.c" export LIT_XFAIL="$LIT_XFAIL;reduction/parallel-reduction.c" export LIT_XFAIL="$LIT_XFAIL;task/omp_task_depend_all.c" @@ -2049,9 +2466,22 @@ export LIT_XFAIL="$LIT_XFAIL;offloading/thread_state_2.c" adjust_lit_filter_out test_list_filter_out +%if %{maj_ver} >= 21 +# This allows openmp tests to be re-run 4 times. Once they pass +# after being re-run, they are marked as FLAKYPASS. +# See https://github.com/llvm/llvm-project/pull/141851 for the +# --max-retries-per-test option. +# We don't know if 4 is the right number to use here we just +# need to start with some number. +# Once https://github.com/llvm/llvm-project/pull/142413 landed +# we can see the exact number of attempts the tests needed +# to pass. And then we can adapt this number. +export LIT_OPTS="$LIT_OPTS --max-retries-per-test=4" +%endif + %if 0%{?rhel} # libomp tests are often very slow on s390x brew builders -%ifnarch s390x +%ifnarch s390x riscv64 %cmake_build --target check-openmp %endif %else @@ -2094,17 +2524,23 @@ reset_test_opts %if %{with mlir} reset_test_opts -%if %{maj_ver} < 20 -# The ml_dtypes python module required by mlir/test/python/execution_engine.py -# isn't packaged. But in LLVM 20 the execution_engine.py is modified to only -# run certain tests if ml_dtypes is present. -test_list_filter_out+=("MLIR :: python/execution_engine.py") -test_list_filter_out+=("MLIR :: python/multithreaded_tests.py") -%endif - %ifarch s390x # s390x does not support half-float test_list_filter_out+=("MLIR :: python/ir/array_attributes.py") +test_list_filter_out+=("MLIR :: python/execution_engine.py") +%endif + +%ifarch ppc64le +# Medium code model can result in relocation failures, see: +# https://github.com/llvm/llvm-project/issues/129499 + +# Additionally, support for converting to/from fp16 was added on +# Power9 processors (aka. Power ISA 3.0). Even if the above issue +# is fixed, avoid running execution_engine.py on servers that do +# not support this ISA level, using the following condition: +# if ! LD_SHOW_AUXV=1 /bin/true | grep -q arch_3_00; then +test_list_filter_out+=("MLIR :: python/execution_engine.py") +test_list_filter_out+=("MLIR :: python/multithreaded_tests.py") %endif adjust_lit_filter_out test_list_filter_out @@ -2116,12 +2552,7 @@ export PYTHONPATH=%{buildroot}/%{python3_sitearch} #region BOLT tests %if %{with build_bolt} -%if %{maj_ver} < 20 -export LIT_XFAIL="$LIT_XFAIL;AArch64/build_id.c" -export LIT_XFAIL="$LIT_XFAIL;AArch64/plt-call.test" -export LIT_XFAIL="$LIT_XFAIL;X86/linux-static-keys.s" -export LIT_XFAIL="$LIT_XFAIL;X86/plt-call.test" -%endif +reset_test_opts # Beginning with LLVM 20 this test has the "non-root-user" requirement # and then the test should pass. But now it is flaky, hence we can only @@ -2147,23 +2578,23 @@ if ! grep -q atomics /proc/cpuinfo; then fi %endif -%if %{maj_ver} < 20 -%ifarch x86_64 -# BOLT-ERROR: instrumentation of static binary currently does not support profile output on binary -# finalization, so it requires -instrumentation-sleep-time=N (N>0) usage -export LIT_XFAIL="$LIT_XFAIL;X86/internal-call-instrument.s" -%endif -%endif - %cmake_build --target check-bolt %endif #endregion BOLT tests +#region polly tests +%if %{with polly} +reset_test_opts +%cmake_build --target check-polly +%endif +#endregion polly tests + + %endif %if %{with snapshot_build} # Do this here instead of in install so the check targets are also included. -cp %{_vpath_builddir}/.ninja_log %{buildroot}%{pkg_datadir} +cp %{_vpath_builddir}/.ninja_log %{buildroot}%{_datadir} %endif #endregion check @@ -2176,9 +2607,15 @@ cp %{_vpath_builddir}/.ninja_log %{buildroot}%{pkg_datadir} %endif %post -n %{pkg_name_llvm}-devel -%{_sbindir}/update-alternatives --install %{_bindir}/llvm-config%{exec_suffix} llvm-config%{exec_suffix} %{install_bindir}/llvm-config%{exec_suffix}-%{__isa_bits} %{__isa_bits} +update-alternatives --install %{_bindir}/llvm-config-%{maj_ver} llvm-config-%{maj_ver} %{install_bindir}/llvm-config %{__isa_bits} %if %{without compat_build} -%{_sbindir}/update-alternatives --install %{_bindir}/llvm-config-%{maj_ver} llvm-config-%{maj_ver} %{install_bindir}/llvm-config%{exec_suffix}-%{__isa_bits} %{__isa_bits} +# Prioritize newer LLVM versions over older and 64-bit over 32-bit. +update-alternatives --install %{_bindir}/llvm-config llvm-config %{install_bindir}/llvm-config $((%{maj_ver}*100+%{__isa_bits})) + +# Remove old llvm-config-%{__isa_bits} alternative. This will only do something during the +# first upgrade from a version that used it. In all other cases it will error, so suppress the +# expected error message. +update-alternatives --remove llvm-config %{_bindir}/llvm-config-%{__isa_bits} 2>/dev/null ||: # During the upgrade from LLVM 16 (F38) to LLVM 17 (F39), we found out the # main llvm-devel package was leaving entries in the alternatives system. @@ -2186,39 +2623,79 @@ cp %{_vpath_builddir}/.ninja_log %{buildroot}%{pkg_datadir} for v in 14 15 16; do if [[ -e %{_bindir}/llvm-config-$v && "x$(%{_bindir}/llvm-config-$v --version | awk -F . '{ print $1 }')" != "x$v" ]]; then - %{_sbindir}/update-alternatives --remove llvm-config-$v %{install_bindir}/llvm-config%{exec_suffix}-%{__isa_bits} + update-alternatives --remove llvm-config-$v %{install_bindir}/llvm-config%{exec_suffix}-%{__isa_bits} fi done %endif %postun -n %{pkg_name_llvm}-devel if [ $1 -eq 0 ]; then - %{_sbindir}/update-alternatives --remove llvm-config%{exec_suffix} %{install_bindir}/llvm-config%{exec_suffix}-%{__isa_bits} + update-alternatives --remove llvm-config%{exec_suffix} %{install_bindir}/llvm-config fi %if %{without compat_build} -# When upgrading between minor versions (i.e. from x.y.1 to x.y.2), we must -# not remove the alternative. -# However, during a major version upgrade (i.e. from 16.x.y to 17.z.w), the -# alternative must be removed in order to give priority to a newly installed -# compat package. -if [[ $1 -eq 0 - || "x$(%{_bindir}/llvm-config%{exec_suffix} --version | awk -F . '{ print $1 }')" != "x%{maj_ver}" ]]; then - %{_sbindir}/update-alternatives --remove llvm-config-%{maj_ver} %{install_bindir}/llvm-config%{exec_suffix}-%{__isa_bits} +# There are a number of different cases here: +# Uninstall: Remove alternatives. +# Patch version upgrade: Keep alternatives. +# Major version upgrade with installation of compat package: Keep alternatives for compat package. +# Major version upgrade without installation of compat package: Remove alternatives. However, we +# can't distinguish it from the previous case, so we conservatively leave it behind. +if [ $1 -eq 0 ]; then + update-alternatives --remove llvm-config-%{maj_ver} %{install_bindir}/llvm-config fi %endif %if %{without compat_build} %post -n %{pkg_name_lld} -%{_sbindir}/update-alternatives --install %{_bindir}/ld ld %{_bindir}/ld.lld 1 +update-alternatives --install %{_bindir}/ld ld %{_bindir}/ld.lld 1 %postun -n %{pkg_name_lld} if [ $1 -eq 0 ] ; then - %{_sbindir}/update-alternatives --remove ld %{_bindir}/ld.lld + update-alternatives --remove ld %{_bindir}/ld.lld fi %endif #endregion misc #region files +%define expand_bins() %{lua: + local bindir = rpm.expand("%{_bindir}") + local install_bindir = rpm.expand("%{install_bindir}") + local maj_ver = rpm.expand("%{maj_ver}") + for arg in rpm.expand("%*"):gmatch("%S+") do + print(install_bindir .. "/" .. arg .. "\\n") + print(bindir .. "/" .. arg .. "-" .. maj_ver .. "\\n") + if rpm.expand("%{without compat_build}") == "1" then + print(bindir .. "/" .. arg .. "\\n") + end + end +} + +%define expand_mans() %{lua: + local mandir = rpm.expand("%{_mandir}") + local maj_ver = rpm.expand("%{maj_ver}") + for arg in rpm.expand("%*"):gmatch("%S+") do + print(mandir .. "/man1/" .. arg .. "-" .. maj_ver .. ".1.gz\\n") + if rpm.expand("%{without compat_build}") == "1" then + print(mandir .. "/man1/" .. arg .. ".1.gz\\n") + end + end +} + +%define expand_generic(d:i:) %{lua: + local dir = rpm.expand("%{-d*}") + local install_dir = rpm.expand("%{-i*}") + for arg in rpm.expand("%*"):gmatch("%S+") do + print(install_dir .. "/" .. arg .. "\\n") + if rpm.expand("%{without compat_build}") == "1" then + print(dir .. "/" .. arg .. "\\n") + end + end +} + +%define expand_libs() %{expand_generic -d %{_libdir} -i %{install_libdir} %*} +%define expand_libexecs() %{expand_generic -d %{_libexecdir} -i %{install_libexecdir} %*} +%define expand_includes() %{expand_generic -d %{_includedir} -i %{install_includedir} %*} +%define expand_datas() %{expand_generic -d %{_datadir} -i %{install_datadir} %*} + #region LLVM lit files %if %{with python_lit} %files -n python%{python3_pkgversion}-lit @@ -2232,274 +2709,187 @@ fi #region LLVM files +%files -n %{pkg_name_llvm}-filesystem +%dir %{install_prefix} +%dir %{install_bindir} +%dir %{install_includedir} +%dir %{install_libdir} +%dir %{install_libdir}/cmake +%dir %{install_libexecdir} +%dir %{install_datadir} + %files -n %{pkg_name_llvm} %license llvm/LICENSE.TXT -%exclude %{_mandir}/man1/llvm-config* -%{_mandir}/man1/bugpoint%{exec_suffix}.1.gz -%{_mandir}/man1/clang-tblgen%{exec_suffix}.1.gz -%{_mandir}/man1/dsymutil%{exec_suffix}.1.gz -%{_mandir}/man1/FileCheck%{exec_suffix}.1.gz -%{_mandir}/man1/lit%{exec_suffix}.1.gz -%{_mandir}/man1/llc%{exec_suffix}.1.gz -%{_mandir}/man1/lldb-tblgen%{exec_suffix}.1.gz -%{_mandir}/man1/lli%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-addr2line%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-ar%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-as%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-bcanalyzer%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-cov%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-cxxfilt%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-cxxmap%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-debuginfo-analyzer%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-diff%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-dis%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-dwarfdump%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-dwarfutil%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-exegesis%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-extract%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-ifs%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-install-name-tool%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-lib%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-libtool-darwin%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-link%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-lipo%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-locstats%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-mc%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-mca%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-nm%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-objcopy%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-objdump%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-opt-report%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-otool%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-pdbutil%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-profdata%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-profgen%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-ranlib%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-readelf%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-readobj%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-reduce%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-remarkutil%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-size%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-stress%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-strings%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-strip%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-symbolizer%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-tblgen%{exec_suffix}.1.gz -%{_mandir}/man1/llvm-tli-checker%{exec_suffix}.1.gz -%{_mandir}/man1/mlir-tblgen%{exec_suffix}.1.gz -%{_mandir}/man1/opt%{exec_suffix}.1.gz -%{_mandir}/man1/tblgen%{exec_suffix}.1.gz -%if %{maj_ver} >= 20 -%{_mandir}/man1/llvm-cgdata%{exec_suffix}.1.gz +%{expand_bins %{expand: + bugpoint + dsymutil + FileCheck + llc + lli + llvm-addr2line + llvm-ar + llvm-as + llvm-bcanalyzer + llvm-bitcode-strip + llvm-c-test + llvm-cat + llvm-cfi-verify + llvm-cgdata + llvm-cov + llvm-ctxprof-util + llvm-cvtres + llvm-cxxdump + llvm-cxxfilt + llvm-cxxmap + llvm-debuginfo-analyzer + llvm-debuginfod + llvm-debuginfod-find + llvm-diff + llvm-dis + llvm-dlltool + llvm-dwarfdump + llvm-dwarfutil + llvm-dwp + llvm-exegesis + llvm-extract + llvm-gsymutil + llvm-ifs + llvm-install-name-tool + llvm-jitlink + llvm-jitlink-executor + llvm-lib + llvm-libtool-darwin + llvm-link + llvm-lipo + llvm-lto + llvm-lto2 + llvm-mc + llvm-mca + llvm-ml + llvm-modextract + llvm-mt + llvm-nm + llvm-objcopy + llvm-objdump + llvm-opt-report + llvm-otool + llvm-pdbutil + llvm-PerfectShuffle + llvm-profdata + llvm-profgen + llvm-ranlib + llvm-rc + llvm-readelf + llvm-readobj + llvm-readtapi + llvm-reduce + llvm-remarkutil + llvm-rtdyld + llvm-sim + llvm-size + llvm-split + llvm-stress + llvm-strings + llvm-strip + llvm-symbolizer + llvm-tblgen + llvm-tli-checker + llvm-undname + llvm-windres + llvm-xray + reduce-chunk-list + obj2yaml + opt + sancov + sanstats + split-file + UnicodeNameMappingGenerator + verify-uselistorder + yaml2obj +}} + +%if %{maj_ver} >= 21 +%{expand_bins %{expand: + llvm-ml64 +}} %endif -%{install_bindir}/bugpoint -%{install_bindir}/dsymutil -%{install_bindir}/FileCheck -%{install_bindir}/llc -%{install_bindir}/lli -%{install_bindir}/llvm-addr2line -%{install_bindir}/llvm-ar -%{install_bindir}/llvm-as -%{install_bindir}/llvm-bcanalyzer -%{install_bindir}/llvm-bitcode-strip -%{install_bindir}/llvm-c-test -%{install_bindir}/llvm-cat -%{install_bindir}/llvm-cfi-verify -%{install_bindir}/llvm-cov -%{install_bindir}/llvm-cvtres -%{install_bindir}/llvm-cxxdump -%{install_bindir}/llvm-cxxfilt -%{install_bindir}/llvm-cxxmap -%{install_bindir}/llvm-debuginfo-analyzer -%{install_bindir}/llvm-debuginfod -%{install_bindir}/llvm-debuginfod-find -%{install_bindir}/llvm-diff -%{install_bindir}/llvm-dis -%{install_bindir}/llvm-dlltool -%{install_bindir}/llvm-dwarfdump -%{install_bindir}/llvm-dwarfutil -%{install_bindir}/llvm-dwp -%{install_bindir}/llvm-exegesis -%{install_bindir}/llvm-extract -%{install_bindir}/llvm-gsymutil -%{install_bindir}/llvm-ifs -%{install_bindir}/llvm-install-name-tool -%{install_bindir}/llvm-jitlink -%{install_bindir}/llvm-jitlink-executor -%{install_bindir}/llvm-lib -%{install_bindir}/llvm-libtool-darwin -%{install_bindir}/llvm-link -%{install_bindir}/llvm-lipo -%{install_bindir}/llvm-lto -%{install_bindir}/llvm-lto2 -%{install_bindir}/llvm-mc -%{install_bindir}/llvm-mca -%{install_bindir}/llvm-ml -%{install_bindir}/llvm-modextract -%{install_bindir}/llvm-mt -%{install_bindir}/llvm-nm -%{install_bindir}/llvm-objcopy -%{install_bindir}/llvm-objdump -%{install_bindir}/llvm-opt-report -%{install_bindir}/llvm-otool -%{install_bindir}/llvm-pdbutil -%{install_bindir}/llvm-PerfectShuffle -%{install_bindir}/llvm-profdata -%{install_bindir}/llvm-profgen -%{install_bindir}/llvm-ranlib -%{install_bindir}/llvm-rc -%{install_bindir}/llvm-readelf -%{install_bindir}/llvm-readobj -%{install_bindir}/llvm-readtapi -%{install_bindir}/llvm-reduce -%{install_bindir}/llvm-remarkutil -%{install_bindir}/llvm-rtdyld -%{install_bindir}/llvm-sim -%{install_bindir}/llvm-size -%{install_bindir}/llvm-split -%{install_bindir}/llvm-stress -%{install_bindir}/llvm-strings -%{install_bindir}/llvm-strip -%{install_bindir}/llvm-symbolizer -%{install_bindir}/llvm-tblgen -%{install_bindir}/llvm-tli-checker -%{install_bindir}/llvm-undname -%{install_bindir}/llvm-windres -%{install_bindir}/llvm-xray -%{install_bindir}/reduce-chunk-list -%{install_bindir}/obj2yaml -%{install_bindir}/opt -%{install_bindir}/sancov -%{install_bindir}/sanstats -%{install_bindir}/split-file -%{install_bindir}/UnicodeNameMappingGenerator -%{install_bindir}/verify-uselistorder -%{install_bindir}/yaml2obj -%if %{maj_ver} >= 20 -%{install_bindir}/llvm-cgdata -%{install_bindir}/llvm-ctxprof-util -%endif +%{expand_mans %{expand: + bugpoint + clang-tblgen + dsymutil + FileCheck + lit + llc + lldb-tblgen + lli + llvm-addr2line + llvm-ar + llvm-as + llvm-bcanalyzer + llvm-cgdata + llvm-cov + llvm-cxxfilt + llvm-cxxmap + llvm-debuginfo-analyzer + llvm-diff + llvm-dis + llvm-dwarfdump + llvm-dwarfutil + llvm-exegesis + llvm-extract + llvm-ifs + llvm-install-name-tool + llvm-lib + llvm-libtool-darwin + llvm-link + llvm-lipo + llvm-locstats + llvm-mc + llvm-mca + llvm-nm + llvm-objcopy + llvm-objdump + llvm-opt-report + llvm-otool + llvm-pdbutil + llvm-profdata + llvm-profgen + llvm-ranlib + llvm-readelf + llvm-readobj + llvm-reduce + llvm-remarkutil + llvm-size + llvm-stress + llvm-strings + llvm-strip + llvm-symbolizer + llvm-tblgen + llvm-tli-checker + mlir-tblgen + opt + tblgen +}} - -%if %{with compat_build} -# This is for all the binaries with the version suffix. -%{_bindir}/bugpoint%{exec_suffix} -%{_bindir}/dsymutil%{exec_suffix} -%{_bindir}/FileCheck%{exec_suffix} -%{_bindir}/llc%{exec_suffix} -%{_bindir}/lli%{exec_suffix} -%{_bindir}/llvm-addr2line%{exec_suffix} -%{_bindir}/llvm-ar%{exec_suffix} -%{_bindir}/llvm-as%{exec_suffix} -%{_bindir}/llvm-bcanalyzer%{exec_suffix} -%{_bindir}/llvm-bitcode-strip%{exec_suffix} -%{_bindir}/llvm-c-test%{exec_suffix} -%{_bindir}/llvm-cat%{exec_suffix} -%{_bindir}/llvm-cfi-verify%{exec_suffix} -%{_bindir}/llvm-cov%{exec_suffix} -%{_bindir}/llvm-cvtres%{exec_suffix} -%{_bindir}/llvm-cxxdump%{exec_suffix} -%{_bindir}/llvm-cxxfilt%{exec_suffix} -%{_bindir}/llvm-cxxmap%{exec_suffix} -%{_bindir}/llvm-debuginfo-analyzer%{exec_suffix} -%{_bindir}/llvm-debuginfod%{exec_suffix} -%{_bindir}/llvm-debuginfod-find%{exec_suffix} -%{_bindir}/llvm-diff%{exec_suffix} -%{_bindir}/llvm-dis%{exec_suffix} -%{_bindir}/llvm-dlltool%{exec_suffix} -%{_bindir}/llvm-dwarfdump%{exec_suffix} -%{_bindir}/llvm-dwarfutil%{exec_suffix} -%{_bindir}/llvm-dwp%{exec_suffix} -%{_bindir}/llvm-exegesis%{exec_suffix} -%{_bindir}/llvm-extract%{exec_suffix} -%{_bindir}/llvm-gsymutil%{exec_suffix} -%{_bindir}/llvm-ifs%{exec_suffix} -%{_bindir}/llvm-install-name-tool%{exec_suffix} -%{_bindir}/llvm-jitlink%{exec_suffix} -%{_bindir}/llvm-jitlink-executor%{exec_suffix} -%{_bindir}/llvm-lib%{exec_suffix} -%{_bindir}/llvm-libtool-darwin%{exec_suffix} -%{_bindir}/llvm-link%{exec_suffix} -%{_bindir}/llvm-lipo%{exec_suffix} -%{_bindir}/llvm-lto%{exec_suffix} -%{_bindir}/llvm-lto2%{exec_suffix} -%{_bindir}/llvm-mc%{exec_suffix} -%{_bindir}/llvm-mca%{exec_suffix} -%{_bindir}/llvm-ml%{exec_suffix} -%{_bindir}/llvm-modextract%{exec_suffix} -%{_bindir}/llvm-mt%{exec_suffix} -%{_bindir}/llvm-nm%{exec_suffix} -%{_bindir}/llvm-objcopy%{exec_suffix} -%{_bindir}/llvm-objdump%{exec_suffix} -%{_bindir}/llvm-opt-report%{exec_suffix} -%{_bindir}/llvm-otool%{exec_suffix} -%{_bindir}/llvm-pdbutil%{exec_suffix} -%{_bindir}/llvm-PerfectShuffle%{exec_suffix} -%{_bindir}/llvm-profdata%{exec_suffix} -%{_bindir}/llvm-profgen%{exec_suffix} -%{_bindir}/llvm-ranlib%{exec_suffix} -%{_bindir}/llvm-rc%{exec_suffix} -%{_bindir}/llvm-readelf%{exec_suffix} -%{_bindir}/llvm-readobj%{exec_suffix} -%{_bindir}/llvm-readtapi%{exec_suffix} -%{_bindir}/llvm-reduce%{exec_suffix} -%{_bindir}/llvm-remarkutil%{exec_suffix} -%{_bindir}/llvm-rtdyld%{exec_suffix} -%{_bindir}/llvm-sim%{exec_suffix} -%{_bindir}/llvm-size%{exec_suffix} -%{_bindir}/llvm-split%{exec_suffix} -%{_bindir}/llvm-stress%{exec_suffix} -%{_bindir}/llvm-strings%{exec_suffix} -%{_bindir}/llvm-strip%{exec_suffix} -%{_bindir}/llvm-symbolizer%{exec_suffix} -%{_bindir}/llvm-tblgen%{exec_suffix} -%{_bindir}/llvm-tli-checker%{exec_suffix} -%{_bindir}/llvm-undname%{exec_suffix} -%{_bindir}/llvm-windres%{exec_suffix} -%{_bindir}/llvm-xray%{exec_suffix} -%{_bindir}/reduce-chunk-list%{exec_suffix} -%{_bindir}/obj2yaml%{exec_suffix} -%{_bindir}/opt%{exec_suffix} -%{_bindir}/sancov%{exec_suffix} -%{_bindir}/sanstats%{exec_suffix} -%{_bindir}/split-file%{exec_suffix} -%{_bindir}/UnicodeNameMappingGenerator%{exec_suffix} -%{_bindir}/verify-uselistorder%{exec_suffix} -%{_bindir}/yaml2obj%{exec_suffix} -%if %{maj_ver} >= 20 -%{_bindir}/llvm-cgdata%{exec_suffix} -%{_bindir}/llvm-ctxprof-util%{exec_suffix} -%endif - -%endif - -%exclude %{_bindir}/llvm-config%{exec_suffix} -%exclude %{install_bindir}/llvm-config%{exec_suffix}-%{__isa_bits} - -%exclude %{_bindir}/llvm-config-%{maj_ver} -%exclude %{install_bindir}/llvm-config-%{maj_ver}-%{__isa_bits} -%exclude %{install_bindir}/not -%exclude %{install_bindir}/count -%exclude %{install_bindir}/yaml-bench -%exclude %{install_bindir}/lli-child-target -%exclude %{install_bindir}/llvm-isel-fuzzer -%exclude %{install_bindir}/llvm-opt-fuzzer -%{pkg_datadir}/opt-viewer +%expand_datas opt-viewer %files -n %{pkg_name_llvm}-libs %license llvm/LICENSE.TXT -%{install_libdir}/libLLVM-%{maj_ver}%{?llvm_snapshot_version_suffix}.so +%{expand_libs %{expand: + libLLVM-%{maj_ver}%{?llvm_snapshot_version_suffix}.so + libLLVM.so.%{maj_ver}.%{min_ver}%{?llvm_snapshot_version_suffix} + libLTO.so* + libRemarks.so* +}} %if %{with gold} -%{install_libdir}/LLVMgold.so +%expand_libs LLVMgold.so %if %{without compat_build} %{_libdir}/bfd-plugins/LLVMgold.so %endif %endif -%{install_libdir}/libLLVM.so.%{maj_ver}.%{min_ver}%{?llvm_snapshot_version_suffix} -%{install_libdir}/libLTO.so* -%{install_libdir}/libRemarks.so* + %if %{with compat_build} %config(noreplace) %{_sysconfdir}/ld.so.conf.d/%{pkg_name_llvm}-%{_arch}.conf %endif @@ -2510,20 +2900,18 @@ fi %files -n %{pkg_name_llvm}-devel %license llvm/LICENSE.TXT +%{install_bindir}/llvm-config +%ghost %{_bindir}/llvm-config-%{maj_ver} %if %{without compat_build} %ghost %{_bindir}/llvm-config -%{install_bindir}/llvm-config-%{__isa_bits} -%else -%{install_bindir}/llvm-config %endif -%ghost %{_bindir}/llvm-config-%{maj_ver} -%{install_bindir}/llvm-config-%{maj_ver}-%{__isa_bits} -%{_mandir}/man1/llvm-config* -%{install_includedir}/llvm -%{install_includedir}/llvm-c -%{install_libdir}/libLLVM.so -%{install_libdir}/cmake/llvm +%expand_mans llvm-config +%expand_includes llvm llvm-c +%{expand_libs %{expand: + libLLVM.so + cmake/llvm +}} %files -n %{pkg_name_llvm}-doc %license llvm/LICENSE.TXT @@ -2531,43 +2919,50 @@ fi %files -n %{pkg_name_llvm}-static %license llvm/LICENSE.TXT -%{install_libdir}/libLLVM*.a +%expand_libs libLLVM*.a %exclude %{install_libdir}/libLLVMTestingSupport.a %exclude %{install_libdir}/libLLVMTestingAnnotations.a +%if %{without compat_build} +%exclude %{_libdir}/libLLVMTestingSupport.a +%exclude %{_libdir}/libLLVMTestingAnnotations.a +%endif %files -n %{pkg_name_llvm}-cmake-utils %license llvm/LICENSE.TXT -%{pkg_datadir}/llvm/cmake +%expand_datas llvm-cmake %files -n %{pkg_name_llvm}-test %license llvm/LICENSE.TXT -%{install_bindir}/not -%{install_bindir}/count -%{install_bindir}/yaml-bench -%{install_bindir}/lli-child-target -%{install_bindir}/llvm-isel-fuzzer -%{install_bindir}/llvm-opt-fuzzer -%if %{with compat_build} -%{_bindir}/not%{exec_suffix} -%{_bindir}/count%{exec_suffix} -%{_bindir}/yaml-bench%{exec_suffix} -%{_bindir}/lli-child-target%{exec_suffix} -%{_bindir}/llvm-isel-fuzzer%{exec_suffix} -%{_bindir}/llvm-opt-fuzzer%{exec_suffix} +%{expand_bins %{expand: + not + count + yaml-bench + lli-child-target + llvm-isel-fuzzer + llvm-opt-fuzzer +}} +%if %{maj_ver} >= 21 +%{expand_bins %{expand: + llvm-test-mustache-spec +}} +%{expand_mans %{expand: + llvm-test-mustache-spec +}} %endif %files -n %{pkg_name_llvm}-googletest %license llvm/LICENSE.TXT -%{install_libdir}/libLLVMTestingSupport.a -%{install_libdir}/libLLVMTestingAnnotations.a -%{install_libdir}/libllvm_gtest.a -%{install_libdir}/libllvm_gtest_main.a -%{install_includedir}/llvm-gtest -%{install_includedir}/llvm-gmock +%{expand_libs %{expand: + libLLVMTestingSupport.a + libLLVMTestingAnnotations.a + libllvm_gtest.a + libllvm_gtest_main.a +}} +%expand_includes llvm-gtest llvm-gmock %if %{with snapshot_build} %files -n %{pkg_name_llvm}-build-stats -%{pkg_datadir}/.ninja_log +%{_datadir}/.ninja_log %endif #endregion LLVM files @@ -2576,35 +2971,45 @@ fi %files -n %{pkg_name_clang} %license clang/LICENSE.TXT -%{install_bindir}/clang -%{install_bindir}/clang++ +%{expand_bins %{expand: + clang + clang++ + clang-cl + clang-cpp + clang-scan-deps +}} %{install_bindir}/clang-%{maj_ver} -%{install_bindir}/clang++-%{maj_ver} -%{install_bindir}/clang-cl -%{install_bindir}/clang-cpp + %{_sysconfdir}/%{pkg_name_clang}/%{_target_platform}-clang.cfg %{_sysconfdir}/%{pkg_name_clang}/%{_target_platform}-clang++.cfg %ifarch x86_64 %{_sysconfdir}/%{pkg_name_clang}/i386-redhat-linux-gnu-clang.cfg %{_sysconfdir}/%{pkg_name_clang}/i386-redhat-linux-gnu-clang++.cfg %endif -%{_mandir}/man1/clang-%{maj_ver}.1.gz -%{_mandir}/man1/clang++-%{maj_ver}.1.gz -%if %{without compat_build} -%{_mandir}/man1/clang.1.gz -%{_mandir}/man1/clang++.1.gz -%else -%{_bindir}/clang-%{maj_ver} -%{_bindir}/clang++-%{maj_ver} -%{_bindir}/clang-cl-%{maj_ver} -%{_bindir}/clang-cpp-%{maj_ver} +%{expand_mans clang clang++} + +%if 0%{with pgo} +%{expand_datas %{expand: llvm-pgo.profdata }} +%if 0%{run_pgo_perf_comparison} +%{expand_datas %{expand: results-system-vs-pgo.txt }} %endif +%endif + %files -n %{pkg_name_clang}-libs %license clang/LICENSE.TXT %{_prefix}/lib/clang/%{maj_ver}/include/* -%{install_libdir}/libclang.so.%{maj_ver}* -%{install_libdir}/libclang-cpp.so.%{maj_ver}* +# Part of compiler-rt: +%exclude %{_prefix}/lib/clang/%{maj_ver}/include/fuzzer +%exclude %{_prefix}/lib/clang/%{maj_ver}/include/orc +%exclude %{_prefix}/lib/clang/%{maj_ver}/include/profile +%exclude %{_prefix}/lib/clang/%{maj_ver}/include/sanitizer +%exclude %{_prefix}/lib/clang/%{maj_ver}/include/xray +# Part of libomp-devel: +%exclude %{_prefix}/lib/clang/%{maj_ver}/include/omp*.h + +%expand_libs libclang.so.%{maj_ver}* +%expand_libs libclang-cpp.so.%{maj_ver}* %if %{with bundle_compat_lib} %{_libdir}/libclang.so.%{compat_maj_ver}* %{_libdir}/libclang-cpp.so.%{compat_maj_ver}* @@ -2612,16 +3017,17 @@ fi %files -n %{pkg_name_clang}-devel %license clang/LICENSE.TXT -%{install_libdir}/libclang-cpp.so -%{install_libdir}/libclang.so -%{install_includedir}/clang/ -%{install_includedir}/clang-c/ -%{install_libdir}/cmake/clang -%{install_bindir}/clang-tblgen -%if %{with compat_build} -%{_bindir}/clang-tblgen-%{maj_ver} -%endif +%{expand_libs %{expand: + cmake/clang + libclang-cpp.so + libclang.so +}} +%expand_includes clang clang-c +%expand_bins clang-tblgen %dir %{install_datadir}/clang/ +%if %{without compat_build} +%dir %{_datadir}/clang +%endif %files -n %{pkg_name_clang}-resource-filesystem %license clang/LICENSE.TXT @@ -2635,141 +3041,89 @@ fi %files -n %{pkg_name_clang}-analyzer %license clang/LICENSE.TXT -%{install_bindir}/scan-view -%{install_bindir}/scan-build -%{install_bindir}/analyze-build -%{install_bindir}/intercept-build -%{install_bindir}/scan-build-py -%if %{with compat_build} -%{_bindir}/scan-view-%{maj_ver} -%{_bindir}/scan-build-%{maj_ver} -%{_bindir}/analyze-build-%{maj_ver} -%{_bindir}/intercept-build-%{maj_ver} -%{_bindir}/scan-build-py-%{maj_ver} -%endif -%{install_libexecdir}/ccc-analyzer -%{install_libexecdir}/c++-analyzer -%{install_libexecdir}/analyze-c++ -%{install_libexecdir}/analyze-cc -%{install_libexecdir}/intercept-c++ -%{install_libexecdir}/intercept-cc -%{install_datadir}/scan-view/ -%{install_datadir}/scan-build/ -%{_mandir}/man1/scan-build%{exec_suffix}.1.* +%{expand_bins %{expand: + scan-view + scan-build + analyze-build + intercept-build +}} +%{expand_libexecs %{expand: + ccc-analyzer + c++-analyzer + analyze-c++ + analyze-cc + intercept-c++ + intercept-cc +}} +%expand_datas scan-view scan-build +%expand_mans scan-build %if %{without compat_build} +%expand_bins scan-build-py %{python3_sitelib}/libear %{python3_sitelib}/libscanbuild %endif - %files -n %{pkg_name_clang}-tools-extra %license clang-tools-extra/LICENSE.TXT -%{install_bindir}/amdgpu-arch -%{install_bindir}/clang-apply-replacements -%{install_bindir}/clang-change-namespace -%{install_bindir}/clang-check -%{install_bindir}/clang-doc -%{install_bindir}/clang-extdef-mapping -%{install_bindir}/clang-format -%{install_bindir}/clang-include-cleaner -%{install_bindir}/clang-include-fixer -%{install_bindir}/clang-installapi -%{install_bindir}/clang-move -%{install_bindir}/clang-offload-bundler -%{install_bindir}/clang-offload-packager -%{install_bindir}/clang-linker-wrapper -%{install_bindir}/clang-nvlink-wrapper -%{install_bindir}/clang-query -%{install_bindir}/clang-refactor -%{install_bindir}/clang-reorder-fields -%{install_bindir}/clang-repl -%{install_bindir}/clang-scan-deps -%if %{maj_ver} >= 20 -%{install_bindir}/clang-sycl-linker -%endif -%{install_bindir}/clang-tidy -%{install_bindir}/clangd -%{install_bindir}/diagtool -%{install_bindir}/hmaptool -%{install_bindir}/nvptx-arch -%{install_bindir}/pp-trace -%{install_bindir}/c-index-test -%{install_bindir}/find-all-symbols -%{install_bindir}/modularize -%{install_bindir}/clang-format-diff -%{install_bindir}/run-clang-tidy -%if %{maj_ver} < 20 -%{install_bindir}/clang-pseudo -%{install_bindir}/clang-rename -%endif -%if %{with compat_build} -%{_bindir}/amdgpu-arch-%{maj_ver} -%{_bindir}/clang-apply-replacements-%{maj_ver} -%{_bindir}/clang-change-namespace-%{maj_ver} -%{_bindir}/clang-check-%{maj_ver} -%{_bindir}/clang-doc-%{maj_ver} -%{_bindir}/clang-extdef-mapping-%{maj_ver} -%{_bindir}/clang-format-%{maj_ver} -%{_bindir}/clang-include-cleaner-%{maj_ver} -%{_bindir}/clang-include-fixer-%{maj_ver} -%{_bindir}/clang-installapi-%{maj_ver} -%{_bindir}/clang-move-%{maj_ver} -%{_bindir}/clang-offload-bundler-%{maj_ver} -%{_bindir}/clang-offload-packager-%{maj_ver} -%{_bindir}/clang-linker-wrapper-%{maj_ver} -%{_bindir}/clang-nvlink-wrapper-%{maj_ver} -%{_bindir}/clang-query-%{maj_ver} -%{_bindir}/clang-refactor-%{maj_ver} -%{_bindir}/clang-reorder-fields-%{maj_ver} -%{_bindir}/clang-repl-%{maj_ver} -%{_bindir}/clang-scan-deps-%{maj_ver} -%if %{maj_ver} >= 20 -%{_bindir}/clang-sycl-linker-%{maj_ver} -%endif -%{_bindir}/clang-tidy-%{maj_ver} -%{_bindir}/clangd-%{maj_ver} -%{_bindir}/diagtool-%{maj_ver} -%{_bindir}/hmaptool-%{maj_ver} -%{_bindir}/nvptx-arch-%{maj_ver} -%{_bindir}/pp-trace-%{maj_ver} -%{_bindir}/c-index-test-%{maj_ver} -%{_bindir}/find-all-symbols-%{maj_ver} -%{_bindir}/modularize-%{maj_ver} -%{_bindir}/clang-format-diff-%{maj_ver} -%{_bindir}/run-clang-tidy-%{maj_ver} -%if %{maj_ver} < 20 -%{_bindir}/clang-pseudo-%{maj_ver} -%{_bindir}/clang-rename-%{maj_ver} -%endif -%else -%{_emacs_sitestartdir}/clang-format.el -%if %{maj_ver} < 20 -%{_emacs_sitestartdir}/clang-rename.el -%endif -%{_emacs_sitestartdir}/clang-include-fixer.el -%endif -%{_mandir}/man1/diagtool%{exec_suffix}.1.gz -%{_mandir}/man1/extraclangtools%{exec_suffix}.1.gz -%{install_datadir}/clang/clang-format.py* -%{install_datadir}/clang/clang-format-diff.py* -%{install_datadir}/clang/clang-include-fixer.py* -%{install_datadir}/clang/clang-tidy-diff.py* -%{install_datadir}/clang/run-find-all-symbols.py* -%if %{maj_ver} < 20 -%{install_datadir}/clang/clang-rename.py* +%{expand_bins %{expand: + amdgpu-arch + clang-apply-replacements + clang-change-namespace + clang-check + clang-doc + clang-extdef-mapping + clang-format + clang-include-cleaner + clang-include-fixer + clang-installapi + clang-move + clang-offload-bundler + clang-offload-packager + clang-linker-wrapper + clang-nvlink-wrapper + clang-query + clang-refactor + clang-reorder-fields + clang-repl + clang-sycl-linker + clang-tidy + clangd + diagtool + hmaptool + nvptx-arch + pp-trace + c-index-test + find-all-symbols + modularize + clang-format-diff + run-clang-tidy +}} +%if %{maj_ver} >= 21 +%{expand_bins %{expand: + offload-arch +}} %endif +%if %{without compat_build} +%{_emacs_sitestartdir}/clang-format.el +%{_emacs_sitestartdir}/clang-include-fixer.el +%endif +%expand_mans diagtool extraclangtools +%{expand_datas %{expand: + clang/clang-format.py* + clang/clang-format-diff.py* + clang/clang-include-fixer.py* + clang/clang-tidy-diff.py* + clang/run-find-all-symbols.py* +}} %files -n %{pkg_name_clang}-tools-extra-devel %license clang-tools-extra/LICENSE.TXT -%{install_includedir}/clang-tidy/ +%expand_includes clang-tidy %files -n git-clang-format%{pkg_suffix} %license clang/LICENSE.TXT -%{install_bindir}/git-clang-format -%if %{with compat_build} -%{_bindir}/git-clang-format-%{maj_ver} -%endif +%expand_bins git-clang-format %if %{without compat_build} %files -n python%{python3_pkgversion}-clang @@ -2797,12 +3151,12 @@ fi # Files that appear on all targets %{_prefix}/lib/clang/%{maj_ver}/lib/%{compiler_rt_triple}/libclang_rt.* -%ifnarch s390x +%if %{has_crtobjs} %{_prefix}/lib/clang/%{maj_ver}/lib/%{compiler_rt_triple}/clang_rt.crtbegin.o %{_prefix}/lib/clang/%{maj_ver}/lib/%{compiler_rt_triple}/clang_rt.crtend.o %endif -%ifnarch %{ix86} s390x +%ifnarch %{ix86} s390x riscv64 %{_prefix}/lib/clang/%{maj_ver}/lib/%{compiler_rt_triple}/liborc_rt.a %endif @@ -2817,16 +3171,14 @@ fi %files -n %{pkg_name_libomp} %license openmp/LICENSE.TXT -%{install_libdir}/libomp.so -%{install_libdir}/libompd.so -%{install_libdir}/libarcher.so -%ifnarch %{ix86} -# libomptarget is not supported on 32-bit systems. -# s390x does not support the offloading plugins. -%{install_libdir}/libomptarget.so.%{so_suffix} -%if %{maj_ver} >= 20 -%{install_libdir}/libLLVMOffload.so.%{so_suffix} -%endif +%{expand_libs %{expand: + libomp.so + libompd.so + libarcher.so +}} +%if %{with offload} +%expand_libs libomptarget.so.%{so_suffix} +%expand_libs libLLVMOffload.so.%{so_suffix} %endif %files -n %{pkg_name_libomp}-devel @@ -2836,25 +3188,30 @@ fi %{_prefix}/lib/clang/%{maj_ver}/include/omp-tools.h %{_prefix}/lib/clang/%{maj_ver}/include/ompt.h %{_prefix}/lib/clang/%{maj_ver}/include/ompt-multiplex.h -%{install_libdir}/cmake/openmp/ -%ifnarch %{ix86} -# libomptarget is not supported on 32-bit systems. -# s390x does not support the offloading plugins. -%{install_libdir}/libomptarget.devicertl.a -%if %{maj_ver} >= 20 -%{install_libdir}/libomptarget-amdgpu*.bc -%{install_libdir}/libomptarget-nvptx*.bc +%expand_libs cmake/openmp +%if %{with offload} +%{expand_libs %{expand: + libomptarget.so + libLLVMOffload.so +}} + +%if %{maj_ver} < 21 +%{expand_libs %{expand: + libomptarget.devicertl.a + libomptarget-amdgpu*.bc + libomptarget-nvptx*.bc +}} %else -%{install_libdir}/libomptarget-amdgpu-*.bc -%{install_libdir}/libomptarget-nvptx-*.bc -%endif -%{install_libdir}/libomptarget.so -%if %{maj_ver} >= 20 -%{install_libdir}/libLLVMOffload.so -%{install_includedir}/offload -%endif +%{expand_libs %{expand: + amdgcn-amd-amdhsa/libompdevice.a + amdgcn-amd-amdhsa/libomptarget-amdgpu.bc + nvptx64-nvidia-cuda/libompdevice.a + nvptx64-nvidia-cuda/libomptarget-nvptx.bc +}} %endif +%expand_includes offload +%endif #endregion OPENMP files #region LLD files @@ -2862,40 +3219,38 @@ fi %files -n %{pkg_name_lld} %license lld/LICENSE.TXT %ghost %{_bindir}/ld -%{install_bindir}/lld -%{install_bindir}/lld-link -%{install_bindir}/ld.lld -%{install_bindir}/ld64.lld -%{install_bindir}/wasm-ld -%if %{without compat_build} -%{_mandir}/man1/ld.lld.1* -%else -%{_bindir}/lld%{exec_suffix} -%{_bindir}/lld-link%{exec_suffix} -%{_bindir}/ld.lld%{exec_suffix} -%{_bindir}/ld64.lld%{exec_suffix} -%{_bindir}/wasm-ld%{exec_suffix} -%endif +%{expand_bins %{expand: + lld + lld-link + ld.lld + ld64.lld + wasm-ld +}} +%expand_mans ld.lld %files -n %{pkg_name_lld}-devel %license lld/LICENSE.TXT -%{install_includedir}/lld -%{install_libdir}/liblldCOFF.so -%{install_libdir}/liblldCommon.so -%{install_libdir}/liblldELF.so -%{install_libdir}/liblldMachO.so -%{install_libdir}/liblldMinGW.so -%{install_libdir}/liblldWasm.so -%{install_libdir}/cmake/lld/ +%expand_includes lld +%{expand_libs %{expand: + liblldCOFF.so + liblldCommon.so + liblldELF.so + liblldMachO.so + liblldMinGW.so + liblldWasm.so + cmake/lld +}} %files -n %{pkg_name_lld}-libs %license lld/LICENSE.TXT -%{install_libdir}/liblldCOFF.so.* -%{install_libdir}/liblldCommon.so.* -%{install_libdir}/liblldELF.so.* -%{install_libdir}/liblldMachO.so.* -%{install_libdir}/liblldMinGW.so.* -%{install_libdir}/liblldWasm.so.* +%{expand_libs %{expand: + liblldCOFF.so.* + liblldCommon.so.* + liblldELF.so.* + liblldMachO.so.* + liblldMinGW.so.* + liblldWasm.so.* +}} #endregion LLD files @@ -2910,24 +3265,33 @@ fi %if %{with lldb} %files -n %{pkg_name_lldb} %license lldb/LICENSE.TXT -%{install_bindir}/lldb* +%{expand_bins %{expand: + lldb + lldb-argdumper + lldb-dap + lldb-instr + lldb-server +}} # Usually, *.so symlinks are kept in devel subpackages. However, the python # bindings depend on this symlink at runtime. -%{install_libdir}/liblldb*.so -%{install_libdir}/liblldb.so.* -%{install_libdir}/liblldbIntelFeatures.so.* -%{_mandir}/man1/lldb-server%{exec_suffix}.1.gz -%{_mandir}/man1/lldb%{exec_suffix}.1.gz +%{expand_libs %{expand: + liblldb*.so + liblldb.so.* + liblldbIntelFeatures.so.* +}} +%expand_mans lldb-server lldb %if %{with bundle_compat_lib} %{_libdir}/liblldb.so.%{compat_maj_ver}* %endif %files -n %{pkg_name_lldb}-devel -%{install_includedir}/lldb +%expand_includes lldb +%if %{without compat_build} %files -n python%{python3_pkgversion}-lldb %{python3_sitearch}/lldb %endif +%endif #endregion LLDB files @@ -2935,43 +3299,46 @@ fi %if %{with mlir} %files -n %{pkg_name_mlir} %license LICENSE.TXT -%{_libdir}/libmlir_arm_runner_utils.so.%{maj_ver}* -%{_libdir}/libmlir_arm_sme_abi_stubs.so.%{maj_ver}* -%{_libdir}/libmlir_async_runtime.so.%{maj_ver}* -%{_libdir}/libmlir_c_runner_utils.so.%{maj_ver}* -%{_libdir}/libmlir_float16_utils.so.%{maj_ver}* -%{_libdir}/libmlir_runner_utils.so.%{maj_ver}* -%{_libdir}/libMLIR*.so.%{maj_ver}* +%{expand_libs %{expand: + libmlir_arm_runner_utils.so.%{maj_ver}* + libmlir_arm_sme_abi_stubs.so.%{maj_ver}* + libmlir_async_runtime.so.%{maj_ver}* + libmlir_c_runner_utils.so.%{maj_ver}* + libmlir_float16_utils.so.%{maj_ver}* + libmlir_runner_utils.so.%{maj_ver}* + libMLIR*.so.%{maj_ver}* +}} %files -n %{pkg_name_mlir}-static -%{_libdir}/libMLIR*.a +%expand_libs libMLIR*.a %files -n %{pkg_name_mlir}-devel -%{_bindir}/mlir-cpu-runner -%{_bindir}/mlir-linalg-ods-yaml-gen -%{_bindir}/mlir-lsp-server -%{_bindir}/mlir-opt -%{_bindir}/mlir-pdll -%{_bindir}/mlir-pdll-lsp-server -%{_bindir}/mlir-query -%{_bindir}/mlir-reduce -%if %{maj_ver} >= 20 -%{_bindir}/mlir-rewrite -%endif -%{_bindir}/mlir-tblgen -%{_bindir}/mlir-translate -%{_bindir}/tblgen-lsp-server -%{_bindir}/tblgen-to-irdl -%{_includedir}/mlir -%{_includedir}/mlir-c -%{_libdir}/cmake/mlir -%{_libdir}/libmlir_arm_runner_utils.so -%{_libdir}/libmlir_arm_sme_abi_stubs.so -%{_libdir}/libmlir_async_runtime.so -%{_libdir}/libmlir_c_runner_utils.so -%{_libdir}/libmlir_float16_utils.so -%{_libdir}/libmlir_runner_utils.so -%{_libdir}/libMLIR*.so +%{expand_bins %{expand: + mlir-linalg-ods-yaml-gen + mlir-lsp-server + mlir-opt + mlir-pdll + mlir-pdll-lsp-server + mlir-query + mlir-reduce + mlir-rewrite + mlir-runner + mlir-tblgen + mlir-translate + tblgen-lsp-server + tblgen-to-irdl +}} +%expand_includes mlir mlir-c +%{expand_libs %{expand: + cmake/mlir + libmlir_arm_runner_utils.so + libmlir_arm_sme_abi_stubs.so + libmlir_async_runtime.so + libmlir_c_runner_utils.so + libmlir_float16_utils.so + libmlir_runner_utils.so + libMLIR*.so +}} %files -n python%{python3_pkgversion}-%{pkg_name_mlir} %{python3_sitearch}/mlir/ @@ -3037,24 +3404,121 @@ fi %if %{with build_bolt} %files -n %{pkg_name_bolt} %license bolt/LICENSE.TXT -%{_bindir}/llvm-bolt -%if %{maj_ver} >= 20 -%{_bindir}/llvm-bolt-binary-analysis -%endif -%{_bindir}/llvm-boltdiff -%{_bindir}/llvm-bolt-heatmap -%{_bindir}/merge-fdata -%{_bindir}/perf2bolt +%{expand_bins %{expand: + llvm-bolt + llvm-boltdiff + llvm-bolt-binary-analysis + llvm-bolt-heatmap + merge-fdata + perf2bolt +}} -%{_libdir}/libbolt_rt_hugify.a -%{_libdir}/libbolt_rt_instr.a +%{expand_libs %{expand: + libbolt_rt_hugify.a + libbolt_rt_instr.a +}} %endif #endregion BOLT files +#region polly files +%if %{with polly} +%files -n %{pkg_name_polly} +%license polly/LICENSE.TXT +%{expand_libs %{expand: + LLVMPolly.so + libPolly.so.* + libPollyISL.so +}} +%expand_mans polly + +%files -n %{pkg_name_polly}-devel +%expand_libs libPolly.so +%expand_includes polly +%expand_libs cmake/polly + +%endif +#endregion polly files + #endregion files #region changelog %changelog +* Tue Jul 29 2025 Tom Stellard - 20.1.8-2 +- Backport fix for pgo optimized rust toolchain on ppc64le (rhbz#2382683) +- Backport fix for crbit spill miscompile on ppc64le power9 and power10 (rhbz#2383037) +- Backport fix for build of highway package on ppc64le (rhbz#2383182) + +* Wed Jul 09 2025 Nikita Popov - 20.1.8-1 +- Update to LLVM 20.1.8 + +* Fri Jun 20 2025 Kashyap Chamarthy - 20.1.7-2 +- Add riscv64 enablement bits; thanks: Songsong Zhang + (U2FsdGVkX1@gmail.com) and David Abdurachmanov (davidlt@rivosinc.com) + +* Thu Jun 19 2025 Nikita Popov - 20.1.7-1 +- Update to LLVM 20.1.7 + +* Tue Jun 17 2025 Nikita Popov - 20.1.6-10 +- Fix llvm-config alternatives handling (rhbz#2361779) + +* Mon Jun 16 2025 Nikita Popov - 20.1.6-9 +- Use libdir suffix in versioned prefix + +* Tue Jun 10 2025 Nikita Popov - 20.1.6-8 +- Invert symlink direction +- Fix i686 multilib installation (rhbz#2365079) + +* Thu Jun 05 2025 Timm Bäder - 20.1.6-7 +- Backport patch to fix rhbz#2363895 + +* Wed Jun 04 2025 Python Maint - 20.1.6-6 +- Rebuilt for Python 3.14 + +* Wed Jun 04 2025 Python Maint - 20.1.6-5 +- Bootstrap for Python 3.14 + +* Wed Jun 04 2025 Python Maint - 20.1.6-4 +- Rebuilt for Python 3.14 + +* Tue Jun 03 2025 Tulio Magno Quites Machado Filho - 20.1.6-3 +- Remove temporary changes on ppc64le + +* Tue Jun 03 2025 Python Maint - 20.1.6-2 +- Rebuilt for Python 3.14 + +* Fri May 30 2025 Nikita Popov - 20.1.6-1 +- Update to LLVM 20.1.6 + +* Mon May 26 2025 Konrad Kleine - 20.1.5-2 +- Build with PGO + +* Thu May 22 2025 Nikita Popov - 20.1.5-1 +- Update to LLVM 20.1.5 + +* Tue May 06 2025 Tom Stellard - 20.1.4-6 +- Fix build on ppc64le with glibc >= 2.42 + +* Tue May 06 2025 Nikita Popov - 20.1.4-5 +- Update to LLVM 20.1.4 + +* Sat Apr 26 2025 Tom Stellard - 20.1.3-2 +- Fix build with glibc >= 2.42 + +* Thu Apr 17 2025 Nikita Popov - 20.1.3-1 +- Update to LLVM 20.1.3 + +* Thu May 15 2025 Nikita Popov - 20.1.2-3 +- Update to LLVM 20.1.2 + +* Fri Apr 04 2025 Tom Stellard - 20.1.1-3 +- Drop ARM and Mips targets + +* Wed Mar 19 2025 Nikita Popov - 20.1.1-1 +- Update to LLVM 20.1.1 + +* Wed Mar 05 2025 Nikita Popov - 20.1.0-1 +- Update to LLVM 20.1.0 + * Thu Feb 06 2025 Konrad Kleine - 19.1.7-2 - Remove llvm 18 compat lib