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

22

23#define GET_INSTRINFO_OPERAND_ENUM

24#include "AMDGPUGenInstrInfo.inc"

25

27

28namespace llvm {

29

30struct Align;

31class Argument;

32class Function;

33class GlobalValue;

34class MCInstrInfo;

35class MCRegisterClass;

36class MCRegisterInfo;

37class MCSubtargetInfo;

38class MDNode;

39class StringRef;

40class Triple;

41class raw_ostream;

42

43namespace AMDGPU {

44

45struct AMDGPUMCKernelCodeT;

46struct IsaVersion;

47

48

49

50

51

53static constexpr unsigned GFX9 = 1;

54static constexpr unsigned GFX9_4 = 1;

55static constexpr unsigned GFX10_1 = 1;

56static constexpr unsigned GFX10_3 = 1;

57static constexpr unsigned GFX11 = 1;

58static constexpr unsigned GFX12 = 1;

59}

60

62

64

65

67

68

70

71

73

74

75

76

78

79

80

82

83

85

86

88

91

99

105

112

116

122

127

128#define GET_MIMGBaseOpcode_DECL

129#define GET_MIMGDim_DECL

130#define GET_MIMGEncoding_DECL

131#define GET_MIMGLZMapping_DECL

132#define GET_MIMGMIPMapping_DECL

133#define GET_MIMGBiASMapping_DECL

134#define GET_MAIInstInfoTable_DECL

135#define GET_isMFMA_F8F6F4Table_DECL

136#define GET_isCvtScaleF32_F32F16ToF8F4Table_DECL

137#define GET_True16D16Table_DECL

138#define GET_WMMAInstInfoTable_DECL

139#include "AMDGPUGenSearchableTables.inc"

140

141namespace IsaInfo {

142

143enum {

144

145

148};

149

151

153private:

157

158public:

161

162

166

167

172

173

174

179

180

181

183

184

186 XnackSetting = NewXnackSetting;

187 }

188

189

193

194

199

200

201

206

207

208

210

211

213 SramEccSetting = NewSramEccSetting;

214 }

215

218

219

220 std::string toString() const;

221};

222

223

225

226

228

229

230

232

233

234

236

237

238

240 unsigned FlatWorkGroupSize);

241

242

243

245

246

247

249

250

251

253 unsigned FlatWorkGroupSize);

254

255

257

258

260

261

262

264 unsigned FlatWorkGroupSize);

265

266

268

269

271

272

274

275

277

278

279

281

282

283

285 bool Addressable);

286

287

288

290 bool FlatScrUsed, bool XNACKUsed);

291

292

293

294

296 bool FlatScrUsed);

297

298

299

300

302

303

304

305

306

307unsigned

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

310

311

312

313

314

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

318

319

320

322

323

325

326

327

329

330

332 unsigned DynamicVGPRBlockSize);

333

334

335

337 unsigned DynamicVGPRBlockSize);

338

339

340

342 unsigned DynamicVGPRBlockSize);

343

344

345

347 unsigned NumVGPRs,

348 unsigned DynamicVGPRBlockSize);

349

350

351

353 unsigned MaxWaves,

354 unsigned TotalNumVGPRs);

355

356

357

360

361

362

363

364

365

366

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

370

371

372

375 unsigned DynamicVGPRBlockSize,

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

377

378}

379

380

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

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

384 static constexpr unsigned Offset = LowBit;

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

386

389

392

395};

396

397

398template <unsigned Bit, unsigned D = 0>

400

401

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

405 }

406

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

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

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

410 }

411};

412

415 return getNamedOperandIdx(Opcode, NamedIdx) != -1;

416}

417

420

441

444

447

457

460

463

466

468 MIMGBaseOpcode L;

469 MIMGBaseOpcode LZ;

470};

471

476

481

486

488 MIMGBaseOpcode G;

490};

491

494

499

502

505

508

511

513int getMIMGOpcode(unsigned BaseOpcode, unsigned MIMGEncoding,

514 unsigned VDataDwords, unsigned VAddrDwords);

515

518

522 bool IsG16Supported);

523

532

535

538

540int getMTBUFOpcode(unsigned BaseOpc, unsigned Elements);

541

544

547

550

553

556

558int getMUBUFOpcode(unsigned BaseOpc, unsigned Elements);

559

562

565

568

571

574

577

580

583

586

589

592

595

596

599

602

605

606

607

608

610

615

616

619

622

625

628 unsigned BLGP,

629 unsigned F8F8Opcode);

630

633

636 unsigned FmtB,

637 unsigned F8F8Opcode);

638

647

650

653

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

656 bool VOPD3);

657

660

663

666

669

672

673namespace VOPD {

674

685

686

687

690

694

695

697private:

698 unsigned SrcOperandsNum = 0;

699 unsigned MandatoryLiteralIdx = ~0u;

700 bool HasSrc2Acc = false;

701 unsigned NumVOPD3Mods = 0;

702 unsigned Opcode = 0;

703 bool IsVOP3 = false;

704

705public:

708

709

711

712

714 return SrcOperandsNum - HasSrc2Acc;

715 }

716

717

719

720

721

724 return MandatoryLiteralIdx;

725 }

726

727

728

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

732 }

733

734

736

737

739

740

741 unsigned getOpcode() const { return Opcode; }

742

743

744 unsigned isVOP3() const { return IsVOP3; }

745

746

748

749private:

750 bool hasMandatoryLiteralAt(unsigned CompSrcIdx) const {

753 }

754};

755

762

763

764

765

766

767

768

769

770

771

772

773

774

775

776

777

778

779

780

781

782

783

784

785

786

787

788

789

790

791

792

794private:

795

796

797

798

799

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

801

802

803

804

805

806

807

