[llvm] a54545b - [CMake] Fix __builtin_thread_pointer check with LTO
Sam James via llvm-commits
llvm-commits at lists.llvm.org
Sun Nov 5 06:55:05 PST 2023
Author: Sam James
Date: 2023-11-05T14:54:47Z
New Revision: a54545ba6514802178cf7cf1c1dd9f7efbf3cde7
URL: https://github.com/llvm/llvm-project/commit/a54545ba6514802178cf7cf1c1dd9f7efbf3cde7
DIFF: https://github.com/llvm/llvm-project/commit/a54545ba6514802178cf7cf1c1dd9f7efbf3cde7.diff
LOG: [CMake] Fix __builtin_thread_pointer check with LTO
With LTO, gcc's IPA passes might drop the foo() function and then the test
will pass even on platforms where __builtin_thread_pointer is unavailable.
On PPC64, we get this as a result:
```
llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp:361:61: error: ‘__builtin_thread_pointer’ is not supported on this targ
```
Just mark the function in the CMake configure test with the 'used' attribute to
avoid it being optimised out. The test then behaves correctly with -flto.
Tested with e.g. 'powerpc64le-linux-gnu-gcc -O2 -flto a.c'.
Reported-by: matoro
Reviewed-by: maskray
Closes: https://github.com/llvm/llvm-project/pull/70968
Signed-off-by: Sam James <sam at gentoo.org>
Added:
Modified:
llvm/cmake/config-ix.cmake
Removed:
################################################################################
diff --git a/llvm/cmake/config-ix.cmake b/llvm/cmake/config-ix.cmake
index 64c63e199ffa4e4..7bb3e98333effb5 100644
--- a/llvm/cmake/config-ix.cmake
+++ b/llvm/cmake/config-ix.cmake
@@ -65,7 +65,12 @@ check_include_file(fenv.h HAVE_FENV_H)
check_symbol_exists(FE_ALL_EXCEPT "fenv.h" HAVE_DECL_FE_ALL_EXCEPT)
check_symbol_exists(FE_INEXACT "fenv.h" HAVE_DECL_FE_INEXACT)
check_c_source_compiles("
- void *foo() {
+ #if __has_attribute(used)
+ #define LLVM_ATTRIBUTE_USED __attribute__((__used__))
+ #else
+ #define LLVM_ATTRIBUTE_USED
+ #endif
+ LLVM_ATTRIBUTE_USED void *foo() {
return __builtin_thread_pointer();
}
int main(void) { return 0; }"
More information about the llvm-commits
mailing list