[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