808 static constexpr unsigned SINGLE_MC_SRC_IDX[4][3] = {

809 {1, 2, 3}, {2, 3, 4}, {2, 4, 5}, {2, 4, 6}};

810

811

812

813

814

815

816

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

818 4 };

819 static constexpr unsigned FIRST_PARSED_SRC_IDX[] = {

820 2, 2, 5 };

821

822private:

825 const unsigned VOPD3ModsNum;

826 const int BitOp3Idx;

827

828public:

829

831 : Kind(Kind), VOPD3ModsNum(VOPD3ModsNum), BitOp3Idx(BitOp3Idx) {

833 }

834

835

837 int BitOp3Idx)

839 VOPD3ModsNum(VOPD3ModsNum), BitOp3Idx(BitOp3Idx) {}

840

841public:

842

844

845

848

849 if (Kind == SINGLE && CompSrcIdx == 2 && BitOp3Idx != -1)

850 return BitOp3Idx;

851

852 if (VOPD3) {

853 return SINGLE_MC_SRC_IDX[VOPD3ModsNum][CompSrcIdx] + getPrevCompSrcNum() +

854 getPrevCompVOPD3ModsNum() + (Kind != SINGLE ? 1 : 0);

855 }

856

857 return SINGLE_MC_SRC_IDX[0][CompSrcIdx] + getPrevCompSrcNum() +

858 (Kind != SINGLE ? 1 : 0);

859 }

860

861

863 return PARSED_DST_IDX[Kind] + getPrevCompParsedSrcNum();

864 }

865

866

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

870 }

871

872private:

873 unsigned getPrevCompSrcNum() const {

875 }

876 unsigned getPrevCompParsedSrcNum() const {

878 }

879 unsigned getPrevCompVOPD3ModsNum() const {

881 }

882};

883

884

886public:

887

890 bool VOP3Layout = false)

893

894

896 bool VOP3Layout = false)

900

901

902

904};

905

906

908private:

910

911public:

912 using RegIndices = std::array<MCRegister, Component::MAX_OPR_NUM>;

913

915 : CompInfo{OpX, OpY} {}

916

918 : CompInfo{OprInfoX, OprInfoY} {}

919

922 return CompInfo[ComponentIdx];

923 }

924

925

926

927

928

929

930

931

932

933

934

935 bool

938 bool AllowSameVGPR = false, bool VOPD3 = false) const {

940 VOPD3)

941 .has_value();

942 }

943

944

945

946

947

948

949

950

951

953 std::function<MCRegister(unsigned, unsigned)> GetRegIdx,

955 bool AllowSameVGPR = false, bool VOPD3 = false) const;

956

957private:

959 getRegIndices(unsigned ComponentIdx,

960 std::function<MCRegister(unsigned, unsigned)> GetRegIdx,

961 bool VOPD3) const;

962};

963

964}

965

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

968

970

971

973

975

978

985

988

991

994

997

999

1002

1005

1008

1012

1013

1014

1016

1017

1018

1019

1020

1021

1023

1024

1025

1026

1027std::tuple<char, unsigned, unsigned>

1029

1030

1031

1032

1033

1034

1035

1037

1038

1039

1040

1041

1042

1043

1044

1045

1046

1047std::pair<unsigned, unsigned>

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

1050 bool OnlyFirstRequired = false);

1051

1052

1053

1054

1055

1056

1057

1058

1059

1060

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

1063 bool OnlyFirstRequired = false);

1064

1065

1066

1067

1068

1070 unsigned Size,

1072

1073std::optional<SmallVector>

1075

1076

1078

1079

1080

1081

1082

1123

1124

1125

1126

1127

1129

1130

1132

1133

1135

1136

1138

1139

1141

1142

1144

1145

1147

1148

1149

1150

1151

1152

1153

1154

1155

1156

1157

1158

1159

1160

1161

1162

1163void decodeWaitcnt(const IsaVersion &Version, unsigned Waitcnt, unsigned &Vmcnt,

1164 unsigned &Expcnt, unsigned &Lgkmcnt);

1165

1167

1168

1170 unsigned Vmcnt);

1171

1172

1174 unsigned Expcnt);

1175

1176

1178 unsigned Lgkmcnt);

1179

1180

1181

1182

1183

1184

1185

1186

1187

1188

1189

1190

1191

1192

1193

1194

1195

1196

1197

1199 unsigned Expcnt, unsigned Lgkmcnt);

1200

1202

1203

1204

1205

1206

1207

1209

1210

1211

1213

1214

1215

1217

1218

1219

1221

1222

1223

1225

1226

1227

1229

1230

1231

1232

1233

1235

1236

1237

1238

1239

1240

1242

1243

1244

1246

1247

1248

1249

1251

1252

1253

1254

1256

1257namespace Hwreg {

1258

1261

1267

1269

1270}

1271

1273

1281

1282

1284

1285

1287

1288

1290

1291

1293

1294

1296

1297

1299

1300

1302

1303

1305

1306

1308

1309

1311

1312

1314

1315

1317

1318

1320

1321

1323

1324

1326

1327

1329

1330

1332

1333

1335

1336

1338

1339

1341

1342

1344

1345}

1346

1347namespace Exp {

1348

1350

1353

1356

1357}

1358

1359namespace MTBUFFormat {

1360

1362int64_t encodeDfmtNfmt(unsigned Dfmt, unsigned Nfmt);

1363

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

1365

1366int64_t getDfmt(const StringRef Name);

1367

1369

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

1371

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

1373

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

1375

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

1377

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

1379

1381

1383

1385 const MCSubtargetInfo &STI);

1386

1388

1390

1391}

1392

1394

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

1397

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

1400 bool Strict = true);

1401

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

1405

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

1408

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

1411

1412void decodeMsg(unsigned Val, uint16_t &MsgId, uint16_t &OpId,

1413 uint16_t &StreamId, const MCSubtargetInfo &STI);

