Skip to content

Commit

Permalink
fixup! Add tests for Deduplicate constant data tables
Browse files Browse the repository at this point in the history
  • Loading branch information
mariusz-sikora-at-amd committed Nov 29, 2023
1 parent 1b11387 commit 2b5d3dc
Show file tree
Hide file tree
Showing 2 changed files with 99 additions and 200 deletions.
101 changes: 27 additions & 74 deletions llpc/test/shaderdb/general/TestDeduplicateConstTables.frag
Original file line number Diff line number Diff line change
@@ -1,18 +1,27 @@
// BEGIN_SHADERTEST
// RUN: amdllpc -v %gfxip %s | FileCheck -check-prefix=SHADERTEST %s
// SHADERTEST-LABEL: {{^// LLPC}} SPIRV-to-LLVM translation results
// SHADERTEST: @indexable = addrspace(5) constant [28 x <4 x i32>] [<4 x i32> <i32 1059055552, i32 1057692236, i32 1062465857, i32 0
// SHADERTEST: @indexable.1 = addrspace(5) constant [28 x <4 x i32>] [<4 x i32> <i32 1059055552, i32 1057692236, i32 1062465857, i32 0
// SHADERTEST: @indexable.2 = addrspace(5) constant [28 x <4 x i32>] [<4 x i32> <i32 1059055552, i32 1057692236, i32 1062465857, i32 0
// SHADERTEST: getelementptr [28 x <4 x i32>], ptr addrspace(5) @indexable, i32
// SHADERTEST: getelementptr [28 x <4 x i32>], ptr addrspace(5) @indexable.1, i32
// SHADERTEST: getelementptr [28 x <4 x i32>], ptr addrspace(5) @indexable.2, i32
// SHADERTEST: [[VAR1:@.*]] = addrspace(5) constant [28 x <4 x i32>] [<4 x i32> <i32 1059055552, i32 1057692236, i32 1062465857, i32 0
// SHADERTEST: [[VAR2:@.*]] = addrspace(5) constant [28 x <4 x i32>] [<4 x i32> <i32 1059055552, i32 1057692236, i32 1062465857, i32 0
// SHADERTEST: [[VAR3:@.*]] = addrspace(5) constant [28 x <4 x i32>] [<4 x i32> <i32 1059055552, i32 1057692236, i32 1062465857, i32 0
// SHADERTEST: [[VAR4:@.*]] = addrspace(5) constant [28 x <4 x i32>] [<4 x i32> <i32 1059055552, i32 1057692236, i32 1062465857, i32 0
// SHADERTEST: [[VAR5:@.*]] = addrspace(5) constant [28 x <4 x i32>] [<4 x i32> <i32 1059055552, i32 1057692236, i32 1062465857, i32 0
// SHADERTEST: [[VAR6:@.*]] = addrspace(5) constant [28 x <4 x i32>] [<4 x i32> <i32 1059055552, i32 1057692236, i32 1062465857, i32 0
// SHADERTEST: getelementptr [28 x <4 x i32>], ptr addrspace(5) [[VAR1]], i32
// SHADERTEST: getelementptr [28 x <4 x i32>], ptr addrspace(5) [[VAR2]], i32
// SHADERTEST: getelementptr [28 x <4 x i32>], ptr addrspace(5) [[VAR3]], i32
// SHADERTEST: getelementptr [28 x <4 x i32>], ptr addrspace(5) [[VAR4]], i32
// SHADERTEST: getelementptr [28 x <4 x i32>], ptr addrspace(5) [[VAR5]], i32
// SHADERTEST: getelementptr [28 x <4 x i32>], ptr addrspace(5) [[VAR6]], i32
//
// SHADERTEST-LABEL: {{^// LLPC}} SPIR-V lowering results
// SHADERTEST: @__llpc_global_proxy_indexable.2 = internal unnamed_addr addrspace(4) constant [28 x <4 x i32>] [<4 x i32> <i32 1059055552, i32 1057692236, i32 1062465857, i32 0
// SHADERTEST: getelementptr [28 x <4 x i32>], ptr addrspace(4) @__llpc_global_proxy_indexable.2, i64
// SHADERTEST: getelementptr [28 x <4 x i32>], ptr addrspace(4) @__llpc_global_proxy_indexable.2, i64
// SHADERTEST: getelementptr [28 x <4 x i32>], ptr addrspace(4) @__llpc_global_proxy_indexable.2, i64
// SHADERTEST: [[VAR:@.*]] = internal unnamed_addr addrspace(4) constant [28 x <4 x i32>] [<4 x i32> <i32 1059055552, i32 1057692236, i32 1062465857, i32 0
// SHADERTEST: getelementptr [28 x <4 x i32>], ptr addrspace(4) [[VAR]], i64
// SHADERTEST: getelementptr [28 x <4 x i32>], ptr addrspace(4) [[VAR]], i64
// SHADERTEST: getelementptr [28 x <4 x i32>], ptr addrspace(4) [[VAR]], i64
// SHADERTEST: getelementptr [28 x <4 x i32>], ptr addrspace(4) [[VAR]], i64
// SHADERTEST: getelementptr [28 x <4 x i32>], ptr addrspace(4) [[VAR]], i64
// SHADERTEST: getelementptr [28 x <4 x i32>], ptr addrspace(4) [[VAR]], i64
// SHADERTEST: AMDLLPC SUCCESS
// END_SHADERTEST

