10 #ifndef LLVM_LIB_TARGET_HEXAGON_HEXAGONVLIWPACKETIZER_H 11 #define LLVM_LIB_TARGET_HEXAGON_HEXAGONVLIWPACKETIZER_H 20 class HexagonInstrInfo;
21 class HexagonRegisterInfo;
22 class MachineBranchProbabilityInfo;
23 class MachineFunction;
25 class MachineLoopInfo;
26 class TargetRegisterClass;
30 std::vector<MachineInstr *> OldPacketMIs;
33 bool PromotedToDotNew;
36 bool GlueAllocframeStore;
39 bool GlueToNewValueJump;
42 int64_t ChangedOffset;
50 bool FoundSequentialDependence;
52 bool MemShufDisabled =
false;
55 std::vector<MachineInstr*> IgnoreDepMIs;
59 bool PacketStalls =
false;
106 return MemShufDisabled;
109 MemShufDisabled = val;
143 return PromotedToDotNew;
158 #endif // LLVM_LIB_TARGET_HEXAGON_HEXAGONVLIWPACKETIZER_H bool canPromoteToNewValueStore(const MachineInstr &MI, const MachineInstr &PacketMI, unsigned DepReg)
This class represents lattice values for constants.
bool canPromoteToDotNew(const MachineInstr &MI, const SUnit *PacketSU, unsigned DepReg, MachineBasicBlock::iterator &MII, const TargetRegisterClass *RC)
bool isPromotedToDotNew() const
const MachineLoopInfo * MLI
bool demoteToDotOld(MachineInstr &MI)
bool isCurifiable(MachineInstr &MI)
void undoChangedOffset(MachineInstr &MI)
Undo the changed offset.
Kind
These are the different kinds of scheduling dependencies.
bool restrictingDepExistInPacket(MachineInstr &, unsigned)
bool canPromoteToDotCur(const MachineInstr &MI, const SUnit *PacketSU, unsigned DepReg, MachineBasicBlock::iterator &MII, const TargetRegisterClass *RC)
bool shouldAddToPacket(const MachineInstr &MI) override
void setmemShufDisabled(bool val)
bool getmemShufDisabled()
void endPacket(MachineBasicBlock *MBB, MachineBasicBlock::iterator MI) override
bool arePredicatesComplements(MachineInstr &MI1, MachineInstr &MI2)
const MachineBranchProbabilityInfo * MBPI
A handle to the branch probability pass.
bool hasDualStoreDependence(const MachineInstr &I, const MachineInstr &J)
bool isSoloInstruction(const MachineInstr &MI) override
bool tryAllocateResourcesForConstExt(bool Reserve)
bool isLegalToPacketizeTogether(SUnit *SUI, SUnit *SUJ) override
HexagonPacketizerList(MachineFunction &MF, MachineLoopInfo &MLI, AliasAnalysis *AA, const MachineBranchProbabilityInfo *MBPI, bool Minimal)
void initPacketizerState() override
bool canReserveResourcesForConstExt()
MachineBasicBlock::iterator addToPacket(MachineInstr &MI) override
Representation of each machine instruction.
void reserveResourcesForConstExt()
bool promoteToDotCur(MachineInstr &MI, SDep::Kind DepType, MachineBasicBlock::iterator &MII, const TargetRegisterClass *RC)
bool isCallDependent(const MachineInstr &MI, SDep::Kind DepType, unsigned DepReg)
bool ignorePseudoInstruction(const MachineInstr &MI, const MachineBasicBlock *MBB) override
bool isNewifiable(const MachineInstr &MI, const TargetRegisterClass *NewRC)
bool updateOffset(SUnit *SUI, SUnit *SUJ)
Return true if we can update the offset in MI so that MI and MJ can be packetized together...
bool hasControlDependence(const MachineInstr &I, const MachineInstr &J)
bool useCallersSP(MachineInstr &MI)
bool promoteToDotNew(MachineInstr &MI, SDep::Kind DepType, MachineBasicBlock::iterator &MII, const TargetRegisterClass *RC)
bool hasDeadDependence(const MachineInstr &I, const MachineInstr &J)
bool cannotCoexist(const MachineInstr &MI, const MachineInstr &MJ)
bool isLegalToPruneDependencies(SUnit *SUI, SUnit *SUJ) override
void useCalleesSP(MachineInstr &MI)
bool hasRegMaskDependence(const MachineInstr &I, const MachineInstr &J)
void unpacketizeSoloInstrs(MachineFunction &MF)
Dependence - This class represents a dependence between two memory memory references in a function...
bool canPromoteToNewValue(const MachineInstr &MI, const SUnit *PacketSU, unsigned DepReg, MachineBasicBlock::iterator &MII)
bool producesStall(const MachineInstr &MI)
Scheduling unit. This is a node in the scheduling DAG.