1414

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

1417

1418}

1419

1421

1423

1425

1427

1428

1429

1431

1434 switch (CC) {

1444 return true;

1445 default:

1446 return false;

1447 }

1448}

1449

1455

1460

1463 switch (CC) {

1473 return true;

1474 default:

1475 return false;

1476 }

1477}

1478

1481 switch (CC) {

1484 return true;

1485 default:

1486 return false;

1487 }

1488}

1489

1490

1491

1492

1493

1494

1495

1498 switch (CC) {

1500 return true;

1501 default:

1503 }

1504}

1505

1508 switch (CC) {

1511 return true;

1512 default:

1513 return false;

1514 }

1515}

1516

1518

1523

1524

1527 switch (CC) {

1531 return true;

1532 default:

1534 }

1535}

1536

1546

1581

1585

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

1589

1590

1592

1593

1595

1596

1597

1599

1600

1603

1606

1607

1608

1613

1617

1618

1620

1621

1623

1624

1626

1627

1629

1630

1632

1635 switch (OpInfo.OperandType) {

1647 return 4;

1648

1655 return 8;

1656

1670 return 2;

1671

1672 default:

1674 }

1675}

1676

1681

1682

1683

1688

1689

1692

1695

1698

1701

1704

1707

1710

1713

1716

1719

1722

1725

1728

1731

1733

1735

1737

1740 int64_t EncodedOffset);

1741

1744 int64_t EncodedOffset, bool IsBuffer);

1745

1746

1747

1749

1750

1751

1752

1753

1755 int64_t ByteOffset, bool IsBuffer,

1756 bool HasSOffset = false);

1757

1758

1759

1761 int64_t ByteOffset);

1762

1763

1764

1765

1766

1767

1768

1770

1771

1772

1773

1775

1784

1785

1788

1789

1791

1792

1795

1796

1798

1799

1801

1802

1803

1806

1807

1808

1810

1811

1814

1815

1816

1817

1818std::pair<const AMDGPU::OpName *, const AMDGPU::OpName *>

1820

1821

1823

1824

1825

1826

1828

1830public:

1832

1834

1836

1838

1840

1842

1844

1846

1848

1850

1851

1852

1853 const std::array<unsigned, 3> &getDims() const;

1854

1856 return AttrKind == RHS.AttrKind && Dims == RHS.Dims;

1857 }

1858

1860

1862

1863private:

1864 enum Encoding { EncoNoCluster = 0, EncoVariableDims = 1024 };

1865

1867

1868 std::array<unsigned, 3> Dims = {0, 0, 0};

1869

1871};

1872

1873}

1874

1877

1878}

1879

1880#endif

unsigned const MachineRegisterInfo * MRI

assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")

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.

Register const TargetRegisterInfo * TRI

unsigned unsigned DefaultVal

Definition AMDGPUBaseInfo.h:1829

bool isNoCluster() const

Definition AMDGPUBaseInfo.h:1839

void setUnknown()

Definition AMDGPUBaseInfo.h:1845

static ClusterDimsAttr get(const Function &F)

bool isFixedDims() const

Definition AMDGPUBaseInfo.h:1841

Kind

Definition AMDGPUBaseInfo.h:1831

@ FixedDims

Definition AMDGPUBaseInfo.h:1831

@ NoCluster

Definition AMDGPUBaseInfo.h:1831

@ Unknown

Definition AMDGPUBaseInfo.h:1831

@ VariableDims

Definition AMDGPUBaseInfo.h:1831

Kind getKind() const

Definition AMDGPUBaseInfo.h:1835

ClusterDimsAttr()=default

void setNoCluster()

Definition AMDGPUBaseInfo.h:1847

bool isUnknown() const

Definition AMDGPUBaseInfo.h:1837

void setVariableDims()

Definition AMDGPUBaseInfo.h:1849

bool operator==(const ClusterDimsAttr &RHS) const

Definition AMDGPUBaseInfo.h:1855

std::string to_string() const

const std::array< unsigned, 3 > & getDims() const

bool isVariableDims() const

Definition AMDGPUBaseInfo.h:1843

bool isSramEccSupported() const

Definition AMDGPUBaseInfo.h:190

void setTargetIDFromFeaturesString(StringRef FS)

void setXnackSetting(TargetIDSetting NewXnackSetting)

Sets xnack setting to NewXnackSetting.

Definition AMDGPUBaseInfo.h:185

bool isSramEccOnOrAny() const

Definition AMDGPUBaseInfo.h:195

TargetIDSetting getXnackSetting() const

Definition AMDGPUBaseInfo.h:182

bool isXnackOnOrAny() const

Definition AMDGPUBaseInfo.h:168

AMDGPUTargetID(const MCSubtargetInfo &STI)

bool isXnackOnOrOff() const

Definition AMDGPUBaseInfo.h:175

bool isXnackSupported() const

Definition AMDGPUBaseInfo.h:163

void setTargetIDFromTargetIDStream(StringRef TargetID)

~AMDGPUTargetID()=default

void setSramEccSetting(TargetIDSetting NewSramEccSetting)

Sets sramecc setting to NewSramEccSetting.

Definition AMDGPUBaseInfo.h:212

bool isSramEccOnOrOff() const

Definition AMDGPUBaseInfo.h:202

std::string toString() const

TargetIDSetting getSramEccSetting() const

Definition AMDGPUBaseInfo.h:209

Definition AMDGPUBaseInfo.h:885

unsigned getIndexInParsedOperands(unsigned CompOprIdx) const

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

Definition AMDGPUBaseInfo.h:888

ComponentInfo(const MCInstrDesc &OpDesc, const ComponentProps &OpXProps, bool VOP3Layout=false)

Definition AMDGPUBaseInfo.h:895

