LLVM: lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h Source File (original) (raw)

1

2

3

4

5

6

7

8

9#ifndef LLVM_LIB_TARGET_AMDGPU_UTILS_AMDGPUBASEINFO_H

10#define LLVM_LIB_TARGET_AMDGPU_UTILS_AMDGPUBASEINFO_H

11

18#include

19#include

20#include

21

23

24namespace llvm {

25

29class GlobalValue;

30class MCInstrInfo;

31class MCRegisterClass;

32class MCRegisterInfo;

33class MCSubtargetInfo;

34class StringRef;

35class Triple;

36class raw_ostream;

37

38namespace AMDGPU {

39

40struct AMDGPUMCKernelCodeT;

41struct IsaVersion;

42

43

44

45

46

47namespace GenericVersion {

48static constexpr unsigned GFX9 = 1;

49static constexpr unsigned GFX9_4 = 1;

50static constexpr unsigned GFX10_1 = 1;

51static constexpr unsigned GFX10_3 = 1;

52static constexpr unsigned GFX11 = 1;

53static constexpr unsigned GFX12 = 1;

54}

55

57

59

60

62

63

65

66

68

69

70

71

73

74

75

77

78

80

81

83

86

93};

94

99};

100

106};

107

110};

111

112#define GET_MIMGBaseOpcode_DECL

113#define GET_MIMGDim_DECL

114#define GET_MIMGEncoding_DECL

115#define GET_MIMGLZMapping_DECL

116#define GET_MIMGMIPMapping_DECL

117#define GET_MIMGBiASMapping_DECL

118#define GET_MAIInstInfoTable_DECL

119#define GET_MAIInstInfoTable_DECL

120#define GET_isMFMA_F8F6F4Table_DECL

121#define GET_isCvtScaleF32_F32F16ToF8F4Table_DECL

122#include "AMDGPUGenSearchableTables.inc"

123

124namespace IsaInfo {

125

126enum {

127

128

132

138};

139

141private:

145

146public:

149

150

153 }

154

155

159 }

160

161

162

166 }

167

168

169

171 return XnackSetting;

172 }

173

174

176 XnackSetting = NewXnackSetting;

177 }

178

179

182 }

183

184

188 }

189

190

191

195 }

196

197

198

200 return SramEccSetting;

201 }

202

203

205 SramEccSetting = NewSramEccSetting;

206 }

207

210

211

212 std::string toString() const;

213};

214

215

217

218

220

221

222

224

225

226

228

229

230

232 unsigned FlatWorkGroupSize);

233

234

235

237

238

239

241

242

243

245 unsigned FlatWorkGroupSize);

246

247

249

250

252

253

254

256 unsigned FlatWorkGroupSize);

257

258

260

261

263

264

266

267

269

270

271

273

274

275

277 bool Addressable);

278

279

280

282 bool FlatScrUsed, bool XNACKUsed);

283

284

285

286

288 bool FlatScrUsed);

289

290

291

292

294

295

296

297

298

299unsigned

301 std::optional EnableWavefrontSize32 = std::nullopt);

302

303

304

305

306

309 std::optional EnableWavefrontSize32 = std::nullopt);

310

311

313

314

315

317

318

320

321

322

324

325

326

328

329

330

332 unsigned NumVGPRs);

333

334

335

337 unsigned MaxWaves,

338 unsigned TotalNumVGPRs);

339

340

341

344

345

346

347

348

349

350

353 std::optional EnableWavefrontSize32 = std::nullopt);

354

355

356

359 std::optional EnableWavefrontSize32 = std::nullopt);

360

361}

362

363

364template <unsigned HighBit, unsigned LowBit, unsigned D = 0>

366 static_assert(HighBit >= LowBit, "Invalid bit range!");

367 static constexpr unsigned Offset = LowBit;

368 static constexpr unsigned Width = HighBit - LowBit + 1;

369

372

375

378};

379

380

381template <unsigned Bit, unsigned D = 0>

383

384

387 return ((Values.encode() << Values.Offset) | ...);

388 }

389

390 static std::tuple decode(uint64_t Encoded) {

391 return {Fields::decode((Encoded >> Fields::Offset) &

392 maxUIntN(Fields::Width))...};

393 }

394};

395

398

402}

403

406

414

425};

426

429

432

441};

442

445

448

451

453 MIMGBaseOpcode L;

454 MIMGBaseOpcode LZ;

455};

456

460};

461

465};

466

470};

471

473 MIMGBaseOpcode G;

475};

476

479

483};

484

487

490

493

496

498int getMIMGOpcode(unsigned BaseOpcode, unsigned MIMGEncoding,

499 unsigned VDataDwords, unsigned VAddrDwords);

500

503

507 bool IsG16Supported);

508

516};

517

520

523

525int getMTBUFOpcode(unsigned BaseOpc, unsigned Elements);

526

529

532

535

538

541

543int getMUBUFOpcode(unsigned BaseOpc, unsigned Elements);

544

547

550

553

556

559

562

565

568

571

574

577

580

581

584

587

591};

592

593

596

599

602

605 unsigned BLGP,

606 unsigned F8F8Opcode);

607

616

619

622

624int getVOPDFull(unsigned OpX, unsigned OpY, unsigned EncodingFamily);

625

627bool isVOPD(unsigned Opc);

628

630bool isMAC(unsigned Opc);

631

634

637

640

641namespace VOPD {

642

648

653

654

655

657

661

662

664private:

665 unsigned SrcOperandsNum = 0;

666 unsigned MandatoryLiteralIdx = ~0u;

667 bool HasSrc2Acc = false;

668

669public:

672

673

675

676

678 return SrcOperandsNum - HasSrc2Acc;

679 }

