#version 460
#extension GL_KHR_shader_subgroup_ballot : require
#extension GL_KHR_shader_subgroup_arithmetic : require
layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in;

uint _54;
float _101;
uint _145;
float _189;
uint _233;
uint _278;
uint _324;

layout(set = 0, binding = 0) uniform usamplerBuffer _8;
layout(set = 0, binding = 1) uniform usamplerBuffer _9;
layout(set = 0, binding = 0, r32ui) uniform writeonly uimageBuffer _12;

uint WaveMultiPrefixSum(uint _50, uvec4 _51)
{
    uvec4 _60 = subgroupBallot(true);
    uvec4 _62 = _60 & _51;
    bool _65;
    uint _67;
    for (;;)
    {
        _65 = all(equal(_62, subgroupBroadcastFirst(_62)));
        if (_65)
        {
            _67 = subgroupExclusiveAdd(_50);
        }
        else
        {
            _67 = _54;
        }
        if (_65)
        {
            break;
        }
        else
        {
            continue;
        }
    }
    return _67;
}

float WaveMultiPrefixSum(float _97, uvec4 _98)
{
    uvec4 _107 = subgroupBallot(true);
    uvec4 _108 = _107 & _98;
    bool _111;
    float _113;
    for (;;)
    {
        _111 = all(equal(_108, subgroupBroadcastFirst(_108)));
        if (_111)
        {
            _113 = subgroupExclusiveAdd(_97);
        }
        else
        {
            _113 = _101;
        }
        if (_111)
        {
            break;
        }
        else
        {
            continue;
        }
    }
    return _113;
}

uint WaveMultiPrefixProduct(uint _141, uvec4 _142)
{
    uvec4 _151 = subgroupBallot(true);
    uvec4 _152 = _151 & _142;
    bool _155;
    uint _157;
    for (;;)
    {
        _155 = all(equal(_152, subgroupBroadcastFirst(_152)));
        if (_155)
        {
            _157 = subgroupExclusiveMul(_141);
        }
        else
        {
            _157 = _145;
        }
        if (_155)
        {
            break;
        }
        else
        {
            continue;
        }
    }
    return _157;
}

float WaveMultiPrefixProduct(float _185, uvec4 _186)
{
    uvec4 _195 = subgroupBallot(true);
    uvec4 _196 = _195 & _186;
    bool _199;
    float _201;
    for (;;)
    {
        _199 = all(equal(_196, subgroupBroadcastFirst(_196)));
        if (_199)
        {
            _201 = subgroupExclusiveMul(_185);
        }
        else
        {
            _201 = _189;
        }
        if (_199)
        {
            break;
        }
        else
        {
            continue;
        }
    }
    return _201;
}

uint WaveMultiPrefixBitOr(uint _229, uvec4 _230)
{
    uvec4 _239 = subgroupBallot(true);
    uvec4 _240 = _239 & _230;
    bool _243;
    uint _245;
    for (;;)
    {
        _243 = all(equal(_240, subgroupBroadcastFirst(_240)));
        if (_243)
        {
            _245 = subgroupExclusiveOr(_229);
        }
        else
        {
            _245 = _233;
        }
        if (_243)
        {
            break;
        }
        else
        {
            continue;
        }
    }
    return _245;
}

uint WaveMultiPrefixBitAnd(uint _274, uvec4 _275)
{
    uvec4 _284 = subgroupBallot(true);
    uvec4 _285 = _284 & _275;
    bool _288;
    uint _290;
    for (;;)
    {
        _288 = all(equal(_285, subgroupBroadcastFirst(_285)));
        if (_288)
        {
            _290 = subgroupExclusiveAnd(_274);
        }
        else
        {
            _290 = _278;
        }
        if (_288)
        {
            break;
        }
        else
        {
            continue;
        }
    }
    return _290;
}

