1               OpCapability Shader
2               OpMemoryModel Logical GLSL450
3               OpEntryPoint GLCompute %main "main"
4               OpExecutionMode %main LocalSize 1 1 1
5			   OpName %Block "Block"
6			   OpName %SSBO "SSBO"
7			   OpName %SSBO_Var "ssbo"
8			   OpName %UBO_Var "ubo"
9			   OpDecorate %SSBO_Var Binding 0
10			   OpDecorate %SSBO_Var DescriptorSet 0
11			   OpDecorate %UBO_Var Binding 1
12			   OpDecorate %UBO_Var DescriptorSet 0
13			   OpMemberDecorate %SSBO 0 Offset 0
14			   OpMemberDecorate %Block 0 Offset 0
15			   OpMemberDecorate %Block 1 Offset 16
16			   OpDecorate %BlockArray ArrayStride 32
17			   OpDecorate %arr_uvec2_2 ArrayStride 8
18			   OpDecorate %SSBO Block
19       %uint = OpTypeInt 32 0
20     %uint_0 = OpConstant %uint 0
21     %uint_1 = OpConstant %uint 1
22     %uint_2 = OpConstant %uint 2
23     %uint_3 = OpConstant %uint 3
24     %uvec2 = OpTypeVector %uint 2
25     %arr_uvec2_2 = OpTypeArray %uvec2 %uint_2
26	 %arr_uvec2_2_ptr = OpTypePointer StorageBuffer %arr_uvec2_2
27	 %arr_uvec2_2_ptr_const = OpTypePointer Uniform %arr_uvec2_2
28	 %arr_uvec2_2_ptr_func = OpTypePointer Function %arr_uvec2_2
29	 %arr_uvec2_2_ptr_workgroup = OpTypePointer Workgroup %arr_uvec2_2
30	 %wg = OpVariable %arr_uvec2_2_ptr_workgroup Workgroup
31   %Block = OpTypeStruct %arr_uvec2_2 %arr_uvec2_2
32%BlockArray = OpTypeArray %Block %uint_3
33%SSBO = OpTypeStruct %BlockArray
34%SSBO_Ptr = OpTypePointer StorageBuffer %SSBO
35%SSBO_Var = OpVariable %SSBO_Ptr StorageBuffer
36%UBO_Ptr = OpTypePointer Uniform %SSBO
37%UBO_Var = OpVariable %UBO_Ptr Uniform
38%void = OpTypeVoid
39%func_type = OpTypeFunction %void
40
41    %main = OpFunction %void None %func_type
42         %25 = OpLabel
43		 %func = OpVariable %arr_uvec2_2_ptr_func Function
44
45		 ; DeviceToDevice
46		 %ptr_arr_0 = OpAccessChain %arr_uvec2_2_ptr %SSBO_Var %uint_0 %uint_0 %uint_0
47		 %ptr_arr_1 = OpAccessChain %arr_uvec2_2_ptr %SSBO_Var %uint_0 %uint_0 %uint_1
48		 %loaded_array = OpLoad %arr_uvec2_2 %ptr_arr_1
49		 OpStore %ptr_arr_0 %loaded_array
50
51		 ; ConstantToDevice
52		 %ptr_arr_1_const = OpAccessChain %arr_uvec2_2_ptr_const %UBO_Var %uint_0 %uint_0 %uint_1
53		 %loaded_array_const = OpLoad %arr_uvec2_2 %ptr_arr_1_const
54		 OpStore %ptr_arr_0 %loaded_array_const
55
56		 ; StackToDevice
57		 %loaded_array_func = OpLoad %arr_uvec2_2 %func
58		 OpStore %ptr_arr_0 %loaded_array_func
59
60		 ; ThreadGroupToDevice
61		 %loaded_array_workgroup = OpLoad %arr_uvec2_2 %wg
62		 OpStore %ptr_arr_0 %loaded_array_workgroup
63
64		 ; DeviceToThreadGroup
65		 %loaded_array_2 = OpLoad %arr_uvec2_2 %ptr_arr_1
66		 OpStore %wg %loaded_array_2
67
68		 ; DeviceToStack
69		 %loaded_array_3 = OpLoad %arr_uvec2_2 %ptr_arr_1
70		 OpStore %func %loaded_array_3
71
72		 ; ConstantToThreadGroup
73		 %loaded_array_const_2 = OpLoad %arr_uvec2_2 %ptr_arr_1_const
74		 OpStore %wg %loaded_array_const_2
75
76		 ; ConstantToStack
77		 %loaded_array_const_3 = OpLoad %arr_uvec2_2 %ptr_arr_1_const
78		 OpStore %func %loaded_array_const_3
79
80               OpReturn
81               OpFunctionEnd
82