Skip to content

Commit cd10ded

Browse files
[Clang] Remove AArch64TargetInfo::setArchFeatures (#146107)
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.
1 parent a6bb895 commit cd10ded

File tree

3 files changed

+5
-76
lines changed

3 files changed

+5
-76
lines changed

clang/lib/Basic/Targets/AArch64.cpp

Lines changed: 0 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -125,79 +125,6 @@ static constexpr auto BuiltinAArch64Infos =
125125
#include "clang/Basic/BuiltinsAArch64.def"
126126
});
127127

128-
void AArch64TargetInfo::setArchFeatures() {
129-
if (*ArchInfo == llvm::AArch64::ARMV8R) {
130-
HasDotProd = true;
131-
HasDIT = true;
132-
HasFlagM = true;
133-
HasRCPC = true;
134-
FPU |= NeonMode;
135-
HasCCPP = true;
136-
HasCRC = true;
137-
HasLSE = true;
138-
HasRDM = true;
139-
} else if (ArchInfo->Version.getMajor() == 8) {
140-
if (ArchInfo->Version.getMinor() >= 7u) {
141-
HasWFxT = true;
142-
}
143-
if (ArchInfo->Version.getMinor() >= 6u) {
144-
HasBFloat16 = true;
145-
HasMatMul = true;
146-
}
147-
if (ArchInfo->Version.getMinor() >= 5u) {
148-
HasAlternativeNZCV = true;
149-
HasFRInt3264 = true;
150-
HasSSBS = true;
151-
HasSB = true;
152-
HasPredRes = true;
153-
HasBTI = true;
154-
}
155-
if (ArchInfo->Version.getMinor() >= 4u) {
156-
HasDotProd = true;
157-
HasDIT = true;
158-
HasFlagM = true;
159-
}
160-
if (ArchInfo->Version.getMinor() >= 3u) {
161-
HasRCPC = true;
162-
FPU |= NeonMode;
163-
}
164-
if (ArchInfo->Version.getMinor() >= 2u) {
165-
HasCCPP = true;
166-
}
167-
if (ArchInfo->Version.getMinor() >= 1u) {
168-
HasCRC = true;
169-
HasLSE = true;
170-
HasRDM = true;
171-
}
172-
} else if (ArchInfo->Version.getMajor() == 9) {
173-
if (ArchInfo->Version.getMinor() >= 2u) {
174-
HasWFxT = true;
175-
}
176-
if (ArchInfo->Version.getMinor() >= 1u) {
177-
HasBFloat16 = true;
178-
HasMatMul = true;
179-
}
180-
FPU |= SveMode;
181-
HasSVE2 = true;
182-
HasFullFP16 = true;
183-
HasAlternativeNZCV = true;
184-
HasFRInt3264 = true;
185-
HasSSBS = true;
186-
HasSB = true;
187-
HasPredRes = true;
188-
HasBTI = true;
189-
HasDotProd = true;
190-
HasDIT = true;
191-
HasFlagM = true;
192-
HasRCPC = true;
193-
FPU |= NeonMode;
194-
HasCCPP = true;
195-
HasCRC = true;
196-
HasLSE = true;
197-
HasRDM = true;
198-
}
199-
}
200-
201128
AArch64TargetInfo::AArch64TargetInfo(const llvm::Triple &Triple,
202129
const TargetOptions &Opts)
203130
: TargetInfo(Triple), ABI("aapcs") {
@@ -1266,7 +1193,6 @@ bool AArch64TargetInfo::handleTargetFeatures(std::vector<std::string> &Features,
12661193
}
12671194

12681195
setDataLayout();
1269-
setArchFeatures();
12701196

12711197
if (HasNoFP) {
12721198
FPU &= ~FPUMode;

clang/lib/Basic/Targets/AArch64.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,6 @@ class LLVM_LIBRARY_VISIBILITY AArch64TargetInfo : public TargetInfo {
158158
return false;
159159
}
160160

161-
void setArchFeatures();
162-
163161
void getTargetDefinesARMV81A(const LangOptions &Opts,
164162
MacroBuilder &Builder) const;
165163
void getTargetDefinesARMV82A(const LangOptions &Opts,

clang/test/Preprocessor/arm-target-features.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1049,3 +1049,8 @@
10491049
// CHECK-NOSIMD-NOT: #define __ARM_NEON 1
10501050
// CHECK-NOSIMD-NOT: #define __ARM_NEON_FP 0x6
10511051
// CHECK-NOSIMD-NOT: #define __ARM_NEON__ 1
1052+
1053+
// Check that disabling SVE, as set by armv9-a, does not define __ARM_FEATURE_SVE* macros.
1054+
// RUN: %clang -target aarch64 -march=armv9-a+nosve -x c -E -dM -o - %s | FileCheck -check-prefix=CHECK-NOSVE %s
1055+
// CHECK-NOSVE-NOT: #define __ARM_FEATURE_SVE 1
1056+
// CHECK-NOSVE-NOT: #define __ARM_FEATURE_SVE2 1

0 commit comments

Comments
 (0)