forked from OSchip/llvm-project
[Hexagon] Add a target feature for generating new-value stores
llvm-svn: 332290
This commit is contained in:
parent
5f53f07b66
commit
f66f7612bf
|
@ -52,6 +52,8 @@ def FeatureMemops: SubtargetFeature<"memops", "UseMemops", "true",
|
|||
"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, SchedMachineModel Model,
|
|||
|
||||
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
|
||||
|
|
|
@ -2983,6 +2983,9 @@ bool HexagonInstrInfo::mayBeCurLoad(const MachineInstr &MI) const {
|
|||
|
||||
// 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;
|
||||
}
|
||||
|
|
|
@ -54,6 +54,7 @@ class HexagonSubtarget : public HexagonGenSubtargetInfo {
|
|||
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; }
|
||||
|
|
Loading…
Reference in New Issue