unsigned getIndexOfDstInMCOperands() const

Definition AMDGPUBaseInfo.h:843

unsigned getIndexOfDstInParsedOperands() const

Definition AMDGPUBaseInfo.h:862

unsigned getIndexOfSrcInMCOperands(unsigned CompSrcIdx, bool VOPD3) const

Definition AMDGPUBaseInfo.h:846

ComponentLayout(const ComponentProps &OpXProps, unsigned VOPD3ModsNum, int BitOp3Idx)

Definition AMDGPUBaseInfo.h:836

unsigned getIndexOfSrcInParsedOperands(unsigned CompSrcIdx) const

Definition AMDGPUBaseInfo.h:867

ComponentLayout(ComponentKind Kind, unsigned VOPD3ModsNum, int BitOp3Idx)

Definition AMDGPUBaseInfo.h:830

Definition AMDGPUBaseInfo.h:696

bool hasMandatoryLiteral() const

Definition AMDGPUBaseInfo.h:718

int getBitOp3OperandIdx() const

bool hasRegSrcOperand(unsigned CompSrcIdx) const

Definition AMDGPUBaseInfo.h:729

bool hasSrc2Acc() const

Definition AMDGPUBaseInfo.h:735

unsigned getCompSrcOperandsNum() const

Definition AMDGPUBaseInfo.h:710

unsigned getMandatoryLiteralCompOperandIndex() const

Definition AMDGPUBaseInfo.h:722

unsigned isVOP3() const

Definition AMDGPUBaseInfo.h:744

unsigned getOpcode() const

Definition AMDGPUBaseInfo.h:741

unsigned getCompVOPD3ModsNum() const

Definition AMDGPUBaseInfo.h:738

unsigned getCompParsedSrcOperandsNum() const

Definition AMDGPUBaseInfo.h:713

std::optional< unsigned > getInvalidCompOperandIndex(std::function< MCRegister(unsigned, unsigned)> GetRegIdx, const MCRegisterInfo &MRI, bool SkipSrc=false, bool AllowSameVGPR=false, bool VOPD3=false) const

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

Definition AMDGPUBaseInfo.h:917

bool hasInvalidOperand(std::function< MCRegister(unsigned, unsigned)> GetRegIdx, const MCRegisterInfo &MRI, bool SkipSrc=false, bool AllowSameVGPR=false, bool VOPD3=false) const

Definition AMDGPUBaseInfo.h:936

const ComponentInfo & operator[](size_t ComponentIdx) const

Definition AMDGPUBaseInfo.h:920

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

Definition AMDGPUBaseInfo.h:914

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

Definition AMDGPUBaseInfo.h:912

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 ...

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.

The instances of the Type class are immutable: once they are created, they are never changed.

This class implements an extremely fast bulk output stream that can only output to a stream.

#define llvm_unreachable(msg)

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

unsigned decodeFieldVaVcc(unsigned Encoded)

unsigned encodeFieldVaVcc(unsigned Encoded, unsigned VaVcc)

unsigned encodeFieldHoldCnt(unsigned Encoded, unsigned HoldCnt)

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

unsigned encodeFieldVaSsrc(unsigned Encoded, unsigned VaSsrc)

unsigned encodeFieldVaVdst(unsigned Encoded, unsigned VaVdst)

unsigned decodeFieldSaSdst(unsigned Encoded)

unsigned decodeFieldVaSdst(unsigned Encoded)

unsigned encodeFieldVmVsrc(unsigned Encoded, unsigned VmVsrc)

unsigned decodeFieldVaSsrc(unsigned Encoded)

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)

unsigned decodeFieldHoldCnt(unsigned Encoded)

int getDefaultDepCtrEncoding(const MCSubtargetInfo &STI)

unsigned decodeFieldVmVsrc(unsigned Encoded)

unsigned encodeFieldVaSdst(unsigned Encoded, unsigned VaSdst)

bool isSupportedTgtId(unsigned Id, const MCSubtargetInfo &STI)

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

unsigned getTgtId(const StringRef Name)

Generic target versions emitted by this version of LLVM.

Definition AMDGPUBaseInfo.h:52

static constexpr unsigned GFX9_4

Definition AMDGPUBaseInfo.h:54

static constexpr unsigned GFX10_1

Definition AMDGPUBaseInfo.h:55

static constexpr unsigned GFX10_3

Definition AMDGPUBaseInfo.h:56

static constexpr unsigned GFX11

Definition AMDGPUBaseInfo.h:57

static constexpr unsigned GFX9

Definition AMDGPUBaseInfo.h:53

static constexpr unsigned GFX12

Definition AMDGPUBaseInfo.h:58

EncodingField< 10, 6 > HwregOffset

Definition AMDGPUBaseInfo.h:1260

EncodingField< 5, 0 > HwregId

Definition AMDGPUBaseInfo.h:1259

EncodingFields< HwregId, HwregOffset, HwregSize > HwregEncoding

Definition AMDGPUBaseInfo.h:1268

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

@ TRAP_NUM_SGPRS

Definition AMDGPUBaseInfo.h:147

@ FIXED_NUM_SGPRS_FOR_INIT_BUG

Definition AMDGPUBaseInfo.h:146

unsigned getTotalNumVGPRs(const MCSubtargetInfo *STI)

unsigned getArchVGPRAllocGranule()

For subtargets with a unified VGPR file and mixed ArchVGPR/AGPR usage, returns the allocation granule...

unsigned getWavesPerEUForWorkGroup(const MCSubtargetInfo *STI, unsigned FlatWorkGroupSize)

unsigned getWavefrontSize(const MCSubtargetInfo *STI)

unsigned getNumWavesPerEUWithNumVGPRs(const MCSubtargetInfo *STI, unsigned NumVGPRs, unsigned DynamicVGPRBlockSize)

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 getEUsPerCU(const MCSubtargetInfo *STI)

