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(
"v8m.base",
"v8-m.base")
49 .
Case(
"v8m.main",
"v8-m.main")
50 .
Case(
"v8.1m.main",
"v8.1-m.main")
60 if (
A.starts_with(
"arm64_32"))
62 else if (
A.starts_with(
"arm64e"))
64 else if (
A.starts_with(
"arm64"))
66 else if (
A.starts_with(
"aarch64_32"))
68 else if (
A.starts_with(
"arm"))
70 else if (
A.starts_with(
"thumb"))
72 else if (
A.starts_with(
"aarch64")) {
77 if (
A.substr(offset, 3) ==
"_be")
85 else if (
A.ends_with(
"eb"))
86 A =
A.substr(0,
A.size() - 2);
98 if (
A.size() >= 2 && (
A[0] !=
'v' || !std::isdigit(
A[1])))
101 if (
A.contains(
"eb"))
121 return EndianKind::BIG;
125 return EndianKind::BIG;
127 return EndianKind::LITTLE;
131 return EndianKind::LITTLE;
133 return EndianKind::INVALID;
143 PBP = {
"none",
"a_key",
false,
false,
false};
147 if (
Spec ==
"standard") {
148 PBP.
Scope =
"non-leaf";
156 Spec.split(Opts,
"+");
157 for (
int I = 0, E = Opts.
size();
I != E; ++
I) {
163 if (Opt ==
"pac-ret") {
164 PBP.
Scope =
"non-leaf";
165 for (;
I + 1 != E; ++
I) {
167 if (PACOpt ==
"leaf")
169 else if (PACOpt ==
"b-key")
171 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