LLVM: lib/Target/SystemZ/SystemZInstrInfo.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13#ifndef LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZINSTRINFO_H
14#define LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZINSTRINFO_H
15
23#include
24
25#define GET_INSTRINFO_HEADER
26#include "SystemZGenInstrInfo.inc"
27
28namespace llvm {
29
30class SystemZSubtarget;
31
33
34enum {
35
51};
52
56
60
64
65
66enum {
67
69
70
72
73
75
76
77
81};
82
83
85
87
88
89
91
92
93
95
96
97
99
100
101
103
104
105
107
108
109
111
112
114};
115
116
118
120
121public:
122
124
125
127
128
130
134
135 bool isIndirect() { return Target != nullptr && Target->isReg(); }
136 bool hasMBBTarget() { return Target != nullptr && Target->isMBB(); }
138 return hasMBBTarget() ? Target->getMBB() : nullptr;
139 }
140};
141
142
143
144
146
148
149
151
152
154
155
157};
158
159}
160
161namespace SystemZ {
164
165
166
168
169
171
172
175
178}
179
183
186 void expandRIPseudo(MachineInstr &MI, unsigned LowOpcode, unsigned HighOpcode,
187 bool ConvertHigh) const;
188 void expandRIEPseudo(MachineInstr &MI, unsigned LowOpcode,
189 unsigned LowOpcodeK, unsigned HighOpcode) const;
190 void expandRXYPseudo(MachineInstr &MI, unsigned LowOpcode,
191 unsigned HighOpcode) const;
192 void expandLOCPseudo(MachineInstr &MI, unsigned LowOpcode,
193 unsigned HighOpcode) const;
194 void expandZExtPseudo(MachineInstr &MI, unsigned LowOpcode,
195 unsigned Size) const;
197
200 const DebugLoc &DL, unsigned DestReg, unsigned SrcReg,
201 unsigned LowLowOpcode, unsigned Size, bool KillSrc,
202 bool UndefSrc) const;
203
204 virtual void anchor();
205
206protected:
207
208
209
210
211
212
213
214
215
216
217
219 unsigned CommuteOpIdx1,
220 unsigned CommuteOpIdx2) const override;
221
222public:
224
225
227 int &FrameIndex) const override;
229 int &FrameIndex) const override;
231 int &FrameIndex) const override;
233 int &FrameIndex) const override;
235 int &SrcFrameIndex) const override;
239 bool AllowModify) const override;
241 int *BytesRemoved = nullptr) const override;
245 int *BytesAdded = nullptr) const override;
247 Register &SrcReg2, int64_t &Mask,
248 int64_t &Value) const override;
251 int &) const override;
255 Register FalseReg) const override;
258
261 unsigned ExtraPredCycles,
264 unsigned NumCyclesT, unsigned ExtraPredCyclesT,
266 unsigned NumCyclesF, unsigned ExtraPredCyclesF,
274 bool KillSrc, bool RenamableDest = false,
275 bool RenamableSrc = false) const override;
279
285
290
293 bool Invert) const override;
294 std::optional getInverseOpcode(unsigned Opcode) const override;
295
301 VirtRegMap *VRM = nullptr) const override;
308 override;
309
310
312
313
315
316
317
318
319
320
322
323
325 unsigned &LoadOpcode, unsigned &StoreOpcode) const;
326
327
328
329
330
331
332
335
336
338
339
340
342
343
344
345
347 unsigned &Start, unsigned &End) const;
348
349
350
351
355
356
357
358
359
361
362
363
365
366
367
371
372
374 StringRef &ErrInfo) const override;
375
376
377
378
379
380 bool
383
385 int64_t &ImmVal) const override;
386
387 std::optional
389
390 std::pair<unsigned, unsigned>
392
395};
396
397}
398
399#endif
unsigned const MachineRegisterInfo * MRI
MachineInstrBuilder & UseMI
MachineInstrBuilder MachineInstrBuilder & DefMI
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
MachineBasicBlock MachineBasicBlock::iterator MBBI
const AbstractManglingParser< Derived, Alloc >::OperatorInfo AbstractManglingParser< Derived, Alloc >::Ops[]
const SmallVectorImpl< MachineOperand > MachineBasicBlock * TBB
const SmallVectorImpl< MachineOperand > & Cond
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
MachineInstrBundleIterator< MachineInstr > iterator
Representation of each machine instruction.
MachineOperand class - Representation of each machine instruction operand.
MachineRegisterInfo - Keep track of information for virtual and physical registers,...
Wrapper class representing virtual and physical registers.
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
StringRef - Represent a constant reference to a string, i.e.
Definition SystemZInstrInfo.h:117
unsigned CCValid
Definition SystemZInstrInfo.h:126
BranchType Type
Definition SystemZInstrInfo.h:123
unsigned CCMask
Definition SystemZInstrInfo.h:129
MachineBasicBlock * getMBBTarget()
Definition SystemZInstrInfo.h:137
bool isIndirect()
Definition SystemZInstrInfo.h:135
Branch(BranchType type, unsigned ccValid, unsigned ccMask, const MachineOperand *target)
Definition SystemZInstrInfo.h:131
bool hasMBBTarget()
Definition SystemZInstrInfo.h:136
unsigned getLoadAndTrap(unsigned Opcode) const
void storeRegToStackSlot(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, Register SrcReg, bool isKill, int FrameIndex, const TargetRegisterClass *RC, Register VReg, MachineInstr::MIFlag Flags=MachineInstr::NoFlags) const override
Register isLoadFromStackSlotPostFE(const MachineInstr &MI, int &FrameIndex) const override
unsigned insertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB, MachineBasicBlock *FBB, ArrayRef< MachineOperand > Cond, const DebugLoc &DL, int *BytesAdded=nullptr) const override
bool isProfitableToIfCvt(MachineBasicBlock &MBB, unsigned NumCycles, unsigned ExtraPredCycles, BranchProbability Probability) const override
unsigned getLoadAndTest(unsigned Opcode) const
bool isPredicable(const MachineInstr &MI) const override
Register isStoreToStackSlotPostFE(const MachineInstr &MI, int &FrameIndex) const override
bool isStackSlotCopy(const MachineInstr &MI, int &DestFrameIndex, int &SrcFrameIndex) const override
MachineInstr * convertToThreeAddress(MachineInstr &MI, LiveVariables *LV, LiveIntervals *LIS) const override
unsigned getOpcodeForOffset(unsigned Opcode, int64_t Offset, const MachineInstr *MI=nullptr) const
unsigned getInstSizeInBytes(const MachineInstr &MI) const override
unsigned removeBranch(MachineBasicBlock &MBB, int *BytesRemoved=nullptr) const override
Register isStoreToStackSlot(const MachineInstr &MI, int &FrameIndex) const override
bool getConstValDefinedInReg(const MachineInstr &MI, const Register Reg, int64_t &ImmVal) const override
bool isAssociativeAndCommutative(const MachineInstr &Inst, bool Invert) const override
const SystemZRegisterInfo & getRegisterInfo() const
Definition SystemZInstrInfo.h:311
bool useMachineCombiner() const override
Definition SystemZInstrInfo.h:291
bool hasDisplacementPairInsn(unsigned Opcode) const
MachineInstr * commuteInstructionImpl(MachineInstr &MI, bool NewMI, unsigned CommuteOpIdx1, unsigned CommuteOpIdx2) const override
Commutes the operands in the given instruction by changing the operands order and/or changing the ins...
ArrayRef< std::pair< unsigned, const char * > > getSerializableDirectMachineOperandTargetFlags() const override
void insertSelect(MachineBasicBlock &MBB, MachineBasicBlock::iterator MI, const DebugLoc &DL, Register DstReg, ArrayRef< MachineOperand > Cond, Register TrueReg, Register FalseReg) const override
std::optional< unsigned > getInverseOpcode(unsigned Opcode) const override
bool isProfitableToDupForIfCvt(MachineBasicBlock &MBB, unsigned NumCycles, BranchProbability Probability) const override
SystemZII::Branch getBranchInfo(const MachineInstr &MI) const
void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, const DebugLoc &DL, Register DestReg, Register SrcReg, bool KillSrc, bool RenamableDest=false, bool RenamableSrc=false) const override
bool areMemAccessesTriviallyDisjoint(const MachineInstr &MIa, const MachineInstr &MIb) const override
bool reverseBranchCondition(SmallVectorImpl< MachineOperand > &Cond) const override
unsigned getFusedCompare(unsigned Opcode, SystemZII::FusedCompareType Type, const MachineInstr *MI=nullptr) const
bool expandPostRAPseudo(MachineInstr &MBBI) const override
bool analyzeCompare(const MachineInstr &MI, Register &SrcReg, Register &SrcReg2, int64_t &Mask, int64_t &Value) const override
bool verifyInstruction(const MachineInstr &MI, StringRef &ErrInfo) const override
void getLoadStoreOpcodes(const TargetRegisterClass *RC, unsigned &LoadOpcode, unsigned &StoreOpcode) const
bool isRxSBGMask(uint64_t Mask, unsigned BitSize, unsigned &Start, unsigned &End) const
bool foldImmediate(MachineInstr &UseMI, MachineInstr &DefMI, Register Reg, MachineRegisterInfo *MRI) const override
bool canInsertSelect(const MachineBasicBlock &, ArrayRef< MachineOperand > Cond, Register, Register, Register, int &, int &, int &) const override
std::optional< DestSourcePair > isCopyInstrImpl(const MachineInstr &MI) const override
std::pair< unsigned, unsigned > decomposeMachineOperandsTargetFlags(unsigned TF) const override
bool prepareCompareSwapOperands(MachineBasicBlock::iterator MBBI) const
Register isLoadFromStackSlot(const MachineInstr &MI, int &FrameIndex) const override
MachineInstr * foldMemoryOperandImpl(MachineFunction &MF, MachineInstr &MI, ArrayRef< unsigned > Ops, MachineBasicBlock::iterator InsertPt, int FrameIndex, LiveIntervals *LIS=nullptr, VirtRegMap *VRM=nullptr) const override
SystemZInstrInfo(const SystemZSubtarget &STI)
void loadRegFromStackSlot(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, Register DestReg, int FrameIdx, const TargetRegisterClass *RC, Register VReg, MachineInstr::MIFlag Flags=MachineInstr::NoFlags) const override
bool analyzeBranch(MachineBasicBlock &MBB, MachineBasicBlock *&TBB, MachineBasicBlock *&FBB, SmallVectorImpl< MachineOperand > &Cond, bool AllowModify) const override
void loadImmediate(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, unsigned Reg, uint64_t Value) const
bool PredicateInstruction(MachineInstr &MI, ArrayRef< MachineOperand > Pred) const override
The instances of the Type class are immutable: once they are created, they are never changed.
LLVM Value Representation.
Definition SystemZInstrInfo.h:32
static unsigned getCCValues(unsigned int Flags)
Definition SystemZInstrInfo.h:57
static unsigned getCompareZeroCCMask(unsigned int Flags)
Definition SystemZInstrInfo.h:61
BranchType
Definition SystemZInstrInfo.h:84
@ BranchCL
Definition SystemZInstrInfo.h:94
@ AsmGoto
Definition SystemZInstrInfo.h:113
@ BranchNormal
Definition SystemZInstrInfo.h:86
@ BranchCG
Definition SystemZInstrInfo.h:98
@ BranchCLG
Definition SystemZInstrInfo.h:102
@ BranchCT
Definition SystemZInstrInfo.h:106
@ BranchCTG
Definition SystemZInstrInfo.h:110
@ BranchC
Definition SystemZInstrInfo.h:90
FusedCompareType
Definition SystemZInstrInfo.h:145
@ CompareAndBranch
Definition SystemZInstrInfo.h:147
@ CompareAndSibcall
Definition SystemZInstrInfo.h:153
@ CompareAndTrap
Definition SystemZInstrInfo.h:156
@ CompareAndReturn
Definition SystemZInstrInfo.h:150
static unsigned getAccessSize(unsigned int Flags)
Definition SystemZInstrInfo.h:53
@ HasIndex
Definition SystemZInstrInfo.h:39
@ CCValuesMask
Definition SystemZInstrInfo.h:43
@ Has20BitOffset
Definition SystemZInstrInfo.h:38
@ CCMaskLast
Definition SystemZInstrInfo.h:48
@ SimpleBDXLoad
Definition SystemZInstrInfo.h:36
@ Is128Bit
Definition SystemZInstrInfo.h:40
@ SimpleBDXStore
Definition SystemZInstrInfo.h:37
@ CCMaskFirst
Definition SystemZInstrInfo.h:47
@ CCValuesShift
Definition SystemZInstrInfo.h:44
@ AccessSizeMask
Definition SystemZInstrInfo.h:41
@ CCIfNoSignedWrap
Definition SystemZInstrInfo.h:50
@ CompareZeroCCMaskShift
Definition SystemZInstrInfo.h:46
@ AccessSizeShift
Definition SystemZInstrInfo.h:42
@ CompareZeroCCMaskMask
Definition SystemZInstrInfo.h:45
@ IsLogical
Definition SystemZInstrInfo.h:49
@ MO_ADA_DATA_SYMBOL_ADDR
Definition SystemZInstrInfo.h:78
@ MO_INDNTPOFF
Definition SystemZInstrInfo.h:74
@ MO_GOT
Definition SystemZInstrInfo.h:71
@ MO_ADA_DIRECT_FUNC_DESC
Definition SystemZInstrInfo.h:80
@ MO_SYMBOL_MODIFIER
Definition SystemZInstrInfo.h:68
@ MO_ADA_INDIRECT_FUNC_DESC
Definition SystemZInstrInfo.h:79
MachineBasicBlock * splitBlockBefore(MachineBasicBlock::iterator MI, MachineBasicBlock *MBB)
int getTargetMemOpcode(uint16_t Opcode)
MachineBasicBlock * emitBlockAfter(MachineBasicBlock *MBB)
unsigned reverseCCMask(unsigned CCMask)
MachineBasicBlock * splitBlockAfter(MachineBasicBlock::iterator MI, MachineBasicBlock *MBB)
int getTwoOperandOpcode(uint16_t Opcode)
This is an optimization pass for GlobalISel generic memory operations.