[llvm] [clang] support avx512fp16 target multiversioning (PR #151320)

Jinjie Huang via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 30 05:36:44 PDT 2025


https://github.com/Jinjie-Huang created https://github.com/llvm/llvm-project/pull/151320

Currently, multiversioning for the avx512fp16 target seems not yet supported due to a validation check in the frontend (SemaDecl). 

While compiler-rt already supports detecting this feature bit from a previous [patch](https://github.com/llvm/llvm-project/pull/78384/files), so this patch tries to enables the full multiversioning functionality of avx512fp16 in Clang by defining a priority for avx512fp16 in X86TargetParser.def.

>From 9bdd5b58b6d078a99c0fa25c27c1a66054981b1d Mon Sep 17 00:00:00 2001
From: huangjinjie <huangjinjie at bytedance.com>
Date: Wed, 30 Jul 2025 20:26:32 +0800
Subject: [PATCH] support avx512fp16 target multiversioning

---
 llvm/include/llvm/TargetParser/X86TargetParser.def | 2 +-
 llvm/lib/TargetParser/X86TargetParser.cpp          | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/llvm/include/llvm/TargetParser/X86TargetParser.def b/llvm/include/llvm/TargetParser/X86TargetParser.def
index 5b719a2b0eb39..0833d3c2ad860 100644
--- a/llvm/include/llvm/TargetParser/X86TargetParser.def
+++ b/llvm/include/llvm/TargetParser/X86TargetParser.def
@@ -239,7 +239,7 @@ X86_FEATURE_COMPAT(KL,              "kl",                     0)
 X86_FEATURE       (FXSR,            "fxsr")
 X86_FEATURE_COMPAT(WIDEKL,          "widekl",                 0)
 X86_FEATURE_COMPAT(AVXVNNI,         "avxvnni",                0)
-X86_FEATURE_COMPAT(AVX512FP16,      "avx512fp16",             0)
+X86_FEATURE_COMPAT(AVX512FP16,      "avx512fp16",            38)
 X86_FEATURE       (CCMP,            "ccmp")
 X86_FEATURE       (Push2Pop2,       "push2pop2")
 X86_FEATURE       (PPX,             "ppx")
diff --git a/llvm/lib/TargetParser/X86TargetParser.cpp b/llvm/lib/TargetParser/X86TargetParser.cpp
index 9cd35e35d4bc9..3e752d49eb9b0 100644
--- a/llvm/lib/TargetParser/X86TargetParser.cpp
+++ b/llvm/lib/TargetParser/X86TargetParser.cpp
@@ -776,13 +776,13 @@ unsigned llvm::X86::getFeaturePriority(ProcessorFeatures Feat) {
 #ifndef NDEBUG
   // Check that priorities are set properly in the .def file. We expect that
   // "compat" features are assigned non-duplicate consecutive priorities
-  // starting from one (1, ..., 37) and multiple zeros.
+  // starting from one (1, ..., 38) and multiple zeros.
 #define X86_FEATURE_COMPAT(ENUM, STR, PRIORITY) PRIORITY,
   unsigned Priorities[] = {
 #include "llvm/TargetParser/X86TargetParser.def"
   };
   std::array<unsigned, std::size(Priorities)> HelperList;
-  const size_t MaxPriority = 37;
+  const size_t MaxPriority = 38;
   std::iota(HelperList.begin(), HelperList.begin() + MaxPriority + 1, 0);
   for (size_t i = MaxPriority + 1; i != std::size(Priorities); ++i)
     HelperList[i] = 0;



More information about the llvm-commits mailing list