[llvm] [clang] support avx512fp16 target multiversioning (PR #151320)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 30 05:37:21 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-x86
Author: Jinjie Huang (Jinjie-Huang)
<details>
<summary>Changes</summary>
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.
---
Full diff: https://github.com/llvm/llvm-project/pull/151320.diff
2 Files Affected:
- (modified) llvm/include/llvm/TargetParser/X86TargetParser.def (+1-1)
- (modified) llvm/lib/TargetParser/X86TargetParser.cpp (+2-2)
``````````diff
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;
``````````
</details>
https://github.com/llvm/llvm-project/pull/151320
More information about the llvm-commits
mailing list