; SPIR-V
; Version: 1.0
; Generator: Khronos Glslang Reference Front End; 8
; Bound: 108
; Schema: 0
               OpCapability Shader
          %1 = OpExtInstImport "GLSL.std.450"
               OpMemoryModel Logical GLSL450
               OpEntryPoint GLCompute %main "main" %gl_NumWorkGroups %gl_WorkGroupID %gl_LocalInvocationID %gl_GlobalInvocationID %gl_LocalInvocationIndex
               OpExecutionMode %main LocalSize 2 5 7
               OpSource ESSL 310
               OpName %main "main"
               OpName %bName "bName"
               OpMemberName %bName 0 "size"
               OpMemberName %bName 1 "count"
               OpMemberName %bName 2 "data"
               OpName %bInst "bInst"
               OpName %s "s"
               OpName %arrX "arrX"
               OpName %arrY "arrY"
               OpName %arrZ "arrZ"
               OpName %gl_NumWorkGroups "gl_NumWorkGroups"
               OpName %gl_WorkGroupID "gl_WorkGroupID"
               OpName %gl_LocalInvocationID "gl_LocalInvocationID"
               OpName %gl_GlobalInvocationID "gl_GlobalInvocationID"
               OpName %gl_LocalInvocationIndex "gl_LocalInvocationIndex"
               OpDecorate %_runtimearr_v4float ArrayStride 16
               OpMemberDecorate %bName 0 Offset 0
               OpMemberDecorate %bName 1 Offset 16
               OpMemberDecorate %bName 2 Offset 32
               OpDecorate %bName BufferBlock
               OpDecorate %bInst DescriptorSet 0
               OpDecorate %bInst Binding 0
               OpDecorate %39 SpecId 18
               OpDecorate %41 SpecId 19
               OpDecorate %gl_WorkGroupSize BuiltIn WorkgroupSize
               OpDecorate %gl_NumWorkGroups BuiltIn NumWorkgroups
               OpDecorate %gl_WorkGroupID BuiltIn WorkgroupId
               OpDecorate %gl_LocalInvocationID BuiltIn LocalInvocationId
               OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId
               OpDecorate %gl_LocalInvocationIndex BuiltIn LocalInvocationIndex
       %void = OpTypeVoid
          %3 = OpTypeFunction %void
       %uint = OpTypeInt 32 0
     %uint_2 = OpConstant %uint 2
   %uint_264 = OpConstant %uint 264
        %int = OpTypeInt 32 1
     %v3uint = OpTypeVector %uint 3
      %float = OpTypeFloat 32
    %v4float = OpTypeVector %float 4
%_runtimearr_v4float = OpTypeRuntimeArray %v4float
      %bName = OpTypeStruct %int %v3uint %_runtimearr_v4float
%_ptr_Uniform_bName = OpTypePointer Uniform %bName
      %bInst = OpVariable %_ptr_Uniform_bName Uniform
      %int_2 = OpConstant %int 2
      %int_0 = OpConstant %int 0
%_ptr_Uniform_int = OpTypePointer Uniform %int
    %float_7 = OpConstant %float 7
         %24 = OpConstantComposite %v4float %float_7 %float_7 %float_7 %float_7
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
     %uint_1 = OpConstant %uint 1
  %uint_3400 = OpConstant %uint 3400
    %uint_72 = OpConstant %uint 72
%uint_197645 = OpConstant %uint 197645
%_arr_v4float_uint_197645 = OpTypeArray %v4float %uint_197645
%_ptr_Workgroup__arr_v4float_uint_197645 = OpTypePointer Workgroup %_arr_v4float_uint_197645
          %s = OpVariable %_ptr_Workgroup__arr_v4float_uint_197645 Workgroup
      %int_3 = OpConstant %int 3
    %float_0 = OpConstant %float 0
         %39 = OpSpecConstant %uint 2
     %uint_5 = OpConstant %uint 5
         %41 = OpSpecConstant %uint 7
%gl_WorkGroupSize = OpSpecConstantComposite %v3uint %39 %uint_5 %41
     %uint_0 = OpConstant %uint 0
%_arr_int_44 = OpTypeArray %int %44
%_ptr_Private__arr_int_44 = OpTypePointer Private %_arr_int_44
       %arrX = OpVariable %_ptr_Private__arr_int_44 Private
%_ptr_Private_int = OpTypePointer Private %int
%_arr_int_52 = OpTypeArray %int %52
%_ptr_Private__arr_int_52 = OpTypePointer Private %_arr_int_52
       %arrY = OpVariable %_ptr_Private__arr_int_52 Private
%_arr_int_59 = OpTypeArray %int %59
%_ptr_Private__arr_int_59 = OpTypePointer Private %_arr_int_59
       %arrZ = OpVariable %_ptr_Private__arr_int_59 Private