unsigned getAddressableNumSGPRs(const MCSubtargetInfo *STI)

unsigned getMinNumSGPRs(const MCSubtargetInfo *STI, unsigned WavesPerEU)

unsigned getMinFlatWorkGroupSize(const MCSubtargetInfo *STI)

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

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

unsigned getNumSGPRBlocks(const MCSubtargetInfo *STI, unsigned NumSGPRs)

unsigned getMinWavesPerEU(const MCSubtargetInfo *STI)

unsigned getMaxNumVGPRs(const MCSubtargetInfo *STI, unsigned WavesPerEU, unsigned DynamicVGPRBlockSize)

unsigned getSGPRAllocGranule(const MCSubtargetInfo *STI)

TargetIDSetting

Definition AMDGPUBaseInfo.h:150

@ On

Definition AMDGPUBaseInfo.h:150

@ Unsupported

Definition AMDGPUBaseInfo.h:150

@ Off

Definition AMDGPUBaseInfo.h:150

@ Any

Definition AMDGPUBaseInfo.h:150

unsigned getMinNumVGPRs(const MCSubtargetInfo *STI, unsigned WavesPerEU, unsigned DynamicVGPRBlockSize)

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

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

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

unsigned getAddressableNumArchVGPRs(const MCSubtargetInfo *STI)

unsigned getTotalNumSGPRs(const MCSubtargetInfo *STI)

unsigned getAddressableNumVGPRs(const MCSubtargetInfo *STI, unsigned DynamicVGPRBlockSize)

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[]

Definition AMDGPUBaseInfo.h:688

constexpr unsigned COMPONENTS_NUM

Definition AMDGPUBaseInfo.h:693

constexpr unsigned VOPD3_VGPR_BANK_MASKS[]

Definition AMDGPUBaseInfo.h:689

ComponentIndex

Definition AMDGPUBaseInfo.h:691

@ X

Definition AMDGPUBaseInfo.h:691

@ Y

Definition AMDGPUBaseInfo.h:691

ComponentKind

Definition AMDGPUBaseInfo.h:756

@ COMPONENT_X

Definition AMDGPUBaseInfo.h:758

@ SINGLE

Definition AMDGPUBaseInfo.h:757

@ MAX

Definition AMDGPUBaseInfo.h:760

@ COMPONENT_Y

Definition AMDGPUBaseInfo.h:759

constexpr unsigned COMPONENTS[]

Definition AMDGPUBaseInfo.h:692

Component

Definition AMDGPUBaseInfo.h:675

@ MAX_SRC_NUM

Definition AMDGPUBaseInfo.h:682

@ MAX_OPR_NUM

Definition AMDGPUBaseInfo.h:683

@ DST

Definition AMDGPUBaseInfo.h:676

@ SRC2

Definition AMDGPUBaseInfo.h:679

@ DST_NUM

Definition AMDGPUBaseInfo.h:681

@ SRC1

Definition AMDGPUBaseInfo.h:678

@ SRC0

Definition AMDGPUBaseInfo.h:677

bool isPackedFP32Inst(unsigned Opc)

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 isInlineValue(MCRegister Reg)

bool isGFX10_GFX11(const MCSubtargetInfo &STI)

bool isInlinableLiteralV216(uint32_t Literal, uint8_t OpType)

EncodingField< Bit, Bit, D > EncodingBit

Definition AMDGPUBaseInfo.h:399

LLVM_READONLY const MIMGInfo * getMIMGInfo(unsigned Opc)

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)

bool getWMMAIsXDL(unsigned Opc)

uint8_t wmmaScaleF8F6F4FormatToNumRegs(unsigned Fmt)

bool isGFX10Before1030(const MCSubtargetInfo &STI)

LLVM_READNONE constexpr bool isShader(CallingConv::ID CC)

Definition AMDGPUBaseInfo.h:1433

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)

unsigned getTemporalHintType(const MCInstrDesc TID)

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

bool isGFX10(const MCSubtargetInfo &STI)

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.

@ AMDHSA_COV4

Definition AMDGPUBaseInfo.h:61

@ AMDHSA_COV5

Definition AMDGPUBaseInfo.h:61

@ AMDHSA_COV6

Definition AMDGPUBaseInfo.h:61

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)

const MCRegisterClass * getVGPRPhysRegClass(MCRegister Reg, const MCRegisterInfo &MRI)

LLVM_READNONE constexpr bool isModuleEntryFunctionCC(CallingConv::ID CC)

Definition AMDGPUBaseInfo.h:1497

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 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)

bool hasValueInRangeLikeMetadata(const MDNode &MD, int64_t Val)

Checks if Val is inside MD, a !range-like metadata.

LLVM_READONLY bool isInvalidSingleUseProducerInst(unsigned Opc)

uint8_t mfmaScaleF8F6F4FormatToNumRegs(unsigned EncodingVal)

LLVM_READONLY bool isInvalidSingleUseConsumerInst(unsigned Opc)

unsigned getVOPDOpcode(unsigned Opc, bool VOPD3)

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)

CanBeVOPD getCanBeVOPD(unsigned Opc, unsigned EncodingFamily, bool VOPD3)

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

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

LLVM_READNONE bool isLegalDPALU_DPPControl(const MCSubtargetInfo &ST, unsigned DC)

Definition AMDGPUBaseInfo.h:1777

bool isVOPC64DPP(unsigned Opc)

int getMUBUFOpcode(unsigned BaseOpc, unsigned Elements)

bool getMAIIsGFX940XDL(unsigned Opc)

bool isSI(const MCSubtargetInfo &STI)

unsigned getDefaultAMDHSACodeObjectVersion()

bool isReadOnlySegment(const GlobalValue *GV)

