25 .
Cases(
"v6m",
"v6sm",
"v6s-m",
"v6-m")
26 .
Cases(
"v6z",
"v6zk",
"v6kz")
27 .
Cases(
"v7",
"v7a",
"v7hl",
"v7l",
"v7-a")
30 .
Case(
"v7em",
"v7e-m")
31 .
Cases(
"v8",
"v8a",
"v8l",
"aarch64",
"arm64",
"v8-a")
32 .
Case(
"v8.1a",
"v8.1-a")
33 .
Case(
"v8.2a",
"v8.2-a")
34 .
Case(
"v8.3a",
"v8.3-a")
35 .
Case(
"v8.4a",
"v8.4-a")
36 .
Case(
"v8.5a",
"v8.5-a")
37 .
Case(
"v8.6a",
"v8.6-a")
38 .
Case(
"v8.7a",
"v8.7-a")
39 .
Case(
"v8.8a",
"v8.8-a")
40 .
Case(
"v8.9a",
"v8.9-a")
42 .
Cases(
"v9",
"v9a",
"v9-a")
43 .
Case(
"v9.1a",
"v9.1-a")
44 .
Case(
"v9.2a",
"v9.2-a")
45 .
Case(
"v9.3a",
"v9.3-a")
46 .
Case(
"v9.4a",
"v9.4-a")
47 .
Case(
"v9.5a",
"v9.5-a")
48 .
Case(
"v9.6a",
"v9.6-a")
49 .
Case(
"v8m.base",
"v8-m.base")
50 .
Case(
"v8m.main",
"v8-m.main")
51 .
Case(
"v8.1m.main",
"v8.1-m.main")
61 if (
A.starts_with(
"arm64_32"))
63 else if (
A.starts_with(
"arm64e"))
65 else if (
A.starts_with(
"arm64"))
67 else if (
A.starts_with(
"aarch64_32"))
69 else if (
A.starts_with(
"arm"))
71 else if (
A.starts_with(
"thumb"))
73 else if (
A.starts_with(
"aarch64")) {
78 if (
A.substr(offset, 3) ==
"_be")
86 else if (
A.ends_with(
"eb"))
87 A =
A.substr(0,
A.size() - 2);
99 if (
A.size() >= 2 && (
A[0] !=
'v' || !std::isdigit(
A[1])))
102 if (
A.contains(
"eb"))
122 return EndianKind::BIG;
126 return EndianKind::BIG;
128 return EndianKind::LITTLE;
132 return EndianKind::LITTLE;
134 return EndianKind::INVALID;
144 PBP = {
"none",
"a_key",
false,
false,
false};
148 if (
Spec ==
"standard") {
149 PBP.
Scope =
"non-leaf";
157 Spec.split(Opts,
"+");
158 for (
int I = 0, E = Opts.
size();
I != E; ++
I) {
164 if (Opt ==
"pac-ret") {
165 PBP.
Scope =
"non-leaf";
166 for (;
I + 1 != E; ++
I) {
168 if (PACOpt ==
"leaf")
170 else if (PACOpt ==
"b-key")
172 else if (PACOpt ==
"pc")
static GCRegistry::Add< ErlangGC > A("erlang", "erlang-compatible garbage collector")
This file defines the SmallVector class.
This file implements the StringSwitch template, which mimics a switch() statement whose cases are str...
Lightweight error class with error context and mandatory checking.
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
StringRef - Represent a constant reference to a string, i.e.
bool starts_with(StringRef Prefix) const
Check if this string starts with the given Prefix.
bool ends_with(StringRef Suffix) const
Check if this string ends with the given Suffix.
static constexpr size_t npos
A switch()-like statement whose cases are string literals.
StringSwitch & Case(StringLiteral S, T Value)
StringSwitch & StartsWith(StringLiteral S, T Value)
StringSwitch & Cases(StringLiteral S0, StringLiteral S1, T Value)
StringRef getCanonicalArchName(StringRef Arch)
MArch is expected to be of the form (arm|thumb)?(eb)?(v.
ISAKind parseArchISA(StringRef Arch)
StringRef getArchSynonym(StringRef Arch)
Converts e.g. "armv8" -> "armv8-a".
bool parseBranchProtection(StringRef Spec, ParsedBranchProtection &PBP, StringRef &Err, bool EnablePAuthLR=false)
EndianKind parseArchEndian(StringRef Arch)
This is an optimization pass for GlobalISel generic memory operations.
bool BranchTargetEnforcement
bool BranchProtectionPAuthLR