1; SPIR-V
2; Version: 1.4
3; Generator: Khronos SPIR-V Tools Assembler; 0
4; Bound: 97
5; Schema: 0
6               OpCapability Shader
7               OpCapability IntegerFunctions2INTEL
8               OpExtension "SPV_INTEL_shader_integer_functions2"
9          %1 = OpExtInstImport "GLSL.std.450"
10               OpMemoryModel Logical GLSL450
11               OpEntryPoint GLCompute %main "main"
12               OpExecutionMode %main LocalSize 1 1 1
13               OpName %main "main"
14               OpName %foo "foo"
15               OpMemberName %foo 0 "a"
16               OpMemberName %foo 1 "b"
17               OpMemberName %foo 2 "c"
18               OpMemberName %foo 3 "d"
19               OpName %_ ""
20               OpMemberDecorate %foo 0 Offset 0
21               OpMemberDecorate %foo 1 Offset 4
22               OpMemberDecorate %foo 2 Offset 8
23               OpMemberDecorate %foo 3 Offset 12
24               OpDecorate %foo Block
25               OpDecorate %_ DescriptorSet 0
26               OpDecorate %_ Binding 0
27       %void = OpTypeVoid
28          %6 = OpTypeFunction %void
29       %uint = OpTypeInt 32 0
30        %int = OpTypeInt 32 1
31        %foo = OpTypeStruct %uint %uint %int %int
32%_ptr_StorageBuffer_foo = OpTypePointer StorageBuffer %foo
33          %_ = OpVariable %_ptr_StorageBuffer_foo StorageBuffer
34      %int_0 = OpConstant %int 0
35%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
36      %int_1 = OpConstant %int 1
37      %int_2 = OpConstant %int 2
38%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
39      %int_3 = OpConstant %int 3
40       %main = OpFunction %void None %6
41         %15 = OpLabel
42         %16 = OpAccessChain %_ptr_StorageBuffer_uint %_ %int_0
43         %17 = OpLoad %uint %16
44         %18 = OpUCountLeadingZerosINTEL %uint %17
45         %19 = OpAccessChain %_ptr_StorageBuffer_uint %_ %int_0
46               OpStore %19 %18
47         %20 = OpAccessChain %_ptr_StorageBuffer_uint %_ %int_0
48         %21 = OpLoad %uint %20
49         %22 = OpUCountTrailingZerosINTEL %uint %21
50         %23 = OpAccessChain %_ptr_StorageBuffer_uint %_ %int_0
51               OpStore %23 %22
52         %24 = OpAccessChain %_ptr_StorageBuffer_int %_ %int_2
53         %25 = OpLoad %int %24
54         %26 = OpAccessChain %_ptr_StorageBuffer_int %_ %int_3
55         %27 = OpLoad %int %26
56         %28 = OpAbsISubINTEL %uint %25 %27
57         %29 = OpAccessChain %_ptr_StorageBuffer_uint %_ %int_0
58               OpStore %29 %28
59         %30 = OpAccessChain %_ptr_StorageBuffer_uint %_ %int_0
60         %31 = OpLoad %uint %30
61         %32 = OpAccessChain %_ptr_StorageBuffer_uint %_ %int_1
62         %33 = OpLoad %uint %32
63         %34 = OpAbsUSubINTEL %uint %31 %33
64         %35 = OpAccessChain %_ptr_StorageBuffer_uint %_ %int_0
65               OpStore %35 %34
66         %37 = OpAccessChain %_ptr_StorageBuffer_int %_ %int_2
67         %38 = OpLoad %int %37
68         %39 = OpAccessChain %_ptr_StorageBuffer_int %_ %int_3
69         %40 = OpLoad %int %39
70         %41 = OpIAddSatINTEL %int %38 %40
71         %42 = OpAccessChain %_ptr_StorageBuffer_int %_ %int_2
72               OpStore %42 %41
73         %43 = OpAccessChain %_ptr_StorageBuffer_uint %_ %int_0
74         %44 = OpLoad %uint %43
75         %45 = OpAccessChain %_ptr_StorageBuffer_uint %_ %int_1
76         %46 = OpLoad %uint %45
77         %47 = OpUAddSatINTEL %uint %44 %46
78         %48 = OpAccessChain %_ptr_StorageBuffer_uint %_ %int_0
79               OpStore %48 %47
80         %49 = OpAccessChain %_ptr_StorageBuffer_int %_ %int_2
81         %50 = OpLoad %int %49
82         %51 = OpAccessChain %_ptr_StorageBuffer_int %_ %int_3
83         %52 = OpLoad %int %51
84         %53 = OpIAverageINTEL %int %50 %52
85         %54 = OpAccessChain %_ptr_StorageBuffer_int %_ %int_2
86               OpStore %54 %53
87         %55 = OpAccessChain %_ptr_StorageBuffer_uint %_ %int_0
88         %56 = OpLoad %uint %55
89         %57 = OpAccessChain %_ptr_StorageBuffer_uint %_ %int_1
90         %58 = OpLoad %uint %57
91         %59 = OpUAverageINTEL %uint %56 %58
92         %60 = OpAccessChain %_ptr_StorageBuffer_uint %_ %int_0
93               OpStore %60 %59
94         %61 = OpAccessChain %_ptr_StorageBuffer_int %_ %int_2
95         %62 = OpLoad %int %61
96         %63 = OpAccessChain %_ptr_StorageBuffer_int %_ %int_3
97         %64 = OpLoad %int %63
98         %65 = OpIAverageRoundedINTEL %int %62 %64
99         %66 = OpAccessChain %_ptr_StorageBuffer_int %_ %int_2
100               OpStore %66 %65
101         %67 = OpAccessChain %_ptr_StorageBuffer_uint %_ %int_0
102         %68 = OpLoad %uint %67
103         %69 = OpAccessChain %_ptr_StorageBuffer_uint %_ %int_1
104         %70 = OpLoad %uint %69
105         %71 = OpUAverageRoundedINTEL %uint %68 %70
106         %72 = OpAccessChain %_ptr_StorageBuffer_uint %_ %int_0
107               OpStore %72 %71
108         %73 = OpAccessChain %_ptr_StorageBuffer_int %_ %int_2
109         %74 = OpLoad %int %73
110         %75 = OpAccessChain %_ptr_StorageBuffer_int %_ %int_3
111         %76 = OpLoad %int %75
112         %77 = OpISubSatINTEL %int %74 %76
113         %78 = OpAccessChain %_ptr_StorageBuffer_int %_ %int_2
114               OpStore %78 %77
115         %79 = OpAccessChain %_ptr_StorageBuffer_uint %_ %int_0
116         %80 = OpLoad %uint %79
117         %81 = OpAccessChain %_ptr_StorageBuffer_uint %_ %int_1
118         %82 = OpLoad %uint %81
119         %83 = OpUSubSatINTEL %uint %80 %82
120         %84 = OpAccessChain %_ptr_StorageBuffer_uint %_ %int_0
121               OpStore %84 %83
122         %85 = OpAccessChain %_ptr_StorageBuffer_int %_ %int_2
123         %86 = OpLoad %int %85
124         %87 = OpAccessChain %_ptr_StorageBuffer_int %_ %int_3
125         %88 = OpLoad %int %87
126         %89 = OpIMul32x16INTEL %int %86 %88
127         %90 = OpAccessChain %_ptr_StorageBuffer_int %_ %int_2
128               OpStore %90 %89
129         %91 = OpAccessChain %_ptr_StorageBuffer_uint %_ %int_0
130         %92 = OpLoad %uint %91
131         %93 = OpAccessChain %_ptr_StorageBuffer_uint %_ %int_1
132         %94 = OpLoad %uint %93
133         %95 = OpUMul32x16INTEL %uint %92 %94
134         %96 = OpAccessChain %_ptr_StorageBuffer_uint %_ %int_0
135               OpStore %96 %95
136               OpReturn
137               OpFunctionEnd
138