bool isArgPassedInSGPR(const Argument *A)

LLVM_READNONE constexpr bool mayTailCallThisCC(CallingConv::ID CC)

Return true if we might ever do TCO for calls with this calling convention.

Definition AMDGPUBaseInfo.h:1526

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)

LLVM_READONLY bool hasNamedOperand(uint64_t Opcode, OpName NamedIdx)

Definition AMDGPUBaseInfo.h:414

bool getVOP3IsSingle(unsigned Opc)

bool isGFX9(const MCSubtargetInfo &STI)

bool isDPALU_DPP32BitOpc(unsigned Opc)

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 isGFX90A(const MCSubtargetInfo &STI)

unsigned getSamplecntBitMask(const IsaVersion &Version)

unsigned getDefaultQueueImplicitArgPosition(unsigned CodeObjectVersion)

std::tuple< char, unsigned, unsigned > parseAsmPhysRegName(StringRef RegName)

Returns a valid charcode or 0 in the first entry if this is a valid physical register name.

bool hasSRAMECC(const MCSubtargetInfo &STI)

bool getHasDepthExport(const Function &F)

bool isGFX8_GFX9_GFX10(const MCSubtargetInfo &STI)

LLVM_READNONE constexpr bool isKernel(CallingConv::ID CC)

Definition AMDGPUBaseInfo.h:1507

bool getMUBUFHasVAddr(unsigned Opc)

bool isTrue16Inst(unsigned Opc)

LLVM_READNONE constexpr bool isEntryFunctionCC(CallingConv::ID CC)

Definition AMDGPUBaseInfo.h:1462

unsigned getVGPREncodingMSBs(MCRegister Reg, const MCRegisterInfo &MRI)

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

LLVM_READONLY const MIMGDimInfo * getMIMGDimInfoByEncoding(uint8_t DimEnc)

bool isInlinableLiteral32(int32_t Literal, bool HasInv2Pi)

LLVM_READNONE constexpr bool isCompute(CallingConv::ID CC)

Definition AMDGPUBaseInfo.h:1457

bool isGFX12(const MCSubtargetInfo &STI)

unsigned getInitialPSInputAddr(const Function &F)

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

bool isAsyncStore(unsigned Opc)

unsigned getDynamicVGPRBlockSize(const Function &F)

bool isLegalSMRDImmOffset(const MCSubtargetInfo &ST, int64_t ByteOffset)

unsigned getKmcntBitMask(const IsaVersion &Version)

MCRegister getVGPRWithMSBs(MCRegister Reg, unsigned MSBs, const MCRegisterInfo &MRI)

If Reg is a low VGPR return a corresponding high VGPR with MSBs set.

unsigned getVmcntBitMask(const IsaVersion &Version)

FPType

Definition AMDGPUBaseInfo.h:63

@ FP4

Definition AMDGPUBaseInfo.h:63

@ FP8

Definition AMDGPUBaseInfo.h:63

bool isNotGFX10Plus(const MCSubtargetInfo &STI)

bool hasMAIInsts(const MCSubtargetInfo &STI)

unsigned getBitOp2(unsigned Opc)

bool isIntrinsicSourceOfDivergence(unsigned IntrID)

constexpr bool isSISrcOperand(const MCOperandInfo &OpInfo)

Is this an AMDGPU specific source operand?

Definition AMDGPUBaseInfo.h:1609

unsigned getXcntBitMask(const IsaVersion &Version)

bool isGenericAtomic(unsigned Opc)

const MFMA_F8F6F4_Info * getWMMA_F8F6F4_WithFormatArgs(unsigned FmtA, unsigned FmtB, unsigned F8F8Opcode)

Waitcnt decodeStorecntDscnt(const IsaVersion &Version, unsigned StorecntDscnt)

bool isGFX8Plus(const MCSubtargetInfo &STI)

LLVM_READNONE bool isInlinableIntLiteral(int64_t Literal)

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

Definition AMDGPUBaseInfo.h:1685

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)

std::pair< const AMDGPU::OpName *, const AMDGPU::OpName * > getVGPRLoweringOperandTables(const MCInstrDesc &Desc)

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 isSISrcFPOperand(const MCInstrDesc &Desc, unsigned OpNo)

Is this floating-point operand?

std::tuple< char, unsigned, unsigned > parseAsmConstraintPhysReg(StringRef Constraint)

Returns a valid charcode or 0 in the first entry if this is a valid physical register constraint.

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)

int64_t encode32BitLiteral(int64_t Imm, OperandType Type, bool IsLit)

@ OPERAND_KIMM32

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

@ OPERAND_REG_INLINE_C_FP64

@ OPERAND_REG_INLINE_C_BF16

@ OPERAND_REG_INLINE_C_V2BF16

@ OPERAND_REG_IMM_V2INT16

@ OPERAND_REG_IMM_INT32

Operands with register, 32-bit, or 64-bit immediate.

@ OPERAND_REG_INLINE_C_INT64

@ OPERAND_REG_INLINE_C_INT16

Operands with register or inline constant.

@ OPERAND_REG_IMM_NOINLINE_V2FP16

@ OPERAND_REG_INLINE_C_V2FP16

@ OPERAND_REG_INLINE_AC_INT32

Operands with an AccVGPR register or inline constant.

@ OPERAND_REG_INLINE_AC_FP32

@ 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_INLINE_SPLIT_BARRIER_INT32

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

bool isNotGFX9Plus(const MCSubtargetInfo &STI)

LLVM_READONLY const MIMGLZMappingInfo * getMIMGLZMappingInfo(unsigned L)

bool isDPALU_DPP(const MCInstrDesc &OpDesc, const MCInstrInfo &MII, const MCSubtargetInfo &ST)

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)

bool isGFX1250(const MCSubtargetInfo &STI)

