[Openmp-commits] [compiler-rt] [libc] [libclc] [llvm] [openmp] [runtimes] Add RUNTIMES_LTO to select the kind of LTO for GPU runtimes (PR #235660)

via Openmp-commits openmp-commits at lists.llvm.org
Mon Oct 26 02:10:05 PDT 2026


llvmorg-github-actions[bot] wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-libc

Author: Wenju He (wenju-he)

<details>
<summary>Changes</summary>

This option forwards -flto or -flto=thin to all runtimes builds as RUNTIMES_LTO_FLAG. This intends to support ThinLTO pipeline for GPU compilation, since ThinLTO Function Import requires runtime libraries to have ThinLTO summaries.

RUNTIMES_LTO_FLAG defaults to -flto when not forwarded by the bootstrap, i.e. for direct runtimes and standalone compiler-rt/libclc builds.

---
Full diff: https://github.com/llvm/llvm-project/pull/235660.diff


9 Files Affected:

- (modified) compiler-rt/CMakeLists.txt (+4-1) 
- (modified) compiler-rt/lib/builtins/CMakeLists.txt (+4-1) 
- (modified) flang-rt/cmake/modules/AddFlangRT.cmake (+4-4) 
- (modified) libc/cmake/modules/LLVMLibCCompileOptionRules.cmake (+1-1) 
- (modified) libclc/CMakeLists.txt (+4-1) 
- (modified) llvm/runtimes/CMakeLists.txt (+13) 
- (modified) openmp/device/CMakeLists.txt (+1-1) 
- (modified) openmp/module/CMakeLists.txt (+1-1) 
- (modified) runtimes/CMakeLists.txt (+4) 


``````````diff
diff --git a/compiler-rt/CMakeLists.txt b/compiler-rt/CMakeLists.txt
index 0458b17ba38c20..3fb13ba7851860 100644
--- a/compiler-rt/CMakeLists.txt
+++ b/compiler-rt/CMakeLists.txt
@@ -397,7 +397,10 @@ if(COMPILER_RT_GPU_BUILD)
   append_list_if(UBSAN_COMMON_SUPPORTED_ARCH -ffreestanding SANITIZER_COMMON_CFLAGS)
   append_list_if(COMPILER_RT_HAS_NOGPULIB_FLAG -nogpulib SANITIZER_COMMON_CFLAGS)
   append_list_if(COMPILER_RT_HAS_NOSTDLIBINC_FLAG -nostdlibinc SANITIZER_COMMON_CFLAGS)
-  append_list_if(COMPILER_RT_HAS_FLTO_FLAG -flto SANITIZER_COMMON_CFLAGS)
+  if(NOT DEFINED RUNTIMES_LTO_FLAG)
+    set(RUNTIMES_LTO_FLAG -flto)
+  endif()
+  append_list_if(COMPILER_RT_HAS_FLTO_FLAG ${RUNTIMES_LTO_FLAG} SANITIZER_COMMON_CFLAGS)
   if(COMPILER_RT_TARGET_AMDGPU)
     append_list_if(COMPILER_RT_HAS_CODE_OBJECT_VERSION_FLAG
                    "SHELL:-Xclang -mcode-object-version=none" SANITIZER_COMMON_CFLAGS)
diff --git a/compiler-rt/lib/builtins/CMakeLists.txt b/compiler-rt/lib/builtins/CMakeLists.txt
index 67427a1f4b8a49..884fb7db6c24c0 100644
--- a/compiler-rt/lib/builtins/CMakeLists.txt
+++ b/compiler-rt/lib/builtins/CMakeLists.txt
@@ -1111,7 +1111,10 @@ else ()
   if(COMPILER_RT_GPU_BUILD)
     append_list_if(COMPILER_RT_HAS_FFREESTANDING_FLAG -ffreestanding BUILTIN_CFLAGS)
     append_list_if(COMPILER_RT_HAS_NOGPULIB_FLAG -nogpulib BUILTIN_CFLAGS)
-    append_list_if(COMPILER_RT_HAS_FLTO_FLAG -flto BUILTIN_CFLAGS)
+    if(NOT DEFINED RUNTIMES_LTO_FLAG)
+      set(RUNTIMES_LTO_FLAG -flto)
+    endif()
+    append_list_if(COMPILER_RT_HAS_FLTO_FLAG ${RUNTIMES_LTO_FLAG} BUILTIN_CFLAGS)
 
     # AMDGPU targets want to use a generic ABI.
     if(COMPILER_RT_TARGET_AMDGPU)
diff --git a/flang-rt/cmake/modules/AddFlangRT.cmake b/flang-rt/cmake/modules/AddFlangRT.cmake
index c033efa46100c3..2ad6d9b6603dff 100644
--- a/flang-rt/cmake/modules/AddFlangRT.cmake
+++ b/flang-rt/cmake/modules/AddFlangRT.cmake
@@ -297,13 +297,13 @@ function (add_flangrt_library name)
     # Add target specific options if necessary.
     if ("${LLVM_DEFAULT_TARGET_TRIPLE}" MATCHES "^amdgpu|^amdgcn")
       target_compile_options(${tgtname} PRIVATE
-          $<$<COMPILE_LANGUAGE:CXX>:-nogpulib -flto -fvisibility=hidden>
-          $<$<COMPILE_LANGUAGE:Fortran>:-nogpulib -flto>
+          $<$<COMPILE_LANGUAGE:CXX>:-nogpulib ${RUNTIMES_LTO_FLAG} -fvisibility=hidden>
+          $<$<COMPILE_LANGUAGE:Fortran>:-nogpulib ${RUNTIMES_LTO_FLAG}>
         )
     elseif ("${LLVM_DEFAULT_TARGET_TRIPLE}" MATCHES "^nvptx")
       target_compile_options(${tgtname} PRIVATE
-          $<$<COMPILE_LANGUAGE:CXX>:-nogpulib -flto -fvisibility=hidden -Wno-unknown-cuda-version --cuda-feature=+ptx63>
-          $<$<COMPILE_LANGUAGE:Fortran>:-nogpulib -flto>
+          $<$<COMPILE_LANGUAGE:CXX>:-nogpulib ${RUNTIMES_LTO_FLAG} -fvisibility=hidden -Wno-unknown-cuda-version --cuda-feature=+ptx63>
+          $<$<COMPILE_LANGUAGE:Fortran>:-nogpulib ${RUNTIMES_LTO_FLAG}>
         )
     elseif (APPLE)
       # Clang on Darwin enables non-POSIX extensions by default.
diff --git a/libc/cmake/modules/LLVMLibCCompileOptionRules.cmake b/libc/cmake/modules/LLVMLibCCompileOptionRules.cmake
index b26c1957880a5f..f1a050da8a6063 100644
--- a/libc/cmake/modules/LLVMLibCCompileOptionRules.cmake
+++ b/libc/cmake/modules/LLVMLibCCompileOptionRules.cmake
@@ -352,7 +352,7 @@ function(_get_common_compile_options_impl output_var)
     list(APPEND compile_options "-nogpulib")
     list(APPEND compile_options "-fvisibility=hidden")
     list(APPEND compile_options "-fconvergent-functions")
-    list(APPEND compile_options "-flto")
+    list(APPEND compile_options "${RUNTIMES_LTO_FLAG}")
     list(APPEND compile_options "-Wno-multi-gpu")
 
     if(LIBC_TARGET_ARCHITECTURE_IS_NVPTX)
diff --git a/libclc/CMakeLists.txt b/libclc/CMakeLists.txt
index 5829bd9b39eac0..ff01a441721b9a 100644
--- a/libclc/CMakeLists.txt
+++ b/libclc/CMakeLists.txt
@@ -165,8 +165,11 @@ if(LIBCLC_TARGET_ARCH IN_LIST LIBCLC_ARCHS_AMDGPU OR LIBCLC_TARGET_ARCH IN_LIST
 endif()
 
 # Common compile options shared by CLC and OpenCL libraries.
+if(NOT DEFINED RUNTIMES_LTO_FLAG)
+  set(RUNTIMES_LTO_FLAG -flto)
+endif()
 set(compile_flags
-  -flto
+  ${RUNTIMES_LTO_FLAG}
   --target=${clang_triple}
   -nostdlib
   -nostdlibinc
diff --git a/llvm/runtimes/CMakeLists.txt b/llvm/runtimes/CMakeLists.txt
index fcb85ec96e265c..81557de8fd5f82 100644
--- a/llvm/runtimes/CMakeLists.txt
+++ b/llvm/runtimes/CMakeLists.txt
@@ -91,6 +91,19 @@ macro(set_enable_per_target_runtime_dir)
   endif()
 endmacro()
 
+set(RUNTIMES_LTO "full" CACHE STRING
+    "Kind of LTO used by runtimes that always use LTO: full or thin")
+string(TOUPPER "${RUNTIMES_LTO}" uppercase_RUNTIMES_LTO)
+if(uppercase_RUNTIMES_LTO STREQUAL "THIN")
+  set(RUNTIMES_LTO_FLAG "-flto=thin")
+elseif(uppercase_RUNTIMES_LTO STREQUAL "FULL")
+  set(RUNTIMES_LTO_FLAG "-flto")
+else()
+  message(FATAL_ERROR "RUNTIMES_LTO must be full or thin, got '${RUNTIMES_LTO}'")
+endif()
+
+list(APPEND COMMON_CMAKE_ARGS "-DRUNTIMES_LTO_FLAG=${RUNTIMES_LTO_FLAG}")
+
 macro(append_passthrough_options out type names)
   get_cmake_property(variable_names VARIABLES)
 
diff --git a/openmp/device/CMakeLists.txt b/openmp/device/CMakeLists.txt
index 1c486be1ef12af..c450e9a41e40e0 100644
--- a/openmp/device/CMakeLists.txt
+++ b/openmp/device/CMakeLists.txt
@@ -24,7 +24,7 @@ set(src_files
   ${CMAKE_CURRENT_SOURCE_DIR}/src/Workshare.cpp
 )
 
-list(APPEND compile_options -flto)
+list(APPEND compile_options ${RUNTIMES_LTO_FLAG})
 list(APPEND compile_options -fvisibility=hidden)
 list(APPEND compile_options -nogpulib)
 list(APPEND compile_options -nostdlibinc)
diff --git a/openmp/module/CMakeLists.txt b/openmp/module/CMakeLists.txt
index 3d7128dee11171..11383cbb5dd091 100644
--- a/openmp/module/CMakeLists.txt
+++ b/openmp/module/CMakeLists.txt
@@ -28,7 +28,7 @@ endif ()
 
 if (LIBOMP_TARGET_IS_GPU)
   target_compile_options(libomp-mod PRIVATE
-    $<$<COMPILE_LANGUAGE:Fortran>:-nogpulib -flto>
+    $<$<COMPILE_LANGUAGE:Fortran>:-nogpulib ${RUNTIMES_LTO_FLAG}>
   )
 endif ()
 
diff --git a/runtimes/CMakeLists.txt b/runtimes/CMakeLists.txt
index a0ec44617c9c77..c70ae4a9b32d04 100644
--- a/runtimes/CMakeLists.txt
+++ b/runtimes/CMakeLists.txt
@@ -219,6 +219,10 @@ if("${LLVM_DEFAULT_TARGET_TRIPLE}" MATCHES "^nvptx")
   set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -flto -c")
 endif()
 
+if(NOT DEFINED RUNTIMES_LTO_FLAG)
+  set(RUNTIMES_LTO_FLAG -flto)
+endif()
+
 # Avoid checking whether the compiler is working.
 set(LLVM_COMPILER_CHECKED ON)
 

``````````

</details>


https://github.com/llvm/llvm-project/pull/235660


More information about the Openmp-commits mailing list