[clang] [Clang] Remove AArch64TargetInfo::setArchFeatures (PR #146107)
Sander de Smalen via cfe-commits
cfe-commits at lists.llvm.org
Sun Jun 29 11:57:11 PDT 2025
https://github.com/sdesmalen-arm updated https://github.com/llvm/llvm-project/pull/146107
>From c44ab034e0f1a54df2a3f5c09ddabff531dea982 Mon Sep 17 00:00:00 2001
From: Sander de Smalen <sander.desmalen at arm.com>
Date: Fri, 27 Jun 2025 16:12:04 +0000
Subject: [PATCH] [Clang] Remove AArch64TargetInfo::setArchFeatures
When compiling with `-march=armv9-a+nosve` we found that Clang
still defines the `__ARM_FEATURE_SVE2` macro, which is explicitly
set in `setArchFeatures` when compiling for armv9-a.
After some experimenting, I found out that the list of features
passed into `AArch64TargetInfo::handleTargetFeatures` has already
been expanded and takes into account `+no[feature]` and has
already expanded features like `armv9-a`.
>From that I conclude that `setArchFeatures` is no longer required.
---
clang/lib/Basic/Targets/AArch64.cpp | 74 -------------------
clang/lib/Basic/Targets/AArch64.h | 2 -
clang/test/Preprocessor/arm-target-features.c | 5 ++
3 files changed, 5 insertions(+), 76 deletions(-)
diff --git a/clang/lib/Basic/Targets/AArch64.cpp b/clang/lib/Basic/Targets/AArch64.cpp
index 124b340b62d9f..e57feafe3ae24 100644
--- a/clang/lib/Basic/Targets/AArch64.cpp
+++ b/clang/lib/Basic/Targets/AArch64.cpp
@@ -125,79 +125,6 @@ static constexpr auto BuiltinAArch64Infos =
#include "clang/Basic/BuiltinsAArch64.def"
});
-void AArch64TargetInfo::setArchFeatures() {
- if (*ArchInfo == llvm::AArch64::ARMV8R) {
- HasDotProd = true;
- HasDIT = true;
- HasFlagM = true;
- HasRCPC = true;
- FPU |= NeonMode;
- HasCCPP = true;
- HasCRC = true;
- HasLSE = true;
- HasRDM = true;
- } else if (ArchInfo->Version.getMajor() == 8) {
- if (ArchInfo->Version.getMinor() >= 7u) {
- HasWFxT = true;
- }
- if (ArchInfo->Version.getMinor() >= 6u) {
- HasBFloat16 = true;
- HasMatMul = true;
- }
- if (ArchInfo->Version.getMinor() >= 5u) {
- HasAlternativeNZCV = true;
- HasFRInt3264 = true;
- HasSSBS = true;
- HasSB = true;
- HasPredRes = true;
- HasBTI = true;
- }
- if (ArchInfo->Version.getMinor() >= 4u) {
- HasDotProd = true;
- HasDIT = true;
- HasFlagM = true;
- }
- if (ArchInfo->Version.getMinor() >= 3u) {
- HasRCPC = true;
- FPU |= NeonMode;
- }
- if (ArchInfo->Version.getMinor() >= 2u) {
- HasCCPP = true;
- }
- if (ArchInfo->Version.getMinor() >= 1u) {
- HasCRC = true;
- HasLSE = true;
- HasRDM = true;
- }
- } else if (ArchInfo->Version.getMajor() == 9) {
- if (ArchInfo->Version.getMinor() >= 2u) {
- HasWFxT = true;
- }
- if (ArchInfo->Version.getMinor() >= 1u) {
- HasBFloat16 = true;
- HasMatMul = true;
- }
- FPU |= SveMode;
- HasSVE2 = true;
- HasFullFP16 = true;
- HasAlternativeNZCV = true;
- HasFRInt3264 = true;
- HasSSBS = true;
- HasSB = true;
- HasPredRes = true;
- HasBTI = true;
- HasDotProd = true;
- HasDIT = true;
- HasFlagM = true;
- HasRCPC = true;
- FPU |= NeonMode;
- HasCCPP = true;
- HasCRC = true;
- HasLSE = true;
- HasRDM = true;
- }
-}
-
AArch64TargetInfo::AArch64TargetInfo(const llvm::Triple &Triple,
const TargetOptions &Opts)
: TargetInfo(Triple), ABI("aapcs") {
@@ -1266,7 +1193,6 @@ bool AArch64TargetInfo::handleTargetFeatures(std::vector<std::string> &Features,
}
setDataLayout();
- setArchFeatures();
if (HasNoFP) {
FPU &= ~FPUMode;
diff --git a/clang/lib/Basic/Targets/AArch64.h b/clang/lib/Basic/Targets/AArch64.h
index 1951e0679d2ec..56adfa97efb1a 100644
--- a/clang/lib/Basic/Targets/AArch64.h
+++ b/clang/lib/Basic/Targets/AArch64.h
@@ -158,8 +158,6 @@ class LLVM_LIBRARY_VISIBILITY AArch64TargetInfo : public TargetInfo {
return false;
}
- void setArchFeatures();
-
void getTargetDefinesARMV81A(const LangOptions &Opts,
MacroBuilder &Builder) const;
void getTargetDefinesARMV82A(const LangOptions &Opts,
diff --git a/clang/test/Preprocessor/arm-target-features.c b/clang/test/Preprocessor/arm-target-features.c
index 0f9063a27371e..fc37bebcb8330 100644
--- a/clang/test/Preprocessor/arm-target-features.c
+++ b/clang/test/Preprocessor/arm-target-features.c
@@ -1049,3 +1049,8 @@
// CHECK-NOSIMD-NOT: #define __ARM_NEON 1
// CHECK-NOSIMD-NOT: #define __ARM_NEON_FP 0x6
// CHECK-NOSIMD-NOT: #define __ARM_NEON__ 1
+
+// Check that disabling SVE, as set by armv9-a, does not define __ARM_FEATURE_SVE* macros.
+// RUN: %clang -target aarch64 -march=armv9-a+nosve -x c -E -dM -o - %s | FileCheck -check-prefix=CHECK-NOSVE %s
+// CHECK-NOSVE-NOT: #define __ARM_FEATURE_SVE 1
+// CHECK-NOSVE-NOT: #define __ARM_FEATURE_SVE2 1
More information about the cfe-commits
mailing list