Expand All @@ -21,78 +30,22 @@

const uvec4 _211[28] = uvec4[](uvec4(1059055552u, 1057692236u, 1062465857u, 0u), uvec4(3188284415u, 3211912104u, 1064587336u, 0u), uvec4(1053197116u, 3202258829u, 1058349232u, 0u), uvec4(1039685418u, 3192222363u, 1047084841u, 0u), uvec4(3192964587u, 1038352636u, 1047388173u, 0u), uvec4(1062520215u, 3197474974u, 1063356727u, 0u), uvec4(1037850661u, 3205763422u, 1058446204u, 0u), uvec4(1049678263u, 1061836040u, 1062659634u, 0u), uvec4(3199959344u, 1053446761u, 1057614893u, 0u), uvec4(1061258065u, 1046506363u, 1061780340u, 0u), uvec4(3204886141u, 1019442700u, 1057411553u, 0u), uvec4(3210859837u, 3195704642u, 1063935038u, 0u), uvec4(3204075131u, 3197512555u, 1058140859u, 0u), uvec4(1054956040u, 3182380177u, 1055232528u, 0u), uvec4(1046011770u, 1057194959u, 1057898596u, 0u), uvec4(1029739884u, 1064631963u, 1064658304u, 0u), uvec4(3205958373u, 3207889095u, 1064000637u, 0u), uvec4(3209492326u, 1048328368u, 1062629938u, 0u), uvec4(3192317658u, 3191631805u, 1049165551u, 0u), uvec4(3202323254u, 1061452681u, 1063390953u, 0u), uvec4(1046338590u, 1038982117u, 1048292130u, 0u), uvec4(1042332191u, 3210420945u, 1063176708u, 0u), uvec4(3208780301u, 1058367687u, 1064628776u, 0u), uvec4(1065233091u, 3169707339u, 1065240305u, 0u), uvec4(3194203417u, 3205774830u, 1058982739u, 0u), uvec4(1057812193u, 3207297698u, 1063122517u, 0u), uvec4(1055767050u, 1049621221u, 1057682673u, 0u), uvec4(3180576291u, 1058735275u, 1058807082u, 0u));

layout(set = 1, binding = 0, std140) uniform _14_16
layout(binding = 0) uniform Uniforms
{
vec4 _m0;
vec4 _m1;
vec4 _m2;
} _16;
int in1;
};

layout(set = 0, binding = 0) uniform sampler2D _33;

layout(location = 0) in vec2 vs_TEXCOORD1;
layout(location = 0) out vec4 _354;
vec4 _9;
vec4 _39;
float _54;
vec3 _69;
vec3 _75;
vec3 _79;
float _81;
vec4 _94;
vec4 _245;
vec2 _255;
bool _264;
vec2 _281;
int _374;
layout(location = 0) out vec4 _out;