bool supportsWave32(const MCSubtargetInfo &STI)

Definition AMDGPUBaseInfo.h:1582

int getMCOpcode(uint16_t Opcode, unsigned Gen)

const MIMGBaseOpcodeInfo * getMIMGBaseOpcode(unsigned Opc)

bool isVI(const MCSubtargetInfo &STI)

bool isTensorStore(unsigned Opc)

LLVM_READONLY const MIMGDimInfo * getMIMGDimInfo(unsigned DimEnum)

bool getMUBUFIsBufferInv(unsigned Opc)

bool supportsScaleOffset(const MCInstrInfo &MII, unsigned Opcode)

MCRegister mc2PseudoReg(MCRegister Reg)

Convert hardware register Reg to a pseudo register.

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

unsigned hasKernargPreload(const MCSubtargetInfo &STI)

bool supportsWGP(const MCSubtargetInfo &STI)

bool hasDynamicVGPR(const Function &F)

LLVM_READNONE unsigned getOperandSize(const MCOperandInfo &OpInfo)

Definition AMDGPUBaseInfo.h:1634

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)

LLVM_READNONE constexpr bool isChainCC(CallingConv::ID CC)

Definition AMDGPUBaseInfo.h:1480

int getMaskedMIMGOp(unsigned Opc, unsigned NewChannels)

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)

LLVM_READNONE constexpr bool canGuaranteeTCO(CallingConv::ID CC)

Definition AMDGPUBaseInfo.h:1520

LLVM_READNONE constexpr bool isGraphics(CallingConv::ID CC)

Definition AMDGPUBaseInfo.h:1451

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

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)

unsigned mapWMMA3AddrTo2AddrOpcode(unsigned Opc)

bool isPermlane16(unsigned Opc)

LLVM_READONLY int getSOPPWithRelaxation(uint16_t Opcode)

bool getMUBUFHasSrsrc(unsigned Opc)

unsigned getDscntBitMask(const IsaVersion &Version)

bool hasAny64BitVGPROperands(const MCInstrDesc &OpDesc, const MCInstrInfo &MII, const MCSubtargetInfo &ST)

unsigned ID

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

@ AMDGPU_CS

Used for Mesa/AMDPAL compute shaders.

@ AMDGPU_VS

