| ; SPIR-V | 
 | ; Version: 1.3 | 
 | ; Generator: Google Tint Compiler; 0 | 
 | ; Bound: 145 | 
 | ; Schema: 0 | 
 |                OpCapability Shader | 
 |          %95 = OpExtInstImport "GLSL.std.450" | 
 |                OpMemoryModel Logical GLSL450 | 
 |                OpEntryPoint GLCompute %main "main" %local_invocation_index_1 | 
 |                OpExecutionMode %main LocalSize 1 1 1 | 
 |                OpName %local_invocation_index_1 "local_invocation_index_1" | 
 |                OpName %s_block "s_block" | 
 |                OpMemberName %s_block 0 "inner" | 
 |                OpName %s "s" | 
 |                OpName %g1 "g1" | 
 |                OpName %tint_zero_workgroup_memory "tint_zero_workgroup_memory" | 
 |                OpName %local_idx "local_idx" | 
 |                OpName %tint_ftoi "tint_ftoi" | 
 |                OpName %v "v" | 
 |                OpName %accept_value "accept_value" | 
 |                OpName %val "val" | 
 |                OpName %accept_ptr_deref_call_func_F "accept_ptr_deref_call_func_F" | 
 |                OpName %val_0 "val" | 
 |                OpName %accept_ptr_deref_pass_through_F "accept_ptr_deref_pass_through_F" | 
 |                OpName %val_1 "val" | 
 |                OpName %S "S" | 
 |                OpMemberName %S 0 "a" | 
 |                OpMemberName %S 1 "b" | 
 |                OpName %accept_ptr_to_struct_and_access_F "accept_ptr_to_struct_and_access_F" | 
 |                OpName %val_2 "val" | 
 |                OpName %accept_ptr_to_struct_access_pass_ptr_F "accept_ptr_to_struct_access_pass_ptr_F" | 
 |                OpName %val_3 "val" | 
 |                OpName %accept_ptr_vec_access_elements_F "accept_ptr_vec_access_elements_F" | 
 |                OpName %v1 "v1" | 
 |                OpName %call_builtin_with_mod_scope_ptr "call_builtin_with_mod_scope_ptr" | 
 |                OpName %main_inner "main_inner" | 
 |                OpName %local_invocation_index "local_invocation_index" | 
 |                OpName %v1_0 "v1" | 
 |                OpName %v2 "v2" | 
 |                OpName %v4 "v4" | 
 |                OpName %main "main" | 
 |                OpDecorate %local_invocation_index_1 BuiltIn LocalInvocationIndex | 
 |                OpDecorate %s_block Block | 
 |                OpMemberDecorate %s_block 0 Offset 0 | 
 |                OpDecorate %s DescriptorSet 0 | 
 |                OpDecorate %s Binding 0 | 
 |                OpMemberDecorate %S 0 Offset 0 | 
 |                OpMemberDecorate %S 1 Offset 4 | 
 |        %uint = OpTypeInt 32 0 | 
 | %_ptr_Input_uint = OpTypePointer Input %uint | 
 | %local_invocation_index_1 = OpVariable %_ptr_Input_uint Input | 
 |         %int = OpTypeInt 32 1 | 
 |     %s_block = OpTypeStruct %int | 
 | %_ptr_StorageBuffer_s_block = OpTypePointer StorageBuffer %s_block | 
 |           %s = OpVariable %_ptr_StorageBuffer_s_block StorageBuffer | 
 | %_ptr_Workgroup_int = OpTypePointer Workgroup %int | 
 |          %g1 = OpVariable %_ptr_Workgroup_int Workgroup | 
 |        %void = OpTypeVoid | 
 |          %10 = OpTypeFunction %void %uint | 
 |      %uint_1 = OpConstant %uint 1 | 
 |        %bool = OpTypeBool | 
 |      %uint_2 = OpConstant %uint 2 | 
 |      %uint_0 = OpConstant %uint 0 | 
 |          %24 = OpConstantNull %int | 
 |    %uint_264 = OpConstant %uint 264 | 
 |       %float = OpTypeFloat 32 | 
 |          %27 = OpTypeFunction %int %float | 
 | %float_2_14748352e_09 = OpConstant %float 2.14748352e+09 | 
 | %float_n2_14748365e_09 = OpConstant %float -2.14748365e+09 | 
 | %int_n2147483648 = OpConstant %int -2147483648 | 
 | %int_2147483647 = OpConstant %int 2147483647 | 
 |          %41 = OpTypeFunction %int %int | 
 | %_ptr_Function_int = OpTypePointer Function %int | 
 |          %45 = OpTypeFunction %int %_ptr_Function_int | 
 |           %S = OpTypeStruct %int %int | 
 | %_ptr_Function_S = OpTypePointer Function %S | 
 |          %63 = OpTypeFunction %int %_ptr_Function_S | 
 |       %int_2 = OpConstant %int 2 | 
 |     %v3float = OpTypeVector %float 3 | 
 | %_ptr_Function_v3float = OpTypePointer Function %v3float | 
 |          %85 = OpTypeFunction %int %_ptr_Function_v3float | 
 | %_ptr_Function_float = OpTypePointer Function %float | 
 |         %105 = OpTypeFunction %int | 
 |         %115 = OpConstantNull %S | 
 |         %117 = OpConstantNull %v3float | 
 | %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int | 
 |         %140 = OpTypeFunction %void | 
 | %tint_zero_workgroup_memory = OpFunction %void None %10 | 
 |   %local_idx = OpFunctionParameter %uint | 
 |          %14 = OpLabel | 
 |          %16 = OpULessThan %bool %local_idx %uint_1 | 
 |                OpSelectionMerge %18 None | 
 |                OpBranchConditional %16 %19 %18 | 
 |          %19 = OpLabel | 
 |                OpAtomicStore %g1 %uint_2 %uint_0 %24 | 
 |                OpBranch %18 | 
 |          %18 = OpLabel | 
 |                OpControlBarrier %uint_2 %uint_2 %uint_264 | 
 |                OpReturn | 
 |                OpFunctionEnd | 
 |   %tint_ftoi = OpFunction %int None %27 | 
 |           %v = OpFunctionParameter %float | 
 |          %31 = OpLabel | 
 |          %34 = OpFOrdLessThan %bool %v %float_2_14748352e_09 | 
 |          %37 = OpFOrdLessThan %bool %v %float_n2_14748365e_09 | 
 |          %39 = OpConvertFToS %int %v | 
 |          %35 = OpSelect %int %37 %int_n2147483648 %39 | 
 |          %32 = OpSelect %int %34 %35 %int_2147483647 | 
 |                OpReturnValue %32 | 
 |                OpFunctionEnd | 
 | %accept_value = OpFunction %int None %41 | 
 |         %val = OpFunctionParameter %int | 
 |          %44 = OpLabel | 
 |                OpReturnValue %val | 
 |                OpFunctionEnd | 
 | %accept_ptr_deref_call_func_F = OpFunction %int None %45 | 
 |       %val_0 = OpFunctionParameter %_ptr_Function_int | 
 |          %49 = OpLabel | 
 |          %51 = OpLoad %int %val_0 | 
 |          %54 = OpLoad %int %val_0 | 
 |          %52 = OpFunctionCall %int %accept_value %54 | 
 |          %55 = OpIAdd %int %51 %52 | 
 |                OpReturnValue %55 | 
 |                OpFunctionEnd | 
 | %accept_ptr_deref_pass_through_F = OpFunction %int None %45 | 
 |       %val_1 = OpFunctionParameter %_ptr_Function_int | 
 |          %58 = OpLabel | 
 |          %60 = OpLoad %int %val_1 | 
 |          %61 = OpFunctionCall %int %accept_ptr_deref_call_func_F %val_1 | 
 |          %62 = OpIAdd %int %60 %61 | 
 |                OpReturnValue %62 | 
 |                OpFunctionEnd | 
 | %accept_ptr_to_struct_and_access_F = OpFunction %int None %63 | 
 |       %val_2 = OpFunctionParameter %_ptr_Function_S | 
 |          %68 = OpLabel | 
 |          %70 = OpAccessChain %_ptr_Function_int %val_2 %uint_0 | 
 |          %71 = OpLoad %int %70 | 
 |          %73 = OpAccessChain %_ptr_Function_int %val_2 %uint_1 | 
 |          %74 = OpLoad %int %73 | 
 |          %75 = OpIAdd %int %71 %74 | 
 |                OpReturnValue %75 | 
 |                OpFunctionEnd | 
 | %accept_ptr_to_struct_access_pass_ptr_F = OpFunction %int None %63 | 
 |       %val_3 = OpFunctionParameter %_ptr_Function_S | 
 |          %78 = OpLabel | 
 |          %80 = OpAccessChain %_ptr_Function_int %val_3 %uint_0 | 
 |                OpStore %80 %int_2 | 
 |          %83 = OpAccessChain %_ptr_Function_int %val_3 %uint_0 | 
 |          %84 = OpLoad %int %83 | 
 |                OpReturnValue %84 | 
 |                OpFunctionEnd | 
 | %accept_ptr_vec_access_elements_F = OpFunction %int None %85 | 
 |          %v1 = OpFunctionParameter %_ptr_Function_v3float | 
 |          %90 = OpLabel | 
 |          %93 = OpAccessChain %_ptr_Function_float %v1 %uint_0 | 
 |          %97 = OpLoad %v3float %v1 | 
 |          %99 = OpLoad %v3float %v1 | 
 |          %94 = OpExtInst %v3float %95 Cross %97 %99 | 
 |         %100 = OpCompositeExtract %float %94 0 | 
 |                OpStore %93 %100 | 
 |         %103 = OpAccessChain %_ptr_Function_float %v1 %uint_0 | 
 |         %104 = OpLoad %float %103 | 
 |         %101 = OpFunctionCall %int %tint_ftoi %104 | 
 |                OpReturnValue %101 | 
 |                OpFunctionEnd | 
 | %call_builtin_with_mod_scope_ptr = OpFunction %int None %105 | 
 |         %107 = OpLabel | 
 |         %108 = OpAtomicLoad %int %g1 %uint_2 %uint_0 | 
 |                OpReturnValue %108 | 
 |                OpFunctionEnd | 
 |  %main_inner = OpFunction %void None %10 | 
 | %local_invocation_index = OpFunctionParameter %uint | 
 |         %112 = OpLabel | 
 |        %v1_0 = OpVariable %_ptr_Function_int Function %24 | 
 |          %v2 = OpVariable %_ptr_Function_S Function %115 | 
 |          %v4 = OpVariable %_ptr_Function_v3float Function %117 | 
 |         %113 = OpFunctionCall %void %tint_zero_workgroup_memory %local_invocation_index | 
 |                OpStore %v1_0 %24 | 
 |                OpStore %v2 %115 | 
 |                OpStore %v4 %117 | 
 |         %119 = OpAtomicLoad %int %g1 %uint_2 %uint_0 | 
 |         %121 = OpFunctionCall %int %accept_ptr_deref_pass_through_F %v1_0 | 
 |         %123 = OpFunctionCall %int %accept_ptr_to_struct_and_access_F %v2 | 
 |         %125 = OpFunctionCall %int %accept_ptr_to_struct_and_access_F %v2 | 
 |         %127 = OpFunctionCall %int %accept_ptr_vec_access_elements_F %v4 | 
 |         %129 = OpFunctionCall %int %accept_ptr_to_struct_access_pass_ptr_F %v2 | 
 |         %131 = OpFunctionCall %int %call_builtin_with_mod_scope_ptr | 
 |         %133 = OpAccessChain %_ptr_StorageBuffer_int %s %uint_0 | 
 |         %134 = OpIAdd %int %121 %123 | 
 |         %135 = OpIAdd %int %134 %125 | 
 |         %136 = OpIAdd %int %135 %127 | 
 |         %137 = OpIAdd %int %136 %129 | 
 |         %138 = OpIAdd %int %137 %131 | 
 |         %139 = OpIAdd %int %138 %119 | 
 |                OpStore %133 %139 | 
 |                OpReturn | 
 |                OpFunctionEnd | 
 |        %main = OpFunction %void None %140 | 
 |         %142 = OpLabel | 
 |         %144 = OpLoad %uint %local_invocation_index_1 | 
 |         %143 = OpFunctionCall %void %main_inner %144 | 
 |                OpReturn | 
 |                OpFunctionEnd |