https://github.com/JacketPants created https://github.com/llvm/llvm-project/pull/222638
Add support for the HVML vector math library in clang's -fveclib option. Wire HVML through the clang driver, restricted to x86_64. This is the second of three incremental patches; depends on #222632. >From d709ebc550188def12cabf39e340d89b72a60921 Mon Sep 17 00:00:00 2001 From: Xiaomeng Zhang <[email protected]> Date: Thu, 10 Sep 2026 17:08:43 +0800 Subject: [PATCH] [Clang][veclib] Add HVML target to fveclib Add support for the HVML vector math library in clang's -fveclib option. --- clang/include/clang/Options/Options.td | 4 ++-- clang/lib/Driver/ToolChains/Clang.cpp | 5 +++++ clang/lib/Driver/ToolChains/CommonArgs.cpp | 1 + clang/test/Driver/autocomplete.c | 1 + clang/test/Driver/fveclib.c | 15 +++++++++++++++ 5 files changed, 24 insertions(+), 2 deletions(-) diff --git a/clang/include/clang/Options/Options.td b/clang/include/clang/Options/Options.td index f7e22ee84a9f4..0b2003c3e667d 100644 --- a/clang/include/clang/Options/Options.td +++ b/clang/include/clang/Options/Options.td @@ -4020,10 +4020,10 @@ def fveclib : Joined<["-"], "fveclib=">, Group<f_Group>, "Use the given vector functions library.\n" " Note: -fveclib={ArmPL,SLEEF,libmvec} implies -fno-math-errno.\n" " Note: -fveclib=libmvec on AArch64 requires GLIBC 2.40 or newer.">, - Values<"Accelerate,libmvec,MASSV,SVML,SLEEF,Darwin_libsystem_m,ArmPL,AMDLIBM,none">, + Values<"Accelerate,libmvec,MASSV,SVML,SLEEF,Darwin_libsystem_m,ArmPL,AMDLIBM,HVML,none">, NormalizedValuesScope<"llvm::driver::VectorLibrary">, NormalizedValues<["Accelerate", "LIBMVEC", "MASSV", "SVML", "SLEEF", - "Darwin_libsystem_m", "ArmPL", "AMDLIBM", "NoLibrary"]>, + "Darwin_libsystem_m", "ArmPL", "AMDLIBM", "HVML", "NoLibrary"]>, MarshallingInfoEnum<CodeGenOpts<"VecLib">, "NoLibrary">; def fno_lax_vector_conversions : Flag<["-"], "fno-lax-vector-conversions">, Group<f_Group>, Alias<flax_vector_conversions_EQ>, AliasArgs<["none"]>; diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index ab852bf0e0043..4d73224cd3e8b 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -6019,6 +6019,11 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, Triple.getArch() != llvm::Triple::x86_64) D.Diag(diag::err_drv_unsupported_opt_for_target) << Name << Triple.getArchName(); + } else if (Name == "HVML") { + // HVML is only available on x86_64 (Hygon CPUs are 64-bit only). + if (Triple.getArch() != llvm::Triple::x86_64) + D.Diag(diag::err_drv_unsupported_opt_for_target) + << Name << Triple.getArchName(); } else if (Name == "libmvec") { if (Triple.getArch() != llvm::Triple::x86 && Triple.getArch() != llvm::Triple::x86_64 && diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp index 64859a318485b..b281e2d32e071 100644 --- a/clang/lib/Driver/ToolChains/CommonArgs.cpp +++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -1146,6 +1146,7 @@ void tools::addLTOOptions(const ToolChain &ToolChain, const ArgList &Args, .Case("SLEEF", "sleefgnuabi") .Case("Darwin_libsystem_m", "Darwin_libsystem_m") .Case("ArmPL", "ArmPL") + .Case("HVML", "HVML") .Case("none", "none") .Default(std::nullopt); diff --git a/clang/test/Driver/autocomplete.c b/clang/test/Driver/autocomplete.c index 297d2e40d6d83..678a169a0d0c9 100644 --- a/clang/test/Driver/autocomplete.c +++ b/clang/test/Driver/autocomplete.c @@ -84,6 +84,7 @@ // FVECLIBALL-NEXT: AMDLIBM // FVECLIBALL-NEXT: ArmPL // FVECLIBALL-NEXT: Darwin_libsystem_m +// FVECLIBALL-NEXT: HVML // FVECLIBALL-NEXT: libmvec // FVECLIBALL-NEXT: MASSV // FVECLIBALL-NEXT: none diff --git a/clang/test/Driver/fveclib.c b/clang/test/Driver/fveclib.c index c57e9aa7a3cc2..661718f21c014 100644 --- a/clang/test/Driver/fveclib.c +++ b/clang/test/Driver/fveclib.c @@ -3,6 +3,7 @@ // RUN: %clang -### -c --target=x86_64-unknown-linux-gnu -fveclib=libmvec %s 2>&1 | FileCheck --check-prefix=CHECK-libmvec %s // RUN: %clang -### -c --target=aarch64-linux-gnu -fveclib=libmvec %s 2>&1 | FileCheck --check-prefix=CHECK-LIBMVEC-AARCH64 %s // RUN: %clang -### -c --target=x86_64-unknown-linux-gnu -fveclib=AMDLIBM %s 2>&1 | FileCheck --check-prefix=CHECK-AMDLIBM %s +// RUN: %clang -### -c --target=x86_64-unknown-linux-gnu -fveclib=HVML %s 2>&1 | FileCheck --check-prefix=CHECK-HVML %s // RUN: %clang -### -c -fveclib=MASSV %s 2>&1 | FileCheck --check-prefix=CHECK-MASSV %s // RUN: %clang -### -c -fveclib=Darwin_libsystem_m %s 2>&1 | FileCheck --check-prefix=CHECK-DARWIN_LIBSYSTEM_M %s // RUN: %clang -### -c --target=aarch64 -fveclib=SLEEF %s 2>&1 | FileCheck --check-prefix=CHECK-SLEEF %s @@ -15,6 +16,7 @@ // CHECK-libmvec: "-fveclib=libmvec" // CHECK-LIBMVEC-AARCH64: "-fveclib=libmvec" // CHECK-AMDLIBM: "-fveclib=AMDLIBM" +// CHECK-HVML: "-fveclib=HVML" // CHECK-MASSV: "-fveclib=MASSV" // CHECK-DARWIN_LIBSYSTEM_M: "-fveclib=Darwin_libsystem_m" // CHECK-SLEEF: "-fveclib=SLEEF" @@ -25,8 +27,11 @@ // RUN: not %clang --target=x86 -c -fveclib=SLEEF %s 2>&1 | FileCheck --check-prefix=CHECK-ERROR %s // RUN: not %clang --target=x86 -c -fveclib=ArmPL %s 2>&1 | FileCheck --check-prefix=CHECK-ERROR %s +// RUN: not %clang --target=x86 -c -fveclib=HVML %s 2>&1 | FileCheck --check-prefix=CHECK-ERROR %s // RUN: not %clang --target=aarch64 -c -fveclib=SVML %s 2>&1 | FileCheck --check-prefix=CHECK-ERROR %s // RUN: not %clang --target=aarch64 -c -fveclib=AMDLIBM %s 2>&1 | FileCheck --check-prefix=CHECK-ERROR %s +// RUN: not %clang --target=aarch64 -c -fveclib=HVML %s 2>&1 | FileCheck --check-prefix=CHECK-HVML-ERROR %s +// CHECK-HVML-ERROR: unsupported option 'HVML' for target 'aarch64' // CHECK-ERROR: unsupported option {{.*}} for target // RUN: %clang -fveclib=Accelerate %s -target arm64-apple-ios8.0.0 -### 2>&1 | FileCheck --check-prefix=CHECK-LINK %s @@ -50,6 +55,9 @@ // RUN: %clang -### --target=x86_64-unknown-linux-gnu -fveclib=AMDLIBM -flto %s 2>&1 | FileCheck --check-prefix=CHECK-LTO-AMDLIBM %s // CHECK-LTO-AMDLIBM: "-plugin-opt=-vector-library=AMDLIBM" +// RUN: %clang -### --target=x86_64-unknown-linux-gnu -fveclib=HVML -flto %s 2>&1 | FileCheck --check-prefix=CHECK-HVML-LTO %s +// CHECK-HVML-LTO: "-plugin-opt=-vector-library=HVML" + // RUN: %clang -### --target=powerpc64-unknown-linux-gnu -fveclib=MASSV -flto %s 2>&1 | FileCheck --check-prefix=CHECK-LTO-MASSV %s // CHECK-LTO-MASSV: "-plugin-opt=-vector-library=MASSV" @@ -80,6 +88,13 @@ // CHECK-ERRNO-AMDLIBM: "-fveclib=AMDLIBM" // CHECK-ERRNO-AMDLIBM-SAME: "-fmath-errno" +// RUN: %clang -### --target=x86_64-unknown-linux-gnu -fveclib=HVML %s 2>&1 | FileCheck --check-prefix=CHECK-ERRNO-HVML %s +// CHECK-ERRNO-HVML: "-fveclib=HVML" +// CHECK-ERRNO-HVML-SAME: "-fmath-errno" +// RUN: %clang -### --target=x86_64-unknown-linux-gnu -fveclib=HVML -fno-math-errno %s 2>&1 | FileCheck --check-prefix=CHECK-ERRNO2-HVML %s +// CHECK-ERRNO2-HVML: "-fveclib=HVML" +// CHECK-ERRNO2-HVML-NOT: "-fmath-errno" + // RUN: %clang -### --target=powerpc64-unknown-linux-gnu -fveclib=MASSV %s 2>&1 | FileCheck --check-prefix=CHECK-ERRNO-MASSV %s // CHECK-ERRNO-MASSV: "-fveclib=MASSV" // CHECK-ERRNO-MASSV-SAME: "-fmath-errno" _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