void main()
{
vec2 _27 = (vs_TEXCOORD1 * _16._m1.xy) + _16._m1.zw;
_9 = vec4(_27.x, _27.y, _9.z, _9.w);
_9 = texture(_33, _9.xy).xwyz;
_39 = _9.yyyy * _16._m0.xyxy;
_39 *= _16._m2.wwww;
_54 = _9.y * 0.25;
_54 = max(_54, _16._m2.z);
_69 = _9.xzw * vec3(_54);
_75.x = 1.2000000476837158203125;
_79 = _69;
_81 = _54;
for (int _84 = 0; _84 < 28; _84++)
for (uint i = 0; i < 28; i++)
{
_94 = _39 * uintBitsToFloat(_211[_84].xyxy);
_75.z = uintBitsToFloat(_211[_84].z);
_94 /= _75.xxzz;
_94 += vs_TEXCOORD1.xyxy;
_94 = (_94 * _16._m1.xyxy) + _16._m1.zwzw;
_245 = texture(_33, _94.xy);
_94 = texture(_33, _94.zw);
_255.x = _94.w + _245.w;
_264 = 0.0 < _255.x;
if (_264)
if (in1 != 1)
{
_9.x = _9.y * uintBitsToFloat(_211[_84].z);
_281.x = _245.w;
_281.y = _94.w;
_255 = ((-_9.xy) * vec2(0.833333313465118408203125, 1.0)) + _281;
_255 += vec2(0.26499998569488525390625);
_255 *= vec2(3.7735850811004638671875);
_255 = clamp(_255, vec2(0.0), vec2(1.0));
_281 = (_255 * vec2(-2.0)) + vec2(3.0);
_255 *= _255;
_255 *= _281;
vec3 _326 = _255.yyy * _94.xyz;
_94 = vec4(_326.x, _326.y, _326.z, _94.w);
vec3 _336 = (_245.xyz * _255.xxx) + _94.xyz;
_94 = vec4(_336.x, _336.y, _336.z, _94.w);
_79 += _94.xyz;
_9.x = dot(_255, vec2(1.0));
_81 = _9.x + _81;
_out = _out + vec4(_211[i+in1].x, _211[i].y, _211[i].wx);
}
_out = _out + vec4(_211[in1].x, _211[i].y, _211[i].wx);
}
vec3 _358 = _79 / vec3(_81);
_354 = vec4(_358.x, _358.y, _358.z, _354.w);
_354.w = 1.0;
}