680

681

683

684

685

688 return MandatoryLiteralIdx;

689 }

690

691

692

695 return SrcOperandsNum > CompSrcIdx && !hasMandatoryLiteralAt(CompSrcIdx);

696 }

697

698

700

701private:

702 bool hasMandatoryLiteralAt(unsigned CompSrcIdx) const {

705 }

706};

707

709 SINGLE = 0,

714

715

716

717

718

719

720

721

722

723

724

725

726

727

728

729

730

731

732

733

734

735

736

737

738

739

740

741

742

743

744

746private:

747

748

749

750

751

752 static constexpr unsigned MC_DST_IDX[] = {0, 0, 1};

753 static constexpr unsigned FIRST_MC_SRC_IDX[] = {1, 2, 2 };

754

755

756

757

758

759

760

761 static constexpr unsigned PARSED_DST_IDX[] = {1, 1,

762 4 };

763 static constexpr unsigned FIRST_PARSED_SRC_IDX[] = {

764 2, 2, 5 };

765

766private:

769

770public:

771

774 }

775

776

779

780public:

781

783

784

787 return FIRST_MC_SRC_IDX[Kind] + getPrevCompSrcNum() + CompSrcIdx;

788 }

789

790

792 return PARSED_DST_IDX[Kind] + getPrevCompParsedSrcNum();

793 }

794

795

798 return FIRST_PARSED_SRC_IDX[Kind] + getPrevCompParsedSrcNum() + CompSrcIdx;

799 }

800

801private:

802 unsigned getPrevCompSrcNum() const {

804 }

805 unsigned getPrevCompParsedSrcNum() const {

807 }

808};

809

810

812public:

813

817

818

821

822

823

825};

826

827

829private:

831

832public:

833 using RegIndices = std::array<unsigned, Component::MAX_OPR_NUM>;

834

836 : CompInfo{OpX, OpY} {}

837

839 : CompInfo{OprInfoX, OprInfoY} {}

840

843 return CompInfo[ComponentIdx];

844 }

845

846

847

848

849

850

851

852 bool hasInvalidOperand(std::function<unsigned(unsigned, unsigned)> GetRegIdx,

853 bool SkipSrc = false) const {

855 }

856

857

858

859

860

862 std::function<unsigned(unsigned, unsigned)> GetRegIdx,

863 bool SkipSrc = false) const;

864

865private:

867 getRegIndices(unsigned ComponentIdx,

868 std::function<unsigned(unsigned, unsigned)> GetRegIdx) const;

869};

870

871}

872

874std::pair<unsigned, unsigned> getVOPDComponents(unsigned VOPDOpcode);

875

877

878

880

882

883VOPD::InstInfo

885

888

891

894

897

899

902

905

908

912

913

914

916

917

918

919

920

921

922

924

925

926

927

928

929

930

931

932

933

934std::pair<unsigned, unsigned>

936 std::pair<unsigned, unsigned> Default,

937 bool OnlyFirstRequired = false);

938

939

940

941

942

943

944

945

946

947

948std::optional<std::pair<unsigned, std::optional>>

950 bool OnlyFirstRequired = false);

951

952

953

954

955

956

957

958

960 unsigned Size,

962

963

964

965

966

968 unsigned LoadCnt = ~0u;

970 unsigned DsCnt = ~0u;

971 unsigned StoreCnt = ~0u;

973 unsigned BvhCnt = ~0u;

974 unsigned KmCnt = ~0u;

975

977

978 Waitcnt(unsigned VmCnt, unsigned ExpCnt, unsigned LgkmCnt, unsigned VsCnt)

981

982

987

989

993 }

994

996

998

999

1005 }

1006};

1007

1008

1009

1010

1011

1013

1014

1016

1017

1019

1020

1022

1023

1025

1026

1028

1029

1031

1032

1033

1034

1035

1036

1037

1038

1039

1040

1041

1042

1043

1044

1045

1046

1048 unsigned &Vmcnt, unsigned &Expcnt, unsigned &Lgkmcnt);

1049

1051

1052

1054 unsigned Vmcnt);

1055

1056

1058 unsigned Expcnt);

1059

1060

1062 unsigned Lgkmcnt);

1063

1064

1065

1066

1067

1068

1069

1070

1071

1072

1073

1074

1075

1076

1077

1078

1079

1080

1081

1083 unsigned Vmcnt, unsigned Expcnt, unsigned Lgkmcnt);

1084

1086

1087

1088

1089

1090

1091

1093

1094

1095

1097

1098

1099

1101

1102

1103

1105

1106

1107

1109

1110

1111

1112

1113

1115

1116

1117

1118

1119

1120

1122

1123

1124

1126

1127

1128

1129

1131

1132

1133

1134

1136

1137namespace Hwreg {

1138

1141

1146};

1147

1149

1150}

1151

1152namespace DepCtr {

1153

1161

1162

1164

1165

1167

1168

1170

1171

1173

1174

1176

1177

1179

1180

1182

1183

1185

1186

1188

1189}

1190

1191namespace Exp {

1192

1194

1197

1200

1201}

1202

1203namespace MTBUFFormat {

1204

1206int64_t encodeDfmtNfmt(unsigned Dfmt, unsigned Nfmt);

1207

1209

1211

1213

1214int64_t getNfmt(const StringRef Name, const MCSubtargetInfo &STI);

1215

1216StringRef getNfmtName(unsigned Id, const MCSubtargetInfo &STI);

1217

1218bool isValidDfmtNfmt(unsigned Val, const MCSubtargetInfo &STI);

1219

1220bool isValidNfmt(unsigned Val, const MCSubtargetInfo &STI);

1221

1223

1225

1227

1229 const MCSubtargetInfo &STI);