Used for Mesa vertex shaders, or AMDPAL last shader stage before rasterization (vertex shader if tess...

@ AMDGPU_KERNEL

Used for AMDGPU code object kernels.

@ AMDGPU_Gfx

Used for AMD graphics targets.

@ AMDGPU_CS_ChainPreserve

Used on AMDGPUs to give the middle-end more control over argument placement.

@ AMDGPU_HS

Used for Mesa/AMDPAL hull shaders (= tessellation control shaders).

@ AMDGPU_GS

Used for Mesa/AMDPAL geometry shaders.

@ AMDGPU_CS_Chain

Used on AMDGPUs to give the middle-end more control over argument placement.

@ AMDGPU_PS

Used for Mesa/AMDPAL pixel shaders.

@ SPIR_KERNEL

Used for SPIR kernel functions.

@ Fast

Attempts to make calls as fast as possible (e.g.

@ AMDGPU_ES

Used for AMDPAL shader stage before geometry shader if geometry is in use.

@ AMDGPU_LS

Used for AMDPAL vertex shader if tessellation is in use.

@ C

The default llvm calling convention, compatible with C.

This is an optimization pass for GlobalISel generic memory operations.

constexpr uint64_t maxUIntN(uint64_t N)

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

FunctionAddr VTableAddr uintptr_t uintptr_t Version

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

@ Default

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

AMD Kernel Code Object (amd_kernel_code_t).

Definition AMDGPUBaseInfo.h:611

bool X

Definition AMDGPUBaseInfo.h:612

bool Y

Definition AMDGPUBaseInfo.h:613

Definition AMDGPUBaseInfo.h:113

unsigned Opcode

Definition AMDGPUBaseInfo.h:114

Definition AMDGPUBaseInfo.h:382

static constexpr unsigned Width

Definition AMDGPUBaseInfo.h:385

unsigned ValueType

Definition AMDGPUBaseInfo.h:387

constexpr EncodingField(ValueType Value)

Definition AMDGPUBaseInfo.h:391

static constexpr unsigned Offset

Definition AMDGPUBaseInfo.h:384

ValueType Value

Definition AMDGPUBaseInfo.h:390

static constexpr ValueType Default

Definition AMDGPUBaseInfo.h:388

static ValueType decode(uint64_t Encoded)

Definition AMDGPUBaseInfo.h:394

constexpr uint64_t encode() const

Definition AMDGPUBaseInfo.h:393

Definition AMDGPUBaseInfo.h:402

static constexpr uint64_t encode(Fields... Values)

Definition AMDGPUBaseInfo.h:403

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

Definition AMDGPUBaseInfo.h:407

Definition AMDGPUBaseInfo.h:92

unsigned BitsPerComp

Definition AMDGPUBaseInfo.h:94

unsigned Format

Definition AMDGPUBaseInfo.h:93

unsigned DataFormat

Definition AMDGPUBaseInfo.h:97

unsigned NumFormat

Definition AMDGPUBaseInfo.h:96

unsigned NumComponents

Definition AMDGPUBaseInfo.h:95

Definition AMDGPUBaseInfo.h:1262

constexpr EncodingField(ValueType Value)

Definition AMDGPUBaseInfo.h:391

constexpr uint64_t encode() const

Definition AMDGPUBaseInfo.h:1264

static ValueType decode(uint64_t Encoded)

Definition AMDGPUBaseInfo.h:1265

Definition AMDGPUBaseInfo.h:100

bool is_gfx940_xdl

Definition AMDGPUBaseInfo.h:103

uint16_t Opcode

Definition AMDGPUBaseInfo.h:101

bool is_dgemm

Definition AMDGPUBaseInfo.h:102

Definition AMDGPUBaseInfo.h:106

unsigned F8F8Opcode

Definition AMDGPUBaseInfo.h:108

uint8_t NumRegsSrcB

Definition AMDGPUBaseInfo.h:110

unsigned Opcode

Definition AMDGPUBaseInfo.h:107

uint8_t NumRegsSrcA

Definition AMDGPUBaseInfo.h:109

Definition AMDGPUBaseInfo.h:421

bool Gather4

Definition AMDGPUBaseInfo.h:427

bool Gradients

Definition AMDGPUBaseInfo.h:430

bool G16

Definition AMDGPUBaseInfo.h:431

bool AtomicX2

Definition AMDGPUBaseInfo.h:425

bool Sampler

Definition AMDGPUBaseInfo.h:426

MIMGBaseOpcode BaseOpcode

Definition AMDGPUBaseInfo.h:422

bool NoReturn

Definition AMDGPUBaseInfo.h:438

bool HasD16

Definition AMDGPUBaseInfo.h:434

bool LodOrClampOrMip

Definition AMDGPUBaseInfo.h:433

bool Coordinates

Definition AMDGPUBaseInfo.h:432

bool MSAA

Definition AMDGPUBaseInfo.h:435

bool Store

Definition AMDGPUBaseInfo.h:423

bool Atomic

Definition AMDGPUBaseInfo.h:424

bool A16

Definition AMDGPUBaseInfo.h:437

bool PointSampleAccel

Definition AMDGPUBaseInfo.h:439

bool BVH

Definition AMDGPUBaseInfo.h:436

uint8_t NumExtraArgs

Definition AMDGPUBaseInfo.h:429

Definition AMDGPUBaseInfo.h:477

MIMGBaseOpcode NoBias

Definition AMDGPUBaseInfo.h:479

MIMGBaseOpcode Bias

Definition AMDGPUBaseInfo.h:478

Definition AMDGPUBaseInfo.h:448

uint8_t NumCoords

Definition AMDGPUBaseInfo.h:450

bool MSAA

Definition AMDGPUBaseInfo.h:452

const char * AsmSuffix

Definition AMDGPUBaseInfo.h:455

MIMGDim Dim

Definition AMDGPUBaseInfo.h:449

uint8_t NumGradients

Definition AMDGPUBaseInfo.h:451

uint8_t Encoding

Definition AMDGPUBaseInfo.h:454

bool DA

Definition AMDGPUBaseInfo.h:453

Definition AMDGPUBaseInfo.h:487

MIMGBaseOpcode G

Definition AMDGPUBaseInfo.h:488

MIMGBaseOpcode G16

Definition AMDGPUBaseInfo.h:489

Definition AMDGPUBaseInfo.h:524

uint8_t VDataDwords

Definition AMDGPUBaseInfo.h:528

uint16_t BaseOpcode

Definition AMDGPUBaseInfo.h:526

uint16_t Opcode

Definition AMDGPUBaseInfo.h:525

uint8_t VAddrDwords

Definition AMDGPUBaseInfo.h:529

uint8_t VAddrOperands

Definition AMDGPUBaseInfo.h:530

uint8_t MIMGEncoding

Definition AMDGPUBaseInfo.h:527

Definition AMDGPUBaseInfo.h:467

MIMGBaseOpcode LZ

Definition AMDGPUBaseInfo.h:469

MIMGBaseOpcode L

Definition AMDGPUBaseInfo.h:468

Definition AMDGPUBaseInfo.h:472

MIMGBaseOpcode NONMIP

Definition AMDGPUBaseInfo.h:474

MIMGBaseOpcode MIP

Definition AMDGPUBaseInfo.h:473

Definition AMDGPUBaseInfo.h:482

MIMGBaseOpcode Offset

Definition AMDGPUBaseInfo.h:483

MIMGBaseOpcode NoOffset

Definition AMDGPUBaseInfo.h:484

Definition AMDGPUBaseInfo.h:117

unsigned T16Op

Definition AMDGPUBaseInfo.h:118

unsigned HiOp

Definition AMDGPUBaseInfo.h:119

unsigned LoOp

Definition AMDGPUBaseInfo.h:120

Definition AMDGPUBaseInfo.h:123

bool is_wmma_xdl

Definition AMDGPUBaseInfo.h:125

uint16_t Opcode

Definition AMDGPUBaseInfo.h:124

Definition AMDGPUBaseInfo.h:495

unsigned Opcode3Addr

Definition AMDGPUBaseInfo.h:497

unsigned Opcode2Addr

Definition AMDGPUBaseInfo.h:496

unsigned ExpCnt

Definition AMDGPUBaseInfo.h:1085

unsigned XCnt

Definition AMDGPUBaseInfo.h:1091

unsigned LoadCnt

Definition AMDGPUBaseInfo.h:1084

bool hasWait() const

Definition AMDGPUBaseInfo.h:1104

unsigned BvhCnt

Definition AMDGPUBaseInfo.h:1089

unsigned StoreCnt

Definition AMDGPUBaseInfo.h:1087

unsigned SampleCnt

Definition AMDGPUBaseInfo.h:1088

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

Definition AMDGPUBaseInfo.h:1099

unsigned KmCnt

Definition AMDGPUBaseInfo.h:1090

bool hasWaitExceptStoreCnt() const

Definition AMDGPUBaseInfo.h:1106

bool hasWaitStoreCnt() const

Definition AMDGPUBaseInfo.h:1111

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

Definition AMDGPUBaseInfo.h:1095

Waitcnt combined(const Waitcnt &Other) const

Definition AMDGPUBaseInfo.h:1113

unsigned DsCnt

Definition AMDGPUBaseInfo.h:1086