summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/Target/Hexagon/Hexagon.td2
-rw-r--r--llvm/lib/Target/Hexagon/HexagonRegisterInfo.cpp3
-rw-r--r--llvm/lib/Target/Hexagon/HexagonSubtarget.h3
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;
OpenPOWER on IntegriCloud