diff options
-rw-r--r-- | llvm/lib/Target/Hexagon/Hexagon.td | 2 | ||||
-rw-r--r-- | llvm/lib/Target/Hexagon/HexagonRegisterInfo.cpp | 3 | ||||
-rw-r--r-- | llvm/lib/Target/Hexagon/HexagonSubtarget.h | 3 |
3 files changed, 8 insertions, 0 deletions
diff --git a/llvm/lib/Target/Hexagon/Hexagon.td b/llvm/lib/Target/Hexagon/Hexagon.td index e1f3dec59f7..cacf9fb9d13 100644 --- a/llvm/lib/Target/Hexagon/Hexagon.td +++ b/llvm/lib/Target/Hexagon/Hexagon.td @@ -55,6 +55,8 @@ def FeatureMemNoShuf: SubtargetFeature<"mem_noshuf", "HasMemNoShuf", "false", "Supports mem_noshuf feature">; def FeatureDuplex : SubtargetFeature<"duplex", "EnableDuplex", "true", "Enable generation of duplex instruction">; +def FeatureReservedR19: SubtargetFeature<"reserved-r19", "ReservedR19", + "true", "Reserve register R19">; //===----------------------------------------------------------------------===// // Hexagon Instruction Predicate Definitions. diff --git a/llvm/lib/Target/Hexagon/HexagonRegisterInfo.cpp b/llvm/lib/Target/Hexagon/HexagonRegisterInfo.cpp index 9c16b77a90d..3754a04f501 100644 --- a/llvm/lib/Target/Hexagon/HexagonRegisterInfo.cpp +++ b/llvm/lib/Target/Hexagon/HexagonRegisterInfo.cpp @@ -171,6 +171,9 @@ BitVector HexagonRegisterInfo::getReservedRegs(const MachineFunction &MF) Reserved.set(Hexagon::C8); Reserved.set(Hexagon::USR_OVF); + if (MF.getSubtarget<HexagonSubtarget>().hasReservedR19()) + Reserved.set(Hexagon::R19); + for (int x = Reserved.find_first(); x >= 0; x = Reserved.find_next(x)) markSuperRegs(Reserved, x); diff --git a/llvm/lib/Target/Hexagon/HexagonSubtarget.h b/llvm/lib/Target/Hexagon/HexagonSubtarget.h index af93f20d97f..c1e46e3f208 100644 --- a/llvm/lib/Target/Hexagon/HexagonSubtarget.h +++ b/llvm/lib/Target/Hexagon/HexagonSubtarget.h @@ -52,6 +52,8 @@ class HexagonSubtarget : public HexagonGenSubtargetInfo { bool HasMemNoShuf = false; bool EnableDuplex = false; + bool ReservedR19 = false; + public: Hexagon::ArchEnum HexagonArchVersion; Hexagon::ArchEnum HexagonHVXVersion = Hexagon::ArchEnum::V4; @@ -152,6 +154,7 @@ public: bool useHVX128BOps() const { return useHVXOps() && UseHVX128BOps; } bool useHVX64BOps() const { return useHVXOps() && UseHVX64BOps; } bool hasMemNoShuf() const { return HasMemNoShuf; } + bool hasReservedR19() const { return ReservedR19; } bool useLongCalls() const { return UseLongCalls; } bool usePredicatedCalls() const; |