86 unsigned SubIdx)
const;
88 bool constrainCopyLikeIntrin(
MachineInstr &
MI,
unsigned NewOpc)
const;
125 bool selectDSAppendConsume(
MachineInstr &
MI,
bool IsAppend)
const;
131 bool selectG_INTRINSIC_W_SIDE_EFFECTS(
MachineInstr &
I)
const;
162 std::pair<Register, unsigned> selectVOP3ModsImpl(
Register Src,
163 bool IsCanonicalizing =
true,
164 bool AllowAbs =
true,
165 bool OpSel =
false)
const;
166 std::pair<Register, unsigned> selectVOP3PModsF32Impl(
Register Src)
const;
170 bool ForceVGPR =
false)
const;
196 std::pair<Register, unsigned>
198 bool IsDOT =
false,
bool NoOpSel0 =
false)
const;
201 bool NoOpSel0 =
false)
const;
246 bool IsSMEM =
false)
const;
248 int64_t *
Offset,
bool *ScaleOffset)
const;
258 std::pair<Register, int64_t>
271 bool NeedIOffset =
true)
const;
298 bool isDSOffset2Legal(
Register Base, int64_t Offset0, int64_t Offset1,
299 unsigned Size)
const;
300 bool isFlatScratchBaseLegal(
Register Addr)
const;
301 bool isFlatScratchBaseLegalSV(
Register Addr)
const;
302 bool isFlatScratchBaseLegalSVImm(
Register Addr)
const;
304 std::pair<Register, int64_t>
315 std::pair<Register, int64_t> selectDSReadWrite2Impl(
MachineOperand &Root,
316 unsigned size)
const;
320 std::tuple<Register, int64_t, bool>
321 getPtrBaseWithConstantOffset(
Register Root,
327 struct MUBUFAddressData {
332 bool shouldUseAddr64(MUBUFAddressData AddrData)
const;
334 void splitIllegalMUBUFOffset(MachineIRBuilder &
B,
335 Register &SOffset, int64_t &ImmOffset)
const;
337 MUBUFAddressData parseMUBUFAddress(
Register Src)
const;
339 bool selectMUBUFAddr64Impl(MachineOperand &Root,
Register &VAddr,
343 bool selectMUBUFOffsetImpl(MachineOperand &Root,
Register &RSrcReg,
347 selectBUFSOffset(MachineOperand &Root)
const;
350 selectMUBUFAddr64(MachineOperand &Root)
const;
353 selectMUBUFOffset(MachineOperand &Root)
const;
359 std::pair<Register, unsigned> selectVOP3PMadMixModsImpl(MachineOperand &Root,
360 bool &Matched)
const;
366 void renderTruncTImm(MachineInstrBuilder &MIB,
const MachineInstr &
MI,
368 void renderPrefetchLen(MachineInstrBuilder &MIB,
const MachineInstr &
MI,
370 void renderZextBoolTImm(MachineInstrBuilder &MIB,
const MachineInstr &
MI,
373 void renderOpSelTImm(MachineInstrBuilder &MIB,
const MachineInstr &
MI,
376 void renderSrcAndDstSelToOpSelXForm_0_0(MachineInstrBuilder &MIB,
377 const MachineInstr &
MI,
380 void renderSrcAndDstSelToOpSelXForm_0_1(MachineInstrBuilder &MIB,
381 const MachineInstr &
MI,
384 void renderSrcAndDstSelToOpSelXForm_1_0(MachineInstrBuilder &MIB,
385 const MachineInstr &
MI,
388 void renderSrcAndDstSelToOpSelXForm_1_1(MachineInstrBuilder &MIB,
389 const MachineInstr &
MI,
392 void renderDstSelToOpSelXForm(MachineInstrBuilder &MIB,
393 const MachineInstr &
MI,
int OpIdx)
const;
395 void renderSrcSelToOpSelXForm(MachineInstrBuilder &MIB,
396 const MachineInstr &
MI,
int OpIdx)
const;
398 void renderSrcAndDstSelToOpSelXForm_2_0(MachineInstrBuilder &MIB,
399 const MachineInstr &
MI,
402 void renderDstSelToOpSel3XFormXForm(MachineInstrBuilder &MIB,
403 const MachineInstr &
MI,
int OpIdx)
const;
405 void renderNegateImm(MachineInstrBuilder &MIB,
const MachineInstr &
MI,
408 void renderBitcastFPImm(MachineInstrBuilder &MIB,
const MachineInstr &
MI,
411 void renderBitcastFPImm32(MachineInstrBuilder &MIB,
const MachineInstr &
MI,
413 renderBitcastFPImm(MIB,
MI, OpIdx);
415 void renderBitcastFPImm64(MachineInstrBuilder &MIB,
const MachineInstr &
MI,
417 renderBitcastFPImm(MIB,
MI, OpIdx);
420 void renderCountTrailingOnesImm(MachineInstrBuilder &MIB,
421 const MachineInstr &
MI,
int OpIdx)
const;
422 void renderExtractCPol(MachineInstrBuilder &MIB,
const MachineInstr &
MI,
424 void renderExtractSWZ(MachineInstrBuilder &MIB,
const MachineInstr &
MI,
426 void renderExtractCpolSetGLC(MachineInstrBuilder &MIB,
const MachineInstr &
MI,
429 void renderFPPow2ToExponent(MachineInstrBuilder &MIB,
const MachineInstr &
MI,
432 void renderRoundMode(MachineInstrBuilder &MIB,
const MachineInstr &
MI,
435 void renderVOP3PModsNeg(MachineInstrBuilder &MIB,
const MachineInstr &
MI,
437 void renderVOP3PModsNegs(MachineInstrBuilder &MIB,
const MachineInstr &
MI,
439 void renderVOP3PModsNegAbs(MachineInstrBuilder &MIB,
const MachineInstr &
MI,
442 void renderPrefetchLoc(MachineInstrBuilder &MIB,
const MachineInstr &
MI,
445 void renderScaledMAIIntrinsicOperand(MachineInstrBuilder &MIB,
446 const MachineInstr &
MI,
int OpIdx)
const;
448 bool isInlineImmediate(
const APInt &
Imm)
const;
449 bool isInlineImmediate(
const APFloat &
Imm)
const;
453 bool isUnneededShiftMask(
const MachineInstr &
MI,
unsigned ShAmtBits)
const;
471 const SIInstrInfo &TII;
472 const SIRegisterInfo &TRI;
473 const AMDGPURegisterBankInfo &RBI;
474 const GCNSubtarget &STI;
475#define GET_GLOBALISEL_PREDICATES_DECL
476#define AMDGPUSubtarget GCNSubtarget
477#include "AMDGPUGenGlobalISel.inc"
478#undef GET_GLOBALISEL_PREDICATES_DECL
479#undef AMDGPUSubtarget
481#define GET_GLOBALISEL_TEMPORARIES_DECL
482#include "AMDGPUGenGlobalISel.inc"
483#undef GET_GLOBALISEL_TEMPORARIES_DECL