summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKrzysztof Parzyszek <kparzysz@codeaurora.org>2018-02-28 20:29:36 +0000
committerKrzysztof Parzyszek <kparzysz@codeaurora.org>2018-02-28 20:29:36 +0000
commitb1cdb60e75601e8d7e1c5d96e3702e8d32e9bb19 (patch)
tree89de0ab60a6c4e4a0fa2fd216fd7ebc5c279804e
parent2dfe49a44155f0bd1d4819eb7e06488c6ec00bab (diff)
downloadbcm5719-llvm-b1cdb60e75601e8d7e1c5d96e3702e8d32e9bb19.tar.gz
bcm5719-llvm-b1cdb60e75601e8d7e1c5d96e3702e8d32e9bb19.zip
[Hexagon] Implement target feature +reserved-r19
llvm-svn: 326364
-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