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
470};
471
476
481
486
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