在 2026/10/14 14:08, Richard Biener 写道:
> On Wed, Oct 14, 2026 at 3:54 AM Kewen Lin <[email protected]> wrote:
>>
>> 在 2026/10/13 17:08, Richard Biener 写道:
>>> On Tue, Oct 13, 2026 at 9:50 AM Kewen Lin <[email protected]> wrote:
>>>>
>>>> Hi,
>>>>
>>>> When adding vector math lib support, I found trigonometric pi-based
>>>> functions introduced by r16-710-g591d3d02664c7b are missing from
>>>> macro SEQ_OF_CASE_MATHFN in function mathfn_built_in_2, which caused
>>>> ICE as hanlder assumes there is a non-null function declaration but
>>>> actually mathfn_built_in cannot map their combined_fn codes to
>>>> type-specific builtin declarations.
>>>>
>>>> I think this is an oversight, so this patch is to add those
>>>> trigonometric pi-based builtins to SEQ_OF_CASE_MATHFN, and keep
>>>> builtin_with_linkage_p in sync as well.
>>>>
>>>> Bootstrapped and the regression-tested well, is it ok for trunk?
>>>
>>> OK.
>>
>> Thanks Richi, pushed as r17-5176-g10e202e107d23a.
>>
>> Do we want it to be backported to gcc-16 branch?
>> If yes, is it ok to backport after burn-in time?
>
> Can you add a testcase then? Then it's OK to backport.
Sure, without the VML change, it seems no way to construct a test case
for showing ICE, so I didn't include a testcase in the original patch.
With AI's assistance, I have now constructed a testcase for the
builtin_with_linkage_p path instead, so a follow-up patch for test
case is listed below. Is it ok for trunk and backporting?
BR,
Kewen
-----
Subject: [PATCH] testsuite: Check LTO linkage for pi-based builtins
The pi-based builtins are library functions and must be recorded as
undefined symbols in LTO object files. Add a test that emits calls to
all seven trigonometric pi-based function families and checks each
symbol independently.
This verifies their builtin_with_linkage_p classification and prevents
missing LTO symbol references from changing archive and shared-library
resolution.
Assisted-by: LLM
gcc/testsuite/ChangeLog:
* gcc.dg/builtin-pi-linkage.c: New test.
Signed-off-by: Kewen Lin <[email protected]>
---
gcc/testsuite/gcc.dg/builtin-pi-linkage.c | 63 +++++++++++++++++++++++
1 file changed, 63 insertions(+)
create mode 100644 gcc/testsuite/gcc.dg/builtin-pi-linkage.c
diff --git a/gcc/testsuite/gcc.dg/builtin-pi-linkage.c
b/gcc/testsuite/gcc.dg/builtin-pi-linkage.c
new file mode 100644
index 00000000000..93c25e4226f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/builtin-pi-linkage.c
@@ -0,0 +1,63 @@
+/* { dg-do assemble } */
+/* { dg-require-effective-target lto } */
+/* { dg-options "-O2 -flto" } */
+
+/* LTO should record library references for all pi-based builtins. */
+
+extern double acospi (double);
+extern double asinpi (double);
+extern double atan2pi (double, double);
+extern double atanpi (double);
+extern double cospi (double);
+extern double sinpi (double);
+extern double tanpi (double);
+
+double
+f1 (double x)
+{
+ return acospi (x);
+}
+
+double
+f2 (double x)
+{
+ return asinpi (x);
+}
+
+double
+f3 (double x, double y)
+{
+ return atan2pi (x, y);
+}
+
+double
+f4 (double x)
+{
+ return atanpi (x);
+}
+
+double
+f5 (double x)
+{
+ return cospi (x);
+}
+
+double
+f6 (double x)
+{
+ return sinpi (x);
+}
+
+double
+f7 (double x)
+{
+ return tanpi (x);
+}
+
+/* { dg-final { scan-symbol "acospi" } } */
+/* { dg-final { scan-symbol "asinpi" } } */
+/* { dg-final { scan-symbol "atan2pi" } } */
+/* { dg-final { scan-symbol "atanpi" } } */
+/* { dg-final { scan-symbol "cospi" } } */
+/* { dg-final { scan-symbol "sinpi" } } */
+/* { dg-final { scan-symbol "tanpi" } } */
--
2.34.1