Skip to content

Commit 1e998d4

Browse files
author
git apple-llvm automerger
committed
Merge commit '852bb68ddb2b' from llvm.org/main into experimental/cas/main
2 parents 7774196 + 852bb68 commit 1e998d4

File tree

33 files changed

+369
-362
lines changed

33 files changed

+369
-362
lines changed

.github/workflows/version-check.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ def get_version_from_tag(tag):
1616

1717
m = re.match('llvmorg-([0-9]+)-init', tag)
1818
if m:
19-
return (int(m.group(1)) + 1, 0, 0)
19+
return (m.group(1), "0", "0")
2020

2121
raise Exception(f"error: Tag is not valid: {tag}")
2222

clang/lib/Basic/Targets/AArch64.cpp

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "llvm/ADT/StringSwitch.h"
2020
#include "llvm/Support/AArch64TargetParser.h"
2121
#include "llvm/Support/ARMTargetParserCommon.h"
22+
#include "llvm/TargetParser/AArch64TargetParser.h"
2223
#include <optional>
2324

2425
using namespace clang;
@@ -223,8 +224,7 @@ bool AArch64TargetInfo::validateBranchProtection(StringRef Spec, StringRef,
223224
}
224225

225226
bool AArch64TargetInfo::isValidCPUName(StringRef Name) const {
226-
return Name == "generic" ||
227-
llvm::AArch64::parseCpu(Name).Arch != llvm::AArch64::INVALID;
227+
return Name == "generic" || llvm::AArch64::parseCpu(Name);
228228
}
229229