1230

1232

1234

1235}

1236

1237namespace SendMsg {

1238

1240bool isValidMsgId(int64_t MsgId, const MCSubtargetInfo &STI);

1241

1243bool isValidMsgOp(int64_t MsgId, int64_t OpId, const MCSubtargetInfo &STI,

1244 bool Strict = true);

1245

1248 const MCSubtargetInfo &STI, bool Strict = true);

1249

1251bool msgRequiresOp(int64_t MsgId, const MCSubtargetInfo &STI);

1252

1254bool msgSupportsStream(int64_t MsgId, int64_t OpId, const MCSubtargetInfo &STI);

1255

1258

1263

1264}

1265

1266

1268

1270

1272

1275

1278

1281

1284

1285

1286

1287

1288

1289

1290

1293

1296

1297bool isKernelCC(const Function *Func);

1298

1299

1302 switch (CC) {

1305 return true;

1306 default:

1307 return false;

1308 }

1309}

1310

1320

1353int getTotalNumVGPRs(bool has90AInsts, int32_t ArgNumAGPR, int32_t ArgNumVGPR);

1356

1357

1359

1360

1362

1363

1364

1366

1367

1370

1373

1374

1375

1377

1378

1380

1381

1383

1384

1386

1387

1389

1390

1392

1393

1395 unsigned OpNo);

1396

1414 return 4;

1415

1421 return 8;

1422

1443 return 2;

1444

1445 default:

1447 }

1448}

1449

1453}

1454

1455

1456

1460}

1461

1462

1465

1468

1471

1474

1477

1480

1483

1486

1489

1492

1495

1498

1501

1504

1506

1508

1511 int64_t EncodedOffset);

1512

1515 int64_t EncodedOffset,

1516 bool IsBuffer);

1517

1518

1519

1521

1522

1523

1524

1525

1527 int64_t ByteOffset, bool IsBuffer,

1528 bool HasSOffset = false);

1529

1530

1531

1533 int64_t ByteOffset);

1534

1535

1536

1537

1538

1539

1540

1542

1543

1544

1545

1547

1551}

1552

1553

1555

1556

1558

1559

1561

1562

1564

1565

1566

1567

1569

1570}

1571

1574

1575}

1576

1577#endif

unsigned const MachineRegisterInfo * MRI

Base class for AMDGPU specific classes of TargetSubtarget.

static GCRegistry::Add< StatepointGC > D("statepoint-example", "an example strategy for statepoint")

Module.h This file contains the declarations for the Module class.

unsigned const TargetRegisterInfo * TRI

assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())

unsigned unsigned DefaultVal

bool isSramEccSupported() const

void setTargetIDFromFeaturesString(StringRef FS)

void setXnackSetting(TargetIDSetting NewXnackSetting)

Sets xnack setting to NewXnackSetting.

bool isSramEccOnOrAny() const

TargetIDSetting getXnackSetting() const

bool isXnackOnOrAny() const

bool isXnackOnOrOff() const

bool isXnackSupported() const

void setTargetIDFromTargetIDStream(StringRef TargetID)

~AMDGPUTargetID()=default

void setSramEccSetting(TargetIDSetting NewSramEccSetting)

Sets sramecc setting to NewSramEccSetting.

bool isSramEccOnOrOff() const

std::string toString() const

TargetIDSetting getSramEccSetting() const

unsigned getIndexInParsedOperands(unsigned CompOprIdx) const

ComponentInfo(const MCInstrDesc &OpDesc, ComponentKind Kind=ComponentKind::SINGLE)

ComponentInfo(const MCInstrDesc &OpDesc, const ComponentProps &OpXProps)

unsigned getIndexOfDstInMCOperands() const

unsigned getIndexOfSrcInMCOperands(unsigned CompSrcIdx) const

unsigned getIndexOfDstInParsedOperands() const

ComponentLayout(const ComponentProps &OpXProps)

unsigned getIndexOfSrcInParsedOperands(unsigned CompSrcIdx) const

ComponentLayout(ComponentKind Kind)

bool hasMandatoryLiteral() const

bool hasRegSrcOperand(unsigned CompSrcIdx) const

unsigned getCompSrcOperandsNum() const

unsigned getMandatoryLiteralCompOperandIndex() const

unsigned getCompParsedSrcOperandsNum() const

InstInfo(const ComponentInfo &OprInfoX, const ComponentInfo &OprInfoY)

bool hasInvalidOperand(std::function< unsigned(unsigned, unsigned)> GetRegIdx, bool SkipSrc=false) const

const ComponentInfo & operator[](size_t ComponentIdx) const

InstInfo(const MCInstrDesc &OpX, const MCInstrDesc &OpY)

std::optional< unsigned > getInvalidCompOperandIndex(std::function< unsigned(unsigned, unsigned)> GetRegIdx, bool SkipSrc=false) const

std::array< unsigned, Component::MAX_OPR_NUM > RegIndices

This class represents an incoming formal argument to a Function.

Base class for all callable instructions (InvokeInst and CallInst) Holds everything related to callin...

Describe properties that are true of each instruction in the target description file.

Interface to description of machine instruction set.

This holds information about one operand of a machine instruction, indicating the register class for ...

uint8_t OperandType

Information about the type of the operand.

