270 changes: 135 additions & 135 deletions llvm/include/llvm/Support/ARMTargetParser.def

Large diffs are not rendered by default.

112 changes: 55 additions & 57 deletions llvm/include/llvm/Support/TargetParser.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,42 +31,41 @@ class StringRef;
// back-end to TableGen to create these clean tables.
namespace ARM {

// FPU names.
enum FPUKind {
#define ARM_FPU(NAME, KIND, VERSION, NEON_SUPPORT, RESTRICTION) KIND,
#include "ARMTargetParser.def"
FK_LAST
// FPU Version
enum class FPUVersion {
NONE,
VFPV2,
VFPV3,
VFPV3_FP16,
VFPV4,
VFPV5
};

// FPU Version
enum FPUVersion {
FV_NONE = 0,
FV_VFPV2,
FV_VFPV3,
FV_VFPV3_FP16,
FV_VFPV4,
FV_VFPV5
// An FPU name restricts the FPU in one of three ways:
enum class FPURestriction {
None = 0, ///< No restriction
D16, ///< Only 16 D registers
SP_D16 ///< Only single-precision instructions, with 16 D registers
};

// An FPU name implies one of three levels of Neon support:
enum NeonSupportLevel {
NS_None = 0, ///< No Neon
NS_Neon, ///< Neon
NS_Crypto ///< Neon with Crypto
enum class NeonSupportLevel {
None = 0, ///< No Neon
Neon, ///< Neon
Crypto ///< Neon with Crypto
};

// An FPU name restricts the FPU in one of three ways:
enum FPURestriction {
FR_None = 0, ///< No restriction
FR_D16, ///< Only 16 D registers
FR_SP_D16 ///< Only single-precision instructions, with 16 D registers
// FPU names.
enum FPUKind {
#define ARM_FPU(NAME, KIND, VERSION, NEON_SUPPORT, RESTRICTION) KIND,
#include "ARMTargetParser.def"
FK_LAST
};

// Arch names.
enum ArchKind {
enum class ArchKind {
#define ARM_ARCH(NAME, ID, CPU_ATTR, SUB_ARCH, ARCH_ATTR, ARCH_FPU, ARCH_BASE_EXT) ID,
#include "ARMTargetParser.def"
AK_LAST
};

// Arch extension modifiers for CPUs.
Expand Down Expand Up @@ -95,51 +94,51 @@ enum ArchExtKind : unsigned {
};

// ISA kinds.
enum ISAKind { IK_INVALID = 0, IK_ARM, IK_THUMB, IK_AARCH64 };
enum class ISAKind { INVALID = 0, ARM, THUMB, AARCH64 };

// Endianness
// FIXME: BE8 vs. BE32?
enum EndianKind { EK_INVALID = 0, EK_LITTLE, EK_BIG };
enum class EndianKind { INVALID = 0, LITTLE, BIG };

// v6/v7/v8 Profile
enum ProfileKind { PK_INVALID = 0, PK_A, PK_R, PK_M };
enum class ProfileKind { INVALID = 0, A, R, M };

StringRef getCanonicalArchName(StringRef Arch);

// Information by ID
StringRef getFPUName(unsigned FPUKind);
unsigned getFPUVersion(unsigned FPUKind);
unsigned getFPUNeonSupportLevel(unsigned FPUKind);
unsigned getFPURestriction(unsigned FPUKind);
FPUVersion getFPUVersion(unsigned FPUKind);
NeonSupportLevel getFPUNeonSupportLevel(unsigned FPUKind);
FPURestriction getFPURestriction(unsigned FPUKind);

// FIXME: These should be moved to TargetTuple once it exists
bool getFPUFeatures(unsigned FPUKind, std::vector<StringRef> &Features);
bool getHWDivFeatures(unsigned HWDivKind, std::vector<StringRef> &Features);
bool getExtensionFeatures(unsigned Extensions,
std::vector<StringRef> &Features);

StringRef getArchName(unsigned ArchKind);
unsigned getArchAttr(unsigned ArchKind);
StringRef getCPUAttr(unsigned ArchKind);
StringRef getSubArch(unsigned ArchKind);
StringRef getArchName(ArchKind AK);
unsigned getArchAttr(ArchKind AK);
StringRef getCPUAttr(ArchKind AK);
StringRef getSubArch(ArchKind AK);
StringRef getArchExtName(unsigned ArchExtKind);
StringRef getArchExtFeature(StringRef ArchExt);
StringRef getHWDivName(unsigned HWDivKind);

// Information by Name
unsigned getDefaultFPU(StringRef CPU, unsigned ArchKind);
unsigned getDefaultExtensions(StringRef CPU, unsigned ArchKind);
unsigned getDefaultFPU(StringRef CPU, ArchKind AK);
unsigned getDefaultExtensions(StringRef CPU, ArchKind AK);
StringRef getDefaultCPU(StringRef Arch);

// Parser
unsigned parseHWDiv(StringRef HWDiv);
unsigned parseFPU(StringRef FPU);
unsigned parseArch(StringRef Arch);
ArchKind parseArch(StringRef Arch);
unsigned parseArchExt(StringRef ArchExt);
unsigned parseCPUArch(StringRef CPU);
unsigned parseArchISA(StringRef Arch);
unsigned parseArchEndian(StringRef Arch);
unsigned parseArchProfile(StringRef Arch);
ArchKind parseCPUArch(StringRef CPU);
ISAKind parseArchISA(StringRef Arch);
EndianKind parseArchEndian(StringRef Arch);
ProfileKind parseArchProfile(StringRef Arch);
unsigned parseArchVersion(StringRef Arch);

StringRef computeDefaultTargetABI(const Triple &TT, StringRef CPU);
Expand All @@ -153,7 +152,6 @@ namespace AArch64 {
enum class ArchKind {
#define AARCH64_ARCH(NAME, ID, CPU_ATTR, SUB_ARCH, ARCH_ATTR, ARCH_FPU, ARCH_BASE_EXT) ID,
#include "AArch64TargetParser.def"
AK_LAST
};

// Arch extension modifiers for CPUs.
Expand All @@ -175,37 +173,37 @@ StringRef getCanonicalArchName(StringRef Arch);

// Information by ID
StringRef getFPUName(unsigned FPUKind);
unsigned getFPUVersion(unsigned FPUKind);
unsigned getFPUNeonSupportLevel(unsigned FPUKind);
unsigned getFPURestriction(unsigned FPUKind);
ARM::FPUVersion getFPUVersion(unsigned FPUKind);
ARM::NeonSupportLevel getFPUNeonSupportLevel(unsigned FPUKind);
ARM::FPURestriction getFPURestriction(unsigned FPUKind);

// FIXME: These should be moved to TargetTuple once it exists
bool getFPUFeatures(unsigned FPUKind, std::vector<StringRef> &Features);
bool getExtensionFeatures(unsigned Extensions,
std::vector<StringRef> &Features);
bool getArchFeatures(unsigned ArchKind, std::vector<StringRef> &Features);
bool getArchFeatures(ArchKind AK, std::vector<StringRef> &Features);

StringRef getArchName(unsigned ArchKind);
unsigned getArchAttr(unsigned ArchKind);
StringRef getCPUAttr(unsigned ArchKind);
StringRef getSubArch(unsigned ArchKind);
StringRef getArchName(ArchKind AK);
unsigned getArchAttr(ArchKind AK);
StringRef getCPUAttr(ArchKind AK);
StringRef getSubArch(ArchKind AK);
StringRef getArchExtName(unsigned ArchExtKind);
StringRef getArchExtFeature(StringRef ArchExt);
unsigned checkArchVersion(StringRef Arch);

// Information by Name
unsigned getDefaultFPU(StringRef CPU, unsigned ArchKind);
unsigned getDefaultExtensions(StringRef CPU, unsigned ArchKind);
unsigned getDefaultFPU(StringRef CPU, ArchKind AK);
unsigned getDefaultExtensions(StringRef CPU, ArchKind AK);
StringRef getDefaultCPU(StringRef Arch);

// Parser
unsigned parseFPU(StringRef FPU);
unsigned parseArch(StringRef Arch);
AArch64::ArchKind parseArch(StringRef Arch);
unsigned parseArchExt(StringRef ArchExt);
unsigned parseCPUArch(StringRef CPU);
unsigned parseArchISA(StringRef Arch);
unsigned parseArchEndian(StringRef Arch);
unsigned parseArchProfile(StringRef Arch);
ArchKind parseCPUArch(StringRef CPU);
ARM::ISAKind parseArchISA(StringRef Arch);
ARM::EndianKind parseArchEndian(StringRef Arch);
ARM::ProfileKind parseArchProfile(StringRef Arch);
unsigned parseArchVersion(StringRef Arch);

} // namespace AArch64
Expand Down
317 changes: 161 additions & 156 deletions llvm/lib/Support/TargetParser.cpp

Large diffs are not rendered by default.

89 changes: 48 additions & 41 deletions llvm/lib/Support/Triple.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -307,55 +307,62 @@ Triple::ArchType Triple::getArchTypeForLLVMName(StringRef Name) {
}

static Triple::ArchType parseARMArch(StringRef ArchName) {
unsigned ISA = ARM::parseArchISA(ArchName);
unsigned ENDIAN = ARM::parseArchEndian(ArchName);
ARM::ISAKind ISA = ARM::parseArchISA(ArchName);
ARM::EndianKind ENDIAN = ARM::parseArchEndian(ArchName);

Triple::ArchType arch = Triple::UnknownArch;
switch (ENDIAN) {
case ARM::EK_LITTLE: {
case ARM::EndianKind::LITTLE: {
switch (ISA) {
case ARM::IK_ARM:
case ARM::ISAKind::ARM:
arch = Triple::arm;
break;
case ARM::IK_THUMB:
case ARM::ISAKind::THUMB:
arch = Triple::thumb;
break;
case ARM::IK_AARCH64:
case ARM::ISAKind::AARCH64:
arch = Triple::aarch64;
break;
case ARM::ISAKind::INVALID:
break;
}
break;
}
case ARM::EK_BIG: {
case ARM::EndianKind::BIG: {
switch (ISA) {
case ARM::IK_ARM:
case ARM::ISAKind::ARM:
arch = Triple::armeb;
break;
case ARM::IK_THUMB:
case ARM::ISAKind::THUMB:
arch = Triple::thumbeb;
break;
case ARM::IK_AARCH64:
case ARM::ISAKind::AARCH64:
arch = Triple::aarch64_be;
break;
case ARM::ISAKind::INVALID:
break;
}
break;
}
case ARM::EndianKind::INVALID: {
break;
}
}

ArchName = ARM::getCanonicalArchName(ArchName);
if (ArchName.empty())
return Triple::UnknownArch;

// Thumb only exists in v4+
if (ISA == ARM::IK_THUMB &&
if (ISA == ARM::ISAKind::THUMB &&
(ArchName.startswith("v2") || ArchName.startswith("v3")))
return Triple::UnknownArch;

// Thumb only for v6m
unsigned Profile = ARM::parseArchProfile(ArchName);
ARM::ProfileKind Profile = ARM::parseArchProfile(ArchName);
unsigned Version = ARM::parseArchVersion(ArchName);
if (Profile == ARM::PK_M && Version == 6) {
if (ENDIAN == ARM::EK_BIG)
if (Profile == ARM::ProfileKind::M && Version == 6) {
if (ENDIAN == ARM::EndianKind::BIG)
return Triple::thumbeb;
else
return Triple::thumb;
Expand Down Expand Up @@ -534,51 +541,51 @@ static Triple::SubArchType parseSubArch(StringRef SubArchName) {

// ARM sub arch.
switch(ARM::parseArch(ARMSubArch)) {
case ARM::AK_ARMV4:
case ARM::ArchKind::ARMV4:
return Triple::NoSubArch;
case ARM::AK_ARMV4T:
case ARM::ArchKind::ARMV4T:
return Triple::ARMSubArch_v4t;
case ARM::AK_ARMV5T:
case ARM::ArchKind::ARMV5T:
return Triple::ARMSubArch_v5;
case ARM::AK_ARMV5TE:
case ARM::AK_IWMMXT:
case ARM::AK_IWMMXT2:
case ARM::AK_XSCALE:
case ARM::AK_ARMV5TEJ:
case ARM::ArchKind::ARMV5TE:
case ARM::ArchKind::IWMMXT:
case ARM::ArchKind::IWMMXT2:
case ARM::ArchKind::XSCALE:
case ARM::ArchKind::ARMV5TEJ:
return Triple::ARMSubArch_v5te;
case ARM::AK_ARMV6:
case ARM::ArchKind::ARMV6:
return Triple::ARMSubArch_v6;
case ARM::AK_ARMV6K:
case ARM::AK_ARMV6KZ:
case ARM::ArchKind::ARMV6K:
case ARM::ArchKind::ARMV6KZ:
return Triple::ARMSubArch_v6k;
case ARM::AK_ARMV6T2:
case ARM::ArchKind::ARMV6T2:
return Triple::ARMSubArch_v6t2;
case ARM::AK_ARMV6M:
case ARM::ArchKind::ARMV6M:
return Triple::ARMSubArch_v6m;
case ARM::AK_ARMV7A:
case ARM::AK_ARMV7R:
case ARM::ArchKind::ARMV7A:
case ARM::ArchKind::ARMV7R:
return Triple::ARMSubArch_v7;
case ARM::AK_ARMV7VE:
case ARM::ArchKind::ARMV7VE:
return Triple::ARMSubArch_v7ve;
case ARM::AK_ARMV7K:
case ARM::ArchKind::ARMV7K:
return Triple::ARMSubArch_v7k;
case ARM::AK_ARMV7M:
case ARM::ArchKind::ARMV7M:
return Triple::ARMSubArch_v7m;
case ARM::AK_ARMV7S:
case ARM::ArchKind::ARMV7S:
return Triple::ARMSubArch_v7s;
case ARM::AK_ARMV7EM:
case ARM::ArchKind::ARMV7EM:
return Triple::ARMSubArch_v7em;
case ARM::AK_ARMV8A:
case ARM::ArchKind::ARMV8A:
return Triple::ARMSubArch_v8;
case ARM::AK_ARMV8_1A:
case ARM::ArchKind::ARMV8_1A:
return Triple::ARMSubArch_v8_1a;
case ARM::AK_ARMV8_2A:
case ARM::ArchKind::ARMV8_2A:
return Triple::ARMSubArch_v8_2a;
case ARM::AK_ARMV8R:
case ARM::ArchKind::ARMV8R:
return Triple::ARMSubArch_v8r;
case ARM::AK_ARMV8MBaseline:
case ARM::ArchKind::ARMV8MBaseline:
return Triple::ARMSubArch_v8m_baseline;
case ARM::AK_ARMV8MMainline:
case ARM::ArchKind::ARMV8MMainline:
return Triple::ARMSubArch_v8m_mainline;
default:
return Triple::NoSubArch;
Expand Down Expand Up @@ -1550,7 +1557,7 @@ StringRef Triple::getARMCPUForArch(StringRef MArch) const {
return StringRef();

StringRef CPU = ARM::getDefaultCPU(MArch);
if (!CPU.empty())
if (!CPU.empty() && !CPU.equals("invalid"))
return CPU;

// If no specific architecture version is requested, return the minimum CPU
Expand Down
4 changes: 2 additions & 2 deletions llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3862,8 +3862,8 @@ bool AArch64AsmParser::parseDirectiveArch(SMLoc L) {
std::tie(Arch, ExtensionString) =
getParser().parseStringToEndOfStatement().trim().split('+');

unsigned ID = AArch64::parseArch(Arch);
if (ID == static_cast<unsigned>(AArch64::ArchKind::AK_INVALID))
AArch64::ArchKind ID = AArch64::parseArch(Arch);
if (ID == AArch64::ArchKind::INVALID)
return Error(ArchLoc, "unknown arch name");

if (parseToken(AsmToken::EndOfStatement))
Expand Down
6 changes: 3 additions & 3 deletions llvm/lib/Target/ARM/ARMSubtarget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -209,11 +209,11 @@ void ARMSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) {

if (isTargetDarwin()) {
StringRef ArchName = TargetTriple.getArchName();
unsigned ArchKind = ARM::parseArch(ArchName);
if (ArchKind == ARM::AK_ARMV7S)
ARM::ArchKind AK = ARM::parseArch(ArchName);
if (AK == ARM::ArchKind::ARMV7S)
// Default to the Swift CPU when targeting armv7s/thumbv7s.
CPUString = "swift";
else if (ArchKind == ARM::AK_ARMV7K)
else if (AK == ARM::ArchKind::ARMV7K)
// Default to the Cortex-a7 CPU when targeting armv7k/thumbv7k.
// ARMv7k does not use SjLj exception handling.
CPUString = "cortex-a7";
Expand Down
8 changes: 4 additions & 4 deletions llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9419,9 +9419,9 @@ void ARMAsmParser::FixModeAfterArchChange(bool WasThumb, SMLoc Loc) {
/// ::= .arch token
bool ARMAsmParser::parseDirectiveArch(SMLoc L) {
StringRef Arch = getParser().parseStringToEndOfStatement().trim();
unsigned ID = ARM::parseArch(Arch);
ARM::ArchKind ID = ARM::parseArch(Arch);

if (ID == ARM::AK_INVALID)
if (ID == ARM::ArchKind::INVALID)
return Error(L, "Unknown arch name");

bool WasThumb = isThumb();
Expand Down Expand Up @@ -10069,9 +10069,9 @@ bool ARMAsmParser::parseDirectiveObjectArch(SMLoc L) {
SMLoc ArchLoc = Parser.getTok().getLoc();
Lex();

unsigned ID = ARM::parseArch(Arch);
ARM::ArchKind ID = ARM::parseArch(Arch);

if (ID == ARM::AK_INVALID)
if (ID == ARM::ArchKind::INVALID)
return Error(ArchLoc, "unknown architecture '" + Arch + "'");
if (parseToken(AsmToken::EndOfStatement))
return true;
Expand Down
26 changes: 13 additions & 13 deletions llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1127,30 +1127,30 @@ uint32_t ARMAsmBackendDarwin::generateCompactUnwindEncoding(
}

static MachO::CPUSubTypeARM getMachOSubTypeFromArch(StringRef Arch) {
unsigned AK = ARM::parseArch(Arch);
ARM::ArchKind AK = ARM::parseArch(Arch);
switch (AK) {
default:
return MachO::CPU_SUBTYPE_ARM_V7;
case ARM::AK_ARMV4T:
case ARM::ArchKind::ARMV4T:
return MachO::CPU_SUBTYPE_ARM_V4T;
case ARM::AK_ARMV5T:
case ARM::AK_ARMV5TE:
case ARM::AK_ARMV5TEJ:
case ARM::ArchKind::ARMV5T:
case ARM::ArchKind::ARMV5TE:
case ARM::ArchKind::ARMV5TEJ:
return MachO::CPU_SUBTYPE_ARM_V5;
case ARM::AK_ARMV6:
case ARM::AK_ARMV6K:
case ARM::ArchKind::ARMV6:
case ARM::ArchKind::ARMV6K:
return MachO::CPU_SUBTYPE_ARM_V6;
case ARM::AK_ARMV7A:
case ARM::ArchKind::ARMV7A:
return MachO::CPU_SUBTYPE_ARM_V7;
case ARM::AK_ARMV7S:
case ARM::ArchKind::ARMV7S:
return MachO::CPU_SUBTYPE_ARM_V7S;
case ARM::AK_ARMV7K:
case ARM::ArchKind::ARMV7K:
return MachO::CPU_SUBTYPE_ARM_V7K;
case ARM::AK_ARMV6M:
case ARM::ArchKind::ARMV6M:
return MachO::CPU_SUBTYPE_ARM_V6M;
case ARM::AK_ARMV7M:
case ARM::ArchKind::ARMV7M:
return MachO::CPU_SUBTYPE_ARM_V7M;
case ARM::AK_ARMV7EM:
case ARM::ArchKind::ARMV7EM:
return MachO::CPU_SUBTYPE_ARM_V7EM;
}
}
Expand Down
72 changes: 36 additions & 36 deletions llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -92,9 +92,9 @@ class ARMTargetAsmStreamer : public ARMTargetStreamer {
void emitTextAttribute(unsigned Attribute, StringRef String) override;
void emitIntTextAttribute(unsigned Attribute, unsigned IntValue,
StringRef StringValue) override;
void emitArch(unsigned Arch) override;
void emitArch(ARM::ArchKind Arch) override;
void emitArchExtension(unsigned ArchExt) override;
void emitObjectArch(unsigned Arch) override;
void emitObjectArch(ARM::ArchKind Arch) override;
void emitFPU(unsigned FPU) override;
void emitInst(uint32_t Inst, char Suffix = '\0') override;
void finishAttributeSection() override;
Expand Down Expand Up @@ -218,15 +218,15 @@ void ARMTargetAsmStreamer::emitIntTextAttribute(unsigned Attribute,
OS << "\n";
}

void ARMTargetAsmStreamer::emitArch(unsigned Arch) {
void ARMTargetAsmStreamer::emitArch(ARM::ArchKind Arch) {
OS << "\t.arch\t" << ARM::getArchName(Arch) << "\n";
}

void ARMTargetAsmStreamer::emitArchExtension(unsigned ArchExt) {
OS << "\t.arch_extension\t" << ARM::getArchExtName(ArchExt) << "\n";
}

void ARMTargetAsmStreamer::emitObjectArch(unsigned Arch) {
void ARMTargetAsmStreamer::emitObjectArch(ARM::ArchKind Arch) {
OS << "\t.object_arch\t" << ARM::getArchName(Arch) << '\n';
}

Expand Down Expand Up @@ -303,8 +303,8 @@ class ARMTargetELFStreamer : public ARMTargetStreamer {

StringRef CurrentVendor;
unsigned FPU = ARM::FK_INVALID;
unsigned Arch = ARM::AK_INVALID;
unsigned EmittedArch = ARM::AK_INVALID;
ARM::ArchKind Arch = ARM::ArchKind::INVALID;
ARM::ArchKind EmittedArch = ARM::ArchKind::INVALID;
SmallVector<AttributeItem, 64> Contents;

MCSection *AttributeSection = nullptr;
Expand Down Expand Up @@ -404,8 +404,8 @@ class ARMTargetELFStreamer : public ARMTargetStreamer {
void emitTextAttribute(unsigned Attribute, StringRef String) override;
void emitIntTextAttribute(unsigned Attribute, unsigned IntValue,
StringRef StringValue) override;
void emitArch(unsigned Arch) override;
void emitObjectArch(unsigned Arch) override;
void emitArch(ARM::ArchKind Arch) override;
void emitObjectArch(ARM::ArchKind Arch) override;
void emitFPU(unsigned FPU) override;
void emitInst(uint32_t Inst, char Suffix = '\0') override;
void finishAttributeSection() override;
Expand Down Expand Up @@ -776,11 +776,11 @@ void ARMTargetELFStreamer::emitIntTextAttribute(unsigned Attribute,
/* OverwriteExisting= */ true);
}

void ARMTargetELFStreamer::emitArch(unsigned Value) {
void ARMTargetELFStreamer::emitArch(ARM::ArchKind Value) {
Arch = Value;
}

void ARMTargetELFStreamer::emitObjectArch(unsigned Value) {
void ARMTargetELFStreamer::emitObjectArch(ARM::ArchKind Value) {
EmittedArch = Value;
}

Expand All @@ -791,7 +791,7 @@ void ARMTargetELFStreamer::emitArchDefaultAttributes() {
ARM::getCPUAttr(Arch),
false);

if (EmittedArch == ARM::AK_INVALID)
if (EmittedArch == ARM::ArchKind::INVALID)
setAttributeItem(CPU_arch,
ARM::getArchAttr(Arch),
false);
Expand All @@ -801,85 +801,85 @@ void ARMTargetELFStreamer::emitArchDefaultAttributes() {
false);

switch (Arch) {
case ARM::AK_ARMV2:
case ARM::AK_ARMV2A:
case ARM::AK_ARMV3:
case ARM::AK_ARMV3M:
case ARM::AK_ARMV4:
case ARM::ArchKind::ARMV2:
case ARM::ArchKind::ARMV2A:
case ARM::ArchKind::ARMV3:
case ARM::ArchKind::ARMV3M:
case ARM::ArchKind::ARMV4:
setAttributeItem(ARM_ISA_use, Allowed, false);
break;

case ARM::AK_ARMV4T:
case ARM::AK_ARMV5T:
case ARM::AK_ARMV5TE:
case ARM::AK_ARMV6:
case ARM::ArchKind::ARMV4T:
case ARM::ArchKind::ARMV5T:
case ARM::ArchKind::ARMV5TE:
case ARM::ArchKind::ARMV6:
setAttributeItem(ARM_ISA_use, Allowed, false);
setAttributeItem(THUMB_ISA_use, Allowed, false);
break;

case ARM::AK_ARMV6T2:
case ARM::ArchKind::ARMV6T2:
setAttributeItem(ARM_ISA_use, Allowed, false);
setAttributeItem(THUMB_ISA_use, AllowThumb32, false);
break;

case ARM::AK_ARMV6K:
case ARM::AK_ARMV6KZ:
case ARM::ArchKind::ARMV6K:
case ARM::ArchKind::ARMV6KZ:
setAttributeItem(ARM_ISA_use, Allowed, false);
setAttributeItem(THUMB_ISA_use, Allowed, false);
setAttributeItem(Virtualization_use, AllowTZ, false);
break;

case ARM::AK_ARMV6M:
case ARM::ArchKind::ARMV6M:
setAttributeItem(THUMB_ISA_use, Allowed, false);
break;

case ARM::AK_ARMV7A:
case ARM::ArchKind::ARMV7A:
setAttributeItem(CPU_arch_profile, ApplicationProfile, false);
setAttributeItem(ARM_ISA_use, Allowed, false);
setAttributeItem(THUMB_ISA_use, AllowThumb32, false);
break;

case ARM::AK_ARMV7R:
case ARM::ArchKind::ARMV7R:
setAttributeItem(CPU_arch_profile, RealTimeProfile, false);
setAttributeItem(ARM_ISA_use, Allowed, false);
setAttributeItem(THUMB_ISA_use, AllowThumb32, false);
break;

case ARM::AK_ARMV7M:
case ARM::ArchKind::ARMV7M:
setAttributeItem(CPU_arch_profile, MicroControllerProfile, false);
setAttributeItem(THUMB_ISA_use, AllowThumb32, false);
break;

case ARM::AK_ARMV8A:
case ARM::AK_ARMV8_1A:
case ARM::AK_ARMV8_2A:
case ARM::ArchKind::ARMV8A:
case ARM::ArchKind::ARMV8_1A:
case ARM::ArchKind::ARMV8_2A:
setAttributeItem(CPU_arch_profile, ApplicationProfile, false);
setAttributeItem(ARM_ISA_use, Allowed, false);
setAttributeItem(THUMB_ISA_use, AllowThumb32, false);
setAttributeItem(MPextension_use, Allowed, false);
setAttributeItem(Virtualization_use, AllowTZVirtualization, false);
break;

case ARM::AK_ARMV8MBaseline:
case ARM::AK_ARMV8MMainline:
case ARM::ArchKind::ARMV8MBaseline:
case ARM::ArchKind::ARMV8MMainline:
setAttributeItem(THUMB_ISA_use, AllowThumbDerived, false);
setAttributeItem(CPU_arch_profile, MicroControllerProfile, false);
break;

case ARM::AK_IWMMXT:
case ARM::ArchKind::IWMMXT:
setAttributeItem(ARM_ISA_use, Allowed, false);
setAttributeItem(THUMB_ISA_use, Allowed, false);
setAttributeItem(WMMX_arch, AllowWMMXv1, false);
break;

case ARM::AK_IWMMXT2:
case ARM::ArchKind::IWMMXT2:
setAttributeItem(ARM_ISA_use, Allowed, false);
setAttributeItem(THUMB_ISA_use, Allowed, false);
setAttributeItem(WMMX_arch, AllowWMMXv2, false);
break;

default:
report_fatal_error("Unknown Arch: " + Twine(Arch));
report_fatal_error("Unknown Arch: " + Twine(ARM::getArchName(Arch)));
break;
}
}
Expand Down Expand Up @@ -1057,7 +1057,7 @@ void ARMTargetELFStreamer::finishAttributeSection() {
if (FPU != ARM::FK_INVALID)
emitFPUDefaultAttributes();

if (Arch != ARM::AK_INVALID)
if (Arch != ARM::ArchKind::INVALID)
emitArchDefaultAttributes();

if (Contents.empty())
Expand Down
4 changes: 2 additions & 2 deletions llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -136,8 +136,8 @@ std::string ARM_MC::ParseARMTriple(const Triple &TT, StringRef CPU) {

std::string ARMArchFeature;

unsigned ArchID = ARM::parseArch(TT.getArchName());
if (ArchID != ARM::AK_INVALID && (CPU.empty() || CPU == "generic"))
ARM::ArchKind ArchID = ARM::parseArch(TT.getArchName());
if (ArchID != ARM::ArchKind::INVALID && (CPU.empty() || CPU == "generic"))
ARMArchFeature = (ARMArchFeature + "+" + ARM::getArchName(ArchID)).str();

if (isThumb) {
Expand Down
4 changes: 2 additions & 2 deletions llvm/lib/Target/ARM/MCTargetDesc/ARMTargetStreamer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -71,9 +71,9 @@ void ARMTargetStreamer::emitTextAttribute(unsigned Attribute,
void ARMTargetStreamer::emitIntTextAttribute(unsigned Attribute,
unsigned IntValue,
StringRef StringValue) {}
void ARMTargetStreamer::emitArch(unsigned Arch) {}
void ARMTargetStreamer::emitArch(ARM::ArchKind Arch) {}
void ARMTargetStreamer::emitArchExtension(unsigned ArchExt) {}
void ARMTargetStreamer::emitObjectArch(unsigned Arch) {}
void ARMTargetStreamer::emitObjectArch(ARM::ArchKind Arch) {}
void ARMTargetStreamer::emitFPU(unsigned FPU) {}
void ARMTargetStreamer::finishAttributeSection() {}
void ARMTargetStreamer::emitInst(uint32_t Inst, char Suffix) {}
Expand Down
328 changes: 185 additions & 143 deletions llvm/unittests/Support/TargetParserTest.cpp

Large diffs are not rendered by default.