230230
bool AArch64TargetInfo::setCPU(const std::string &Name) {
@@ -681,21 +681,19 @@ void AArch64TargetInfo::setFeatureEnabled(llvm::StringMap<bool> &Features,
681681
Features[Name] = Enabled;
682682
// If the feature is an architecture feature (like v8.2a), add all previous
683683
// architecture versions and any dependant target features.
684-
const llvm::AArch64::ArchInfo &ArchInfo =
684+
const std::optional<llvm::AArch64::ArchInfo> ArchInfo =
685685
llvm::AArch64::ArchInfo::findBySubArch(Name);
686686

687-
if (ArchInfo == llvm::AArch64::INVALID)
687+
if (!ArchInfo)
688688
return; // Not an architecure, nothing more to do.
689689

690690
for (const auto *OtherArch : llvm::AArch64::ArchInfos)
691-
if (ArchInfo.implies(*OtherArch))
691+
if (ArchInfo->implies(*OtherArch))
692692
Features[OtherArch->getSubArch()] = Enabled;
693693

694694
// Set any features implied by the architecture
695-
uint64_t Extensions =
696-
llvm::AArch64::getDefaultExtensions("generic", ArchInfo);
697695
std::vector<StringRef> CPUFeats;
698-
if (llvm::AArch64::getExtensionFeatures(Extensions, CPUFeats)) {
696+
if (llvm::AArch64::getExtensionFeatures(ArchInfo->DefaultExts, CPUFeats)) {
699697
for (auto F : CPUFeats) {
700698
assert(F[0] == '+' && "Expected + in target feature!");
701699
Features[F.drop_front(1)] = true;
@@ -949,9 +947,9 @@ bool AArch64TargetInfo::initFeatureMap(
949947
const std::vector<std::string> &FeaturesVec) const {
950948
std::vector<std::string> UpdatedFeaturesVec;
951949
// Parse the CPU and add any implied features.
952-
const llvm::AArch64::ArchInfo &Arch = llvm::AArch64::parseCpu(CPU).Arch;
953-
if (Arch != llvm::AArch64::INVALID) {
954-
uint64_t Exts = llvm::AArch64::getDefaultExtensions(CPU, Arch);
950+
std::optional<llvm::AArch64::CpuInfo> CpuInfo = llvm::AArch64::parseCpu(CPU);
951+
if (CpuInfo) {
952+
uint64_t Exts = CpuInfo->getImpliedExtensions();
955953
std::vector<StringRef> CPUFeats;
956954
llvm::AArch64::getExtensionFeatures(Exts, CPUFeats);
957955
for (auto F : CPUFeats) {
@@ -975,12 +973,16 @@ bool AArch64TargetInfo::initFeatureMap(
975973
}
976974
}
977975
for (const auto &Feature : FeaturesVec)
978-
if (Feature[0] == '+') {
979-
std::string F;
980-
llvm::AArch64::getFeatureOption(Feature, F);
981-
UpdatedFeaturesVec.push_back(F);
982-
} else if (Feature[0] != '?')
983-
UpdatedFeaturesVec.push_back(Feature);
976+
if (Feature[0] != '?') {
977+
std::string UpdatedFeature = Feature;
978+
if (Feature[0] == '+') {
979+
std::optional<llvm::AArch64::ExtensionInfo> Extension =
980+
llvm::AArch64::parseArchExtension(Feature.substr(1));
981+
if (Extension)
982+
UpdatedFeature = Extension->Feature.str();
983+
}
984+
UpdatedFeaturesVec.push_back(UpdatedFeature);
985+
}
984986

985987
return TargetInfo::initFeatureMap(Features, Diags, CPU, UpdatedFeaturesVec);
986988
}
@@ -1033,13 +1035,14 @@ ParsedTargetAttr AArch64TargetInfo::parseTargetAttr(StringRef Features) const {
10331035
FoundArch = true;
10341036
std::pair<StringRef, StringRef> Split =
10351037
Feature.split("=").second.trim().split("+");
1036-
const llvm::AArch64::ArchInfo &AI = llvm::AArch64::parseArch(Split.first);
1038+
const std::optional<llvm::AArch64::ArchInfo> AI =
1039+
llvm::AArch64::parseArch(Split.first);
10371040

10381041
// Parse the architecture version, adding the required features to
10391042
// Ret.Features.
1040-
if (AI == llvm::AArch64::INVALID)
1043+
if (!AI)
10411044
continue;
1042-
Ret.Features.push_back(AI.ArchFeature.str());
1045+
Ret.Features.push_back(AI->ArchFeature.str());
10431046
// Add any extra features, after the +
10441047
SplitAndAddFeatures(Split.second, Ret.Features);
10451048
} else if (Feature.startswith("cpu=")) {

clang/lib/Driver/ToolChains/Arch/AArch64.cpp

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -123,21 +123,24 @@ static bool DecodeAArch64Features(const Driver &D, StringRef text,
123123
static bool DecodeAArch64Mcpu(const Driver &D, StringRef Mcpu, StringRef &CPU,
124124
std::vector<StringRef> &Features) {
125125
std::pair<StringRef, StringRef> Split = Mcpu.split("+");
126+
CPU = Split.first;
126127
const llvm::AArch64::ArchInfo *ArchInfo = &llvm::AArch64::ARMV8A;
127-
CPU = llvm::AArch64::resolveCPUAlias(Split.first);
128128

129129
if (CPU == "native")
130130
CPU = llvm::sys::getHostCPUName();
131131

132132
if (CPU == "generic") {
133133
Features.push_back("+neon");
134134
} else {
135-
ArchInfo = &llvm::AArch64::parseCpu(CPU).Arch;
136-
if (*ArchInfo == llvm::AArch64::INVALID)
135+
const std::optional<llvm::AArch64::CpuInfo> CpuInfo =
136+
llvm::AArch64::parseCpu(CPU);
137+
if (!CpuInfo)
137138
return false;
139+
ArchInfo = &CpuInfo->Arch;
140+
138141
Features.push_back(ArchInfo->ArchFeature);
139142

140-
uint64_t Extension = llvm::AArch64::getDefaultExtensions(CPU, *ArchInfo);
143+
uint64_t Extension = CpuInfo->getImpliedExtensions();
141144
if (!llvm::AArch64::getExtensionFeatures(Extension, Features))
142145
return false;
143146
}
@@ -156,11 +159,11 @@ getAArch64ArchFeaturesFromMarch(const Driver &D, StringRef March,
156159
std::string MarchLowerCase = March.lower();
157160
std::pair<StringRef, StringRef> Split = StringRef(MarchLowerCase).split("+");
158161

159-
const llvm::AArch64::ArchInfo *ArchInfo =
160-
&llvm::AArch64::parseArch(Split.first);
162+
std::optional <llvm::AArch64::ArchInfo> ArchInfo =
163+
llvm::AArch64::parseArch(Split.first);
161164
if (Split.first == "native")
162-
ArchInfo = &llvm::AArch64::getArchForCpu(llvm::sys::getHostCPUName().str());
163-
if (*ArchInfo == llvm::AArch64::INVALID)
165+
ArchInfo = llvm::AArch64::getArchForCpu(llvm::sys::getHostCPUName().str());
166+
if (!ArchInfo)
164167
return false;
165168
Features.push_back(ArchInfo->ArchFeature);
166169

libc/cmake/modules/LLVMLibCArchitectures.cmake

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ function(get_arch_and_system_from_triple triple arch_var sys_var)
4646
if(target_arch MATCHES "^mips")
4747
set(target_arch "mips")
4848
elseif(target_arch MATCHES "^arm")
49+
# TODO(lntue): Shall we separate `arm64`? It is currently recognized as
50+
# `arm` here.
4951
set(target_arch "arm")
5052
elseif(target_arch MATCHES "^aarch64")
5153
set(target_arch "aarch64")
@@ -59,6 +61,16 @@ function(get_arch_and_system_from_triple triple arch_var sys_var)
5961

6062
set(${arch_var} ${target_arch} PARENT_SCOPE)
6163
list(GET triple_comps ${system_index} target_sys)
64+
65+
# Correcting OS name for Apple's systems.
66+
if(target_sys STREQUAL "apple")
67+
list(GET triple_comps 2 target_sys)
68+
endif()
69+
# Strip version from `darwin###`
70+
if(target_sys MATCHES "^darwin")
71+
set(target_sys "darwin")
72+
endif()
73+
6274
set(${sys_var} ${target_sys} PARENT_SCOPE)
6375
endfunction(get_arch_and_system_from_triple)
6476

lldb/source/Target/Target.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2385,10 +2385,8 @@ Target::GetScratchTypeSystems(bool create_on_demand) {
23852385
if (auto ts = *type_system_or_err)
23862386
scratch_type_systems.push_back(ts);
23872387
}
2388-
std::sort(scratch_type_systems.begin(), scratch_type_systems.end(),
2389-
[](lldb::TypeSystemSP a, lldb::TypeSystemSP b) {
2390-
return a.get() <= b.get();
2391-
});
2388+
2389+
std::sort(scratch_type_systems.begin(), scratch_type_systems.end());
23922390
scratch_type_systems.erase(
23932391
std::unique(scratch_type_systems.begin(), scratch_type_systems.end()),
23942392
scratch_type_systems.end());

llvm/include/llvm/TargetParser/AArch64TargetParser.h

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,6 @@ enum CPUFeatures {
9191
// feature name (though the canonical reference for those is AArch64.td)
9292
// clang-format off
9393
enum ArchExtKind : uint64_t {
94-
AEK_INVALID = 0,
9594
AEK_NONE = 1,
9695
AEK_CRC = 1 << 1, // FEAT_CRC32
9796
AEK_CRYPTO = 1 << 2,
@@ -252,7 +251,6 @@ inline constexpr ExtensionInfo Extensions[] = {
252251
{"wfxt", AArch64::AEK_NONE, {}, {}, FEAT_WFXT, "+wfxt", 550},
253252
// Special cases
254253
{"none", AArch64::AEK_NONE, {}, {}, FEAT_MAX, "", ExtensionInfo::MaxFMVPriority},
255-
{"invalid", AArch64::AEK_INVALID, {}, {}, FEAT_MAX, "", 0},
256254
};
257255
// clang-format on
258256

@@ -280,12 +278,12 @@ struct ArchInfo {
280278
// v v v v v
281279
// v8.9a > v8.8a > v8.7a > v8.6a > v8.5a > v8.4a > ... > v8a;
282280
//
283-
// v8r and INVALID have no relation to anything. This is used to
284-
// determine which features to enable for a given architecture. See
281+
// v8r has no relation to anything. This is used to determine which
282+
// features to enable for a given architecture. See
285283
// AArch64TargetInfo::setFeatureEnabled.
286284
bool implies(const ArchInfo &Other) const {
287285
if (this->Profile != Other.Profile)
288-
return false; // ARMV8R and INVALID
286+
return false; // ARMV8R
289287
if (this->Version.getMajor() == Other.Version.getMajor()) {
290288
return this->Version > Other.Version;
291289
}
@@ -300,11 +298,10 @@ struct ArchInfo {
300298
StringRef getSubArch() const { return ArchFeature.substr(1); }
301299

302300
// Search for ArchInfo by SubArch name
303-
static const ArchInfo &findBySubArch(StringRef SubArch);
301+
static std::optional<ArchInfo> findBySubArch(StringRef SubArch);
304302
};
305303

306304
// clang-format off
307-
inline constexpr ArchInfo INVALID = { VersionTuple{0, 0}, AProfile, "invalid", "+", (AArch64::AEK_NONE)};
308305
inline constexpr ArchInfo ARMV8A = { VersionTuple{8, 0}, AProfile, "armv8-a", "+v8a", (AArch64::AEK_FP | AArch64::AEK_SIMD), };
309306
inline constexpr ArchInfo ARMV8_1A = { VersionTuple{8, 1}, AProfile, "armv8.1-a", "+v8.1a", (ARMV8A.DefaultExts | AArch64::AEK_CRC | AArch64::AEK_LSE | AArch64::AEK_RDM)};
310307
inline constexpr ArchInfo ARMV8_2A = { VersionTuple{8, 2}, AProfile, "armv8.2-a", "+v8.2a", (ARMV8_1A.DefaultExts | AArch64::AEK_RAS)};
@@ -325,10 +322,10 @@ inline constexpr ArchInfo ARMV8R = { VersionTuple{8, 0}, RProfile, "armv8-r",
325322
// clang-format on
326323

327324
// The set of all architectures
328-
static constexpr std::array<const ArchInfo *, 17> ArchInfos = {
329-
&INVALID, &ARMV8A, &ARMV8_1A, &ARMV8_2A, &ARMV8_3A, &ARMV8_4A,
330-
&ARMV8_5A, &ARMV8_6A, &ARMV8_7A, &ARMV8_8A, &ARMV8_9A, &ARMV9A,
331-
&ARMV9_1A, &ARMV9_2A, &ARMV9_3A, &ARMV9_4A, &ARMV8R,
325+
static constexpr std::array<const ArchInfo *, 16> ArchInfos = {
326+
&ARMV8A, &ARMV8_1A, &ARMV8_2A, &ARMV8_3A, &ARMV8_4A, &ARMV8_5A,
327+
&ARMV8_6A, &ARMV8_7A, &ARMV8_8A, &ARMV8_9A, &ARMV9A, &ARMV9_1A,
328+
&ARMV9_2A, &ARMV9_3A, &ARMV9_4A, &ARMV8R,
332329
};
333330

334331
// Details of a specific CPU.
@@ -337,6 +334,10 @@ struct CpuInfo {
337334
const ArchInfo &Arch;
338335
uint64_t DefaultExtensions; // Default extensions for this CPU. These will be
339336
// ORd with the architecture defaults.
337+
338+
uint64_t getImpliedExtensions() const {
339+
return DefaultExtensions | Arch.DefaultExts;
340+
}
340341
};
341342

342343
inline constexpr CpuInfo CpuInfos[] = {
@@ -495,8 +496,6 @@ inline constexpr CpuInfo CpuInfos[] = {
495496
(AArch64::AEK_FP16 | AArch64::AEK_RAND | AArch64::AEK_SM4 |
496497
AArch64::AEK_SHA3 | AArch64::AEK_SHA2 | AArch64::AEK_AES |
497498
AArch64::AEK_MTE | AArch64::AEK_SB | AArch64::AEK_SSBS)},
498-
// Invalid CPU
499-
{"invalid", INVALID, (AArch64::AEK_INVALID)},
500499
};
501500

502501
// An alias for a CPU.
@@ -514,15 +513,13 @@ StringRef getArchExtFeature(StringRef ArchExt);
514513
StringRef resolveCPUAlias(StringRef CPU);
515514

516515
// Information by Name
517-
uint64_t getDefaultExtensions(StringRef CPU, const ArchInfo &AI);
518-
void getFeatureOption(StringRef Name, std::string &Feature);
519-
const ArchInfo &getArchForCpu(StringRef CPU);
516+
std::optional<ArchInfo> getArchForCpu(StringRef CPU);
520517

521518
// Parser
522-
const ArchInfo &parseArch(StringRef Arch);
523-
ArchExtKind parseArchExt(StringRef ArchExt);
519+
std::optional<ArchInfo> parseArch(StringRef Arch);
520+
std::optional<ExtensionInfo> parseArchExtension(StringRef Extension);
524521
// Given the name of a CPU or alias, return the correponding CpuInfo.
525-
const CpuInfo &parseCpu(StringRef Name);
522+
std::optional<CpuInfo> parseCpu(StringRef Name);
526523
// Used by target parser tests
527524
void fillValidCPUArchList(SmallVectorImpl<StringRef> &Values);
528525

llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
#include "llvm/Support/AArch64TargetParser.h"
5252
#include "llvm/Support/TargetParser.h"
5353
#include "llvm/Support/raw_ostream.h"
54+
#include "llvm/TargetParser/AArch64TargetParser.h"
5455
#include <cassert>
5556
#include <cctype>
5657
#include <cstdint>
@@ -6880,18 +6881,17 @@ bool AArch64AsmParser::parseDirectiveArch(SMLoc L) {
68806881
std::tie(Arch, ExtensionString) =
68816882
getParser().parseStringToEndOfStatement().trim().split('+');
68826883

6883-
const AArch64::ArchInfo &ArchInfo = AArch64::parseArch(Arch);
6884-
if (ArchInfo == AArch64::INVALID)
6884+
std::optional<AArch64::ArchInfo> ArchInfo = AArch64::parseArch(Arch);
6885+
if (!ArchInfo)
68856886
return Error(ArchLoc, "unknown arch name");
68866887

68876888
if (parseToken(AsmToken::EndOfStatement))
68886889
return true;
68896890

68906891
// Get the architecture and extension features.
68916892
std::vector<StringRef> AArch64Features;
6892-
AArch64Features.push_back(ArchInfo.ArchFeature);
6893-
AArch64::getExtensionFeatures(
6894-
AArch64::getDefaultExtensions("generic", ArchInfo), AArch64Features);
6893+
AArch64Features.push_back(ArchInfo->ArchFeature);
6894+
AArch64::getExtensionFeatures(ArchInfo->DefaultExts, AArch64Features);
68956895

68966896
MCSubtargetInfo &STI = copySTI();
68976897
std::vector<std::string> ArchFeatures(AArch64Features.begin(), AArch64Features.end());
@@ -6902,7 +6902,7 @@ bool AArch64AsmParser::parseDirectiveArch(SMLoc L) {
69026902
if (!ExtensionString.empty())
69036903
ExtensionString.split(RequestedExtensions, '+');
69046904

6905-
ExpandCryptoAEK(ArchInfo, RequestedExtensions);
6905+
ExpandCryptoAEK(*ArchInfo, RequestedExtensions);
69066906

69076907
FeatureBitset Features = STI.getFeatureBits();
69086908
for (auto Name : RequestedExtensions) {
@@ -6987,19 +6987,17 @@ bool AArch64AsmParser::parseDirectiveCPU(SMLoc L) {
69876987
if (!ExtensionString.empty())
69886988
ExtensionString.split(RequestedExtensions, '+');
69896989

6990-
// FIXME This is using tablegen data, but should be moved to ARMTargetParser
6991-
// once that is tablegen'ed
6992-
if (!getSTI().isCPUStringValid(CPU)) {
6990+
const std::optional<llvm::AArch64::ArchInfo> CpuArch = llvm::AArch64::getArchForCpu(CPU);
6991+
if (!CpuArch) {
69936992
Error(CurLoc, "unknown CPU name");
69946993
return false;
69956994
}
6995+
ExpandCryptoAEK(*CpuArch, RequestedExtensions);
69966996

69976997
MCSubtargetInfo &STI = copySTI();
69986998
STI.setDefaultFeatures(CPU, /*TuneCPU*/ CPU, "");
69996999
CurLoc = incrementLoc(CurLoc, CPU.size());
70007000

7001-
ExpandCryptoAEK(llvm::AArch64::getArchForCpu(CPU), RequestedExtensions);
7002-
70037001
for (auto Name : RequestedExtensions) {
70047002
// Advance source location past '+'.
70057003
CurLoc = incrementLoc(CurLoc, 1);

0 commit comments

Comments
 (0)