MCRegisterClass - Base class of TargetRegisterClass.

MCRegisterInfo base class - We assume that the target defines a static array of MCRegisterDesc object...

Wrapper class representing physical registers. Should be passed by value.

Generic base class for all target subtargets.

A Module instance is used to store all the information related to an LLVM module.

This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.

StringRef - Represent a constant reference to a string, i.e.

Triple - Helper class for working with autoconf configuration names.

LLVM Value Representation.

#define llvm_unreachable(msg)

Marks that the current location is not supposed to be reachable.

bool decodeDepCtr(unsigned Code, int &Id, StringRef &Name, unsigned &Val, bool &IsDefault, const MCSubtargetInfo &STI)

unsigned encodeFieldVaVdst(unsigned Encoded, unsigned VaVdst)

unsigned decodeFieldSaSdst(unsigned Encoded)

unsigned encodeFieldVmVsrc(unsigned Encoded, unsigned VmVsrc)

int encodeDepCtr(const StringRef Name, int64_t Val, unsigned &UsedOprMask, const MCSubtargetInfo &STI)

unsigned encodeFieldSaSdst(unsigned Encoded, unsigned SaSdst)

bool isSymbolicDepCtrEncoding(unsigned Code, bool &HasNonDefaultVal, const MCSubtargetInfo &STI)

unsigned decodeFieldVaVdst(unsigned Encoded)

int getDefaultDepCtrEncoding(const MCSubtargetInfo &STI)

unsigned decodeFieldVmVsrc(unsigned Encoded)

bool isSupportedTgtId(unsigned Id, const MCSubtargetInfo &STI)

bool getTgtName(unsigned Id, StringRef &Name, int &Index)

unsigned getTgtId(const StringRef Name)

static constexpr unsigned GFX9_4

static constexpr unsigned GFX10_1

static constexpr unsigned GFX10_3

static constexpr unsigned GFX11

static constexpr unsigned GFX9

static constexpr unsigned GFX12

unsigned getVGPREncodingGranule(const MCSubtargetInfo *STI, std::optional< bool > EnableWavefrontSize32)

unsigned getTotalNumVGPRs(const MCSubtargetInfo *STI)

unsigned getWavesPerEUForWorkGroup(const MCSubtargetInfo *STI, unsigned FlatWorkGroupSize)

@ FIXED_NUM_SGPRS_FOR_INIT_BUG

unsigned getWavefrontSize(const MCSubtargetInfo *STI)

unsigned getMaxWorkGroupsPerCU(const MCSubtargetInfo *STI, unsigned FlatWorkGroupSize)

unsigned getMaxFlatWorkGroupSize(const MCSubtargetInfo *STI)

unsigned getMaxWavesPerEU(const MCSubtargetInfo *STI)

unsigned getWavesPerWorkGroup(const MCSubtargetInfo *STI, unsigned FlatWorkGroupSize)

unsigned getNumExtraSGPRs(const MCSubtargetInfo *STI, bool VCCUsed, bool FlatScrUsed, bool XNACKUsed)

unsigned getSGPREncodingGranule(const MCSubtargetInfo *STI)

unsigned getLocalMemorySize(const MCSubtargetInfo *STI)

unsigned getAddressableLocalMemorySize(const MCSubtargetInfo *STI)

unsigned getMinNumVGPRs(const MCSubtargetInfo *STI, unsigned WavesPerEU)

unsigned getEUsPerCU(const MCSubtargetInfo *STI)

unsigned getAddressableNumSGPRs(const MCSubtargetInfo *STI)

unsigned getAddressableNumVGPRs(const MCSubtargetInfo *STI)

unsigned getMinNumSGPRs(const MCSubtargetInfo *STI, unsigned WavesPerEU)

unsigned getMinFlatWorkGroupSize(const MCSubtargetInfo *STI)

unsigned getMaxNumSGPRs(const MCSubtargetInfo *STI, unsigned WavesPerEU, bool Addressable)

unsigned getNumSGPRBlocks(const MCSubtargetInfo *STI, unsigned NumSGPRs)

unsigned getMinWavesPerEU(const MCSubtargetInfo *STI)

unsigned getSGPRAllocGranule(const MCSubtargetInfo *STI)

unsigned getNumWavesPerEUWithNumVGPRs(const MCSubtargetInfo *STI, unsigned NumVGPRs)

unsigned getMaxNumVGPRs(const MCSubtargetInfo *STI, unsigned WavesPerEU)

unsigned getEncodedNumVGPRBlocks(const MCSubtargetInfo *STI, unsigned NumVGPRs, std::optional< bool > EnableWavefrontSize32)

unsigned getOccupancyWithNumSGPRs(unsigned SGPRs, unsigned MaxWaves, AMDGPUSubtarget::Generation Gen)

unsigned getVGPRAllocGranule(const MCSubtargetInfo *STI, std::optional< bool > EnableWavefrontSize32)

unsigned getAddressableNumArchVGPRs(const MCSubtargetInfo *STI)

unsigned getAllocatedNumVGPRBlocks(const MCSubtargetInfo *STI, unsigned NumVGPRs, std::optional< bool > EnableWavefrontSize32)

unsigned getTotalNumSGPRs(const MCSubtargetInfo *STI)

bool isValidUnifiedFormat(unsigned Id, const MCSubtargetInfo &STI)

unsigned getDefaultFormatEncoding(const MCSubtargetInfo &STI)

StringRef getUnifiedFormatName(unsigned Id, const MCSubtargetInfo &STI)

bool isValidNfmt(unsigned Id, const MCSubtargetInfo &STI)