%_ptr_Workgroup_v4float = OpTypePointer Workgroup %v4float
      %int_1 = OpConstant %int 1
%_ptr_Input_v3uint = OpTypePointer Input %v3uint
%gl_NumWorkGroups = OpVariable %_ptr_Input_v3uint Input
%gl_WorkGroupID = OpVariable %_ptr_Input_v3uint Input
%gl_LocalInvocationID = OpVariable %_ptr_Input_v3uint Input
%gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input
%_ptr_Input_uint = OpTypePointer Input %uint
%gl_LocalInvocationIndex = OpVariable %_ptr_Input_uint Input
%_ptr_Uniform_v3uint = OpTypePointer Uniform %v3uint
      %int_5 = OpConstant %int 5
 %int_197645 = OpConstant %int 197645
       %main = OpFunction %void None %3
          %5 = OpLabel
               OpControlBarrier %uint_2 %uint_2 %uint_264
         %20 = OpAccessChain %_ptr_Uniform_int %bInst %int_0
         %21 = OpLoad %int %20
         %22 = OpSDiv %int %21 %int_2
         %26 = OpAccessChain %_ptr_Uniform_v4float %bInst %int_2 %22
         %27 = OpLoad %v4float %26
         %28 = OpFMul %v4float %27 %24
         %29 = OpAccessChain %_ptr_Uniform_v4float %bInst %int_2 %22
               OpStore %29 %28
               OpMemoryBarrier %uint_1 %uint_3400
               OpMemoryBarrier %uint_2 %uint_3400
               OpMemoryBarrier %uint_1 %uint_264
               OpMemoryBarrier %uint_1 %uint_72
         %44 = OpCompositeExtract %uint %gl_WorkGroupSize 0
         %49 = OpAccessChain %_ptr_Private_int %arrX %int_0
         %50 = OpLoad %int %49
         %51 = OpConvertSToF %float %50
         %52 = OpCompositeExtract %uint %gl_WorkGroupSize 1
         %56 = OpAccessChain %_ptr_Private_int %arrY %int_0
         %57 = OpLoad %int %56
         %58 = OpConvertSToF %float %57
         %59 = OpCompositeExtract %uint %gl_WorkGroupSize 2
         %63 = OpAccessChain %_ptr_Private_int %arrZ %int_0
         %64 = OpLoad %int %63
         %65 = OpConvertSToF %float %64
         %66 = OpCompositeConstruct %v4float %float_0 %51 %58 %65
         %68 = OpAccessChain %_ptr_Workgroup_v4float %s %int_3
               OpStore %68 %66
         %72 = OpLoad %v3uint %gl_NumWorkGroups
         %73 = OpIAdd %v3uint %72 %gl_WorkGroupSize
         %75 = OpLoad %v3uint %gl_WorkGroupID
         %76 = OpIAdd %v3uint %73 %75
         %78 = OpLoad %v3uint %gl_LocalInvocationID
         %79 = OpIAdd %v3uint %76 %78
         %81 = OpLoad %v3uint %gl_GlobalInvocationID
         %84 = OpLoad %uint %gl_LocalInvocationIndex
         %85 = OpCompositeConstruct %v3uint %84 %84 %84
         %86 = OpIMul %v3uint %81 %85
         %87 = OpIAdd %v3uint %79 %86
         %89 = OpAccessChain %_ptr_Uniform_v3uint %bInst %int_1
               OpStore %89 %87
         %90 = OpAccessChain %_ptr_Uniform_int %bInst %int_0
         %91 = OpAtomicIAdd %int %90 %uint_1 %uint_0 %int_2
         %92 = OpAccessChain %_ptr_Uniform_int %bInst %int_0
         %93 = OpAtomicSMin %int %92 %uint_1 %uint_0 %int_2
         %94 = OpAccessChain %_ptr_Uniform_int %bInst %int_0
         %95 = OpAtomicSMax %int %94 %uint_1 %uint_0 %int_2
         %96 = OpAccessChain %_ptr_Uniform_int %bInst %int_0
         %97 = OpAtomicAnd %int %96 %uint_1 %uint_0 %int_2
         %98 = OpAccessChain %_ptr_Uniform_int %bInst %int_0
         %99 = OpAtomicOr %int %98 %uint_1 %uint_0 %int_2
        %100 = OpAccessChain %_ptr_Uniform_int %bInst %int_0
        %101 = OpAtomicXor %int %100 %uint_1 %uint_0 %int_2
        %102 = OpAccessChain %_ptr_Uniform_int %bInst %int_0
        %103 = OpAtomicExchange %int %102 %uint_1 %uint_0 %int_2
        %104 = OpAccessChain %_ptr_Uniform_int %bInst %int_0
        %106 = OpAtomicCompareExchange %int %104 %uint_1 %uint_0 %uint_0 %int_2 %int_5
               OpReturn
               OpFunctionEnd
