[clang] [Clang][veclib] Add HVML target to fveclib (PR #222638)
Xiaomeng Zhang via cfe-commits
cfe-commits at lists.llvm.org
Thu Sep 10 06:00:26 PDT 2026
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 <zhangxiaomeng at hygon.cn>
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"
More information about the cfe-commits
mailing list