bool isValidDfmtNfmt(unsigned Id, const MCSubtargetInfo &STI)

int64_t convertDfmtNfmt2Ufmt(unsigned Dfmt, unsigned Nfmt, const MCSubtargetInfo &STI)

StringRef getDfmtName(unsigned Id)

int64_t encodeDfmtNfmt(unsigned Dfmt, unsigned Nfmt)

int64_t getUnifiedFormat(const StringRef Name, const MCSubtargetInfo &STI)

bool isValidFormatEncoding(unsigned Val, const MCSubtargetInfo &STI)

StringRef getNfmtName(unsigned Id, const MCSubtargetInfo &STI)

int64_t getNfmt(const StringRef Name, const MCSubtargetInfo &STI)

int64_t getDfmt(const StringRef Name)

void decodeDfmtNfmt(unsigned Format, unsigned &Dfmt, unsigned &Nfmt)

uint64_t encodeMsg(uint64_t MsgId, uint64_t OpId, uint64_t StreamId)

bool msgSupportsStream(int64_t MsgId, int64_t OpId, const MCSubtargetInfo &STI)

void decodeMsg(unsigned Val, uint16_t &MsgId, uint16_t &OpId, uint16_t &StreamId, const MCSubtargetInfo &STI)

bool isValidMsgId(int64_t MsgId, const MCSubtargetInfo &STI)

bool isValidMsgStream(int64_t MsgId, int64_t OpId, int64_t StreamId, const MCSubtargetInfo &STI, bool Strict)

bool msgRequiresOp(int64_t MsgId, const MCSubtargetInfo &STI)

bool isValidMsgOp(int64_t MsgId, int64_t OpId, const MCSubtargetInfo &STI, bool Strict)

constexpr unsigned VOPD_VGPR_BANK_MASKS[]

constexpr unsigned COMPONENTS_NUM

constexpr unsigned COMPONENTS[]

bool isGCN3Encoding(const MCSubtargetInfo &STI)

bool isInlinableLiteralBF16(int16_t Literal, bool HasInv2Pi)

bool isGFX10_BEncoding(const MCSubtargetInfo &STI)

LLVM_READONLY const MIMGG16MappingInfo * getMIMGG16MappingInfo(unsigned G)

bool isGFX10_GFX11(const MCSubtargetInfo &STI)

bool isInlinableLiteralV216(uint32_t Literal, uint8_t OpType)

LLVM_READONLY const MIMGInfo * getMIMGInfo(unsigned Opc)

unsigned getRegOperandSize(const MCRegisterInfo *MRI, const MCInstrDesc &Desc, unsigned OpNo)

Get size of register operand.

void decodeWaitcnt(const IsaVersion &Version, unsigned Waitcnt, unsigned &Vmcnt, unsigned &Expcnt, unsigned &Lgkmcnt)

Decodes Vmcnt, Expcnt and Lgkmcnt from given Waitcnt for given isa Version, and writes decoded values...

bool isInlinableLiteralFP16(int16_t Literal, bool HasInv2Pi)

bool isSGPR(MCRegister Reg, const MCRegisterInfo *TRI)

Is Reg - scalar register.

uint64_t convertSMRDOffsetUnits(const MCSubtargetInfo &ST, uint64_t ByteOffset)

Convert ByteOffset to dwords if the subtarget uses dword SMRD immediate offsets.

MCRegister getMCReg(MCRegister Reg, const MCSubtargetInfo &STI)

If Reg is a pseudo reg, return the correct hardware register given STI otherwise return Reg.

LLVM_READONLY const MIMGOffsetMappingInfo * getMIMGOffsetMappingInfo(unsigned Offset)

bool isVOPCAsmOnly(unsigned Opc)

int getMIMGOpcode(unsigned BaseOpcode, unsigned MIMGEncoding, unsigned VDataDwords, unsigned VAddrDwords)

bool getMTBUFHasSrsrc(unsigned Opc)

std::optional< int64_t > getSMRDEncodedLiteralOffset32(const MCSubtargetInfo &ST, int64_t ByteOffset)

LLVM_READNONE bool isLegalDPALU_DPPControl(unsigned DC)

bool isGFX10Before1030(const MCSubtargetInfo &STI)

bool isSISrcInlinableOperand(const MCInstrDesc &Desc, unsigned OpNo)

Does this operand support only inlinable literals?

unsigned mapWMMA2AddrTo3AddrOpcode(unsigned Opc)

bool shouldEmitConstantsToTextSection(const Triple &TT)

bool isInlinableLiteralV2I16(uint32_t Literal)

bool isDPMACCInstruction(unsigned Opc)

int getMTBUFElements(unsigned Opc)

bool isHi16Reg(MCRegister Reg, const MCRegisterInfo &MRI)

int32_t getTotalNumVGPRs(bool has90AInsts, int32_t ArgNumAGPR, int32_t ArgNumVGPR)

bool isGFX10(const MCSubtargetInfo &STI)

LLVM_READONLY int16_t getNamedOperandIdx(uint16_t Opcode, uint16_t NamedIdx)

bool isInlinableLiteralV2BF16(uint32_t Literal)

unsigned getMaxNumUserSGPRs(const MCSubtargetInfo &STI)

FPType getFPDstSelType(unsigned Opc)

unsigned getNumFlatOffsetBits(const MCSubtargetInfo &ST)

For pre-GFX12 FLAT instructions the offset must be positive; MSB is ignored and forced to zero.

bool hasA16(const MCSubtargetInfo &STI)

