[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