uint WaveMultiPrefixBitXor(uint _320, uvec4 _321)
{
    uvec4 _330 = subgroupBallot(true);
    uvec4 _331 = _330 & _321;
    bool _334;
    uint _336;
    for (;;)
    {
        _334 = all(equal(_331, subgroupBroadcastFirst(_331)));
        if (_334)
        {
            _336 = subgroupExclusiveXor(_320);
        }
        else
        {
            _336 = _324;
        }
        if (_334)
        {
            break;
        }
        else
        {
            continue;
        }
    }
    return _336;
}

void main()
{
    uint _23 = gl_GlobalInvocationID.x * 4u;
    uint _71 = gl_GlobalInvocationID.x * 7u;
    imageStore(_12, int(gl_GlobalInvocationID.x * 7u), uvec4(WaveMultiPrefixSum(texelFetch(_8, int(gl_GlobalInvocationID.x)).x, uvec4(uvec4(texelFetch(_9, int(_23)).x, texelFetch(_9, int(_23 + 1u)).x, texelFetch(_9, int(_23 + 2u)).x, texelFetch(_9, int(_23 + 3u)).x)))));
    uint _75 = gl_GlobalInvocationID.x * 4u;
    imageStore(_12, int((gl_GlobalInvocationID.x * 7u) + 1u), uvec4(uint(WaveMultiPrefixSum(uintBitsToFloat(texelFetch(_8, int(gl_GlobalInvocationID.x)).x), uvec4(uvec4(texelFetch(_9, int(_75)).x, texelFetch(_9, int(_75 + 1u)).x, texelFetch(_9, int(_75 + 2u)).x, texelFetch(_9, int(_75 + 3u)).x))))));
    uint _122 = gl_GlobalInvocationID.x * 4u;
    imageStore(_12, int((gl_GlobalInvocationID.x * 7u) + 2u), uvec4(WaveMultiPrefixProduct(texelFetch(_8, int(gl_GlobalInvocationID.x)).x, uvec4(uvec4(texelFetch(_9, int(_122)).x, texelFetch(_9, int(_122 + 1u)).x, texelFetch(_9, int(_122 + 2u)).x, texelFetch(_9, int(_122 + 3u)).x)))));
    uint _165 = gl_GlobalInvocationID.x * 4u;
    imageStore(_12, int((gl_GlobalInvocationID.x * 7u) + 3u), uvec4(uint(WaveMultiPrefixProduct(uintBitsToFloat(texelFetch(_8, int(gl_GlobalInvocationID.x)).x), uvec4(uvec4(texelFetch(_9, int(_165)).x, texelFetch(_9, int(_165 + 1u)).x, texelFetch(_9, int(_165 + 2u)).x, texelFetch(_9, int(_165 + 3u)).x))))));
    uint _210 = gl_GlobalInvocationID.x * 4u;
    imageStore(_12, int((gl_GlobalInvocationID.x * 7u) + 4u), uvec4(WaveMultiPrefixBitOr(texelFetch(_8, int(gl_GlobalInvocationID.x)).x, uvec4(uvec4(texelFetch(_9, int(_210)).x, texelFetch(_9, int(_210 + 1u)).x, texelFetch(_9, int(_210 + 2u)).x, texelFetch(_9, int(_210 + 3u)).x)))));
    uint _253 = gl_GlobalInvocationID.x * 4u;
    imageStore(_12, int((gl_GlobalInvocationID.x * 7u) + 5u), uvec4(WaveMultiPrefixBitAnd(uint(int(uintBitsToFloat(texelFetch(_8, int(gl_GlobalInvocationID.x)).x))), uvec4(uvec4(texelFetch(_9, int(_253)).x, texelFetch(_9, int(_253 + 1u)).x, texelFetch(_9, int(_253 + 2u)).x, texelFetch(_9, int(_253 + 3u)).x)))));
    uint _299 = gl_GlobalInvocationID.x * 4u;
    imageStore(_12, int((gl_GlobalInvocationID.x * 7u) + 6u), uvec4(WaveMultiPrefixBitXor(uint(int(uintBitsToFloat(texelFetch(_8, int(gl_GlobalInvocationID.x)).x))), uvec4(uvec4(texelFetch(_9, int(_299)).x, texelFetch(_9, int(_299 + 1u)).x, texelFetch(_9, int(_299 + 2u)).x, texelFetch(_9, int(_299 + 3u)).x)))));
}