bool isLegalSMRDEncodedSignedOffset(const MCSubtargetInfo &ST, int64_t EncodedOffset, bool IsBuffer)

bool isGFX12Plus(const MCSubtargetInfo &STI)

unsigned getNSAMaxSize(const MCSubtargetInfo &STI, bool HasSampler)

CanBeVOPD getCanBeVOPD(unsigned Opc)

int getIntegerAttribute(const Function &F, StringRef Name, int Default)

bool hasPackedD16(const MCSubtargetInfo &STI)

unsigned getStorecntBitMask(const IsaVersion &Version)

unsigned getLdsDwGranularity(const MCSubtargetInfo &ST)

bool isGFX940(const MCSubtargetInfo &STI)

bool isEntryFunctionCC(CallingConv::ID CC)

LLVM_READNONE bool isKernel(CallingConv::ID CC)

bool isInlinableLiteralV2F16(uint32_t Literal)

bool isHsaAbi(const MCSubtargetInfo &STI)

bool isGFX11(const MCSubtargetInfo &STI)

bool getSMEMIsBuffer(unsigned Opc)

bool isGFX10_3_GFX11(const MCSubtargetInfo &STI)

LLVM_READONLY bool isInvalidSingleUseProducerInst(unsigned Opc)

uint8_t mfmaScaleF8F6F4FormatToNumRegs(unsigned EncodingVal)

LLVM_READONLY bool isInvalidSingleUseConsumerInst(unsigned Opc)

bool isGroupSegment(const GlobalValue *GV)

LLVM_READONLY const MIMGMIPMappingInfo * getMIMGMIPMappingInfo(unsigned MIP)

bool getMTBUFHasSoffset(unsigned Opc)

bool hasXNACK(const MCSubtargetInfo &STI)

bool isValid32BitLiteral(uint64_t Val, bool IsFP64)

unsigned getVOPDOpcode(unsigned Opc)

bool isDPALU_DPP(const MCInstrDesc &OpDesc)

unsigned encodeWaitcnt(const IsaVersion &Version, unsigned Vmcnt, unsigned Expcnt, unsigned Lgkmcnt)

Encodes Vmcnt, Expcnt and Lgkmcnt into Waitcnt for given isa Version.

bool isVOPC64DPP(unsigned Opc)

int getMUBUFOpcode(unsigned BaseOpc, unsigned Elements)

bool isCompute(CallingConv::ID cc)

bool getMAIIsGFX940XDL(unsigned Opc)

bool isSI(const MCSubtargetInfo &STI)

unsigned getDefaultAMDHSACodeObjectVersion()

bool isReadOnlySegment(const GlobalValue *GV)

bool isArgPassedInSGPR(const Argument *A)

bool isIntrinsicAlwaysUniform(unsigned IntrID)

int getMUBUFBaseOpcode(unsigned Opc)

unsigned getAMDHSACodeObjectVersion(const Module &M)

unsigned decodeLgkmcnt(const IsaVersion &Version, unsigned Waitcnt)

unsigned getWaitcntBitMask(const IsaVersion &Version)

bool getVOP3IsSingle(unsigned Opc)

bool isGFX9(const MCSubtargetInfo &STI)

bool getVOP1IsSingle(unsigned Opc)

unsigned getVOPDEncodingFamily(const MCSubtargetInfo &ST)

bool isGFX10_AEncoding(const MCSubtargetInfo &STI)

bool isKImmOperand(const MCInstrDesc &Desc, unsigned OpNo)

Is this a KImm operand?

bool getHasColorExport(const Function &F)

int getMTBUFBaseOpcode(unsigned Opc)

bool isChainCC(CallingConv::ID CC)

bool isGFX90A(const MCSubtargetInfo &STI)

unsigned getSamplecntBitMask(const IsaVersion &Version)

unsigned getDefaultQueueImplicitArgPosition(unsigned CodeObjectVersion)

bool hasSRAMECC(const MCSubtargetInfo &STI)

bool getHasDepthExport(const Function &F)

bool isGFX8_GFX9_GFX10(const MCSubtargetInfo &STI)

bool getMUBUFHasVAddr(unsigned Opc)

int getVOPDFull(unsigned OpX, unsigned OpY, unsigned EncodingFamily)

bool isTrue16Inst(unsigned Opc)

bool hasAny64BitVGPROperands(const MCInstrDesc &OpDesc)

std::pair< unsigned, unsigned > getVOPDComponents(unsigned VOPDOpcode)

LLVM_READONLY const MIMGDimInfo * getMIMGDimInfoByEncoding(uint8_t DimEnc)

bool isInlinableLiteral32(int32_t Literal, bool HasInv2Pi)

bool isGFX12(const MCSubtargetInfo &STI)

unsigned getInitialPSInputAddr(const Function &F)

unsigned encodeExpcnt(const IsaVersion &Version, unsigned Waitcnt, unsigned Expcnt)

bool isSISrcOperand(const MCInstrDesc &Desc, unsigned OpNo)

Is this an AMDGPU specific source operand? These include registers, inline constants,...

bool isLegalSMRDImmOffset(const MCSubtargetInfo &ST, int64_t ByteOffset)

unsigned getKmcntBitMask(const IsaVersion &Version)

unsigned getVmcntBitMask(const IsaVersion &Version)

bool isNotGFX10Plus(const MCSubtargetInfo &STI)

bool hasMAIInsts(const MCSubtargetInfo &STI)

bool isIntrinsicSourceOfDivergence(unsigned IntrID)

bool isKernelCC(const Function *Func)

bool isGenericAtomic(unsigned Opc)

