[llvm] r332290 - [Hexagon] Add a target feature for generating new-value stores

Krzysztof Parzyszek via llvm-commits llvm-commits at lists.llvm.org
Mon May 14 13:41:04 PDT 2018


Author: kparzysz
Date: Mon May 14 13:41:04 2018
New Revision: 332290

URL: http://llvm.org/viewvc/llvm-project?rev=332290&view=rev
Log:
[Hexagon] Add a target feature for generating new-value stores

Modified:
    llvm/trunk/lib/Target/Hexagon/Hexagon.td
    llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.cpp
    llvm/trunk/lib/Target/Hexagon/HexagonSubtarget.h

Modified: llvm/trunk/lib/Target/Hexagon/Hexagon.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/Hexagon.td?rev=332290&r1=332289&r2=332290&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Hexagon/Hexagon.td (original)
+++ llvm/trunk/lib/Target/Hexagon/Hexagon.td Mon May 14 13:41:04 2018
@@ -52,6 +52,8 @@ def FeatureMemops: SubtargetFeature<"mem
       "Use memop instructions">;
 def FeatureNVJ: SubtargetFeature<"nvj", "UseNewValueJumps", "true",
       "Support for new-value jumps", [FeaturePackets]>;
+def FeatureNVS: SubtargetFeature<"nvs", "UseNewValueStores", "true",
+      "Support for new-value stores", [FeaturePackets]>;
 def FeatureDuplex: SubtargetFeature<"duplex", "EnableDuplex", "true",
       "Enable generation of duplex instruction">;
 def FeatureReservedR19: SubtargetFeature<"reserved-r19", "ReservedR19",
@@ -321,23 +323,28 @@ class Proc<string Name, SchedMachineMode
 
 def : Proc<"hexagonv4",  HexagonModelV4,
            [ArchV4,
-            FeatureDuplex, FeatureMemops, FeatureNVJ, FeaturePackets]>;
+            FeatureDuplex, FeatureMemops, FeatureNVJ, FeatureNVS,
+            FeaturePackets]>;
 def : Proc<"hexagonv5",  HexagonModelV4,
            [ArchV4, ArchV5,
-            FeatureDuplex, FeatureMemops, FeatureNVJ, FeaturePackets]>;
+            FeatureDuplex, FeatureMemops, FeatureNVJ, FeatureNVS,
+            FeaturePackets]>;
 def : Proc<"hexagonv55", HexagonModelV55,
            [ArchV4, ArchV5, ArchV55,
-            FeatureDuplex, FeatureMemops, FeatureNVJ, FeaturePackets]>;
+            FeatureDuplex, FeatureMemops, FeatureNVJ, FeatureNVS,
+            FeaturePackets]>;
 def : Proc<"hexagonv60", HexagonModelV60,
            [ArchV4, ArchV5, ArchV55, ArchV60,
-            FeatureDuplex, FeatureMemops, FeatureNVJ, FeaturePackets]>;
+            FeatureDuplex, FeatureMemops, FeatureNVJ, FeatureNVS,
+            FeaturePackets]>;
 def : Proc<"hexagonv62", HexagonModelV62,
            [ArchV4, ArchV5, ArchV55, ArchV60, ArchV62,
-            FeatureDuplex, FeatureMemops, FeatureNVJ, FeaturePackets]>;
+            FeatureDuplex, FeatureMemops, FeatureNVJ, FeatureNVS,
+            FeaturePackets]>;
 def : Proc<"hexagonv65", HexagonModelV65,
            [ArchV4, ArchV5, ArchV55, ArchV60, ArchV62, ArchV65,
             FeatureDuplex, FeatureMemNoShuf, FeatureMemops, FeatureNVJ,
-            FeaturePackets]>;
+            FeatureNVS, FeaturePackets]>;
 
 //===----------------------------------------------------------------------===//
 // Declare the target which we are implementing

Modified: llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.cpp?rev=332290&r1=332289&r2=332290&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.cpp (original)
+++ llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.cpp Mon May 14 13:41:04 2018
@@ -2983,6 +2983,9 @@ bool HexagonInstrInfo::mayBeCurLoad(cons
 
 // Returns true, if a ST insn can be promoted to a new-value store.
 bool HexagonInstrInfo::mayBeNewStore(const MachineInstr &MI) const {
+  if (MI.mayStore() && !Subtarget.useNewValueStores())
+    return false;
+
   const uint64_t F = MI.getDesc().TSFlags;
   return (F >> HexagonII::mayNVStorePos) & HexagonII::mayNVStoreMask;
 }

Modified: llvm/trunk/lib/Target/Hexagon/HexagonSubtarget.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonSubtarget.h?rev=332290&r1=332289&r2=332290&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Hexagon/HexagonSubtarget.h (original)
+++ llvm/trunk/lib/Target/Hexagon/HexagonSubtarget.h Mon May 14 13:41:04 2018
@@ -54,6 +54,7 @@ class HexagonSubtarget : public HexagonG
   bool UseMemops = false;
   bool UsePackets = false;
   bool UseNewValueJumps = false;
+  bool UseNewValueStores = false;
 
   bool HasMemNoShuf = false;
   bool EnableDuplex = false;
@@ -155,6 +156,7 @@ public:
   bool useMemops() const { return UseMemops; }
   bool usePackets() const { return UsePackets; }
   bool useNewValueJumps() const { return UseNewValueJumps; }
+  bool useNewValueStores() const { return UseNewValueStores; }
 
   bool modeIEEERndNear() const { return ModeIEEERndNear; }
   bool useHVXOps() const { return HexagonHVXVersion > Hexagon::ArchEnum::V4; }




More information about the llvm-commits mailing list