26      .
Case(
"thumb,arm", 
"arm,thumb")
 
 
   35    if (
A.Name.ends_with(Syn))
 
   38  return ArchKind::INVALID;
 
 
   46  case ArchKind::ARMV4T:
 
   48  case ArchKind::ARMV5T:
 
   49  case ArchKind::ARMV5TE:
 
   50  case ArchKind::IWMMXT:
 
   51  case ArchKind::IWMMXT2:
 
   52  case ArchKind::XSCALE:
 
   53  case ArchKind::ARMV5TEJ:
 
   56  case ArchKind::ARMV6K:
 
   57  case ArchKind::ARMV6T2:
 
   58  case ArchKind::ARMV6KZ:
 
   59  case ArchKind::ARMV6M:
 
   61  case ArchKind::ARMV7A:
 
   62  case ArchKind::ARMV7VE:
 
   63  case ArchKind::ARMV7R:
 
   64  case ArchKind::ARMV7M:
 
   65  case ArchKind::ARMV7S:
 
   66  case ArchKind::ARMV7EM:
 
   67  case ArchKind::ARMV7K:
 
   69  case ArchKind::ARMV8A:
 
   70  case ArchKind::ARMV8_1A:
 
   71  case ArchKind::ARMV8_2A:
 
   72  case ArchKind::ARMV8_3A:
 
   73  case ArchKind::ARMV8_4A:
 
   74  case ArchKind::ARMV8_5A:
 
   75  case ArchKind::ARMV8_6A:
 
   76  case ArchKind::ARMV8_7A:
 
   77  case ArchKind::ARMV8_8A:
 
   78  case ArchKind::ARMV8_9A:
 
   79  case ArchKind::ARMV8R:
 
   80  case ArchKind::ARMV8MBaseline:
 
   81  case ArchKind::ARMV8MMainline:
 
   82  case ArchKind::ARMV8_1MMainline:
 
   84  case ArchKind::ARMV9A:
 
   85  case ArchKind::ARMV9_1A:
 
   86  case ArchKind::ARMV9_2A:
 
   87  case ArchKind::ARMV9_3A:
 
   88  case ArchKind::ARMV9_4A:
 
   89  case ArchKind::ARMV9_5A:
 
   90  case ArchKind::ARMV9_6A:
 
   91  case ArchKind::ARMV9_7A:
 
   93  case ArchKind::INVALID:
 
 
  101  case ARM::ArchKind::ARMV6M:
 
  102  case ARM::ArchKind::ARMV7M:
 
  103  case ARM::ArchKind::ARMV7EM:
 
  104  case ARM::ArchKind::ARMV8MMainline:
 
  105  case ARM::ArchKind::ARMV8MBaseline:
 
  106  case ARM::ArchKind::ARMV8_1MMainline:
 
  108  case ARM::ArchKind::ARMV7R:
 
  109  case ARM::ArchKind::ARMV8R:
 
  111  case ARM::ArchKind::ARMV7A:
 
  112  case ARM::ArchKind::ARMV7VE:
 
  113  case ARM::ArchKind::ARMV7K:
 
  114  case ARM::ArchKind::ARMV8A:
 
  115  case ARM::ArchKind::ARMV8_1A:
 
  116  case ARM::ArchKind::ARMV8_2A:
 
  117  case ARM::ArchKind::ARMV8_3A:
 
  118  case ARM::ArchKind::ARMV8_4A:
 
  119  case ARM::ArchKind::ARMV8_5A:
 
  120  case ARM::ArchKind::ARMV8_6A:
 
  121  case ARM::ArchKind::ARMV8_7A:
 
  122  case ARM::ArchKind::ARMV8_8A:
 
  123  case ARM::ArchKind::ARMV8_9A:
 
  124  case ARM::ArchKind::ARMV9A:
 
  125  case ARM::ArchKind::ARMV9_1A:
 
  126  case ARM::ArchKind::ARMV9_2A:
 
  127  case ARM::ArchKind::ARMV9_3A:
 
  128  case ARM::ArchKind::ARMV9_4A:
 
  129  case ARM::ArchKind::ARMV9_5A:
 
  130  case ARM::ArchKind::ARMV9_6A:
 
  131  case ARM::ArchKind::ARMV9_7A:
 
  133  case ARM::ArchKind::ARMV4:
 
  134  case ARM::ArchKind::ARMV4T:
 
  135  case ARM::ArchKind::ARMV5T:
 
  136  case ARM::ArchKind::ARMV5TE:
 
  137  case ARM::ArchKind::ARMV5TEJ:
 
  138  case ARM::ArchKind::ARMV6:
 
  139  case ARM::ArchKind::ARMV6K:
 
  140  case ARM::ArchKind::ARMV6T2:
 
  141  case ARM::ArchKind::ARMV6KZ:
 
  142  case ARM::ArchKind::ARMV7S:
 
  143  case ARM::ArchKind::IWMMXT:
 
  144  case ARM::ArchKind::IWMMXT2:
 
  145  case ARM::ArchKind::XSCALE:
 
  146  case ARM::ArchKind::INVALID:
 
 
  159                         std::vector<StringRef> &Features) {
 
  164  static const struct FPUFeatureNameInfo {
 
  165    const char *PlusName, *MinusName;
 
  168  } FPUFeatureInfoList[] = {
 
  196  for (
const auto &Info: FPUFeatureInfoList) {
 
  199      Features.push_back(Info.PlusName);
 
  201      Features.push_back(Info.MinusName);
 
  204  static const struct NeonFeatureNameInfo {
 
  205    const char *PlusName, *MinusName;
 
  207  } NeonFeatureInfoList[] = {
 
  213  for (
const auto &Info: NeonFeatureInfoList) {
 
  215      Features.push_back(Info.PlusName);
 
  217      Features.push_back(Info.MinusName);
 
 
  240      .
Cases({
"fpa", 
"fpe2", 
"fpe3", 
"maverick"}, 
"invalid") 
 
  241      .Case(
"vfp2", 
"vfpv2")
 
  242      .
Case(
"vfp3", 
"vfpv3")
 
  243      .
Case(
"vfp4", 
"vfpv4")
 
  244      .
Case(
"vfp3-d16", 
"vfpv3-d16")
 
  245      .
Case(
"vfp4-d16", 
"vfpv4-d16")
 
  246      .
Cases({
"fp4-sp-d16", 
"vfpv4-sp-d16"}, 
"fpv4-sp-d16")
 
  247      .Cases({
"fp4-dp-d16", 
"fpv4-dp-d16"}, 
"vfpv4-d16")
 
  248      .Case(
"fp5-sp-d16", 
"fpv5-sp-d16")
 
  249      .
Cases({
"fp5-dp-d16", 
"fpv5-dp-d16"}, 
"fpv5-d16")
 
  251      .Case(
"neon-vfpv3", 
"neon")
 
 
  274  if (CPU == 
"generic")
 
  278#define ARM_CPU_NAME(NAME, ID, DEFAULT_FPU, IS_DEFAULT, DEFAULT_EXT)           \ 
  279  .Case(NAME, DEFAULT_FPU) 
  280#include "llvm/TargetParser/ARMTargetParser.def" 
 
  285  if (CPU == 
"generic")
 
  289#define ARM_CPU_NAME(NAME, ID, DEFAULT_FPU, IS_DEFAULT, DEFAULT_EXT)           \ 
  291        ARMArchNames[static_cast<unsigned>(ArchKind::ID)].ArchBaseExtensions | \ 
  293#include "llvm/TargetParser/ARMTargetParser.def" 
 
  298                           std::vector<StringRef> &Features) {
 
  304    Features.push_back(
"+hwdiv-arm");
 
  306    Features.push_back(
"-hwdiv-arm");
 
  309    Features.push_back(
"+hwdiv");
 
  311    Features.push_back(
"-hwdiv");
 
 
  317                               std::vector<StringRef> &Features) {
 
  323    if ((
Extensions & AE.ID) == AE.ID && !AE.Feature.empty())
 
  324      Features.push_back(AE.Feature);
 
  325    else if (!AE.NegFeature.empty())
 
  326      Features.push_back(AE.NegFeature);
 
 
  345  return ARMArchNames[
static_cast<unsigned>(AK)].ArchAttr;
 
 
  357  return Name.consume_front(
"no");
 
 
  363    if (!AE.Feature.empty() && ArchExt == AE.Name)
 
  364      return StringRef(Negated ? AE.NegFeature : AE.Feature);
 
 
  371  if (InputFPUKind == ARM::FK_INVALID || InputFPUKind == ARM::FK_NONE)
 
  372    return ARM::FK_INVALID;
 
  384    if (CandidateFPU.FPUVer == InputFPU.
FPUVer &&
 
  385        CandidateFPU.NeonSupport == InputFPU.
NeonSupport &&
 
  389      return CandidateFPU.ID;
 
  394  return ARM::FK_INVALID;
 
 
  398  if (InputFPUKind == ARM::FK_INVALID || InputFPUKind == ARM::FK_NONE)
 
  399    return ARM::FK_INVALID;
 
  413    if (CandidateFPU.FPUVer == InputFPU.
FPUVer &&
 
  415      return CandidateFPU.ID;
 
  420  return ARM::FK_INVALID;
 
 
  425                                std::vector<StringRef> &Features,
 
  428  size_t StartingNumFeatures = Features.size();
 
  437      if ((AE.ID & 
ID) == 
ID && !AE.NegFeature.empty())
 
  438        Features.push_back(AE.NegFeature);
 
  440      if ((AE.ID & 
ID) == AE.ID && !AE.Feature.empty())
 
  441        Features.push_back(AE.Feature);
 
  448  if (ArchExt == 
"fp" || ArchExt == 
"fp.dp") {
 
  451    if (ArchExt == 
"fp.dp") {
 
  452      const bool IsDP = ArgFPUKind != ARM::FK_INVALID &&
 
  453                        ArgFPUKind != ARM::FK_NONE &&
 
  459        if (ArgFPUKind != ARM::FK_INVALID && !IsDP)
 
  462        if (
FPUKind == ARM::FK_INVALID)
 
  468        if (
FPUKind == ARM::FK_INVALID)
 
  471    } 
else if (Negated) {
 
  479  return StartingNumFeatures != Features.size();
 
 
  484    return ARM::ArchKind::INVALID;
 
  485  if (AK < ARM::ArchKind::ARMV9A || AK > ARM::ArchKind::ARMV9_3A)
 
  486    return ARM::ArchKind::INVALID;
 
  487  unsigned AK_v8 = 
static_cast<unsigned>(ARM::ArchKind::ARMV8_5A);
 
  488  AK_v8 += 
static_cast<unsigned>(AK) -
 
  489           static_cast<unsigned>(ARM::ArchKind::ARMV9A);
 
 
  495  if (AK == ArchKind::INVALID)
 
  500    if (CPU.ArchID == AK && CPU.Default)
 
 
  519    if (ArchExt == 
A.Name)
 
 
  530  return ArchKind::INVALID;
 
 
  535    if (Arch.ArchID != ArchKind::INVALID)
 
 
  543  if (
TT.isOSBinFormatMachO()) {
 
  551  } 
else if (
TT.isOSWindows())
 
  556  switch (
TT.getEnvironment()) {
 
  565    return "aapcs-linux";
 
  572    if (
TT.isOSFreeBSD() || 
TT.isOSFuchsia() || 
TT.isOSOpenBSD() ||
 
  573        TT.isOSHaiku() || 
TT.isOHOSFamily())
 
  574      return "aapcs-linux";
 
 
  583  if (ABIName == 
"aapcs16")
 
 
  606    if (!MArch.
empty() && MArch == 
"v6")
 
  607      return "arm1176jzf-s";
 
  608    if (!MArch.
empty() && MArch == 
"v7")
 
  633  if (!CPU.empty() && CPU != 
"invalid")
 
  640    return "arm1176jzf-s";
 
  661      return "arm1176jzf-s";
 
 
  671  outs() << 
"All available -march extensions for ARM\n\n" 
  673         << (DescMap.
empty() ? 
"\n" : 
"Description\n");
 
  676    if (!Ext.Feature.empty()) {
 
  677      std::string Description = DescMap[Ext.Name].str();
 
  680      if (Ext.Name == 
"simd")
 
  681        Description = DescMap[
"neon"].str();
 
  683             << 
format(Description.empty() ? 
"%s\n" : 
"%-20s%s\n",
 
  684                       Ext.Name.str().c_str(), Description.c_str());
 
 
static ARM::FPUKind findSinglePrecisionFPU(ARM::FPUKind InputFPUKind)
 
static StringRef getHWDivSynonym(StringRef HWDiv)
 
static bool stripNegationPrefix(StringRef &Name)
 
static ARM::ProfileKind getProfileKind(ARM::ArchKind AK)
 
static ARM::FPUKind findDoublePrecisionFPU(ARM::FPUKind InputFPUKind)
 
static GCRegistry::Add< StatepointGC > D("statepoint-example", "an example strategy for statepoint")
 
static cl::opt< std::set< SPIRV::Extension::Extension >, false, SPIRVExtensionsParser > Extensions("spirv-ext", cl::desc("Specify list of enabled SPIR-V extensions"))
 
This file implements the StringSwitch template, which mimics a switch() statement whose cases are str...
 
static Triple::ArchType parseArch(StringRef ArchName)
 
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
 
void push_back(const T &Elt)
 
StringMap - This is an unconventional map that is specialized for handling keys that are "strings",...
 
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.
 
constexpr bool empty() const
empty - Check if the string is empty.
 
A switch()-like statement whose cases are string literals.
 
StringSwitch & Case(StringLiteral S, T Value)
 
StringSwitch & Cases(std::initializer_list< StringLiteral > CaseStrings, T Value)
 
Triple - Helper class for working with autoconf configuration names.
 
OSType getOS() const
Get the parsed operating system type of this triple.
 
EnvironmentType getEnvironment() const
Get the parsed environment type of this triple.
 
LLVM_ABI StringRef getArchName() const
Get the architecture (first) component of the triple.
 
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
 
constexpr struct llvm::ARM::@324103115345140202011004052154345301224214323271 HWDivNames[]
 
LLVM_ABI StringRef getArchExtName(uint64_t ArchExtKind)
 
LLVM_ABI StringRef getFPUSynonym(StringRef FPU)
 
LLVM_ABI bool getFPUFeatures(FPUKind FPUKind, std::vector< StringRef > &Features)
 
LLVM_ABI StringRef getCanonicalArchName(StringRef Arch)
MArch is expected to be of the form (arm|thumb)?(eb)?(v.
 
LLVM_ABI uint64_t parseHWDiv(StringRef HWDiv)
 
LLVM_ABI StringRef getCPUAttr(ArchKind AK)
 
LLVM_ABI StringRef getArchName(ArchKind AK)
 
LLVM_ABI void fillValidCPUArchList(SmallVectorImpl< StringRef > &Values)
 
LLVM_ABI LLVM_READONLY ARMABI computeTargetABI(const Triple &TT, StringRef ABIName="")
 
LLVM_ABI uint64_t parseArchExt(StringRef ArchExt)
 
LLVM_ABI ArchKind convertV9toV8(ArchKind AK)
 
LLVM_ABI LLVM_READONLY StringRef computeDefaultTargetABI(const Triple &TT)
 
@ Crypto
Neon with Crypto.
 
LLVM_ABI ArchKind parseArch(StringRef Arch)
 
LLVM_ABI FPURestriction getFPURestriction(FPUKind FPUKind)
 
LLVM_ABI bool appendArchExtFeatures(StringRef CPU, ARM::ArchKind AK, StringRef ArchExt, std::vector< StringRef > &Features, FPUKind &ArgFPUKind)
 
LLVM_ABI StringRef getArchSynonym(StringRef Arch)
Converts e.g. "armv8" -> "armv8-a".
 
static constexpr FPUName FPUNames[]
 
LLVM_ABI StringRef getDefaultCPU(StringRef Arch)
 
LLVM_ABI StringRef getArchExtFeature(StringRef ArchExt)
 
LLVM_ABI ProfileKind parseArchProfile(StringRef Arch)
 
LLVM_ABI FPUKind parseFPU(StringRef FPU)
 
LLVM_ABI StringRef getSubArch(ArchKind AK)
 
LLVM_ABI StringRef getARMCPUForArch(const llvm::Triple &Triple, StringRef MArch={})
Get the (LLVM) name of the minimum ARM CPU for the arch we are targeting.
 
LLVM_ABI unsigned parseArchVersion(StringRef Arch)
 
bool has32Regs(const FPURestriction restriction)
 
LLVM_ABI NeonSupportLevel getFPUNeonSupportLevel(FPUKind FPUKind)
 
LLVM_ABI ArchKind parseCPUArch(StringRef CPU)
 
bool isDoublePrecision(const FPURestriction restriction)
 
constexpr ExtName ARCHExtNames[]
 
LLVM_ABI unsigned getArchAttr(ArchKind AK)
 
LLVM_ABI StringRef getFPUName(FPUKind FPUKind)
 
LLVM_ABI FPUVersion getFPUVersion(FPUKind FPUKind)
 
LLVM_ABI bool getHWDivFeatures(uint64_t HWDivKind, std::vector< StringRef > &Features)
 
@ SP_D16
Only single-precision instructions, with 16 D registers.
 
@ D16
Only 16 D registers.
 
LLVM_ABI uint64_t getDefaultExtensions(StringRef CPU, ArchKind AK)
 
LLVM_ABI FPUKind getDefaultFPU(StringRef CPU, ArchKind AK)
 
LLVM_ABI bool getExtensionFeatures(uint64_t Extensions, std::vector< StringRef > &Features)
 
static constexpr ArchNames ARMArchNames[]
 
constexpr CpuNames CPUNames[]
 
LLVM_ABI void PrintSupportedExtensions(StringMap< StringRef > DescMap)
 
@ C
The default llvm calling convention, compatible with C.
 
This is an optimization pass for GlobalISel generic memory operations.
 
LLVM_ABI raw_fd_ostream & outs()
This returns a reference to a raw_fd_ostream for standard output.
 
format_object< Ts... > format(const char *Fmt, const Ts &... Vals)
These are helper functions used to produce formatted output.
 
FormattedString left_justify(StringRef Str, unsigned Width)
left_justify - append spaces after string so total output is Width characters.
 
FPURestriction Restriction
 
NeonSupportLevel NeonSupport