Waitcnt decodeStorecntDscnt(const IsaVersion &Version, unsigned StorecntDscnt)

bool isGFX8Plus(const MCSubtargetInfo &STI)

LLVM_READONLY bool hasNamedOperand(uint64_t Opcode, uint64_t NamedIdx)

LLVM_READNONE bool isInlinableIntLiteral(int64_t Literal)

Is this literal inlinable, and not one of the values intended for floating point values.

unsigned getLgkmcntBitMask(const IsaVersion &Version)

bool getMUBUFTfe(unsigned Opc)

LLVM_READONLY const MIMGBiasMappingInfo * getMIMGBiasMappingInfo(unsigned Bias)

unsigned getBvhcntBitMask(const IsaVersion &Version)

bool hasSMRDSignedImmOffset(const MCSubtargetInfo &ST)

LLVM_READONLY const MIMGDimInfo * getMIMGDimInfoByAsmSuffix(StringRef AsmSuffix)

bool hasMIMG_R128(const MCSubtargetInfo &STI)

bool hasGFX10_3Insts(const MCSubtargetInfo &STI)

bool hasG16(const MCSubtargetInfo &STI)

unsigned getAddrSizeMIMGOp(const MIMGBaseOpcodeInfo *BaseOpcode, const MIMGDimInfo *Dim, bool IsA16, bool IsG16Supported)

int getMTBUFOpcode(unsigned BaseOpc, unsigned Elements)

unsigned getExpcntBitMask(const IsaVersion &Version)

bool hasArchitectedFlatScratch(const MCSubtargetInfo &STI)

bool getMUBUFHasSoffset(unsigned Opc)

bool isNotGFX11Plus(const MCSubtargetInfo &STI)

bool isGFX11Plus(const MCSubtargetInfo &STI)

std::optional< unsigned > getInlineEncodingV2F16(uint32_t Literal)

bool isInlineValue(unsigned Reg)

bool isSISrcFPOperand(const MCInstrDesc &Desc, unsigned OpNo)

Is this floating-point operand?

bool isShader(CallingConv::ID cc)

unsigned getHostcallImplicitArgPosition(unsigned CodeObjectVersion)

bool isGFX10Plus(const MCSubtargetInfo &STI)

std::optional< int64_t > getSMRDEncodedOffset(const MCSubtargetInfo &ST, int64_t ByteOffset, bool IsBuffer, bool HasSOffset)

bool isGlobalSegment(const GlobalValue *GV)

@ OPERAND_KIMM32

Operand with 32-bit immediate that uses the constant bus.

@ OPERAND_REG_INLINE_C_V2INT32

@ OPERAND_REG_INLINE_C_FP64

@ OPERAND_REG_INLINE_C_BF16

@ OPERAND_REG_INLINE_C_V2BF16

@ OPERAND_REG_IMM_V2INT16

@ OPERAND_REG_INLINE_AC_V2FP16

@ OPERAND_REG_IMM_INT32

Operands with register or 32-bit immediate.

@ OPERAND_REG_IMM_BF16_DEFERRED

@ OPERAND_REG_INLINE_C_INT64

@ OPERAND_REG_INLINE_AC_BF16

@ OPERAND_REG_INLINE_C_INT16

Operands with register or inline constant.

@ OPERAND_REG_INLINE_AC_INT16

Operands with an AccVGPR register or inline constant.

@ OPERAND_REG_INLINE_C_V2FP16

@ OPERAND_REG_INLINE_AC_V2INT16

@ OPERAND_REG_INLINE_AC_FP16

@ OPERAND_REG_INLINE_AC_INT32

@ OPERAND_REG_INLINE_AC_FP32

@ OPERAND_REG_INLINE_AC_V2BF16

@ OPERAND_REG_IMM_V2INT32

@ OPERAND_REG_INLINE_C_FP32

@ OPERAND_REG_INLINE_C_INT32

@ OPERAND_REG_INLINE_C_V2INT16

@ OPERAND_REG_INLINE_AC_FP64

@ OPERAND_REG_INLINE_C_FP16

@ OPERAND_REG_INLINE_C_V2FP32

@ OPERAND_INLINE_SPLIT_BARRIER_INT32

@ OPERAND_REG_IMM_FP32_DEFERRED

@ OPERAND_REG_IMM_FP16_DEFERRED

void initDefaultAMDKernelCodeT(AMDGPUMCKernelCodeT &KernelCode, const MCSubtargetInfo *STI)

bool isNotGFX9Plus(const MCSubtargetInfo &STI)

LLVM_READONLY const MIMGLZMappingInfo * getMIMGLZMappingInfo(unsigned L)

bool hasGDS(const MCSubtargetInfo &STI)

bool isLegalSMRDEncodedUnsignedOffset(const MCSubtargetInfo &ST, int64_t EncodedOffset)

bool isGFX9Plus(const MCSubtargetInfo &STI)

bool hasDPPSrc1SGPR(const MCSubtargetInfo &STI)

bool isVOPD(unsigned Opc)

VOPD::InstInfo getVOPDInstInfo(const MCInstrDesc &OpX, const MCInstrDesc &OpY)

unsigned encodeVmcnt(const IsaVersion &Version, unsigned Waitcnt, unsigned Vmcnt)

unsigned decodeExpcnt(const IsaVersion &Version, unsigned Waitcnt)

bool isCvt_F32_Fp8_Bf8_e64(unsigned Opc)

Waitcnt decodeLoadcntDscnt(const IsaVersion &Version, unsigned LoadcntDscnt)

std::optional< unsigned > getInlineEncodingV2I16(uint32_t Literal)