#if 0
// SPIR-V disassembly
; SPIR-V
; Version: 1.3
; Generator: Unknown(30017); 21022
; Bound: 347
; Schema: 0
OpCapability Shader
OpCapability SampledBuffer
OpCapability ImageBuffer
OpCapability GroupNonUniformArithmetic
OpCapability GroupNonUniformBallot
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %3 "main" %18
OpExecutionMode %3 LocalSize 64 1 1
OpName %3 "main"
OpName %52 "WaveMultiPrefixSum"
OpName %99 "WaveMultiPrefixSum"
OpName %143 "WaveMultiPrefixProduct"
OpName %187 "WaveMultiPrefixProduct"
OpName %231 "WaveMultiPrefixBitOr"
OpName %276 "WaveMultiPrefixBitAnd"
OpName %322 "WaveMultiPrefixBitXor"
OpDecorate %8 DescriptorSet 0
OpDecorate %8 Binding 0
OpDecorate %9 DescriptorSet 0
OpDecorate %9 Binding 1
OpDecorate %12 DescriptorSet 0
OpDecorate %12 Binding 0
OpDecorate %12 NonReadable
OpDecorate %18 BuiltIn GlobalInvocationId
%1 = OpTypeVoid
%2 = OpTypeFunction %1
%5 = OpTypeInt 32 0
%6 = OpTypeImage %5 Buffer 0 0 0 1 Unknown
%7 = OpTypePointer UniformConstant %6
%8 = OpVariable %7 UniformConstant
%9 = OpVariable %7 UniformConstant
%10 = OpTypeImage %5 Buffer 0 0 0 2 R32ui
%11 = OpTypePointer UniformConstant %10
%12 = OpVariable %11 UniformConstant
%16 = OpTypeVector %5 3
%17 = OpTypePointer Input %16
%18 = OpVariable %17 Input
%19 = OpTypePointer Input %5
%21 = OpConstant %5 0
%24 = OpConstant %5 4
%25 = OpTypeVector %5 4
%30 = OpConstant %5 1
%34 = OpConstant %5 2
%38 = OpConstant %5 3
%47 = OpTypeBool
%48 = OpTypeVector %47 4
%49 = OpTypeFunction %5 %5 %25
%61 = OpConstantTrue %47
%72 = OpConstant %5 7
%94 = OpTypeFloat 32
%96 = OpTypeFunction %94 %94 %25
%295 = OpConstant %5 5
%341 = OpConstant %5 6
%3 = OpFunction %1 None %2
%4 = OpLabel
OpBranch %345
%345 = OpLabel
%13 = OpLoad %10 %12
%14 = OpLoad %6 %9
%15 = OpLoad %6 %8
%20 = OpAccessChain %19 %18 %21
%22 = OpLoad %5 %20
%23 = OpIMul %5 %22 %24
%26 = OpImageFetch %25 %14 %23
%27 = OpCompositeExtract %5 %26 0
%29 = OpIAdd %5 %23 %30
%28 = OpImageFetch %25 %14 %29
%31 = OpCompositeExtract %5 %28 0
%33 = OpIAdd %5 %23 %34
%32 = OpImageFetch %25 %14 %33
%35 = OpCompositeExtract %5 %32 0
%37 = OpIAdd %5 %23 %38
%36 = OpImageFetch %25 %14 %37
%39 = OpCompositeExtract %5 %36 0
%40 = OpCompositeConstruct %25 %27 %31 %35 %39
%41 = OpCompositeExtract %5 %40 0
%42 = OpCompositeExtract %5 %40 1
%43 = OpCompositeExtract %5 %40 2
%44 = OpCompositeExtract %5 %40 3
%45 = OpImageFetch %25 %15 %22
%46 = OpCompositeExtract %5 %45 0
%70 = OpCompositeConstruct %25 %41 %42 %43 %44
%69 = OpFunctionCall %5 %52 %46 %70
%71 = OpIMul %5 %22 %72
%73 = OpIMul %5 %22 %72
%74 = OpCompositeConstruct %25 %69 %69 %69 %69
OpImageWrite %13 %73 %74
%75 = OpIMul %5 %22 %24
%76 = OpImageFetch %25 %14 %75
%77 = OpCompositeExtract %5 %76 0
%79 = OpIAdd %5 %75 %30
%78 = OpImageFetch %25 %14 %79
%80 = OpCompositeExtract %5 %78 0
%82 = OpIAdd %5 %75 %34
%81 = OpImageFetch %25 %14 %82
%83 = OpCompositeExtract %5 %81 0
%85 = OpIAdd %5 %75 %38
%84 = OpImageFetch %25 %14 %85
%86 = OpCompositeExtract %5 %84 0
%87 = OpCompositeConstruct %25 %77 %80 %83 %86
%88 = OpCompositeExtract %5 %87 0
%89 = OpCompositeExtract %5 %87 1
%90 = OpCompositeExtract %5 %87 2
%91 = OpCompositeExtract %5 %87 3
%92 = OpImageFetch %25 %15 %22
%93 = OpCompositeExtract %5 %92 0
%95 = OpBitcast %94 %93
%116 = OpCompositeConstruct %25 %88 %89 %90 %91
%115 = OpFunctionCall %94 %99 %95 %116
%117 = OpConvertFToU %5 %115
%118 = OpIAdd %5 %71 %30
%119 = OpIMul %5 %22 %72
%120 = OpIAdd %5 %119 %30
%121 = OpCompositeConstruct %25 %117 %117 %117 %117
OpImageWrite %13 %120 %121
%122 = OpIMul %5 %22 %24
%123 = OpImageFetch %25 %14 %122
%124 = OpCompositeExtract %5 %123 0
%126 = OpIAdd %5 %122 %30
%125 = OpImageFetch %25 %14 %126
%127 = OpCompositeExtract %5 %125 0
%129 = OpIAdd %5 %122 %34
%128 = OpImageFetch %25 %14 %129
%130 = OpCompositeExtract %5 %128 0
%132 = OpIAdd %5 %122 %38
%131 = OpImageFetch %25 %14 %132
%133 = OpCompositeExtract %5 %131 0
%134 = OpCompositeConstruct %25 %124 %127 %130 %133
%135 = OpCompositeExtract %5 %134 0
%136 = OpCompositeExtract %5 %134 1
%137 = OpCompositeExtract %5 %134 2
%138 = OpCompositeExtract %5 %134 3
%139 = OpImageFetch %25 %15 %22
%140 = OpCompositeExtract %5 %139 0
%160 = OpCompositeConstruct %25 %135 %136 %137 %138
%159 = OpFunctionCall %5 %143 %140 %160
%161 = OpIAdd %5 %71 %34
%162 = OpIMul %5 %22 %72
%163 = OpIAdd %5 %162 %34
%164 = OpCompositeConstruct %25 %159 %159 %159 %159
OpImageWrite %13 %163 %164
%165 = OpIMul %5 %22 %24
%166 = OpImageFetch %25 %14 %165
%167 = OpCompositeExtract %5 %166 0
%169 = OpIAdd %5 %165 %30
%168 = OpImageFetch %25 %14 %169
%170 = OpCompositeExtract %5 %168 0
%172 = OpIAdd %5 %165 %34
%171 = OpImageFetch %25 %14 %172
%173 = OpCompositeExtract %5 %171 0
%175 = OpIAdd %5 %165 %38
%174 = OpImageFetch %25 %14 %175
%176 = OpCompositeExtract %5 %174 0
%177 = OpCompositeConstruct %25 %167 %170 %173 %176
%178 = OpCompositeExtract %5 %177 0
%179 = OpCompositeExtract %5 %177 1
%180 = OpCompositeExtract %5 %177 2
%181 = OpCompositeExtract %5 %177 3
%182 = OpImageFetch %25 %15 %22
%183 = OpCompositeExtract %5 %182 0
%184 = OpBitcast %94 %183
%204 = OpCompositeConstruct %25 %178 %179 %180 %181
%203 = OpFunctionCall %94 %187 %184 %204
%205 = OpConvertFToU %5 %203
%206 = OpIAdd %5 %71 %38
%207 = OpIMul %5 %22 %72
%208 = OpIAdd %5 %207 %38
%209 = OpCompositeConstruct %25 %205 %205 %205 %205
OpImageWrite %13 %208 %209
%210 = OpIMul %5 %22 %24
%211 = OpImageFetch %25 %14 %210
%212 = OpCompositeExtract %5 %211 0
%214 = OpIAdd %5 %210 %30
%213 = OpImageFetch %25 %14 %214
%215 = OpCompositeExtract %5 %213 0
%217 = OpIAdd %5 %210 %34
%216 = OpImageFetch %25 %14 %217
%218 = OpCompositeExtract %5 %216 0
%220 = OpIAdd %5 %210 %38
%219 = OpImageFetch %25 %14 %220
%221 = OpCompositeExtract %5 %219 0
%222 = OpCompositeConstruct %25 %212 %215 %218 %221
%223 = OpCompositeExtract %5 %222 0
%224 = OpCompositeExtract %5 %222 1
%225 = OpCompositeExtract %5 %222 2
%226 = OpCompositeExtract %5 %222 3
%227 = OpImageFetch %25 %15 %22
%228 = OpCompositeExtract %5 %227 0
%248 = OpCompositeConstruct %25 %223 %224 %225 %226
%247 = OpFunctionCall %5 %231 %228 %248
%249 = OpIAdd %5 %71 %24
%250 = OpIMul %5 %22 %72
%251 = OpIAdd %5 %250 %24
%252 = OpCompositeConstruct %25 %247 %247 %247 %247
OpImageWrite %13 %251 %252
%253 = OpIMul %5 %22 %24
%254 = OpImageFetch %25 %14 %253
%255 = OpCompositeExtract %5 %254 0
%257 = OpIAdd %5 %253 %30
%256 = OpImageFetch %25 %14 %257
%258 = OpCompositeExtract %5 %256 0
%260 = OpIAdd %5 %253 %34
%259 = OpImageFetch %25 %14 %260
%261 = OpCompositeExtract %5 %259 0
%263 = OpIAdd %5 %253 %38
%262 = OpImageFetch %25 %14 %263
%264 = OpCompositeExtract %5 %262 0
%265 = OpCompositeConstruct %25 %255 %258 %261 %264
%266 = OpCompositeExtract %5 %265 0
%267 = OpCompositeExtract %5 %265 1
%268 = OpCompositeExtract %5 %265 2
%269 = OpCompositeExtract %5 %265 3
%270 = OpImageFetch %25 %15 %22
%271 = OpCompositeExtract %5 %270 0
%272 = OpBitcast %94 %271
%273 = OpConvertFToS %5 %272
%293 = OpCompositeConstruct %25 %266 %267 %268 %269
%292 = OpFunctionCall %5 %276 %273 %293
%294 = OpIAdd %5 %71 %295
%296 = OpIMul %5 %22 %72
%297 = OpIAdd %5 %296 %295
%298 = OpCompositeConstruct %25 %292 %292 %292 %292
OpImageWrite %13 %297 %298
%299 = OpIMul %5 %22 %24
%300 = OpImageFetch %25 %14 %299
%301 = OpCompositeExtract %5 %300 0
%303 = OpIAdd %5 %299 %30
%302 = OpImageFetch %25 %14 %303
%304 = OpCompositeExtract %5 %302 0
%306 = OpIAdd %5 %299 %34
%305 = OpImageFetch %25 %14 %306
%307 = OpCompositeExtract %5 %305 0
%309 = OpIAdd %5 %299 %38
%308 = OpImageFetch %25 %14 %309
%310 = OpCompositeExtract %5 %308 0
%311 = OpCompositeConstruct %25 %301 %304 %307 %310
%312 = OpCompositeExtract %5 %311 0
%313 = OpCompositeExtract %5 %311 1
%314 = OpCompositeExtract %5 %311 2
%315 = OpCompositeExtract %5 %311 3
%316 = OpImageFetch %25 %15 %22
%317 = OpCompositeExtract %5 %316 0
%318 = OpBitcast %94 %317
%319 = OpConvertFToS %5 %318
%339 = OpCompositeConstruct %25 %312 %313 %314 %315
%338 = OpFunctionCall %5 %322 %319 %339
%340 = OpIAdd %5 %71 %341
%342 = OpIMul %5 %22 %72
%343 = OpIAdd %5 %342 %341
%344 = OpCompositeConstruct %25 %338 %338 %338 %338
OpImageWrite %13 %343 %344
OpReturn
OpFunctionEnd
%52 = OpFunction %5 None %49
%50 = OpFunctionParameter %5
%51 = OpFunctionParameter %25
%53 = OpLabel
%54 = OpUndef %5
%60 = OpGroupNonUniformBallot %25 %38 %61
%62 = OpBitwiseAnd %25 %60 %51
OpBranch %55
%55 = OpLabel
OpLoopMerge %57 %56 None
OpBranch %56
%56 = OpLabel
%63 = OpGroupNonUniformBroadcastFirst %25 %38 %62
%64 = OpIEqual %48 %62 %63
%65 = OpAll %47 %64
OpSelectionMerge %59 None
OpBranchConditional %65 %58 %59
%58 = OpLabel
%66 = OpGroupNonUniformIAdd %5 %38 ExclusiveScan %50
OpBranch %59
%59 = OpLabel
%67 = OpPhi %5 %66 %58 %54 %56
OpBranchConditional %65 %57 %55
%57 = OpLabel
OpReturnValue %67
OpFunctionEnd
%99 = OpFunction %94 None %96
%97 = OpFunctionParameter %94
%98 = OpFunctionParameter %25
%100 = OpLabel
%101 = OpUndef %94
%107 = OpGroupNonUniformBallot %25 %38 %61
%108 = OpBitwiseAnd %25 %107 %98
OpBranch %102
%102 = OpLabel
OpLoopMerge %104 %103 None
OpBranch %103
%103 = OpLabel
%109 = OpGroupNonUniformBroadcastFirst %25 %38 %108
%110 = OpIEqual %48 %108 %109
%111 = OpAll %47 %110
OpSelectionMerge %106 None
OpBranchConditional %111 %105 %106
%105 = OpLabel
%112 = OpGroupNonUniformFAdd %94 %38 ExclusiveScan %97
OpBranch %106
%106 = OpLabel
%113 = OpPhi %94 %112 %105 %101 %103
OpBranchConditional %111 %104 %102
%104 = OpLabel
OpReturnValue %113
OpFunctionEnd
%143 = OpFunction %5 None %49
%141 = OpFunctionParameter %5
%142 = OpFunctionParameter %25
%144 = OpLabel
%145 = OpUndef %5
%151 = OpGroupNonUniformBallot %25 %38 %61
%152 = OpBitwiseAnd %25 %151 %142
OpBranch %146
%146 = OpLabel
OpLoopMerge %148 %147 None
OpBranch %147
%147 = OpLabel
%153 = OpGroupNonUniformBroadcastFirst %25 %38 %152
%154 = OpIEqual %48 %152 %153
%155 = OpAll %47 %154
OpSelectionMerge %150 None
OpBranchConditional %155 %149 %150
%149 = OpLabel
%156 = OpGroupNonUniformIMul %5 %38 ExclusiveScan %141
OpBranch %150
%150 = OpLabel
%157 = OpPhi %5 %156 %149 %145 %147
OpBranchConditional %155 %148 %146
%148 = OpLabel
OpReturnValue %157
OpFunctionEnd
%187 = OpFunction %94 None %96
%185 = OpFunctionParameter %94
%186 = OpFunctionParameter %25
%188 = OpLabel
%189 = OpUndef %94
%195 = OpGroupNonUniformBallot %25 %38 %61
%196 = OpBitwiseAnd %25 %195 %186
OpBranch %190
%190 = OpLabel
OpLoopMerge %192 %191 None
OpBranch %191
%191 = OpLabel
%197 = OpGroupNonUniformBroadcastFirst %25 %38 %196
%198 = OpIEqual %48 %196 %197
%199 = OpAll %47 %198
OpSelectionMerge %194 None
OpBranchConditional %199 %193 %194
%193 = OpLabel
%200 = OpGroupNonUniformFMul %94 %38 ExclusiveScan %185
OpBranch %194
%194 = OpLabel
%201 = OpPhi %94 %200 %193 %189 %191
OpBranchConditional %199 %192 %190
%192 = OpLabel
OpReturnValue %201
OpFunctionEnd
%231 = OpFunction %5 None %49
%229 = OpFunctionParameter %5
%230 = OpFunctionParameter %25
%232 = OpLabel
%233 = OpUndef %5
%239 = OpGroupNonUniformBallot %25 %38 %61
%240 = OpBitwiseAnd %25 %239 %230
OpBranch %234
%234 = OpLabel
OpLoopMerge %236 %235 None
OpBranch %235
%235 = OpLabel
%241 = OpGroupNonUniformBroadcastFirst %25 %38 %240
%242 = OpIEqual %48 %240 %241
%243 = OpAll %47 %242
OpSelectionMerge %238 None
OpBranchConditional %243 %237 %238
%237 = OpLabel
%244 = OpGroupNonUniformBitwiseOr %5 %38 ExclusiveScan %229
OpBranch %238
%238 = OpLabel
%245 = OpPhi %5 %244 %237 %233 %235
OpBranchConditional %243 %236 %234
%236 = OpLabel
OpReturnValue %245
OpFunctionEnd
%276 = OpFunction %5 None %49
%274 = OpFunctionParameter %5
%275 = OpFunctionParameter %25
%277 = OpLabel
%278 = OpUndef %5
%284 = OpGroupNonUniformBallot %25 %38 %61
%285 = OpBitwiseAnd %25 %284 %275
OpBranch %279
%279 = OpLabel
OpLoopMerge %281 %280 None
OpBranch %280
%280 = OpLabel
%286 = OpGroupNonUniformBroadcastFirst %25 %38 %285
%287 = OpIEqual %48 %285 %286
%288 = OpAll %47 %287
OpSelectionMerge %283 None
OpBranchConditional %288 %282 %283
%282 = OpLabel
%289 = OpGroupNonUniformBitwiseAnd %5 %38 ExclusiveScan %274
OpBranch %283
%283 = OpLabel
%290 = OpPhi %5 %289 %282 %278 %280
OpBranchConditional %288 %281 %279
%281 = OpLabel
OpReturnValue %290
OpFunctionEnd
%322 = OpFunction %5 None %49
%320 = OpFunctionParameter %5
%321 = OpFunctionParameter %25
%323 = OpLabel
%324 = OpUndef %5
%330 = OpGroupNonUniformBallot %25 %38 %61
%331 = OpBitwiseAnd %25 %330 %321
OpBranch %325
%325 = OpLabel
OpLoopMerge %327 %326 None
OpBranch %326
%326 = OpLabel
%332 = OpGroupNonUniformBroadcastFirst %25 %38 %331
%333 = OpIEqual %48 %331 %332
%334 = OpAll %47 %333
OpSelectionMerge %329 None
OpBranchConditional %334 %328 %329
%328 = OpLabel
%335 = OpGroupNonUniformBitwiseXor %5 %38 ExclusiveScan %320
OpBranch %329
%329 = OpLabel
%336 = OpPhi %5 %335 %328 %324 %326
OpBranchConditional %334 %327 %325
%327 = OpLabel
OpReturnValue %336
OpFunctionEnd
#endif
