xref: /freebsd/contrib/llvm-project/llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
10b57cec5SDimitry Andric//===-- AMDGPUSearchableTables.td - ------------------------*- tablegen -*-===//
20b57cec5SDimitry Andric//
30b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric//
70b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric
90b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
100b57cec5SDimitry Andric// Resource intrinsics table.
110b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
120b57cec5SDimitry Andric
130b57cec5SDimitry Andricclass RsrcIntrinsic<AMDGPURsrcIntrinsic intr> {
140b57cec5SDimitry Andric  Intrinsic Intr = !cast<Intrinsic>(intr);
150b57cec5SDimitry Andric  bits<8> RsrcArg = intr.RsrcArg;
160b57cec5SDimitry Andric  bit IsImage = intr.IsImage;
170b57cec5SDimitry Andric}
180b57cec5SDimitry Andric
190b57cec5SDimitry Andricdef RsrcIntrinsics : GenericTable {
200b57cec5SDimitry Andric  let FilterClass = "RsrcIntrinsic";
210b57cec5SDimitry Andric  let Fields = ["Intr", "RsrcArg", "IsImage"];
220b57cec5SDimitry Andric
230b57cec5SDimitry Andric  let PrimaryKey = ["Intr"];
240b57cec5SDimitry Andric  let PrimaryKeyName = "lookupRsrcIntrinsic";
250b57cec5SDimitry Andric}
260b57cec5SDimitry Andric
270b57cec5SDimitry Andricforeach intr = !listconcat(AMDGPUBufferIntrinsics,
280b57cec5SDimitry Andric                           AMDGPUImageDimIntrinsics,
290b57cec5SDimitry Andric                           AMDGPUImageDimAtomicIntrinsics) in {
300b57cec5SDimitry Andric  def : RsrcIntrinsic<!cast<AMDGPURsrcIntrinsic>(intr)>;
310b57cec5SDimitry Andric}
320b57cec5SDimitry Andric
33480093f4SDimitry Andricclass GcnBufferFormatBase<bits<8> f, bits<8> bpc, bits<8> numc, bits<8> nfmt, bits<8> dfmt> {
34480093f4SDimitry Andric  bits<8> Format = f;
35480093f4SDimitry Andric  bits<8> BitsPerComp = bpc;
36480093f4SDimitry Andric  bits<8> NumComponents = numc;
37480093f4SDimitry Andric  bits<8> NumFormat = nfmt;
38480093f4SDimitry Andric  bits<8> DataFormat = dfmt;
39480093f4SDimitry Andric}
40480093f4SDimitry Andric
41480093f4SDimitry Andricclass Gfx9BufferFormat<bits<8> f, bits<8> bpc, bits<8> numc, bits<8> nfmt, bits<8> dfmt> : GcnBufferFormatBase<f, bpc, numc, nfmt, dfmt>;
4281ad6265SDimitry Andricclass Gfx10BufferFormat<bits<8> f, bits<8> bpc, bits<8> numc, bits<8> nfmt, bits<8> dfmt> : GcnBufferFormatBase<f, bpc, numc, nfmt, dfmt>;
4381ad6265SDimitry Andricclass Gfx11PlusBufferFormat<bits<8> f, bits<8> bpc, bits<8> numc, bits<8> nfmt, bits<8> dfmt> : GcnBufferFormatBase<f, bpc, numc, nfmt, dfmt>;
44480093f4SDimitry Andric
45480093f4SDimitry Andricclass GcnBufferFormatTable  : GenericTable {
46480093f4SDimitry Andric  let CppTypeName = "GcnBufferFormatInfo";
47480093f4SDimitry Andric  let Fields = ["Format", "BitsPerComp", "NumComponents", "NumFormat", "DataFormat"];
48480093f4SDimitry Andric  let PrimaryKey = ["BitsPerComp", "NumComponents", "NumFormat"];
49480093f4SDimitry Andric}
50480093f4SDimitry Andric
51480093f4SDimitry Andricdef Gfx9BufferFormat : GcnBufferFormatTable {
52480093f4SDimitry Andric  let FilterClass = "Gfx9BufferFormat";
53480093f4SDimitry Andric  let PrimaryKeyName = "getGfx9BufferFormatInfo";
54480093f4SDimitry Andric}
5581ad6265SDimitry Andricdef Gfx10BufferFormat : GcnBufferFormatTable {
5681ad6265SDimitry Andric  let FilterClass = "Gfx10BufferFormat";
5781ad6265SDimitry Andric  let PrimaryKeyName = "getGfx10BufferFormatInfo";
5881ad6265SDimitry Andric}
5981ad6265SDimitry Andricdef Gfx11PlusBufferFormat : GcnBufferFormatTable {
6081ad6265SDimitry Andric  let FilterClass = "Gfx11PlusBufferFormat";
6181ad6265SDimitry Andric  let PrimaryKeyName = "getGfx11PlusBufferFormatInfo";
62480093f4SDimitry Andric}
63480093f4SDimitry Andric
64480093f4SDimitry Andricdef getGfx9BufferFormatInfo : SearchIndex {
65480093f4SDimitry Andric  let Table = Gfx9BufferFormat;
66480093f4SDimitry Andric  let Key = ["Format"];
67480093f4SDimitry Andric}
6881ad6265SDimitry Andricdef getGfx10BufferFormatInfo : SearchIndex {
6981ad6265SDimitry Andric  let Table = Gfx10BufferFormat;
7081ad6265SDimitry Andric  let Key = ["Format"];
7181ad6265SDimitry Andric}
7281ad6265SDimitry Andricdef getGfx11PlusBufferFormatInfo : SearchIndex {
7381ad6265SDimitry Andric  let Table = Gfx11PlusBufferFormat;
74480093f4SDimitry Andric  let Key = ["Format"];
75480093f4SDimitry Andric}
76480093f4SDimitry Andric
77480093f4SDimitry Andric// Buffer formats with equal component sizes (GFX9 and earlier)
78480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_8_UNORM*/              0x01,  8, 1, /*NUM_FORMAT_UNORM*/   0, /*DATA_FORMAT_8*/            1>;
79480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_8_SNORM*/              0x11,  8, 1, /*NUM_FORMAT_SNORM*/   1, /*DATA_FORMAT_8*/            1>;
80480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_8_USCALED*/            0x21,  8, 1, /*NUM_FORMAT_USCALED*/ 2, /*DATA_FORMAT_8*/            1>;
81480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_8_SSCALED*/            0x31,  8, 1, /*NUM_FORMAT_SSCALED*/ 3, /*DATA_FORMAT_8*/            1>;
82480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_8_UINT*/               0x41,  8, 1, /*NUM_FORMAT_UINT*/    4, /*DATA_FORMAT_8*/            1>;
83480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_8_SINT*/               0x51,  8, 1, /*NUM_FORMAT_SINT*/    5, /*DATA_FORMAT_8*/            1>;
84480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_16_UNORM*/             0x02, 16, 1, /*NUM_FORMAT_UNORM*/   0, /*DATA_FORMAT_16*/           2>;
85480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_16_SNORM*/             0x12, 16, 1, /*NUM_FORMAT_SNORM*/   1, /*DATA_FORMAT_16*/           2>;
86480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_16_USCALED*/           0x22, 16, 1, /*NUM_FORMAT_USCALED*/ 2, /*DATA_FORMAT_16*/           2>;
87480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_16_SSCALED*/           0x32, 16, 1, /*NUM_FORMAT_SSCALED*/ 3, /*DATA_FORMAT_16*/           2>;
88480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_16_UINT*/              0x42, 16, 1, /*NUM_FORMAT_UINT*/    4, /*DATA_FORMAT_16*/           2>;
89480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_16_SINT*/              0x52, 16, 1, /*NUM_FORMAT_SINT*/    5, /*DATA_FORMAT_16*/           2>;
90480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_16_FLOAT*/             0x72, 16, 1, /*NUM_FORMAT_FLOAT*/   7, /*DATA_FORMAT_16*/           2>;
91480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_8_8_UNORM*/            0x03,  8, 2, /*NUM_FORMAT_UNORM*/   0, /*DATA_FORMAT_8_8*/          3>;
92480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_8_8_SNORM*/            0x13,  8, 2, /*NUM_FORMAT_SNORM*/   1, /*DATA_FORMAT_8_8*/          3>;
93480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_8_8_USCALED*/          0x23,  8, 2, /*NUM_FORMAT_USCALED*/ 2, /*DATA_FORMAT_8_8*/          3>;
94480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_8_8_SSCALED*/          0x33,  8, 2, /*NUM_FORMAT_SSCALED*/ 3, /*DATA_FORMAT_8_8*/          3>;
95480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_8_8_UINT*/             0x43,  8, 2, /*NUM_FORMAT_UINT*/    4, /*DATA_FORMAT_8_8*/          3>;
96480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_8_8_SINT*/             0x53,  8, 2, /*NUM_FORMAT_SINT*/    5, /*DATA_FORMAT_8_8*/          3>;
97480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_32_UINT*/              0x44, 32, 1, /*NUM_FORMAT_UINT*/    4, /*DATA_FORMAT_32*/           4>;
98480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_32_SINT*/              0x54, 32, 1, /*NUM_FORMAT_SINT*/    5, /*DATA_FORMAT_32*/           4>;
99480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_32_FLOAT*/             0x74, 32, 1, /*NUM_FORMAT_FLOAT*/   7, /*DATA_FORMAT_32*/           4>;
100480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_16_16_UNORM*/          0x05, 16, 2, /*NUM_FORMAT_UNORM*/   0, /*DATA_FORMAT_16_16*/        5>;
101480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_16_16_SNORM*/          0x15, 16, 2, /*NUM_FORMAT_SNORM*/   1, /*DATA_FORMAT_16_16*/        5>;
102480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_16_16_USCALED*/        0x25, 16, 2, /*NUM_FORMAT_USCALED*/ 2, /*DATA_FORMAT_16_16*/        5>;
103480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_16_16_SSCALED*/        0x35, 16, 2, /*NUM_FORMAT_SSCALED*/ 3, /*DATA_FORMAT_16_16*/        5>;
104480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_16_16_UINT*/           0x45, 16, 2, /*NUM_FORMAT_UINT*/    4, /*DATA_FORMAT_16_16*/        5>;
105480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_16_16_SINT*/           0x55, 16, 2, /*NUM_FORMAT_SINT*/    5, /*DATA_FORMAT_16_16*/        5>;
106480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_16_16_FLOAT*/          0x75, 16, 2, /*NUM_FORMAT_FLOAT*/   7, /*DATA_FORMAT_16_16*/        5>;
107480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_8_8_8_8_UNORM*/        0x0A,  8, 4, /*NUM_FORMAT_UNORM*/   0, /*DATA_FORMAT_8_8_8_8*/     10>;
108480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_8_8_8_8_SNORM*/        0x1A,  8, 4, /*NUM_FORMAT_SNORM*/   1, /*DATA_FORMAT_8_8_8_8*/     10>;
109480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_8_8_8_8_USCALED*/      0x2A,  8, 4, /*NUM_FORMAT_USCALED*/ 2, /*DATA_FORMAT_8_8_8_8*/     10>;
110480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_8_8_8_8_SSCALED*/      0x3A,  8, 4, /*NUM_FORMAT_SSCALED*/ 3, /*DATA_FORMAT_8_8_8_8*/     10>;
111480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_8_8_8_8_UINT*/         0x4A,  8, 4, /*NUM_FORMAT_UINT*/    4, /*DATA_FORMAT_8_8_8_8*/     10>;
112480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_8_8_8_8_SINT*/         0x5A,  8, 4, /*NUM_FORMAT_SINT*/    5, /*DATA_FORMAT_8_8_8_8*/     10>;
113480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_32_32_UINT*/           0x4B, 32, 2, /*NUM_FORMAT_UINT*/    4, /*DATA_FORMAT_32_32*/       11>;
114480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_32_32_SINT*/           0x5B, 32, 2, /*NUM_FORMAT_SINT*/    5, /*DATA_FORMAT_32_32*/       11>;
115480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_32_32_FLOAT*/          0x7B, 32, 2, /*NUM_FORMAT_FLOAT*/   7, /*DATA_FORMAT_32_32*/       11>;
116480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_16_16_16_16_UNORM*/    0x0C, 16, 4, /*NUM_FORMAT_UNORM*/   0, /*DATA_FORMAT_16_16_16_16*/ 12>;
117480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_16_16_16_16_SNORM*/    0x1C, 16, 4, /*NUM_FORMAT_SNORM*/   1, /*DATA_FORMAT_16_16_16_16*/ 12>;
118480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_16_16_16_16_USCALED*/  0x2C, 16, 4, /*NUM_FORMAT_USCALED*/ 2, /*DATA_FORMAT_16_16_16_16*/ 12>;
119480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_16_16_16_16_SSCALED*/  0x3C, 16, 4, /*NUM_FORMAT_SSCALED*/ 3, /*DATA_FORMAT_16_16_16_16*/ 12>;
120480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_16_16_16_16_UINT*/     0x4C, 16, 4, /*NUM_FORMAT_UINT*/    4, /*DATA_FORMAT_16_16_16_16*/ 12>;
121480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_16_16_16_16_SINT*/     0x5C, 16, 4, /*NUM_FORMAT_SINT*/    5, /*DATA_FORMAT_16_16_16_16*/ 12>;
122480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_16_16_16_16_FLOAT*/    0x7C, 16, 4, /*NUM_FORMAT_FLOAT*/   7, /*DATA_FORMAT_16_16_16_16*/ 12>;
123480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_32_32_32_UINT*/        0x4D, 32, 3, /*NUM_FORMAT_UINT*/    4, /*DATA_FORMAT_32_32_32*/    13>;
124480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_32_32_32_SINT*/        0x5D, 32, 3, /*NUM_FORMAT_SINT*/    5, /*DATA_FORMAT_32_32_32*/    13>;
125480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_32_32_32_FLOAT*/       0x7D, 32, 3, /*NUM_FORMAT_FLOAT*/   7, /*DATA_FORMAT_32_32_32*/    13>;
126480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_32_32_32_32_UINT*/     0x4E, 32, 4, /*NUM_FORMAT_UINT*/    4, /*DATA_FORMAT_32_32_32_32*/ 14>;
127480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_32_32_32_32_SINT*/     0x5E, 32, 4, /*NUM_FORMAT_SINT*/    5, /*DATA_FORMAT_32_32_32_32*/ 14>;
128480093f4SDimitry Andricdef : Gfx9BufferFormat< /*FORMAT_32_32_32_32_FLOAT*/    0x7E, 32, 4, /*NUM_FORMAT_FLOAT*/   7, /*DATA_FORMAT_32_32_32_32*/ 14>;
129480093f4SDimitry Andric
130480093f4SDimitry Andric// Buffer formats with equal component sizes (GFX10 and later)
13181ad6265SDimitry Andricmulticlass Gfx10PlusBufferFormat<bits<8> f, bits<8> bpc, bits<8> numc, bits<8> nfmt, bits<8> dfmt> {
13281ad6265SDimitry Andric  def : Gfx10BufferFormat<f, bpc, numc, nfmt, dfmt>;
13381ad6265SDimitry Andric  def : Gfx11PlusBufferFormat<f, bpc, numc, nfmt, dfmt>;
13481ad6265SDimitry Andric}
13581ad6265SDimitry Andricdefm : Gfx10PlusBufferFormat< /*FORMAT_8_UNORM*/              0x01,  8, 1, /*NUM_FORMAT_UNORM*/   0, /*DATA_FORMAT_8*/            1>;
13681ad6265SDimitry Andricdefm : Gfx10PlusBufferFormat< /*FORMAT_8_SNORM*/              0x02,  8, 1, /*NUM_FORMAT_SNORM*/   1, /*DATA_FORMAT_8*/            1>;
13781ad6265SDimitry Andricdefm : Gfx10PlusBufferFormat< /*FORMAT_8_USCALED*/            0x03,  8, 1, /*NUM_FORMAT_USCALED*/ 2, /*DATA_FORMAT_8*/            1>;
13881ad6265SDimitry Andricdefm : Gfx10PlusBufferFormat< /*FORMAT_8_SSCALED*/            0x04,  8, 1, /*NUM_FORMAT_SSCALED*/ 3, /*DATA_FORMAT_8*/            1>;
13981ad6265SDimitry Andricdefm : Gfx10PlusBufferFormat< /*FORMAT_8_UINT*/               0x05,  8, 1, /*NUM_FORMAT_UINT*/    4, /*DATA_FORMAT_8*/            1>;
14081ad6265SDimitry Andricdefm : Gfx10PlusBufferFormat< /*FORMAT_8_SINT*/               0x06,  8, 1, /*NUM_FORMAT_SINT*/    5, /*DATA_FORMAT_8*/            1>;
14181ad6265SDimitry Andricdefm : Gfx10PlusBufferFormat< /*FORMAT_16_UNORM*/             0x07, 16, 1, /*NUM_FORMAT_UNORM*/   0, /*DATA_FORMAT_16*/           2>;
14281ad6265SDimitry Andricdefm : Gfx10PlusBufferFormat< /*FORMAT_16_SNORM*/             0x08, 16, 1, /*NUM_FORMAT_SNORM*/   1, /*DATA_FORMAT_16*/           2>;
14381ad6265SDimitry Andricdefm : Gfx10PlusBufferFormat< /*FORMAT_16_USCALED*/           0x09, 16, 1, /*NUM_FORMAT_USCALED*/ 2, /*DATA_FORMAT_16*/           2>;
14481ad6265SDimitry Andricdefm : Gfx10PlusBufferFormat< /*FORMAT_16_SSCALED*/           0x0A, 16, 1, /*NUM_FORMAT_SSCALED*/ 3, /*DATA_FORMAT_16*/           2>;
14581ad6265SDimitry Andricdefm : Gfx10PlusBufferFormat< /*FORMAT_16_UINT*/              0x0B, 16, 1, /*NUM_FORMAT_UINT*/    4, /*DATA_FORMAT_16*/           2>;
14681ad6265SDimitry Andricdefm : Gfx10PlusBufferFormat< /*FORMAT_16_SINT*/              0x0C, 16, 1, /*NUM_FORMAT_SINT*/    5, /*DATA_FORMAT_16*/           2>;
14781ad6265SDimitry Andricdefm : Gfx10PlusBufferFormat< /*FORMAT_16_FLOAT*/             0x0D, 16, 1, /*NUM_FORMAT_FLOAT*/   7, /*DATA_FORMAT_16*/           2>;
14881ad6265SDimitry Andricdefm : Gfx10PlusBufferFormat< /*FORMAT_8_8_UNORM*/            0x0E,  8, 2, /*NUM_FORMAT_UNORM*/   0, /*DATA_FORMAT_8_8*/          3>;
14981ad6265SDimitry Andricdefm : Gfx10PlusBufferFormat< /*FORMAT_8_8_SNORM*/            0x0F,  8, 2, /*NUM_FORMAT_SNORM*/   1, /*DATA_FORMAT_8_8*/          3>;
15081ad6265SDimitry Andricdefm : Gfx10PlusBufferFormat< /*FORMAT_8_8_USCALED*/          0x10,  8, 2, /*NUM_FORMAT_USCALED*/ 2, /*DATA_FORMAT_8_8*/          3>;
15181ad6265SDimitry Andricdefm : Gfx10PlusBufferFormat< /*FORMAT_8_8_SSCALED*/          0x11,  8, 2, /*NUM_FORMAT_SSCALED*/ 3, /*DATA_FORMAT_8_8*/          3>;
15281ad6265SDimitry Andricdefm : Gfx10PlusBufferFormat< /*FORMAT_8_8_UINT*/             0x12,  8, 2, /*NUM_FORMAT_UINT*/    4, /*DATA_FORMAT_8_8*/          3>;
15381ad6265SDimitry Andricdefm : Gfx10PlusBufferFormat< /*FORMAT_8_8_SINT*/             0x13,  8, 2, /*NUM_FORMAT_SINT*/    5, /*DATA_FORMAT_8_8*/          3>;
15481ad6265SDimitry Andricdefm : Gfx10PlusBufferFormat< /*FORMAT_32_UINT*/              0x14, 32, 1, /*NUM_FORMAT_UINT*/    4, /*DATA_FORMAT_32*/           4>;
15581ad6265SDimitry Andricdefm : Gfx10PlusBufferFormat< /*FORMAT_32_SINT*/              0x15, 32, 1, /*NUM_FORMAT_SINT*/    5, /*DATA_FORMAT_32*/           4>;
15681ad6265SDimitry Andricdefm : Gfx10PlusBufferFormat< /*FORMAT_32_FLOAT*/             0x16, 32, 1, /*NUM_FORMAT_FLOAT*/   7, /*DATA_FORMAT_32*/           4>;
15781ad6265SDimitry Andricdefm : Gfx10PlusBufferFormat< /*FORMAT_16_16_UNORM*/          0x17, 16, 2, /*NUM_FORMAT_UNORM*/   0, /*DATA_FORMAT_16_16*/        5>;
15881ad6265SDimitry Andricdefm : Gfx10PlusBufferFormat< /*FORMAT_16_16_SNORM*/          0x18, 16, 2, /*NUM_FORMAT_SNORM*/   1, /*DATA_FORMAT_16_16*/        5>;
15981ad6265SDimitry Andricdefm : Gfx10PlusBufferFormat< /*FORMAT_16_16_USCALED*/        0x19, 16, 2, /*NUM_FORMAT_USCALED*/ 2, /*DATA_FORMAT_16_16*/        5>;
16081ad6265SDimitry Andricdefm : Gfx10PlusBufferFormat< /*FORMAT_16_16_SSCALED*/        0x1A, 16, 2, /*NUM_FORMAT_SSCALED*/ 3, /*DATA_FORMAT_16_16*/        5>;
16181ad6265SDimitry Andricdefm : Gfx10PlusBufferFormat< /*FORMAT_16_16_UINT*/           0x1B, 16, 2, /*NUM_FORMAT_UINT*/    4, /*DATA_FORMAT_16_16*/        5>;
16281ad6265SDimitry Andricdefm : Gfx10PlusBufferFormat< /*FORMAT_16_16_SINT*/           0x1C, 16, 2, /*NUM_FORMAT_SINT*/    5, /*DATA_FORMAT_16_16*/        5>;
16381ad6265SDimitry Andricdefm : Gfx10PlusBufferFormat< /*FORMAT_16_16_FLOAT*/          0x1D, 16, 2, /*NUM_FORMAT_FLOAT*/   7, /*DATA_FORMAT_16_16*/        5>;
16481ad6265SDimitry Andric
16581ad6265SDimitry Andric// Buffer formats with equal component sizes (GFX10 only)
16681ad6265SDimitry Andricdef : Gfx10BufferFormat< /*FORMAT_8_8_8_8_UNORM*/        0x38,  8, 4, /*NUM_FORMAT_UNORM*/   0, /*DATA_FORMAT_8_8_8_8*/     10>;
16781ad6265SDimitry Andricdef : Gfx10BufferFormat< /*FORMAT_8_8_8_8_SNORM*/        0x39,  8, 4, /*NUM_FORMAT_SNORM*/   1, /*DATA_FORMAT_8_8_8_8*/     10>;
16881ad6265SDimitry Andricdef : Gfx10BufferFormat< /*FORMAT_8_8_8_8_USCALED*/      0x3A,  8, 4, /*NUM_FORMAT_USCALED*/ 2, /*DATA_FORMAT_8_8_8_8*/     10>;
16981ad6265SDimitry Andricdef : Gfx10BufferFormat< /*FORMAT_8_8_8_8_SSCALED*/      0x3B,  8, 4, /*NUM_FORMAT_SSCALED*/ 3, /*DATA_FORMAT_8_8_8_8*/     10>;
17081ad6265SDimitry Andricdef : Gfx10BufferFormat< /*FORMAT_8_8_8_8_UINT*/         0x3C,  8, 4, /*NUM_FORMAT_UINT*/    4, /*DATA_FORMAT_8_8_8_8*/     10>;
17181ad6265SDimitry Andricdef : Gfx10BufferFormat< /*FORMAT_8_8_8_8_SINT*/         0x3D,  8, 4, /*NUM_FORMAT_SINT*/    5, /*DATA_FORMAT_8_8_8_8*/     10>;
17281ad6265SDimitry Andricdef : Gfx10BufferFormat< /*FORMAT_32_32_UINT*/           0x3E, 32, 2, /*NUM_FORMAT_UINT*/    4, /*DATA_FORMAT_32_32*/       11>;
17381ad6265SDimitry Andricdef : Gfx10BufferFormat< /*FORMAT_32_32_SINT*/           0x3F, 32, 2, /*NUM_FORMAT_SINT*/    5, /*DATA_FORMAT_32_32*/       11>;
17481ad6265SDimitry Andricdef : Gfx10BufferFormat< /*FORMAT_32_32_FLOAT*/          0x40, 32, 2, /*NUM_FORMAT_FLOAT*/   7, /*DATA_FORMAT_32_32*/       11>;
17581ad6265SDimitry Andricdef : Gfx10BufferFormat< /*FORMAT_16_16_16_16_UNORM*/    0x41, 16, 4, /*NUM_FORMAT_UNORM*/   0, /*DATA_FORMAT_16_16_16_16*/ 12>;
17681ad6265SDimitry Andricdef : Gfx10BufferFormat< /*FORMAT_16_16_16_16_SNORM*/    0x42, 16, 4, /*NUM_FORMAT_SNORM*/   1, /*DATA_FORMAT_16_16_16_16*/ 12>;
17781ad6265SDimitry Andricdef : Gfx10BufferFormat< /*FORMAT_16_16_16_16_USCALED*/  0x43, 16, 4, /*NUM_FORMAT_USCALED*/ 2, /*DATA_FORMAT_16_16_16_16*/ 12>;
17881ad6265SDimitry Andricdef : Gfx10BufferFormat< /*FORMAT_16_16_16_16_SSCALED*/  0x44, 16, 4, /*NUM_FORMAT_SSCALED*/ 3, /*DATA_FORMAT_16_16_16_16*/ 12>;
17981ad6265SDimitry Andricdef : Gfx10BufferFormat< /*FORMAT_16_16_16_16_UINT*/     0x45, 16, 4, /*NUM_FORMAT_UINT*/    4, /*DATA_FORMAT_16_16_16_16*/ 12>;
18081ad6265SDimitry Andricdef : Gfx10BufferFormat< /*FORMAT_16_16_16_16_SINT*/     0x46, 16, 4, /*NUM_FORMAT_SINT*/    5, /*DATA_FORMAT_16_16_16_16*/ 12>;
18181ad6265SDimitry Andricdef : Gfx10BufferFormat< /*FORMAT_16_16_16_16_FLOAT*/    0x47, 16, 4, /*NUM_FORMAT_FLOAT*/   7, /*DATA_FORMAT_16_16_16_16*/ 12>;
18281ad6265SDimitry Andricdef : Gfx10BufferFormat< /*FORMAT_32_32_32_UINT*/        0x48, 32, 3, /*NUM_FORMAT_UINT*/    4, /*DATA_FORMAT_32_32_32*/    13>;
18381ad6265SDimitry Andricdef : Gfx10BufferFormat< /*FORMAT_32_32_32_SINT*/        0x49, 32, 3, /*NUM_FORMAT_SINT*/    5, /*DATA_FORMAT_32_32_32*/    13>;
18481ad6265SDimitry Andricdef : Gfx10BufferFormat< /*FORMAT_32_32_32_FLOAT*/       0x4A, 32, 3, /*NUM_FORMAT_FLOAT*/   7, /*DATA_FORMAT_32_32_32*/    13>;
18581ad6265SDimitry Andricdef : Gfx10BufferFormat< /*FORMAT_32_32_32_32_UINT*/     0x4B, 32, 4, /*NUM_FORMAT_UINT*/    4, /*DATA_FORMAT_32_32_32_32*/ 14>;
18681ad6265SDimitry Andricdef : Gfx10BufferFormat< /*FORMAT_32_32_32_32_SINT*/     0x4C, 32, 4, /*NUM_FORMAT_SINT*/    5, /*DATA_FORMAT_32_32_32_32*/ 14>;
18781ad6265SDimitry Andricdef : Gfx10BufferFormat< /*FORMAT_32_32_32_32_FLOAT*/    0x4D, 32, 4, /*NUM_FORMAT_FLOAT*/   7, /*DATA_FORMAT_32_32_32_32*/ 14>;
18881ad6265SDimitry Andric
18981ad6265SDimitry Andric// Buffer formats with equal component sizes (GFX11 and later)
19081ad6265SDimitry Andricdef : Gfx11PlusBufferFormat< /*FORMAT_8_8_8_8_UNORM*/        0x2A,  8, 4, /*NUM_FORMAT_UNORM*/   0, /*DATA_FORMAT_8_8_8_8*/     10>;
19181ad6265SDimitry Andricdef : Gfx11PlusBufferFormat< /*FORMAT_8_8_8_8_SNORM*/        0x2B,  8, 4, /*NUM_FORMAT_SNORM*/   1, /*DATA_FORMAT_8_8_8_8*/     10>;
19281ad6265SDimitry Andricdef : Gfx11PlusBufferFormat< /*FORMAT_8_8_8_8_USCALED*/      0x2C,  8, 4, /*NUM_FORMAT_USCALED*/ 2, /*DATA_FORMAT_8_8_8_8*/     10>;
19381ad6265SDimitry Andricdef : Gfx11PlusBufferFormat< /*FORMAT_8_8_8_8_SSCALED*/      0x2D,  8, 4, /*NUM_FORMAT_SSCALED*/ 3, /*DATA_FORMAT_8_8_8_8*/     10>;
19481ad6265SDimitry Andricdef : Gfx11PlusBufferFormat< /*FORMAT_8_8_8_8_UINT*/         0x2E,  8, 4, /*NUM_FORMAT_UINT*/    4, /*DATA_FORMAT_8_8_8_8*/     10>;
19581ad6265SDimitry Andricdef : Gfx11PlusBufferFormat< /*FORMAT_8_8_8_8_SINT*/         0x2F,  8, 4, /*NUM_FORMAT_SINT*/    5, /*DATA_FORMAT_8_8_8_8*/     10>;
19681ad6265SDimitry Andricdef : Gfx11PlusBufferFormat< /*FORMAT_32_32_UINT*/           0x30, 32, 2, /*NUM_FORMAT_UINT*/    4, /*DATA_FORMAT_32_32*/       11>;
19781ad6265SDimitry Andricdef : Gfx11PlusBufferFormat< /*FORMAT_32_32_SINT*/           0x31, 32, 2, /*NUM_FORMAT_SINT*/    5, /*DATA_FORMAT_32_32*/       11>;
19881ad6265SDimitry Andricdef : Gfx11PlusBufferFormat< /*FORMAT_32_32_FLOAT*/          0x32, 32, 2, /*NUM_FORMAT_FLOAT*/   7, /*DATA_FORMAT_32_32*/       11>;
19981ad6265SDimitry Andricdef : Gfx11PlusBufferFormat< /*FORMAT_16_16_16_16_UNORM*/    0x33, 16, 4, /*NUM_FORMAT_UNORM*/   0, /*DATA_FORMAT_16_16_16_16*/ 12>;
20081ad6265SDimitry Andricdef : Gfx11PlusBufferFormat< /*FORMAT_16_16_16_16_SNORM*/    0x34, 16, 4, /*NUM_FORMAT_SNORM*/   1, /*DATA_FORMAT_16_16_16_16*/ 12>;
20181ad6265SDimitry Andricdef : Gfx11PlusBufferFormat< /*FORMAT_16_16_16_16_USCALED*/  0x35, 16, 4, /*NUM_FORMAT_USCALED*/ 2, /*DATA_FORMAT_16_16_16_16*/ 12>;
20281ad6265SDimitry Andricdef : Gfx11PlusBufferFormat< /*FORMAT_16_16_16_16_SSCALED*/  0x36, 16, 4, /*NUM_FORMAT_SSCALED*/ 3, /*DATA_FORMAT_16_16_16_16*/ 12>;
20381ad6265SDimitry Andricdef : Gfx11PlusBufferFormat< /*FORMAT_16_16_16_16_UINT*/     0x37, 16, 4, /*NUM_FORMAT_UINT*/    4, /*DATA_FORMAT_16_16_16_16*/ 12>;
20481ad6265SDimitry Andricdef : Gfx11PlusBufferFormat< /*FORMAT_16_16_16_16_SINT*/     0x38, 16, 4, /*NUM_FORMAT_SINT*/    5, /*DATA_FORMAT_16_16_16_16*/ 12>;
20581ad6265SDimitry Andricdef : Gfx11PlusBufferFormat< /*FORMAT_16_16_16_16_FLOAT*/    0x39, 16, 4, /*NUM_FORMAT_FLOAT*/   7, /*DATA_FORMAT_16_16_16_16*/ 12>;
20681ad6265SDimitry Andricdef : Gfx11PlusBufferFormat< /*FORMAT_32_32_32_UINT*/        0x3A, 32, 3, /*NUM_FORMAT_UINT*/    4, /*DATA_FORMAT_32_32_32*/    13>;
20781ad6265SDimitry Andricdef : Gfx11PlusBufferFormat< /*FORMAT_32_32_32_SINT*/        0x3B, 32, 3, /*NUM_FORMAT_SINT*/    5, /*DATA_FORMAT_32_32_32*/    13>;
20881ad6265SDimitry Andricdef : Gfx11PlusBufferFormat< /*FORMAT_32_32_32_FLOAT*/       0x3C, 32, 3, /*NUM_FORMAT_FLOAT*/   7, /*DATA_FORMAT_32_32_32*/    13>;
20981ad6265SDimitry Andricdef : Gfx11PlusBufferFormat< /*FORMAT_32_32_32_32_UINT*/     0x3D, 32, 4, /*NUM_FORMAT_UINT*/    4, /*DATA_FORMAT_32_32_32_32*/ 14>;
21081ad6265SDimitry Andricdef : Gfx11PlusBufferFormat< /*FORMAT_32_32_32_32_SINT*/     0x3E, 32, 4, /*NUM_FORMAT_SINT*/    5, /*DATA_FORMAT_32_32_32_32*/ 14>;
21181ad6265SDimitry Andricdef : Gfx11PlusBufferFormat< /*FORMAT_32_32_32_32_FLOAT*/    0x3F, 32, 4, /*NUM_FORMAT_FLOAT*/   7, /*DATA_FORMAT_32_32_32_32*/ 14>;
212480093f4SDimitry Andric
2130b57cec5SDimitry Andricclass SourceOfDivergence<Intrinsic intr> {
2140b57cec5SDimitry Andric  Intrinsic Intr = intr;
2150b57cec5SDimitry Andric}
2160b57cec5SDimitry Andric
2170b57cec5SDimitry Andricdef SourcesOfDivergence : GenericTable {
2180b57cec5SDimitry Andric  let FilterClass = "SourceOfDivergence";
2190b57cec5SDimitry Andric  let Fields = ["Intr"];
2200b57cec5SDimitry Andric
2210b57cec5SDimitry Andric  let PrimaryKey = ["Intr"];
2220b57cec5SDimitry Andric  let PrimaryKeyName = "lookupSourceOfDivergence";
2230b57cec5SDimitry Andric}
2240b57cec5SDimitry Andric
2250b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_workitem_id_x>;
2260b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_workitem_id_y>;
2270b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_workitem_id_z>;
2280b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_interp_mov>;
2290b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_interp_p1>;
2300b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_interp_p2>;
2310b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_interp_p1_f16>;
2320b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_interp_p2_f16>;
23381ad6265SDimitry Andricdef : SourceOfDivergence<int_amdgcn_lds_direct_load>;
23481ad6265SDimitry Andricdef : SourceOfDivergence<int_amdgcn_lds_param_load>;
2350b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_mbcnt_hi>;
2360b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_mbcnt_lo>;
2370b57cec5SDimitry Andricdef : SourceOfDivergence<int_r600_read_tidig_x>;
2380b57cec5SDimitry Andricdef : SourceOfDivergence<int_r600_read_tidig_y>;
2390b57cec5SDimitry Andricdef : SourceOfDivergence<int_r600_read_tidig_z>;
2407a6dacacSDimitry Andricdef : SourceOfDivergence<int_amdgcn_atomic_cond_sub_u32>;
2415ffd83dbSDimitry Andricdef : SourceOfDivergence<int_amdgcn_global_atomic_csub>;
242fe6060f1SDimitry Andricdef : SourceOfDivergence<int_amdgcn_global_atomic_fadd>;
243fe6060f1SDimitry Andricdef : SourceOfDivergence<int_amdgcn_global_atomic_fmin>;
244fe6060f1SDimitry Andricdef : SourceOfDivergence<int_amdgcn_global_atomic_fmax>;
2455f757f3fSDimitry Andricdef : SourceOfDivergence<int_amdgcn_global_atomic_fmin_num>;
2465f757f3fSDimitry Andricdef : SourceOfDivergence<int_amdgcn_global_atomic_fmax_num>;
247647cbc5dSDimitry Andricdef : SourceOfDivergence<int_amdgcn_global_atomic_ordered_add_b64>;
248fe6060f1SDimitry Andricdef : SourceOfDivergence<int_amdgcn_flat_atomic_fadd>;
249fe6060f1SDimitry Andricdef : SourceOfDivergence<int_amdgcn_flat_atomic_fmin>;
250fe6060f1SDimitry Andricdef : SourceOfDivergence<int_amdgcn_flat_atomic_fmax>;
2515f757f3fSDimitry Andricdef : SourceOfDivergence<int_amdgcn_flat_atomic_fmin_num>;
2525f757f3fSDimitry Andricdef : SourceOfDivergence<int_amdgcn_flat_atomic_fmax_num>;
25381ad6265SDimitry Andricdef : SourceOfDivergence<int_amdgcn_global_atomic_fadd_v2bf16>;
25481ad6265SDimitry Andricdef : SourceOfDivergence<int_amdgcn_flat_atomic_fadd_v2bf16>;
2550b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_buffer_atomic_swap>;
2560b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_buffer_atomic_add>;
2570b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_buffer_atomic_sub>;
2580b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_buffer_atomic_smin>;
2590b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_buffer_atomic_umin>;
2600b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_buffer_atomic_smax>;
2610b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_buffer_atomic_umax>;
2620b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_buffer_atomic_and>;
2630b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_buffer_atomic_or>;
2640b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_buffer_atomic_xor>;
2658bcb0991SDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_buffer_atomic_inc>;
2668bcb0991SDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_buffer_atomic_dec>;
267e8d8bef9SDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_buffer_atomic_fadd>;
268fe6060f1SDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_buffer_atomic_fmin>;
269fe6060f1SDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_buffer_atomic_fmax>;
2700b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_buffer_atomic_cmpswap>;
2717a6dacacSDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_buffer_atomic_cond_sub_u32>;
27206c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_ptr_buffer_atomic_swap>;
27306c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_ptr_buffer_atomic_add>;
27406c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_ptr_buffer_atomic_sub>;
27506c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_ptr_buffer_atomic_smin>;
27606c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_ptr_buffer_atomic_umin>;
27706c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_ptr_buffer_atomic_smax>;
27806c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_ptr_buffer_atomic_umax>;
27906c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_ptr_buffer_atomic_and>;
28006c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_ptr_buffer_atomic_or>;
28106c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_ptr_buffer_atomic_xor>;
28206c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_ptr_buffer_atomic_inc>;
28306c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_ptr_buffer_atomic_dec>;
28406c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_ptr_buffer_atomic_fadd>;
28506c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_ptr_buffer_atomic_fmin>;
28606c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_ptr_buffer_atomic_fmax>;
28706c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_ptr_buffer_atomic_cmpswap>;
2887a6dacacSDimitry Andricdef : SourceOfDivergence<int_amdgcn_raw_ptr_buffer_atomic_cond_sub_u32>;
2890b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_buffer_atomic_swap>;
2900b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_buffer_atomic_add>;
2910b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_buffer_atomic_sub>;
2920b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_buffer_atomic_smin>;
2930b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_buffer_atomic_umin>;
2940b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_buffer_atomic_smax>;
2950b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_buffer_atomic_umax>;
2960b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_buffer_atomic_and>;
2970b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_buffer_atomic_or>;
2980b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_buffer_atomic_xor>;
2998bcb0991SDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_buffer_atomic_inc>;
3008bcb0991SDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_buffer_atomic_dec>;
301e8d8bef9SDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_buffer_atomic_fadd>;
302fe6060f1SDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_buffer_atomic_fmin>;
303fe6060f1SDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_buffer_atomic_fmax>;
3040b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_buffer_atomic_cmpswap>;
3057a6dacacSDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_buffer_atomic_cond_sub_u32>;
30606c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_ptr_buffer_atomic_swap>;
30706c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_ptr_buffer_atomic_add>;
30806c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_ptr_buffer_atomic_sub>;
30906c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_ptr_buffer_atomic_smin>;
31006c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_ptr_buffer_atomic_umin>;
31106c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_ptr_buffer_atomic_smax>;
31206c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_ptr_buffer_atomic_umax>;
31306c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_ptr_buffer_atomic_and>;
31406c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_ptr_buffer_atomic_or>;
31506c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_ptr_buffer_atomic_xor>;
31606c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_ptr_buffer_atomic_inc>;
31706c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_ptr_buffer_atomic_dec>;
31806c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_ptr_buffer_atomic_fadd>;
31906c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_ptr_buffer_atomic_fmin>;
32006c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_ptr_buffer_atomic_fmax>;
32106c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_ptr_buffer_atomic_cmpswap>;
3227a6dacacSDimitry Andricdef : SourceOfDivergence<int_amdgcn_struct_ptr_buffer_atomic_cond_sub_u32>;
3230b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_ps_live>;
324fe6060f1SDimitry Andricdef : SourceOfDivergence<int_amdgcn_live_mask>;
3250b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_ds_swizzle>;
3260b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_ds_ordered_add>;
3270b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_ds_ordered_swap>;
3280b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_permlane16>;
3290b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_permlanex16>;
3305f757f3fSDimitry Andricdef : SourceOfDivergence<int_amdgcn_permlane16_var>;
3315f757f3fSDimitry Andricdef : SourceOfDivergence<int_amdgcn_permlanex16_var>;
3320b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_mov_dpp>;
3330b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_mov_dpp8>;
3340b57cec5SDimitry Andricdef : SourceOfDivergence<int_amdgcn_update_dpp>;
3355ffd83dbSDimitry Andricdef : SourceOfDivergence<int_amdgcn_writelane>;
3360b57cec5SDimitry Andric
337*0fca6ea1SDimitry Andricforeach intr = AMDGPUMFMAIntrinsics908 in
338*0fca6ea1SDimitry Andricdef : SourceOfDivergence<intr>;
339*0fca6ea1SDimitry Andricforeach intr = AMDGPUMFMAIntrinsics90A in
340*0fca6ea1SDimitry Andricdef : SourceOfDivergence<intr>;
341*0fca6ea1SDimitry Andricforeach intr = AMDGPUMFMAIntrinsics940 in
342*0fca6ea1SDimitry Andricdef : SourceOfDivergence<intr>;
343*0fca6ea1SDimitry Andricforeach intr = AMDGPUWMMAIntrinsicsGFX11 in
344*0fca6ea1SDimitry Andricdef : SourceOfDivergence<intr>;
345*0fca6ea1SDimitry Andricforeach intr = AMDGPUWMMAIntrinsicsGFX12 in
346*0fca6ea1SDimitry Andricdef : SourceOfDivergence<intr>;
347*0fca6ea1SDimitry Andric
348*0fca6ea1SDimitry Andricdef : SourceOfDivergence<int_amdgcn_global_load_tr_b64>;
349*0fca6ea1SDimitry Andricdef : SourceOfDivergence<int_amdgcn_global_load_tr_b128>;
3500b57cec5SDimitry Andric
3515ffd83dbSDimitry Andric// The dummy boolean output is divergent from the IR's perspective,
3525ffd83dbSDimitry Andric// but the mask results are uniform. These produce a divergent and
3535ffd83dbSDimitry Andric// uniform result, so the returned struct is collectively divergent.
3545ffd83dbSDimitry Andric// isAlwaysUniform can override the extract of the uniform component.
3555ffd83dbSDimitry Andricdef : SourceOfDivergence<int_amdgcn_if>;
3565ffd83dbSDimitry Andricdef : SourceOfDivergence<int_amdgcn_else>;
3575ffd83dbSDimitry Andricdef : SourceOfDivergence<int_amdgcn_loop>;
35806c3fb27SDimitry Andricdef : SourceOfDivergence<int_amdgcn_inverse_ballot>;
3595ffd83dbSDimitry Andric
3600b57cec5SDimitry Andricforeach intr = AMDGPUImageDimAtomicIntrinsics in
3610b57cec5SDimitry Andricdef : SourceOfDivergence<intr>;
36206c3fb27SDimitry Andric
36306c3fb27SDimitry Andricclass AlwaysUniform<Intrinsic intr> {
36406c3fb27SDimitry Andric  Intrinsic Intr = intr;
36506c3fb27SDimitry Andric}
36606c3fb27SDimitry Andric
36706c3fb27SDimitry Andricdef UniformIntrinsics : GenericTable {
36806c3fb27SDimitry Andric  let FilterClass = "AlwaysUniform";
36906c3fb27SDimitry Andric  let Fields = ["Intr"];
37006c3fb27SDimitry Andric
37106c3fb27SDimitry Andric  let PrimaryKey = ["Intr"];
37206c3fb27SDimitry Andric  let PrimaryKeyName = "lookupAlwaysUniform";
37306c3fb27SDimitry Andric}
37406c3fb27SDimitry Andric
37506c3fb27SDimitry Andricdef : AlwaysUniform<int_amdgcn_readfirstlane>;
37606c3fb27SDimitry Andricdef : AlwaysUniform<int_amdgcn_readlane>;
37706c3fb27SDimitry Andricdef : AlwaysUniform<int_amdgcn_icmp>;
37806c3fb27SDimitry Andricdef : AlwaysUniform<int_amdgcn_fcmp>;
37906c3fb27SDimitry Andricdef : AlwaysUniform<int_amdgcn_ballot>;
38006c3fb27SDimitry Andricdef : AlwaysUniform<int_amdgcn_if_break>;
381