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