198 changes: 72 additions & 126 deletions llpc/test/shaderdb/general/TestDeduplicateConstTables.spvasm
Original file line number Diff line number Diff line change
@@ -1,173 +1,119 @@
; BEGIN_SHADERTEST
; RUN: amdllpc -v %gfxip %s | FileCheck -check-prefix=SHADERTEST %s
; SHADERTEST-LABEL: {{^// LLPC}} SPIRV-to-LLVM translation results
; SHADERTEST: store [5 x <4 x i32>] [<4 x i32> <i32 1059055552, i32 1057692236, i32 1062465857
; SHADERTEST: store [5 x <4 x i32>] [<4 x i32> <i32 1059055552, i32 1057692236, i32 1062465857
; SHADERTEST: store [5 x <4 x i32>] [<4 x i32> <i32 1059055552, i32 1057692236, i32 1062465857
; SHADERTEST: store [2 x <4 x i32>] [<4 x i32> <i32 1059055552, i32 1057692236, i32 1062465857
; SHADERTEST: store [2 x <4 x i32>] [<4 x i32> <i32 1059055552, i32 1057692236, i32 1062465857
; SHADERTEST: store [2 x <4 x i32>] [<4 x i32> <i32 1059055552, i32 1057692236, i32 1062465857

; SHADERTEST-LABEL: {{^// LLPC}} SPIR-V lowering results
; SHADERTEST: @0 = internal unnamed_addr addrspace(4) constant [5 x <4 x i32>] [<4 x i32> <i32 1059055552, i32 1057692236, i32 1062465857, i32 0
; SHADERTEST: getelementptr [5 x <4 x i32>], ptr addrspace(4) @0
; SHADERTEST: getelementptr [5 x <4 x i32>], ptr addrspace(4) @0
; SHADERTEST: getelementptr [5 x <4 x i32>], ptr addrspace(4) @0
; SHADERTEST: [[VAR:@.*]] = internal unnamed_addr addrspace(4) constant [2 x <4 x i32>] [<4 x i32> <i32 1059055552, i32 1057692236, i32 1062465857, i32 0
; SHADERTEST: getelementptr [2 x <4 x i32>], ptr addrspace(4) [[VAR]]
; SHADERTEST: getelementptr [2 x <4 x i32>], ptr addrspace(4) [[VAR]]
; SHADERTEST: getelementptr [2 x <4 x i32>], ptr addrspace(4) [[VAR]]
; SHADERTEST: AMDLLPC SUCCESS
; END_SHADERTEST


; SPIR-V
; Version: 1.6
; Generator: Khronos Glslang Reference Front End; 11
; Bound: 112
; Bound: 70
; Schema: 0
OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Fragment %main "main" %vs_TEXCOORD1 %_16 %_354
OpEntryPoint Fragment %main "main" %_out %_
OpExecutionMode %main OriginUpperLeft
OpSource GLSL 460
OpName %main "main"
OpName %_84 "_84"
OpName %t1 "t1"
OpName %vs_TEXCOORD1 "vs_TEXCOORD1"
OpName %_14_16 "_14_16"
OpMemberName %_14_16 0 "_m0"
OpMemberName %_14_16 1 "_m1"
OpMemberName %_14_16 2 "_m2"
OpName %_16 "_16"
OpName %t2 "t2"
OpName %t3 "t3"
OpName %_354 "_354"
OpDecorate %vs_TEXCOORD1 Location 0
OpMemberDecorate %_14_16 0 Offset 0
OpMemberDecorate %_14_16 1 Offset 16
OpMemberDecorate %_14_16 2 Offset 32
OpDecorate %_14_16 Block
OpDecorate %_16 DescriptorSet 1
OpDecorate %_16 Binding 0
OpDecorate %_354 Location 0
OpName %i "i"
OpName %_out "_out"
OpName %Uniforms "Uniforms"
OpMemberName %Uniforms 0 "in1"
OpName %_ ""
OpDecorate %_out Location 0
OpMemberDecorate %Uniforms 0 Offset 0
OpDecorate %Uniforms Block
OpDecorate %_ DescriptorSet 0
OpDecorate %_ Binding 0
%void = OpTypeVoid
%3 = OpTypeFunction %void
%int = OpTypeInt 32 1
%_ptr_Function_int = OpTypePointer Function %int
%int_0 = OpConstant %int 0
%int_5 = OpConstant %int 5
%uint = OpTypeInt 32 0
%_ptr_Function_uint = OpTypePointer Function %uint
%uint_0 = OpConstant %uint 0
%uint_2 = OpConstant %uint 2
%bool = OpTypeBool
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Function_v4float = OpTypePointer Function %v4float
%v2float = OpTypeVector %float 2
%_ptr_Input_v2float = OpTypePointer Input %v2float
%vs_TEXCOORD1 = OpVariable %_ptr_Input_v2float Input
%_14_16 = OpTypeStruct %v4float %v4float %v4float
%_ptr_Uniform__14_16 = OpTypePointer Uniform %_14_16
%_16 = OpVariable %_ptr_Uniform__14_16 Uniform
%int_2 = OpConstant %int 2
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%uint = OpTypeInt 32 0
%_ptr_Output_v4float = OpTypePointer Output %v4float
%_out = OpVariable %_ptr_Output_v4float Output
%v4uint = OpTypeVector %uint 4
%uint_5 = OpConstant %uint 5
%_arr_v4uint_uint_5 = OpTypeArray %v4uint %uint_5
%_arr_v4uint_uint_2 = OpTypeArray %v4uint %uint_2
%uint_1059055552 = OpConstant %uint 1059055552
%uint_1057692236 = OpConstant %uint 1057692236
%uint_1062465857 = OpConstant %uint 1062465857
%uint_0 = OpConstant %uint 0
%48 = OpConstantComposite %v4uint %uint_1059055552 %uint_1057692236 %uint_1062465857 %uint_0
%29 = OpConstantComposite %v4uint %uint_1059055552 %uint_1057692236 %uint_1062465857 %uint_0
%uint_3188284415 = OpConstant %uint 3188284415
%uint_3211912104 = OpConstant %uint 3211912104
%uint_1064587336 = OpConstant %uint 1064587336
%52 = OpConstantComposite %v4uint %uint_3188284415 %uint_3211912104 %uint_1064587336 %uint_0
%uint_1053197116 = OpConstant %uint 1053197116
%uint_3202258829 = OpConstant %uint 3202258829
%uint_1058349232 = OpConstant %uint 1058349232
%56 = OpConstantComposite %v4uint %uint_1053197116 %uint_3202258829 %uint_1058349232 %uint_0
%uint_1039685418 = OpConstant %uint 1039685418
%uint_3192222363 = OpConstant %uint 3192222363
%uint_1047084841 = OpConstant %uint 1047084841
%60 = OpConstantComposite %v4uint %uint_1039685418 %uint_3192222363 %uint_1047084841 %uint_0
%uint_3192964587 = OpConstant %uint 3192964587
%uint_1038352636 = OpConstant %uint 1038352636
%uint_1047388173 = OpConstant %uint 1047388173
%64 = OpConstantComposite %v4uint %uint_3192964587 %uint_1038352636 %uint_1047388173 %uint_0
%65 = OpConstantComposite %_arr_v4uint_uint_5 %48 %52 %56 %60 %64
%_ptr_Function__arr_v4uint_uint_5 = OpTypePointer Function %_arr_v4uint_uint_5
%33 = OpConstantComposite %v4uint %uint_3188284415 %uint_3211912104 %uint_1064587336 %uint_0
%34 = OpConstantComposite %_arr_v4uint_uint_2 %29 %33
%int = OpTypeInt 32 1
%Uniforms = OpTypeStruct %int
%_ptr_Uniform_Uniforms = OpTypePointer Uniform %Uniforms
%_ = OpVariable %_ptr_Uniform_Uniforms Uniform
%int_0 = OpConstant %int 0
%_ptr_Uniform_int = OpTypePointer Uniform %int
%_ptr_Function__arr_v4uint_uint_2 = OpTypePointer Function %_arr_v4uint_uint_2
%uint_1 = OpConstant %uint 1
%v2uint = OpTypeVector %uint 2
%_ptr_Function_v4uint = OpTypePointer Function %v4uint
%_ptr_Function_float = OpTypePointer Function %float
%v2float = OpTypeVector %float 2
%int_1 = OpConstant %int 1
%_ptr_Uniform_float = OpTypePointer Uniform %float
%uint_2 = OpConstant %uint 2
%_ptr_Function_uint = OpTypePointer Function %uint
%_ptr_Input_float = OpTypePointer Input %float
%_ptr_Output_v4float = OpTypePointer Output %v4float
%_354 = OpVariable %_ptr_Output_v4float Output
%main = OpFunction %void None %3
%5 = OpLabel
%_84 = OpVariable %_ptr_Function_int Function
%t1 = OpVariable %_ptr_Function_v4float Function
%indexable = OpVariable %_ptr_Function__arr_v4uint_uint_5 Function
%t2 = OpVariable %_ptr_Function_float Function
%indexable_0 = OpVariable %_ptr_Function__arr_v4uint_uint_5 Function
%t3 = OpVariable %_ptr_Function_float Function
%indexable_1 = OpVariable %_ptr_Function__arr_v4uint_uint_5 Function
OpStore %indexable %65
OpStore %indexable_0 %65
OpStore %indexable_1 %65
OpStore %_84 %int_0
%i = OpVariable %_ptr_Function_uint Function
%indexable = OpVariable %_ptr_Function__arr_v4uint_uint_2 Function
%indexable_0 = OpVariable %_ptr_Function__arr_v4uint_uint_2 Function
%indexable_1 = OpVariable %_ptr_Function__arr_v4uint_uint_2 Function
OpStore %indexable %34
OpStore %indexable_0 %34
OpStore %indexable_1 %34
OpStore %i %uint_0
OpBranch %10
%10 = OpLabel
OpLoopMerge %12 %13 None
OpBranch %14
%14 = OpLabel
%15 = OpLoad %int %_84
%18 = OpSLessThan %bool %15 %int_5
%15 = OpLoad %uint %i
%18 = OpULessThan %bool %15 %uint_2
OpBranchConditional %18 %11 %12
%11 = OpLabel
%26 = OpLoad %v2float %vs_TEXCOORD1
%32 = OpAccessChain %_ptr_Uniform_v4float %_16 %int_2
%33 = OpLoad %v4float %32
%34 = OpVectorShuffle %v2float %33 %33 0 3
%35 = OpCompositeExtract %float %26 0
%36 = OpCompositeExtract %float %26 1
%37 = OpCompositeExtract %float %34 0
%38 = OpCompositeExtract %float %34 1
%39 = OpCompositeConstruct %v4float %35 %36 %37 %38
%66 = OpLoad %int %_84
%70 = OpAccessChain %_ptr_Function_v4uint %indexable %66
%71 = OpLoad %v4uint %70
%72 = OpVectorShuffle %v4uint %71 %71 0 1 0 1
%73 = OpBitcast %v4float %72
%74 = OpFMul %v4float %39 %73
OpStore %t1 %74
%79 = OpAccessChain %_ptr_Uniform_float %_16 %int_1 %uint_0
%80 = OpLoad %float %79
%81 = OpLoad %int %_84
%85 = OpAccessChain %_ptr_Function_uint %indexable_0 %81 %uint_2
%86 = OpLoad %uint %85
%87 = OpBitcast %float %86
%88 = OpFMul %float %80 %87
OpStore %t2 %88
%91 = OpAccessChain %_ptr_Input_float %vs_TEXCOORD1 %uint_0
%92 = OpLoad %float %91
%93 = OpLoad %int %_84
%95 = OpAccessChain %_ptr_Function_uint %indexable_1 %93 %uint_2
%96 = OpLoad %uint %95
%97 = OpBitcast %float %96
%98 = OpFMul %float %92 %97
OpStore %t3 %98
%101 = OpLoad %v4float %t1
%102 = OpVectorShuffle %v2float %101 %101 0 3
%103 = OpLoad %float %t2
%104 = OpLoad %float %t3
%105 = OpCompositeExtract %float %102 0
%106 = OpCompositeExtract %float %102 1
%107 = OpCompositeConstruct %v4float %105 %106 %103 %104
%108 = OpLoad %v4float %_354
%109 = OpFAdd %v4float %108 %107
OpStore %_354 %109
%23 = OpLoad %v4float %_out
%41 = OpAccessChain %_ptr_Uniform_int %_ %int_0
%42 = OpLoad %int %41
%45 = OpAccessChain %_ptr_Function_uint %indexable %42 %uint_0
%46 = OpLoad %uint %45
%47 = OpConvertUToF %float %46
%48 = OpLoad %uint %i
%51 = OpAccessChain %_ptr_Function_uint %indexable_0 %48 %uint_1
%52 = OpLoad %uint %51
%53 = OpConvertUToF %float %52
%54 = OpLoad %uint %i
%58 = OpAccessChain %_ptr_Function_v4uint %indexable_1 %54
%59 = OpLoad %v4uint %58
%60 = OpVectorShuffle %v2uint %59 %59 3 0
%62 = OpConvertUToF %v2float %60
%63 = OpCompositeExtract %float %62 0
%64 = OpCompositeExtract %float %62 1
%65 = OpCompositeConstruct %v4float %47 %53 %63 %64
%66 = OpFAdd %v4float %23 %65
OpStore %_out %66
OpBranch %13
%13 = OpLabel
%110 = OpLoad %int %_84
%111 = OpIAdd %int %110 %int_1
OpStore %_84 %111
%67 = OpLoad %uint %i
%69 = OpIAdd %uint %67 %int_1
OpStore %i %69
OpBranch %10
%12 = OpLabel
OpReturn
Expand Down

0 comments on commit 2b5d3dc

Please sign in to comment.