unsigned getRegBitWidth(const TargetRegisterClass &RC)

Get the size in bits of a register from the register class RC.

static unsigned encodeStorecntDscnt(const IsaVersion &Version, unsigned Storecnt, unsigned Dscnt)

int getMCOpcode(uint16_t Opcode, unsigned Gen)

const MIMGBaseOpcodeInfo * getMIMGBaseOpcode(unsigned Opc)

bool isVI(const MCSubtargetInfo &STI)

LLVM_READONLY const MIMGDimInfo * getMIMGDimInfo(unsigned DimEnum)

bool getMUBUFIsBufferInv(unsigned Opc)

MCRegister mc2PseudoReg(MCRegister Reg)

Convert hardware register Reg to a pseudo register.

std::optional< unsigned > getInlineEncodingV2BF16(uint32_t Literal)

unsigned hasKernargPreload(const MCSubtargetInfo &STI)

LLVM_READNONE unsigned getOperandSize(const MCOperandInfo &OpInfo)

bool isCI(const MCSubtargetInfo &STI)

unsigned encodeLgkmcnt(const IsaVersion &Version, unsigned Waitcnt, unsigned Lgkmcnt)

bool getVOP2IsSingle(unsigned Opc)

bool getMAIIsDGEMM(unsigned Opc)

Returns true if MAI operation is a double precision GEMM.

LLVM_READONLY const MIMGBaseOpcodeInfo * getMIMGBaseOpcodeInfo(unsigned BaseOpcode)

unsigned getCompletionActionImplicitArgPosition(unsigned CodeObjectVersion)

SmallVector< unsigned > getIntegerVecAttribute(const Function &F, StringRef Name, unsigned Size, unsigned DefaultVal)

int getMaskedMIMGOp(unsigned Opc, unsigned NewChannels)

bool isModuleEntryFunctionCC(CallingConv::ID CC)

bool isNotGFX12Plus(const MCSubtargetInfo &STI)

bool getMTBUFHasVAddr(unsigned Opc)

unsigned decodeVmcnt(const IsaVersion &Version, unsigned Waitcnt)

uint8_t getELFABIVersion(const Triple &T, unsigned CodeObjectVersion)

std::pair< unsigned, unsigned > getIntegerPairAttribute(const Function &F, StringRef Name, std::pair< unsigned, unsigned > Default, bool OnlyFirstRequired)

unsigned getLoadcntBitMask(const IsaVersion &Version)

bool isInlinableLiteralI16(int32_t Literal, bool HasInv2Pi)

bool hasVOPD(const MCSubtargetInfo &STI)

bool isInlinableLiteral64(int64_t Literal, bool HasInv2Pi)

Is this literal inlinable.

const MFMA_F8F6F4_Info * getMFMA_F8F6F4_WithFormatArgs(unsigned CBSZ, unsigned BLGP, unsigned F8F8Opcode)

unsigned getMultigridSyncArgImplicitArgPosition(unsigned CodeObjectVersion)

bool isGFX9_GFX10_GFX11(const MCSubtargetInfo &STI)

bool isGFX9_GFX10(const MCSubtargetInfo &STI)

int getMUBUFElements(unsigned Opc)

static unsigned encodeLoadcntDscnt(const IsaVersion &Version, unsigned Loadcnt, unsigned Dscnt)

const GcnBufferFormatInfo * getGcnBufferFormatInfo(uint8_t BitsPerComp, uint8_t NumComponents, uint8_t NumFormat, const MCSubtargetInfo &STI)

bool isGraphics(CallingConv::ID cc)

unsigned mapWMMA3AddrTo2AddrOpcode(unsigned Opc)

bool isPermlane16(unsigned Opc)

LLVM_READONLY int getSOPPWithRelaxation(uint16_t Opcode)

bool getMUBUFHasSrsrc(unsigned Opc)

unsigned getDscntBitMask(const IsaVersion &Version)

@ AMDGPU_KERNEL

Used for AMDGPU code object kernels.

@ SPIR_KERNEL

Used for SPIR kernel functions.

unsigned ID

LLVM IR allows to use arbitrary numbers as calling convention identifiers.

This is an optimization pass for GlobalISel generic memory operations.

raw_ostream & operator<<(raw_ostream &OS, const APFixedPoint &FX)

@ Default

The result values are uniform if and only if all operands are uniform.

uint64_t maxUIntN(uint64_t N)

Gets the maximum value for a N-bit unsigned integer.

AMD Kernel Code Object (amd_kernel_code_t).

static constexpr unsigned Width

constexpr EncodingField(ValueType Value)

static constexpr unsigned Offset

static constexpr ValueType Default

static ValueType decode(uint64_t Encoded)

constexpr uint64_t encode() const

static constexpr uint64_t encode(Fields... Values)

static std::tuple< typename Fields::ValueType... > decode(uint64_t Encoded)

constexpr uint64_t encode() const

static ValueType decode(uint64_t Encoded)

MIMGBaseOpcode BaseOpcode

Represents the counter values to wait for in an s_waitcnt instruction.

Waitcnt(unsigned LoadCnt, unsigned ExpCnt, unsigned DsCnt, unsigned StoreCnt, unsigned SampleCnt, unsigned BvhCnt, unsigned KmCnt)

bool hasWaitExceptStoreCnt() const

bool hasWaitStoreCnt() const

Waitcnt(unsigned VmCnt, unsigned ExpCnt, unsigned LgkmCnt, unsigned VsCnt)

Waitcnt combined(const Waitcnt &Other) const

Description of the encoding of one expression Op.