diff options
| -rw-r--r-- | llvm/lib/Target/AArch64/AArch64.td | 14 | ||||
| -rw-r--r-- | llvm/lib/Target/AArch64/AArch64InstrInfo.td | 4 | ||||
| -rw-r--r-- | llvm/lib/Target/AArch64/AArch64Subtarget.cpp | 3 | ||||
| -rw-r--r-- | llvm/lib/Target/AArch64/AArch64Subtarget.h | 6 | 
4 files changed, 15 insertions, 12 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64.td b/llvm/lib/Target/AArch64/AArch64.td index 9c4b4f7fa66..9a7d6c884db 100644 --- a/llvm/lib/Target/AArch64/AArch64.td +++ b/llvm/lib/Target/AArch64/AArch64.td @@ -32,9 +32,6 @@ def FeatureCrypto : SubtargetFeature<"crypto", "HasCrypto", "true",  def FeatureCRC : SubtargetFeature<"crc", "HasCRC", "true",    "Enable ARMv8 CRC-32 checksum instructions">; -def FeatureV8_1a : SubtargetFeature<"v8.1a", "HasV8_1a", "true", -  "Enable ARMv8.1a extensions", [FeatureCRC]>; -  /// Cyclone has register move instructions which are "free".  def FeatureZCRegMove : SubtargetFeature<"zcm", "HasZeroCycleRegMove", "true",                                          "Has zero-cycle register moves">; @@ -44,6 +41,13 @@ def FeatureZCZeroing : SubtargetFeature<"zcz", "HasZeroCycleZeroing", "true",                                          "Has zero-cycle zeroing instructions">;  //===----------------------------------------------------------------------===// +// Architectures. +// + +def HasV8_1aOps : SubtargetFeature<"v8.1a", "HasV8_1aOps", "true", +  "Support ARM v8.1a instructions", [FeatureCRC]>; + +//===----------------------------------------------------------------------===//  // Register File Description  //===----------------------------------------------------------------------===// @@ -92,10 +96,6 @@ def : ProcessorModel<"generic", NoSchedModel, [FeatureFPARMv8,                                                FeatureNEON,                                                FeatureCRC]>; -def : ProcessorModel<"generic-armv8.1-a", NoSchedModel, [FeatureV8_1a, -                                                         FeatureNEON, -                                                         FeatureCrypto]>; -  def : ProcessorModel<"cortex-a53", CortexA53Model, [ProcA53]>;  def : ProcessorModel<"cortex-a57", CortexA57Model, [ProcA57]>;  // FIXME: Cortex-A72 is currently modelled as an Cortex-A57. diff --git a/llvm/lib/Target/AArch64/AArch64InstrInfo.td b/llvm/lib/Target/AArch64/AArch64InstrInfo.td index 25b9b2becd7..9761163781d 100644 --- a/llvm/lib/Target/AArch64/AArch64InstrInfo.td +++ b/llvm/lib/Target/AArch64/AArch64InstrInfo.td @@ -14,6 +14,8 @@  //===----------------------------------------------------------------------===//  // ARM Instruction Predicate Definitions.  // +def HasV8_1a         : Predicate<"Subtarget->hasV8_1aOps()">, +                                 AssemblerPredicate<"HasV8_1aOps", "armv8.1a">;  def HasFPARMv8       : Predicate<"Subtarget->hasFPARMv8()">,                                 AssemblerPredicate<"FeatureFPARMv8", "fp-armv8">;  def HasNEON          : Predicate<"Subtarget->hasNEON()">, @@ -22,8 +24,6 @@ def HasCrypto        : Predicate<"Subtarget->hasCrypto()">,                                   AssemblerPredicate<"FeatureCrypto", "crypto">;  def HasCRC           : Predicate<"Subtarget->hasCRC()">,                                   AssemblerPredicate<"FeatureCRC", "crc">; -def HasV8_1a         : Predicate<"Subtarget->hasV8_1a()">, -                                 AssemblerPredicate<"FeatureV8_1a", "v8.1a">;  def IsLE             : Predicate<"Subtarget->isLittleEndian()">;  def IsBE             : Predicate<"!Subtarget->isLittleEndian()">;  def IsCyclone        : Predicate<"Subtarget->isCyclone()">; diff --git a/llvm/lib/Target/AArch64/AArch64Subtarget.cpp b/llvm/lib/Target/AArch64/AArch64Subtarget.cpp index 221d70d495b..0b97af80a6a 100644 --- a/llvm/lib/Target/AArch64/AArch64Subtarget.cpp +++ b/llvm/lib/Target/AArch64/AArch64Subtarget.cpp @@ -47,8 +47,9 @@ AArch64Subtarget::AArch64Subtarget(const std::string &TT,                                     const std::string &FS,                                     const TargetMachine &TM, bool LittleEndian)      : AArch64GenSubtargetInfo(TT, CPU, FS), ARMProcFamily(Others), +      HasV8_1aOps(false),         HasFPARMv8(false), HasNEON(false), HasCrypto(false), HasCRC(false), -      HasV8_1a(false), HasZeroCycleRegMove(false), HasZeroCycleZeroing(false), +      HasZeroCycleRegMove(false), HasZeroCycleZeroing(false),        IsLittle(LittleEndian), CPUString(CPU), TargetTriple(TT), FrameLowering(),        InstrInfo(initializeSubtargetDependencies(FS)),        TSInfo(TM.getDataLayout()), TLInfo(TM, *this) {} diff --git a/llvm/lib/Target/AArch64/AArch64Subtarget.h b/llvm/lib/Target/AArch64/AArch64Subtarget.h index bcab97d5da3..5454b205719 100644 --- a/llvm/lib/Target/AArch64/AArch64Subtarget.h +++ b/llvm/lib/Target/AArch64/AArch64Subtarget.h @@ -37,11 +37,12 @@ protected:    /// ARMProcFamily - ARM processor family: Cortex-A53, Cortex-A57, and others.    ARMProcFamilyEnum ARMProcFamily; +  bool HasV8_1aOps; +    bool HasFPARMv8;    bool HasNEON;    bool HasCrypto;    bool HasCRC; -  bool HasV8_1a;    // HasZeroCycleRegMove - Has zero-cycle register mov instructions.    bool HasZeroCycleRegMove; @@ -93,6 +94,8 @@ public:      return isCortexA53() || isCortexA57();    } +  bool hasV8_1aOps() const { return HasV8_1aOps; } +    bool hasZeroCycleRegMove() const { return HasZeroCycleRegMove; }    bool hasZeroCycleZeroing() const { return HasZeroCycleZeroing; } @@ -101,7 +104,6 @@ public:    bool hasNEON() const { return HasNEON; }    bool hasCrypto() const { return HasCrypto; }    bool hasCRC() const { return HasCRC; } -  bool hasV8_1a() const { return HasV8_1a; }    bool isLittleEndian() const { return IsLittle; }  | 

