[libc-commits] [compiler-rt] [libc] [compiler-rt][libc][GPU] Fix 7 builtin unit test build failure for spirv64 targets (PR #236324)
via libc-commits
libc-commits at lists.llvm.org
Sun Nov 1 18:11:51 PST 2026
https://github.com/jinge90 updated https://github.com/llvm/llvm-project/pull/236324
>From 266a340f3852354ef23177b1c4aff0648b0d97a5 Mon Sep 17 00:00:00 2001
From: jinge90 <ge.jin at intel.com>
Date: Tue, 27 Oct 2026 23:23:17 -0700
Subject: [PATCH 1/4] [compiler-rt][libc][GPU] Fix 7 builtin unit test build
failure for spirv64
Signed-off-by: jinge90 <ge.jin at intel.com>
---
compiler-rt/test/builtins/Unit/divsc3_test.c | 2 +-
compiler-rt/test/builtins/Unit/divtc3_test.c | 2 +-
compiler-rt/test/builtins/Unit/divxc3_test.c | 2 +-
compiler-rt/test/builtins/Unit/lit.cfg.py | 15 +++++++++++++++
compiler-rt/test/builtins/Unit/muldc3_test.c | 2 +-
compiler-rt/test/builtins/Unit/mulsc3_test.c | 2 +-
compiler-rt/test/builtins/Unit/mulxc3_test.c | 2 +-
libc/config/gpu/spirv/entrypoints.txt | 11 +++++++++++
8 files changed, 32 insertions(+), 6 deletions(-)
diff --git a/compiler-rt/test/builtins/Unit/divsc3_test.c b/compiler-rt/test/builtins/Unit/divsc3_test.c
index 05a073b4375c72..4e2add841456bc 100644
--- a/compiler-rt/test/builtins/Unit/divsc3_test.c
+++ b/compiler-rt/test/builtins/Unit/divsc3_test.c
@@ -1,4 +1,4 @@
-// RUN: %clang_builtins %s %librt -lm -o %t && %run %t
+// RUN: %clang_builtins %s %librt %libm -o %t && %run %t
// REQUIRES: librt_has_divsc3
// REQUIRES: c99-complex
diff --git a/compiler-rt/test/builtins/Unit/divtc3_test.c b/compiler-rt/test/builtins/Unit/divtc3_test.c
index 1e1cfae766e9af..f41ba3611fac4e 100644
--- a/compiler-rt/test/builtins/Unit/divtc3_test.c
+++ b/compiler-rt/test/builtins/Unit/divtc3_test.c
@@ -1,4 +1,4 @@
-// RUN: %clang_builtins %s %librt -lm -o %t && %run %t
+// RUN: %clang_builtins %s %librt %libm -o %t && %run %t
// REQUIRES: librt_has_divtc3
// REQUIRES: c99-complex
diff --git a/compiler-rt/test/builtins/Unit/divxc3_test.c b/compiler-rt/test/builtins/Unit/divxc3_test.c
index d97e72a5c013a6..2bbf79cb1dc79b 100644
--- a/compiler-rt/test/builtins/Unit/divxc3_test.c
+++ b/compiler-rt/test/builtins/Unit/divxc3_test.c
@@ -1,4 +1,4 @@
-// RUN: %clang_builtins %s %librt -lm -o %t && %run %t
+// RUN: %clang_builtins %s %librt %libm -o %t && %run %t
// REQUIRES: librt_has_divxc3
// REQUIRES: x86-target-arch
// UNSUPPORTED: target=powerpc64{{.*}}
diff --git a/compiler-rt/test/builtins/Unit/lit.cfg.py b/compiler-rt/test/builtins/Unit/lit.cfg.py
index cc2b905c68bec1..98df179825ab14 100644
--- a/compiler-rt/test/builtins/Unit/lit.cfg.py
+++ b/compiler-rt/test/builtins/Unit/lit.cfg.py
@@ -102,6 +102,15 @@ def get_libgcc_file_name():
+ libc_bitcode_library
+ " "
)
+ libm_bitcode_library = os.path.join(
+ config.llvm_shlib_dir, config.target_triple, "libm.bc"
+ )
+ if os.path.exists(libm_bitcode_library):
+ librt_flags += (
+ "-Xclang -mlink-builtin-bitcode -Xclang "
+ + libm_bitcode_library
+ + " "
+ )
config.substitutions.append(("%librt ", librt_flags))
# Check if the linker supports --start-group and --end-group
# For nvptx64 target, it falls back to the default.
@@ -115,6 +124,12 @@ def get_libgcc_file_name():
else:
config.substitutions.append(("%librt ", "-lm " + base_lib + " -lc "))
+# spirv-link does not support -lm, libm.bc is linked via %librt.
+if "spirv" in config.target_arch:
+ config.substitutions.append(("%libm", ""))
+else:
+ config.substitutions.append(("%libm", "-lm"))
+
builtins_test_crt = get_required_attr(config, "builtins_test_crt")
if builtins_test_crt:
base_obj = os.path.join(
diff --git a/compiler-rt/test/builtins/Unit/muldc3_test.c b/compiler-rt/test/builtins/Unit/muldc3_test.c
index 1787b83f771b39..03d38f1440b9e5 100644
--- a/compiler-rt/test/builtins/Unit/muldc3_test.c
+++ b/compiler-rt/test/builtins/Unit/muldc3_test.c
@@ -1,4 +1,4 @@
-// RUN: %clang_builtins %s -ffp-contract=off %librt -lm -o %t && %run %t
+// RUN: %clang_builtins %s -ffp-contract=off %librt %libm -o %t && %run %t
// REQUIRES: librt_has_muldc3
// REQUIRES: c99-complex
diff --git a/compiler-rt/test/builtins/Unit/mulsc3_test.c b/compiler-rt/test/builtins/Unit/mulsc3_test.c
index e7cac4616a68b8..82ef78e71d3cec 100644
--- a/compiler-rt/test/builtins/Unit/mulsc3_test.c
+++ b/compiler-rt/test/builtins/Unit/mulsc3_test.c
@@ -1,4 +1,4 @@
-// RUN: %clang_builtins %s %librt -lm -o %t && %run %t
+// RUN: %clang_builtins %s %librt %libm -o %t && %run %t
// REQUIRES: librt_has_mulsc3
// REQUIRES: c99-complex
diff --git a/compiler-rt/test/builtins/Unit/mulxc3_test.c b/compiler-rt/test/builtins/Unit/mulxc3_test.c
index b07f11f6d27fef..28e4262e5af533 100644
--- a/compiler-rt/test/builtins/Unit/mulxc3_test.c
+++ b/compiler-rt/test/builtins/Unit/mulxc3_test.c
@@ -1,4 +1,4 @@
-// RUN: %clang_builtins %s %librt -lm -o %t && %run %t
+// RUN: %clang_builtins %s %librt %libm -o %t && %run %t
// REQUIRES: librt_has_mulxc3
// UNSUPPORTED: target=powerpc64{{.*}}
// REQUIRES: x86-target-arch
diff --git a/libc/config/gpu/spirv/entrypoints.txt b/libc/config/gpu/spirv/entrypoints.txt
index 36c98339582cd0..5b176d0f60ccd5 100644
--- a/libc/config/gpu/spirv/entrypoints.txt
+++ b/libc/config/gpu/spirv/entrypoints.txt
@@ -88,6 +88,17 @@ set(TARGET_LIBC_ENTRYPOINTS
)
set(TARGET_LIBM_ENTRYPOINTS
+ # math.h entrypoints
+ libc.src.math.logbf
+ # complex.h entrypoints
+ libc.src.complex.cabs
+ libc.src.complex.cabsf
+ libc.src.complex.creal
+ libc.src.complex.crealf
+ libc.src.complex.cimag
+ libc.src.complex.cimagf
+ libc.src.complex.conj
+ libc.src.complex.conjf
)
if(LIBC_TYPES_HAS_FLOAT16)
>From d9d6964e382a801e629c993410cf52a1fa34a79b Mon Sep 17 00:00:00 2001
From: jinge90 <ge.jin at intel.com>
Date: Wed, 28 Oct 2026 01:45:49 -0700
Subject: [PATCH 2/4] add abs, div symbols
Signed-off-by: jinge90 <ge.jin at intel.com>
---
libc/config/gpu/spirv/entrypoints.txt | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/libc/config/gpu/spirv/entrypoints.txt b/libc/config/gpu/spirv/entrypoints.txt
index 5b176d0f60ccd5..e521067825823c 100644
--- a/libc/config/gpu/spirv/entrypoints.txt
+++ b/libc/config/gpu/spirv/entrypoints.txt
@@ -85,6 +85,14 @@ set(TARGET_LIBC_ENTRYPOINTS
libc.src.strings.strcasecmp
libc.src.strings.strncasecmp
+ # stdlib.h entrypoints
+ libc.src.stdlib.abs
+ libc.src.stdlib.div
+ libc.src.stdlib.labs
+ libc.src.stdlib.ldiv
+ libc.src.stdlib.llabs
+ libc.src.stdlib.lldiv
+
)
set(TARGET_LIBM_ENTRYPOINTS
>From ca84987ad975d3de0f759317729548ef965ab776 Mon Sep 17 00:00:00 2001
From: jinge90 <ge.jin at intel.com>
Date: Fri, 30 Oct 2026 11:05:27 +0800
Subject: [PATCH 3/4] include '-lm' into %librt expansion
Signed-off-by: jinge90 <ge.jin at intel.com>
---
compiler-rt/test/builtins/Unit/divsc3_test.c | 2 +-
compiler-rt/test/builtins/Unit/divtc3_test.c | 2 +-
compiler-rt/test/builtins/Unit/divxc3_test.c | 2 +-
compiler-rt/test/builtins/Unit/lit.cfg.py | 12 ++++--------
compiler-rt/test/builtins/Unit/muldc3_test.c | 2 +-
compiler-rt/test/builtins/Unit/mulsc3_test.c | 2 +-
compiler-rt/test/builtins/Unit/mulxc3_test.c | 2 +-
7 files changed, 10 insertions(+), 14 deletions(-)
diff --git a/compiler-rt/test/builtins/Unit/divsc3_test.c b/compiler-rt/test/builtins/Unit/divsc3_test.c
index 4e2add841456bc..d37839702cdf45 100644
--- a/compiler-rt/test/builtins/Unit/divsc3_test.c
+++ b/compiler-rt/test/builtins/Unit/divsc3_test.c
@@ -1,4 +1,4 @@
-// RUN: %clang_builtins %s %librt %libm -o %t && %run %t
+// RUN: %clang_builtins %s %librt -o %t && %run %t
// REQUIRES: librt_has_divsc3
// REQUIRES: c99-complex
diff --git a/compiler-rt/test/builtins/Unit/divtc3_test.c b/compiler-rt/test/builtins/Unit/divtc3_test.c
index f41ba3611fac4e..e77722a0940002 100644
--- a/compiler-rt/test/builtins/Unit/divtc3_test.c
+++ b/compiler-rt/test/builtins/Unit/divtc3_test.c
@@ -1,4 +1,4 @@
-// RUN: %clang_builtins %s %librt %libm -o %t && %run %t
+// RUN: %clang_builtins %s %librt -o %t && %run %t
// REQUIRES: librt_has_divtc3
// REQUIRES: c99-complex
diff --git a/compiler-rt/test/builtins/Unit/divxc3_test.c b/compiler-rt/test/builtins/Unit/divxc3_test.c
index 2bbf79cb1dc79b..f924acf672b43f 100644
--- a/compiler-rt/test/builtins/Unit/divxc3_test.c
+++ b/compiler-rt/test/builtins/Unit/divxc3_test.c
@@ -1,4 +1,4 @@
-// RUN: %clang_builtins %s %librt %libm -o %t && %run %t
+// RUN: %clang_builtins %s %librt -o %t && %run %t
// REQUIRES: librt_has_divxc3
// REQUIRES: x86-target-arch
// UNSUPPORTED: target=powerpc64{{.*}}
diff --git a/compiler-rt/test/builtins/Unit/lit.cfg.py b/compiler-rt/test/builtins/Unit/lit.cfg.py
index 98df179825ab14..e011d6b8214c65 100644
--- a/compiler-rt/test/builtins/Unit/lit.cfg.py
+++ b/compiler-rt/test/builtins/Unit/lit.cfg.py
@@ -53,6 +53,8 @@ def get_libgcc_file_name():
config.test_source_root = os.path.dirname(__file__)
# Path to the static library
+# On generic ELF targets %librt also links libm (-lm); spirv links libm.bc
+# instead.
is_msvc = get_required_attr(config, "is_msvc")
if is_msvc:
base_lib = os.path.join(
@@ -118,17 +120,11 @@ def get_libgcc_file_name():
config.substitutions.append(
(
"%librt ",
- "-lm -Wl,--start-group " + base_lib + " -lc -Wl,--end-group ",
+ "-lm -Wl,--start-group " + base_lib + " -lc -Wl,--end-group -lm ",
)
)
else:
- config.substitutions.append(("%librt ", "-lm " + base_lib + " -lc "))
-
-# spirv-link does not support -lm, libm.bc is linked via %librt.
-if "spirv" in config.target_arch:
- config.substitutions.append(("%libm", ""))
-else:
- config.substitutions.append(("%libm", "-lm"))
+ config.substitutions.append(("%librt ", "-lm " + base_lib + " -lc -lm "))
builtins_test_crt = get_required_attr(config, "builtins_test_crt")
if builtins_test_crt:
diff --git a/compiler-rt/test/builtins/Unit/muldc3_test.c b/compiler-rt/test/builtins/Unit/muldc3_test.c
index 03d38f1440b9e5..ff676cad3400eb 100644
--- a/compiler-rt/test/builtins/Unit/muldc3_test.c
+++ b/compiler-rt/test/builtins/Unit/muldc3_test.c
@@ -1,4 +1,4 @@
-// RUN: %clang_builtins %s -ffp-contract=off %librt %libm -o %t && %run %t
+// RUN: %clang_builtins %s -ffp-contract=off %librt -o %t && %run %t
// REQUIRES: librt_has_muldc3
// REQUIRES: c99-complex
diff --git a/compiler-rt/test/builtins/Unit/mulsc3_test.c b/compiler-rt/test/builtins/Unit/mulsc3_test.c
index 82ef78e71d3cec..4f46b9c69ba4a1 100644
--- a/compiler-rt/test/builtins/Unit/mulsc3_test.c
+++ b/compiler-rt/test/builtins/Unit/mulsc3_test.c
@@ -1,4 +1,4 @@
-// RUN: %clang_builtins %s %librt %libm -o %t && %run %t
+// RUN: %clang_builtins %s %librt -o %t && %run %t
// REQUIRES: librt_has_mulsc3
// REQUIRES: c99-complex
diff --git a/compiler-rt/test/builtins/Unit/mulxc3_test.c b/compiler-rt/test/builtins/Unit/mulxc3_test.c
index 28e4262e5af533..2a5f4e2abdf29e 100644
--- a/compiler-rt/test/builtins/Unit/mulxc3_test.c
+++ b/compiler-rt/test/builtins/Unit/mulxc3_test.c
@@ -1,4 +1,4 @@
-// RUN: %clang_builtins %s %librt %libm -o %t && %run %t
+// RUN: %clang_builtins %s %librt -o %t && %run %t
// REQUIRES: librt_has_mulxc3
// UNSUPPORTED: target=powerpc64{{.*}}
// REQUIRES: x86-target-arch
>From adb31495de2e44f42c3df3a879cedb6fbc09caf1 Mon Sep 17 00:00:00 2001
From: jinge90 <ge.jin at intel.com>
Date: Mon, 2 Nov 2026 10:11:40 +0800
Subject: [PATCH 4/4] Update libc/config/gpu/spirv/entrypoints.txt
Co-authored-by: Joseph Huber <huberjn at outlook.com>
---
libc/config/gpu/spirv/entrypoints.txt | 1 -
1 file changed, 1 deletion(-)
diff --git a/libc/config/gpu/spirv/entrypoints.txt b/libc/config/gpu/spirv/entrypoints.txt
index e521067825823c..5b21d12c84af24 100644
--- a/libc/config/gpu/spirv/entrypoints.txt
+++ b/libc/config/gpu/spirv/entrypoints.txt
@@ -92,7 +92,6 @@ set(TARGET_LIBC_ENTRYPOINTS
libc.src.stdlib.ldiv
libc.src.stdlib.llabs
libc.src.stdlib.lldiv
-
)
set(TARGET_LIBM_ENTRYPOINTS
More information about the libc-commits
mailing list