LLVM: lib/Target/Hexagon/HexagonVLIWPacketizer.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9#ifndef LLVM_LIB_TARGET_HEXAGON_HEXAGONVLIWPACKETIZER_H
10#define LLVM_LIB_TARGET_HEXAGON_HEXAGONVLIWPACKETIZER_H
11
15#include
16
17namespace llvm {
18
26
28
29 std::vector<MachineInstr *> OldPacketMIs;
30
31
32 bool PromotedToDotNew;
33
34
35 bool GlueAllocframeStore;
36
37
38 bool GlueToNewValueJump;
39
40
41 int64_t ChangedOffset;
42
43
44
45 bool Dependence;
46
47
48
49 bool FoundSequentialDependence;
50
51 bool MemShufDisabled = false;
52
53
54 std::vector<MachineInstr*> IgnoreDepMIs;
55
56
57
58 bool PacketStalls = false;
59
60
61 unsigned int PacketStallCycles = 0;
62
63
64 bool PacketHasDuplex = false;
65
66
67
68 bool PacketHasSLOT0OnlyInsn = false;
69
70protected:
71
74
75private:
78 const bool Minimal;
79
80public:
83 bool Minimal);
84
85
87
88
91
92
93
95
96
97
99
100
101
103
109
111
112protected:
114 return MemShufDisabled;
115 };
117 MemShufDisabled = val;
118 };
120 unsigned DepReg);
128
138 const MachineInstr &PacketMI, unsigned DepReg);
149
151 return PromotedToDotNew;
152 }
153
163};
164
165}
166
167#endif
bool arePredicatesComplements(MachineInstr &MI1, MachineInstr &MI2)
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.
void endPacket(MachineBasicBlock *MBB, MachineBasicBlock::iterator MI) override
bool getmemShufDisabled()
Definition HexagonVLIWPacketizer.h:113
HexagonPacketizerList(MachineFunction &MF, MachineLoopInfo &MLI, AAResults *AA, const MachineBranchProbabilityInfo *MBPI, bool Minimal)
bool isCallDependent(const MachineInstr &MI, SDep::Kind DepType, unsigned DepReg)
bool promoteToDotCur(MachineInstr &MI, SDep::Kind DepType, MachineBasicBlock::iterator &MII, const TargetRegisterClass *RC)
bool promoteToDotNew(MachineInstr &MI, SDep::Kind DepType, MachineBasicBlock::iterator &MII, const TargetRegisterClass *RC)
bool isLegalToPacketizeTogether(SUnit *SUI, SUnit *SUJ) override
bool canPromoteToDotCur(const MachineInstr &MI, const SUnit *PacketSU, unsigned DepReg, MachineBasicBlock::iterator &MII, const TargetRegisterClass *RC)
void useCalleesSP(MachineInstr &MI)
bool demoteToDotOld(MachineInstr &MI)
bool cannotCoexist(const MachineInstr &MI, const MachineInstr &MJ)
const MachineLoopInfo * MLI
Definition HexagonVLIWPacketizer.h:73
bool isSoloInstruction(const MachineInstr &MI) override
bool isCurifiable(MachineInstr &MI)
bool isLegalToPruneDependencies(SUnit *SUI, SUnit *SUJ) override
void initPacketizerState() override
bool hasControlDependence(const MachineInstr &I, const MachineInstr &J)
bool restrictingDepExistInPacket(MachineInstr &, unsigned)
bool producesStall(const MachineInstr &MI)
void undoChangedOffset(MachineInstr &MI)
Undo the changed offset.
bool hasDualStoreDependence(const MachineInstr &I, const MachineInstr &J)
unsigned int calcStall(const MachineInstr &MI)
bool canPromoteToDotNew(const MachineInstr &MI, const SUnit *PacketSU, unsigned DepReg, MachineBasicBlock::iterator &MII, const TargetRegisterClass *RC)
bool canPromoteToNewValue(const MachineInstr &MI, const SUnit *PacketSU, unsigned DepReg, MachineBasicBlock::iterator &MII)
bool ignorePseudoInstruction(const MachineInstr &MI, const MachineBasicBlock *MBB) override
void unpacketizeSoloInstrs(MachineFunction &MF)
const MachineBranchProbabilityInfo * MBPI
A handle to the branch probability pass.
Definition HexagonVLIWPacketizer.h:72
bool shouldAddToPacket(const MachineInstr &MI) override
bool canReserveResourcesForConstExt()
bool useCallersSP(MachineInstr &MI)
bool canPromoteToNewValueStore(const MachineInstr &MI, const MachineInstr &PacketMI, unsigned DepReg)
bool isPromotedToDotNew() const
Definition HexagonVLIWPacketizer.h:150
bool tryAllocateResourcesForConstExt(bool Reserve)
void setmemShufDisabled(bool val)
Definition HexagonVLIWPacketizer.h:116
void reserveResourcesForConstExt()
MachineBasicBlock::iterator addToPacket(MachineInstr &MI) override
bool hasDeadDependence(const MachineInstr &I, const MachineInstr &J)
bool isNewifiable(const MachineInstr &MI, const TargetRegisterClass *NewRC)
bool hasRegMaskDependence(const MachineInstr &I, const MachineInstr &J)
MachineInstrBundleIterator< MachineInstr > iterator
Representation of each machine instruction.
Kind
These are the different kinds of scheduling dependencies.
Scheduling unit. This is a node in the scheduling DAG.
VLIWPacketizerList(MachineFunction &MF, MachineLoopInfo &MLI, AAResults *AA)
This is an optimization pass for GlobalISel generic memory operations.