#version 460
#if defined(GL_ARB_gpu_shader_int64)
#extension GL_ARB_gpu_shader_int64 : require
#else
#error No extension available for 64-bit integers.
#endif
#extension GL_EXT_buffer_reference2 : require
#extension GL_EXT_nonuniform_qualifier : require
#extension GL_EXT_shader_atomic_int64 : require
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;

struct DescriptorHeapRawPayload
{
    uvec2 _m0[1];
};

struct IAddCarryResult
{
    uint _m0;
    uint _m1;
};

layout(set = 0, binding = 0, std430) buffer DescriptorHeapRobustnessSSBO
{
    DescriptorHeapRawPayload descriptors[];
} DescriptorHeapRobustness;

layout(set = 5, binding = 0, std140) uniform BindlessCBV
{
    vec4 _m0[4096];
} _30[];

layout(set = 0, binding = 2, std430) buffer BloomBufferInvocationSSBO
{
    uint atomics[];
} BloomBufferInvocation;

layout(set = 0, binding = 2, std430) buffer BloomBufferSSBO
{
    uint64_t atomics[];
} BloomBuffer;

layout(set = 0, binding = 2, std430) buffer BloomBuffer32SSBO
{
    uvec2 atomics[];
} BloomBuffer32;

layout(set = 0, binding = 2, std430) buffer InstrumentationControlDataSSBO
{
    uint atomics[];
} InstrumentationControlData;

layout(set = 0, binding = 3, std430) buffer InstrumentationDataSSBO
{
    uvec4 data[];
} InstrumentationData;

layout(push_constant, std430) uniform RootConstants
{
    uint _m0;
    uint _m1;
    uint _m2;
    uint _m3;
    uint _m4;
    uint _m5;
    uint _m6;
    uint _m7;
} registers;

layout(set = 4, binding = 0, r32ui) uniform uimageBuffer _22[];

uint InvocationID;
bool ShouldReportInstrumentation = true;

uint AllocateInvocationID()
{
    uint _43 = atomicAdd(BloomBufferInvocation.atomics[uint(BloomBufferInvocation.atomics.length()) - 1u], 1103633207u);
    return _43;
}

uint AddrHash(uvec2 addr, uint prime)
{
    uvec2 _91 = uvec2(addr.x >> 4u, addr.y & 65535u);
    uvec2 _92 = uvec2(prime);
    uvec2 _99 = ((_91 >> uvec2(8u)) ^ _91.yx) * _92;
    uvec2 _103 = ((_99 >> uvec2(8u)) ^ _99.yx) * _92;
    uvec2 _107 = ((_103 >> uvec2(8u)) ^ _103.yx) * _92;
    uvec2 _111 = ((_107 >> uvec2(8u)) ^ _107.yx) * _92;
    uvec2 _115 = ((_111 >> uvec2(8u)) ^ _111.yx) * _92;
    return (((_115 >> uvec2(8u)) ^ _115.yx) * _92).x;
}

bool ValidateBDALoadStore(uvec2 BDA, uint offset, uint len, uint type, uint invocation_id, bool in_bounds)
{
    if (!in_bounds)
    {
        return true;
    }
    IAddCarryResult _148;
    _148._m0 = uaddCarry(BDA.x, offset, _148._m1);
    uvec2 addr = uvec2(_148._m0, BDA.y + _148._m1);
    uint addr_lo = addr.x;
    uint byte_mask = (bitfieldExtract(4294967295u, int(0u), int(len)) << (addr_lo & 15u)) & 65535u;
    uint word_mask = (bitfieldExtract(4294967295u, int(0u), int((((addr_lo & 3u) + len) + 3u) >> 2u)) << bitfieldExtract(addr_lo, int(2u), int(2u))) & 15u;
    uint hash_mask = bitfieldExtract(4294967295u, int(0u), int(uint(findMSB(uint(BloomBuffer.atomics.length())))));
    uint hash_offset = bitfieldExtract(uint(BloomBuffer.atomics.length()), int(0u), int(uint(findMSB(uint(BloomBuffer.atomics.length()))))) - 1u;
    uint bloom_index = (AddrHash(addr, 1103515245u) & hash_mask) + hash_offset;
    uint bloom_index_1 = (AddrHash(addr, 1103518333u) & hash_mask) + hash_offset;
    uint bloom_index_2 = (AddrHash(addr, 1103539331u) & hash_mask) + hash_offset;
    uint bloom_index_3 = (AddrHash(addr, 1103633207u) & hash_mask) + hash_offset;
    uint bloom_index_4 = (AddrHash(addr, 10006121u) & hash_mask) + hash_offset;
    uint bloom_index_5 = (AddrHash(addr, 4004951u) & hash_mask) + hash_offset;
    uint bloom_index_6 = (AddrHash(addr, 5005159u) & hash_mask) + hash_offset;
    uint bloom_index_7 = (AddrHash(addr, 6004811u) & hash_mask) + hash_offset;
    uint64_t invalidation_mask = u64vec4(68719411200ul, 1099511627775ul, 1035087118335ul, 68719411200ul)[type] & packUint2x32(uvec2(byte_mask | (byte_mask << 16u), word_mask | (word_mask << 4u)));
    uint64_t prev_hazard_partial = atomicOr(BloomBuffer.atomics[bloom_index], invalidation_mask);
    uint64_t prev_hazard_partial_1 = atomicOr(BloomBuffer.atomics[bloom_index_1], invalidation_mask);
    uint64_t prev_hazard_partial_2 = atomicOr(BloomBuffer.atomics[bloom_index_2], invalidation_mask);
    uint64_t prev_hazard_partial_3 = atomicOr(BloomBuffer.atomics[bloom_index_3], invalidation_mask);
    uint64_t prev_hazard_partial_4 = atomicOr(BloomBuffer.atomics[bloom_index_4], invalidation_mask);
    uint64_t prev_hazard_partial_5 = atomicOr(BloomBuffer.atomics[bloom_index_5], invalidation_mask);
    uint64_t prev_hazard_partial_6 = atomicOr(BloomBuffer.atomics[bloom_index_6], invalidation_mask);
    uint64_t prev_hazard_partial_7 = atomicOr(BloomBuffer.atomics[bloom_index_7], invalidation_mask);
    uint64_t prev_hazard_partial_8 = atomicOr(BloomBuffer.atomics[(AddrHash(addr, 383u) & hash_mask) + hash_offset], invalidation_mask);
    uint64_t prev_hazard_partial_9 = atomicOr(BloomBuffer.atomics[(AddrHash(addr, 821u) & hash_mask) + hash_offset], invalidation_mask);
    uint64_t prev_hazard_partial_10 = atomicOr(BloomBuffer.atomics[(AddrHash(addr, 661u) & hash_mask) + hash_offset], invalidation_mask);
    uint64_t prev_hazard_partial_11 = atomicOr(BloomBuffer.atomics[(AddrHash(addr, 1091u) & hash_mask) + hash_offset], invalidation_mask);
    uint64_t prev_hazard_partial_12 = atomicOr(BloomBuffer.atomics[(AddrHash(addr, 1117u) & hash_mask) + hash_offset], invalidation_mask);
    uint64_t prev_hazard_partial_13 = atomicOr(BloomBuffer.atomics[(AddrHash(addr, 3947u) & hash_mask) + hash_offset], invalidation_mask);
    uint64_t prev_hazard_partial_14 = atomicOr(BloomBuffer.atomics[(AddrHash(addr, 4253u) & hash_mask) + hash_offset], invalidation_mask);
    uint64_t prev_hazard_partial_15 = atomicOr(BloomBuffer.atomics[(AddrHash(addr, 7691u) & hash_mask) + hash_offset], invalidation_mask);
    uvec2 prev_hazard = unpackUint2x32(((((((((((((((prev_hazard_partial & prev_hazard_partial_1) & prev_hazard_partial_2) & prev_hazard_partial_3) & prev_hazard_partial_4) & prev_hazard_partial_5) & prev_hazard_partial_6) & prev_hazard_partial_7) & prev_hazard_partial_8) & prev_hazard_partial_9) & prev_hazard_partial_10) & prev_hazard_partial_11) & prev_hazard_partial_12) & prev_hazard_partial_13) & prev_hazard_partial_14) & prev_hazard_partial_15);
    uint prev_hazard_lo = prev_hazard.x;
    uint prev_hazard_hi = prev_hazard.y;
    bool has_exclusive_access = ((prev_hazard_lo >> 16u) & byte_mask) == 0u;
    uint lock_mask = ((256u << bitfieldExtract(invocation_id, 0, 3)) | (65536u << bitfieldExtract(invocation_id, 3, 3))) | (16777216u << bitfieldExtract(invocation_id, 6, 3));
    uint prev_lock = atomicOr(BloomBuffer32.atomics[bloom_index].y, has_exclusive_access ? lock_mask : 0u);
    uint lock_mask_1 = ((256u << bitfieldExtract(invocation_id, 9, 3)) | (65536u << bitfieldExtract(invocation_id, 12, 3))) | (16777216u << bitfieldExtract(invocation_id, 15, 3));
    uint prev_lock_1 = atomicOr(BloomBuffer32.atomics[bloom_index_1].y, has_exclusive_access ? lock_mask_1 : 0u);
    uint lock_mask_2 = ((256u << bitfieldExtract(invocation_id, 18, 3)) | (65536u << bitfieldExtract(invocation_id, 21, 3))) | (16777216u << bitfieldExtract(invocation_id, 24, 3));
    uint prev_lock_2 = atomicOr(BloomBuffer32.atomics[bloom_index_2].y, has_exclusive_access ? lock_mask_2 : 0u);
    uint lock_mask_3 = ((256u << bitfieldExtract(invocation_id, 23, 3)) | (65536u << bitfieldExtract(invocation_id, 26, 3))) | (16777216u << bitfieldExtract(invocation_id, 29, 3));
    uint prev_lock_3 = atomicOr(BloomBuffer32.atomics[bloom_index_3].y, has_exclusive_access ? lock_mask_3 : 0u);
    uint lock_mask_4 = ((256u << bitfieldExtract(invocation_id, 1, 3)) | (65536u << bitfieldExtract(invocation_id, 4, 3))) | (16777216u << bitfieldExtract(invocation_id, 7, 3));
    uint prev_lock_4 = atomicOr(BloomBuffer32.atomics[bloom_index_4].y, has_exclusive_access ? lock_mask_4 : 0u);
    uint lock_mask_5 = ((256u << bitfieldExtract(invocation_id, 9, 3)) | (65536u << bitfieldExtract(invocation_id, 12, 3))) | (16777216u << bitfieldExtract(invocation_id, 15, 3));
    uint prev_lock_5 = atomicOr(BloomBuffer32.atomics[bloom_index_5].y, has_exclusive_access ? lock_mask_5 : 0u);
    uint lock_mask_6 = ((256u << bitfieldExtract(invocation_id, 17, 3)) | (65536u << bitfieldExtract(invocation_id, 20, 3))) | (16777216u << bitfieldExtract(invocation_id, 23, 3));
    uint prev_lock_6 = atomicOr(BloomBuffer32.atomics[bloom_index_6].y, has_exclusive_access ? lock_mask_6 : 0u);
    uint lock_mask_7 = ((256u << bitfieldExtract(invocation_id, 22, 3)) | (65536u << bitfieldExtract(invocation_id, 25, 3))) | (16777216u << bitfieldExtract(invocation_id, 28, 3));
    uint prev_lock_7 = atomicOr(BloomBuffer32.atomics[bloom_index_7].y, has_exclusive_access ? lock_mask_7 : 0u);
    bool hazard;
    switch (type)
    {
        case 0u:
        {
            hazard = (prev_hazard_lo & byte_mask) != 0u;
            break;
        }
        case 1u:
        {
            hazard = (prev_hazard_lo & (byte_mask << 16u)) != 0u;
            break;
        }
        case 2u:
        {
            hazard = (prev_hazard_hi & word_mask) != 0u;
            break;
        }
        default:
        {
            hazard = (prev_hazard_hi & (word_mask << 4u)) != 0u;
            break;
        }
    }
    return (!hazard) || (((((((((prev_lock & lock_mask) == lock_mask) && ((prev_lock_1 & lock_mask_1) == lock_mask_1)) && ((prev_lock_2 & lock_mask_2) == lock_mask_2)) && ((prev_lock_3 & lock_mask_3) == lock_mask_3)) && ((prev_lock_4 & lock_mask_4) == lock_mask_4)) && ((prev_lock_5 & lock_mask_5) == lock_mask_5)) && ((prev_lock_6 & lock_mask_6) == lock_mask_6)) && ((prev_lock_7 & lock_mask_7) == lock_mask_7));
}

void AssumeTrue(bool value, uint inst)
{
    if ((!value) && ShouldReportInstrumentation)
    {
        uint _517 = uint(InstrumentationControlData.atomics.length()) - 2u;
        uint _519 = InstrumentationControlData.atomics[_517];
        uint _525 = (((inst * 97u) ^ 43981u) ^ (_519 * 51329u)) & (uint(InstrumentationData.data.length()) - 1u);
        uint _526 = _525 >> 4u;
        uint _528 = 1u << (_525 & 15u);
        uint _530 = atomicOr(InstrumentationControlData.atomics[_526], _528);
        ShouldReportInstrumentation = false;
        if ((_530 & _528) == 0u)
        {
            InstrumentationData.data[_525] = uvec4(43981u, 0u, inst, _519);
            memoryBarrierBuffer();
            uint _538 = atomicOr(InstrumentationControlData.atomics[_526], _528 << 16u);
            memoryBarrierBuffer();
        }
    }
}

void main()
{
    uint _46 = AllocateInvocationID();
    InvocationID = _46;
    uvec2 _55 = DescriptorHeapRobustness.descriptors[registers._m4]._m0[0u];
    uint _61 = uint(imageSize(_22[registers._m4])) * 4u;
    uint _68 = gl_GlobalInvocationID.x >> 4u;
    uint _75 = registers._m5 + (gl_GlobalInvocationID.x + 0u);
    uvec2 _77 = DescriptorHeapRobustness.descriptors[_75]._m0[0u];
    uint _81 = _68 * 16u;
    uint _462 = InvocationID;
    bool _461 = ValidateBDALoadStore(_77, _81, 16u, 0u, _462, _81 < 65536u);
    AssumeTrue(_461, 1u);
    uint _473 = (gl_GlobalInvocationID.x * 4u) + 0u;
    uint _475 = InvocationID;
    bool _474 = ValidateBDALoadStore(_55, _473, 4u, 0u, _475, _473 < _61);
    AssumeTrue(_474, 2u);
    uvec4 _478 = imageLoad(_22[registers._m4], int(gl_GlobalInvocationID.x));
    uint _483 = (gl_GlobalInvocationID.x * 4u) + 0u;
    uint _485 = InvocationID;
    bool _484 = ValidateBDALoadStore(_55, _483, 4u, 1u, _485, _483 < _61);
    AssumeTrue(_484, 3u);
    imageStore(_22[registers._m4], int(gl_GlobalInvocationID.x), uvec4(floatBitsToUint(((_30[_75]._m0[_68].x + 40.0) + _30[_75]._m0[_68].z) + uintBitsToFloat(_478.x))));
}


#if 0
// SPIR-V disassembly
; SPIR-V
; Version: 1.3
; Generator: Unknown(30017); 21022
; Bound: 545
; Schema: 0
OpCapability Shader
OpCapability Int64
OpCapability Int64Atomics
OpCapability UniformBufferArrayDynamicIndexing
OpCapability ImageBuffer
OpCapability ImageQuery
OpCapability SignedZeroInfNanPreserve
OpCapability RuntimeDescriptorArray
OpCapability PhysicalStorageBufferAddresses
OpExtension "SPV_EXT_descriptor_indexing"
OpExtension "SPV_KHR_float_controls"
OpExtension "SPV_KHR_physical_storage_buffer"
%173 = OpExtInstImport "GLSL.std.450"
OpMemoryModel PhysicalStorageBuffer64 GLSL450
OpEntryPoint GLCompute %3 "main" %64
OpExecutionMode %3 SignedZeroInfNanPreserve 32
OpExecutionMode %3 SignedZeroInfNanPreserve 64
OpExecutionMode %3 LocalSize 1 1 1
OpName %3 "main"
OpName %6 "RootConstants"
OpName %8 "registers"
OpName %12 "DescriptorHeapRawPayload"
OpName %14 "DescriptorHeapRobustnessSSBO"
OpMemberName %14 0 "descriptors"
OpName %16 "DescriptorHeapRobustness"
OpName %18 "InvocationID"
OpName %27 "BindlessCBV"
OpName %32 "BloomBufferInvocationSSBO"
OpMemberName %32 0 "atomics"
OpName %34 "BloomBufferInvocation"
OpName %36 "AllocateInvocationID"
OpName %85 "AddrHash"
OpName %83 "addr"
OpName %84 "prime"
OpName %125 "BloomBufferSSBO"
OpMemberName %125 0 "atomics"
OpName %127 "BloomBuffer"
OpName %129 "BloomBuffer32SSBO"
OpMemberName %129 0 "atomics"
OpName %131 "BloomBuffer32"
OpName %139 "ValidateBDALoadStore"
OpName %133 "BDA"
OpName %134 "offset"
OpName %135 "len"
OpName %136 "type"
OpName %137 "invocation_id"
OpName %138 "in_bounds"
OpName %147 "IAddCarryResult"
OpName %152 "addr"
OpName %153 "addr_lo"
OpName %157 "byte_mask"
OpName %167 "word_mask"
OpName %172 "hash_mask"
OpName %177 "hash_offset"
OpName %181 "bloom_index"
OpName %185 "bloom_index"
OpName %189 "bloom_index"
OpName %192 "bloom_index"
OpName %196 "bloom_index"
OpName %200 "bloom_index"
OpName %204 "bloom_index"
OpName %208 "bloom_index"
OpName %212 "bloom_index"
OpName %216 "bloom_index"
OpName %220 "bloom_index"
OpName %224 "bloom_index"
OpName %228 "bloom_index"
OpName %232 "bloom_index"
OpName %236 "bloom_index"
OpName %240 "bloom_index"
OpName %253 "invalidation_mask"
OpName %256 "prev_hazard_partial"
OpName %258 "prev_hazard_partial"
OpName %261 "prev_hazard_partial"
OpName %264 "prev_hazard_partial"
OpName %267 "prev_hazard_partial"
OpName %270 "prev_hazard_partial"
OpName %273 "prev_hazard_partial"
OpName %276 "prev_hazard_partial"
OpName %279 "prev_hazard_partial"
OpName %282 "prev_hazard_partial"
OpName %285 "prev_hazard_partial"
OpName %288 "prev_hazard_partial"
OpName %291 "prev_hazard_partial"
OpName %294 "prev_hazard_partial"
OpName %297 "prev_hazard_partial"
OpName %300 "prev_hazard_partial"
OpName %302 "prev_hazard"
OpName %303 "prev_hazard_lo"
OpName %304 "prev_hazard_hi"
OpName %307 "has_exclusive_access"
OpName %321 "lock_mask"
OpName %324 "prev_lock"
OpName %337 "lock_mask"
OpName %340 "prev_lock"
OpName %354 "lock_mask"
OpName %357 "prev_lock"
OpName %371 "lock_mask"
OpName %374 "prev_lock"
OpName %388 "lock_mask"
OpName %391 "prev_lock"
OpName %402 "lock_mask"
OpName %405 "prev_lock"
OpName %418 "lock_mask"
OpName %421 "prev_lock"
OpName %435 "lock_mask"
OpName %438 "prev_lock"
OpName %441 "has_complete_self_lock"
OpName %457 "hazard"
OpName %491 "ShouldReportInstrumentation"
OpName %493 "InstrumentationControlDataSSBO"
OpMemberName %493 0 "atomics"
OpName %495 "InstrumentationControlData"
OpName %497 "InstrumentationDataSSBO"
OpMemberName %497 0 "data"
OpName %499 "InstrumentationData"
OpName %503 "AssumeTrue"
OpName %501 "value"
OpName %502 "inst"
OpDecorate %6 Block
OpMemberDecorate %6 0 Offset 0
OpMemberDecorate %6 1 Offset 4
OpMemberDecorate %6 2 Offset 8
OpMemberDecorate %6 3 Offset 12
OpMemberDecorate %6 4 Offset 16
OpMemberDecorate %6 5 Offset 20
OpMemberDecorate %6 6 Offset 24
OpMemberDecorate %6 7 Offset 28
OpDecorate %11 ArrayStride 8
OpMemberDecorate %12 0 Offset 0
OpDecorate %13 ArrayStride 8
OpDecorate %14 Block
OpMemberDecorate %14 0 Offset 0
OpDecorate %16 DescriptorSet 0
OpDecorate %16 Binding 0
OpDecorate %22 DescriptorSet 4
OpDecorate %22 Binding 0
OpDecorate %26 ArrayStride 16
OpDecorate %27 Block
OpMemberDecorate %27 0 Offset 0
OpDecorate %30 DescriptorSet 5
OpDecorate %30 Binding 0
OpDecorate %31 ArrayStride 4
OpMemberDecorate %32 0 Offset 0
OpDecorate %32 Block
OpDecorate %34 DescriptorSet 0
OpDecorate %34 Binding 2
OpDecorate %64 BuiltIn GlobalInvocationId
OpDecorate %124 ArrayStride 8
OpMemberDecorate %125 0 Offset 0
OpDecorate %125 Block
OpDecorate %127 DescriptorSet 0
OpDecorate %127 Binding 2
OpDecorate %128 ArrayStride 8
OpMemberDecorate %129 0 Offset 0
OpDecorate %129 Block
OpDecorate %131 DescriptorSet 0
OpDecorate %131 Binding 2
OpDecorate %492 ArrayStride 4
OpMemberDecorate %493 0 Offset 0
OpDecorate %493 Block
OpDecorate %495 DescriptorSet 0
OpDecorate %495 Binding 2
OpDecorate %496 ArrayStride 16
OpMemberDecorate %497 0 Offset 0
OpDecorate %497 Block
OpDecorate %499 DescriptorSet 0
OpDecorate %499 Binding 3
%1 = OpTypeVoid
%2 = OpTypeFunction %1
%5 = OpTypeInt 32 0
%6 = OpTypeStruct %5 %5 %5 %5 %5 %5 %5 %5
%7 = OpTypePointer PushConstant %6
%8 = OpVariable %7 PushConstant
%9 = OpTypeVector %5 2
%10 = OpConstant %5 1
%11 = OpTypeArray %9 %10
%12 = OpTypeStruct %11
%13 = OpTypeRuntimeArray %12
%14 = OpTypeStruct %13
%15 = OpTypePointer StorageBuffer %14
%16 = OpVariable %15 StorageBuffer
%17 = OpTypePointer Private %5
%18 = OpVariable %17 Private
%19 = OpTypeImage %5 Buffer 0 0 0 2 R32ui
%20 = OpTypeRuntimeArray %19
%21 = OpTypePointer UniformConstant %20
%22 = OpVariable %21 UniformConstant
%23 = OpTypeFloat 32
%24 = OpTypeVector %23 4
%25 = OpConstant %5 4096
%26 = OpTypeArray %24 %25
%27 = OpTypeStruct %26
%28 = OpTypeRuntimeArray %27
%29 = OpTypePointer Uniform %28
%30 = OpVariable %29 Uniform
%31 = OpTypeRuntimeArray %5
%32 = OpTypeStruct %31
%33 = OpTypePointer StorageBuffer %32
%34 = OpVariable %33 StorageBuffer
%35 = OpTypeFunction %5
%40 = OpTypePointer StorageBuffer %5
%42 = OpConstant %5 0
%44 = OpConstant %5 1103633207
%47 = OpTypePointer UniformConstant %19
%49 = OpTypePointer PushConstant %5
%51 = OpConstant %5 4
%53 = OpTypePointer StorageBuffer %9
%58 = OpConstant %5 16
%62 = OpTypeVector %5 3
%63 = OpTypePointer Input %62
%64 = OpVariable %63 Input
%65 = OpTypePointer Input %5
%70 = OpTypePointer Uniform %27
%73 = OpConstant %5 5
%80 = OpConstant %5 65536
%82 = OpTypeFunction %5 %9 %5
%93 = OpConstant %5 65535
%94 = OpConstant %5 8
%95 = OpConstantComposite %9 %94 %94
%122 = OpTypeInt 64 0
%123 = OpTypeBool
%124 = OpTypeRuntimeArray %122
%125 = OpTypeStruct %124
%126 = OpTypePointer StorageBuffer %125
%127 = OpVariable %126 StorageBuffer
%128 = OpTypeRuntimeArray %9
%129 = OpTypeStruct %128
%130 = OpTypePointer StorageBuffer %129
%131 = OpVariable %130 StorageBuffer
%132 = OpTypeFunction %123 %9 %5 %5 %5 %5 %123
%143 = OpConstantTrue %123
%147 = OpTypeStruct %5 %5
%158 = OpConstant %5 4294967295
%159 = OpConstant %5 15
%168 = OpConstant %5 3
%169 = OpConstant %5 2
%179 = OpConstant %5 1103515245
%183 = OpConstant %5 1103518333
%187 = OpConstant %5 1103539331
%194 = OpConstant %5 10006121
%198 = OpConstant %5 4004951
%202 = OpConstant %5 5005159
%206 = OpConstant %5 6004811
%210 = OpConstant %5 383
%214 = OpConstant %5 821
%218 = OpConstant %5 661
%222 = OpConstant %5 1091
%226 = OpConstant %5 1117
%230 = OpConstant %5 3947
%234 = OpConstant %5 4253
%238 = OpConstant %5 7691
%241 = OpTypeVector %122 4
%242 = OpConstant %122 68719411200
%243 = OpConstant %122 1099511627775
%244 = OpConstant %122 1035087118335
%245 = OpConstantComposite %241 %242 %243 %244 %242
%254 = OpTypePointer StorageBuffer %122
%309 = OpTypeInt 32 1
%310 = OpConstant %309 0
%311 = OpConstant %309 3
%313 = OpConstant %5 256
%318 = OpConstant %309 6
%320 = OpConstant %5 16777216
%328 = OpConstant %309 9
%331 = OpConstant %309 12
%335 = OpConstant %309 15
%345 = OpConstant %309 18
%348 = OpConstant %309 21
%352 = OpConstant %309 24
%362 = OpConstant %309 23
%365 = OpConstant %309 26
%369 = OpConstant %309 29
%379 = OpConstant %309 1
%382 = OpConstant %309 4
%386 = OpConstant %309 7
%410 = OpConstant %309 17
%413 = OpConstant %309 20
%426 = OpConstant %309 22
%429 = OpConstant %309 25
%433 = OpConstant %309 28
%464 = OpTypePointer Uniform %24
%470 = OpConstant %23 40
%477 = OpTypeVector %5 4
%490 = OpTypePointer Private %123
%491 = OpVariable %490 Private %143
%492 = OpTypeRuntimeArray %5
%493 = OpTypeStruct %492
%494 = OpTypePointer StorageBuffer %493
%495 = OpVariable %494 StorageBuffer
%496 = OpTypeRuntimeArray %477
%497 = OpTypeStruct %496
%498 = OpTypePointer StorageBuffer %497
%499 = OpVariable %498 StorageBuffer
%500 = OpTypeFunction %1 %123 %5
%514 = OpConstant %5 97
%515 = OpConstant %5 43981
%521 = OpConstant %5 51329
%533 = OpConstantFalse %123
%536 = OpTypePointer StorageBuffer %477
%539 = OpConstant %5 72
%3 = OpFunction %1 None %2
%4 = OpLabel
OpBranch %489
%489 = OpLabel
%46 = OpFunctionCall %5 %36
OpStore %18 %46
%50 = OpAccessChain %49 %8 %51
%52 = OpLoad %5 %50
%54 = OpAccessChain %53 %16 %42 %52 %42 %42
%55 = OpLoad %9 %54
%56 = OpCompositeExtract %5 %55 1
%57 = OpShiftRightLogical %5 %56 %58
%48 = OpAccessChain %47 %22 %52
%59 = OpLoad %19 %48
%60 = OpImageQuerySize %5 %59
%61 = OpIMul %5 %60 %51
%66 = OpAccessChain %65 %64 %42
%67 = OpLoad %5 %66
%68 = OpShiftRightLogical %5 %67 %51
%69 = OpIAdd %5 %67 %42
%72 = OpAccessChain %49 %8 %73
%74 = OpLoad %5 %72
%75 = OpIAdd %5 %74 %69
%76 = OpAccessChain %53 %16 %42 %75 %42 %42
%77 = OpLoad %9 %76
%78 = OpCompositeExtract %5 %77 1
%79 = OpShiftRightLogical %5 %78 %58
%71 = OpAccessChain %70 %30 %75
%81 = OpIMul %5 %68 %58
%462 = OpLoad %5 %18
%463 = OpULessThan %123 %81 %80
%461 = OpFunctionCall %123 %139 %77 %81 %58 %42 %462 %463
%541 = OpFunctionCall %1 %503 %461 %10
%465 = OpAccessChain %464 %71 %42 %68
%466 = OpLoad %24 %465
%467 = OpCompositeExtract %23 %466 0
%468 = OpCompositeExtract %23 %466 2
%469 = OpFAdd %23 %467 %470
%471 = OpFAdd %23 %469 %468
%472 = OpIMul %5 %67 %51
%473 = OpIAdd %5 %472 %42
%475 = OpLoad %5 %18
%476 = OpULessThan %123 %473 %61
%474 = OpFunctionCall %123 %139 %55 %473 %51 %42 %475 %476
%542 = OpFunctionCall %1 %503 %474 %169
%478 = OpImageRead %477 %59 %67
%479 = OpCompositeExtract %5 %478 0
%480 = OpBitcast %23 %479
%481 = OpFAdd %23 %471 %480
%482 = OpIMul %5 %67 %51
%483 = OpIAdd %5 %482 %42
%485 = OpLoad %5 %18
%486 = OpULessThan %123 %483 %61
%484 = OpFunctionCall %123 %139 %55 %483 %51 %10 %485 %486
%543 = OpFunctionCall %1 %503 %484 %168
%487 = OpBitcast %5 %481
%488 = OpCompositeConstruct %477 %487 %487 %487 %487
OpImageWrite %59 %67 %488
OpReturn
OpFunctionEnd
%36 = OpFunction %5 None %35
%37 = OpLabel
%38 = OpArrayLength %5 %34 0
%39 = OpISub %5 %38 %10
%41 = OpAccessChain %40 %34 %42 %39
%43 = OpAtomicIAdd %5 %41 %10 %42 %44
OpReturnValue %43
OpFunctionEnd
%85 = OpFunction %5 None %82
%83 = OpFunctionParameter %9
%84 = OpFunctionParameter %5
%86 = OpLabel
%87 = OpCompositeExtract %5 %83 0
%88 = OpCompositeExtract %5 %83 1
%89 = OpShiftRightLogical %5 %87 %51
%90 = OpBitwiseAnd %5 %88 %93
%91 = OpCompositeConstruct %9 %89 %90
%92 = OpCompositeConstruct %9 %84 %84
%96 = OpVectorShuffle %9 %91 %91 1 0
%97 = OpShiftRightLogical %9 %91 %95
%98 = OpBitwiseXor %9 %97 %96
%99 = OpIMul %9 %98 %92
%100 = OpVectorShuffle %9 %99 %99 1 0
%101 = OpShiftRightLogical %9 %99 %95
%102 = OpBitwiseXor %9 %101 %100
%103 = OpIMul %9 %102 %92
%104 = OpVectorShuffle %9 %103 %103 1 0
%105 = OpShiftRightLogical %9 %103 %95
%106 = OpBitwiseXor %9 %105 %104
%107 = OpIMul %9 %106 %92
%108 = OpVectorShuffle %9 %107 %107 1 0
%109 = OpShiftRightLogical %9 %107 %95
%110 = OpBitwiseXor %9 %109 %108
%111 = OpIMul %9 %110 %92
%112 = OpVectorShuffle %9 %111 %111 1 0
%113 = OpShiftRightLogical %9 %111 %95
%114 = OpBitwiseXor %9 %113 %112
%115 = OpIMul %9 %114 %92
%116 = OpVectorShuffle %9 %115 %115 1 0
%117 = OpShiftRightLogical %9 %115 %95
%118 = OpBitwiseXor %9 %117 %116
%119 = OpIMul %9 %118 %92
%120 = OpCompositeExtract %5 %119 0
OpReturnValue %120
OpFunctionEnd
%139 = OpFunction %123 None %132
%133 = OpFunctionParameter %9
%134 = OpFunctionParameter %5
%135 = OpFunctionParameter %5
%136 = OpFunctionParameter %5
%137 = OpFunctionParameter %5
%138 = OpFunctionParameter %123
%140 = OpLabel
OpSelectionMerge %142 None
OpBranchConditional %138 %142 %141
%141 = OpLabel
OpReturnValue %143
%142 = OpLabel
%145 = OpCompositeExtract %5 %133 0
%146 = OpCompositeExtract %5 %133 1
%148 = OpIAddCarry %147 %145 %134
%149 = OpCompositeExtract %5 %148 0
%150 = OpCompositeExtract %5 %148 1
%151 = OpIAdd %5 %146 %150
%152 = OpCompositeConstruct %9 %149 %151
%153 = OpCompositeExtract %5 %152 0
%154 = OpBitFieldUExtract %5 %158 %42 %135
%155 = OpBitwiseAnd %5 %153 %159
%156 = OpShiftLeftLogical %5 %154 %155
%157 = OpBitwiseAnd %5 %156 %93
%160 = OpBitwiseAnd %5 %153 %168
%161 = OpIAdd %5 %160 %135
%162 = OpIAdd %5 %161 %168
%163 = OpShiftRightLogical %5 %162 %169
%164 = OpBitFieldUExtract %5 %153 %169 %169
%165 = OpBitFieldUExtract %5 %158 %42 %163
%166 = OpShiftLeftLogical %5 %165 %164
%167 = OpBitwiseAnd %5 %166 %159
%170 = OpArrayLength %5 %127 0
%171 = OpExtInst %5 %173 FindUMsb %170
%172 = OpBitFieldUExtract %5 %158 %42 %171
%174 = OpArrayLength %5 %127 0
%175 = OpExtInst %5 %173 FindUMsb %174
%176 = OpBitFieldUExtract %5 %174 %42 %175
%177 = OpISub %5 %176 %10
%178 = OpFunctionCall %5 %85 %152 %179
%180 = OpBitwiseAnd %5 %178 %172
%181 = OpIAdd %5 %180 %177
%182 = OpFunctionCall %5 %85 %152 %183
%184 = OpBitwiseAnd %5 %182 %172
%185 = OpIAdd %5 %184 %177
%186 = OpFunctionCall %5 %85 %152 %187
%188 = OpBitwiseAnd %5 %186 %172
%189 = OpIAdd %5 %188 %177
%190 = OpFunctionCall %5 %85 %152 %44
%191 = OpBitwiseAnd %5 %190 %172
%192 = OpIAdd %5 %191 %177
%193 = OpFunctionCall %5 %85 %152 %194
%195 = OpBitwiseAnd %5 %193 %172
%196 = OpIAdd %5 %195 %177
%197 = OpFunctionCall %5 %85 %152 %198
%199 = OpBitwiseAnd %5 %197 %172
%200 = OpIAdd %5 %199 %177
%201 = OpFunctionCall %5 %85 %152 %202
%203 = OpBitwiseAnd %5 %201 %172
%204 = OpIAdd %5 %203 %177
%205 = OpFunctionCall %5 %85 %152 %206
%207 = OpBitwiseAnd %5 %205 %172
%208 = OpIAdd %5 %207 %177
%209 = OpFunctionCall %5 %85 %152 %210
%211 = OpBitwiseAnd %5 %209 %172
%212 = OpIAdd %5 %211 %177
%213 = OpFunctionCall %5 %85 %152 %214
%215 = OpBitwiseAnd %5 %213 %172
%216 = OpIAdd %5 %215 %177
%217 = OpFunctionCall %5 %85 %152 %218
%219 = OpBitwiseAnd %5 %217 %172
%220 = OpIAdd %5 %219 %177
%221 = OpFunctionCall %5 %85 %152 %222
%223 = OpBitwiseAnd %5 %221 %172
%224 = OpIAdd %5 %223 %177
%225 = OpFunctionCall %5 %85 %152 %226
%227 = OpBitwiseAnd %5 %225 %172
%228 = OpIAdd %5 %227 %177
%229 = OpFunctionCall %5 %85 %152 %230
%231 = OpBitwiseAnd %5 %229 %172
%232 = OpIAdd %5 %231 %177
%233 = OpFunctionCall %5 %85 %152 %234
%235 = OpBitwiseAnd %5 %233 %172
%236 = OpIAdd %5 %235 %177
%237 = OpFunctionCall %5 %85 %152 %238
%239 = OpBitwiseAnd %5 %237 %172
%240 = OpIAdd %5 %239 %177
%246 = OpVectorExtractDynamic %122 %245 %136
%247 = OpShiftLeftLogical %5 %157 %58
%248 = OpShiftLeftLogical %5 %167 %51
%249 = OpBitwiseOr %5 %157 %247
%250 = OpBitwiseOr %5 %167 %248
%251 = OpCompositeConstruct %9 %249 %250
%252 = OpBitcast %122 %251
%253 = OpBitwiseAnd %122 %246 %252
%255 = OpInBoundsAccessChain %254 %127 %42 %181
%256 = OpAtomicOr %122 %255 %10 %42 %253
%257 = OpInBoundsAccessChain %254 %127 %42 %185
%258 = OpAtomicOr %122 %257 %10 %42 %253
%259 = OpBitwiseAnd %122 %256 %258
%260 = OpInBoundsAccessChain %254 %127 %42 %189
%261 = OpAtomicOr %122 %260 %10 %42 %253
%262 = OpBitwiseAnd %122 %259 %261
%263 = OpInBoundsAccessChain %254 %127 %42 %192
%264 = OpAtomicOr %122 %263 %10 %42 %253
%265 = OpBitwiseAnd %122 %262 %264
%266 = OpInBoundsAccessChain %254 %127 %42 %196
%267 = OpAtomicOr %122 %266 %10 %42 %253
%268 = OpBitwiseAnd %122 %265 %267
%269 = OpInBoundsAccessChain %254 %127 %42 %200
%270 = OpAtomicOr %122 %269 %10 %42 %253
%271 = OpBitwiseAnd %122 %268 %270
%272 = OpInBoundsAccessChain %254 %127 %42 %204
%273 = OpAtomicOr %122 %272 %10 %42 %253
%274 = OpBitwiseAnd %122 %271 %273
%275 = OpInBoundsAccessChain %254 %127 %42 %208
%276 = OpAtomicOr %122 %275 %10 %42 %253
%277 = OpBitwiseAnd %122 %274 %276
%278 = OpInBoundsAccessChain %254 %127 %42 %212
%279 = OpAtomicOr %122 %278 %10 %42 %253
%280 = OpBitwiseAnd %122 %277 %279
%281 = OpInBoundsAccessChain %254 %127 %42 %216
%282 = OpAtomicOr %122 %281 %10 %42 %253
%283 = OpBitwiseAnd %122 %280 %282
%284 = OpInBoundsAccessChain %254 %127 %42 %220
%285 = OpAtomicOr %122 %284 %10 %42 %253
%286 = OpBitwiseAnd %122 %283 %285
%287 = OpInBoundsAccessChain %254 %127 %42 %224
%288 = OpAtomicOr %122 %287 %10 %42 %253
%289 = OpBitwiseAnd %122 %286 %288
%290 = OpInBoundsAccessChain %254 %127 %42 %228
%291 = OpAtomicOr %122 %290 %10 %42 %253
%292 = OpBitwiseAnd %122 %289 %291
%293 = OpInBoundsAccessChain %254 %127 %42 %232
%294 = OpAtomicOr %122 %293 %10 %42 %253
%295 = OpBitwiseAnd %122 %292 %294
%296 = OpInBoundsAccessChain %254 %127 %42 %236
%297 = OpAtomicOr %122 %296 %10 %42 %253
%298 = OpBitwiseAnd %122 %295 %297
%299 = OpInBoundsAccessChain %254 %127 %42 %240
%300 = OpAtomicOr %122 %299 %10 %42 %253
%301 = OpBitwiseAnd %122 %298 %300
%302 = OpBitcast %9 %301
%303 = OpCompositeExtract %5 %302 0
%304 = OpCompositeExtract %5 %302 1
%305 = OpShiftRightLogical %5 %303 %58
%306 = OpBitwiseAnd %5 %305 %157
%307 = OpIEqual %123 %306 %42
%308 = OpBitFieldUExtract %5 %137 %310 %311
%312 = OpShiftLeftLogical %5 %313 %308
%314 = OpBitFieldUExtract %5 %137 %311 %311
%315 = OpShiftLeftLogical %5 %80 %314
%316 = OpBitwiseOr %5 %312 %315
%317 = OpBitFieldUExtract %5 %137 %318 %311
%319 = OpShiftLeftLogical %5 %320 %317
%321 = OpBitwiseOr %5 %316 %319
%322 = OpSelect %5 %307 %321 %42
%323 = OpInBoundsAccessChain %40 %131 %42 %181 %10
%324 = OpAtomicOr %5 %323 %10 %42 %322
%325 = OpBitwiseAnd %5 %324 %321
%326 = OpIEqual %123 %325 %321
%327 = OpBitFieldUExtract %5 %137 %328 %311
%329 = OpShiftLeftLogical %5 %313 %327
%330 = OpBitFieldUExtract %5 %137 %331 %311
%332 = OpShiftLeftLogical %5 %80 %330
%333 = OpBitwiseOr %5 %329 %332
%334 = OpBitFieldUExtract %5 %137 %335 %311
%336 = OpShiftLeftLogical %5 %320 %334
%337 = OpBitwiseOr %5 %333 %336
%338 = OpSelect %5 %307 %337 %42
%339 = OpInBoundsAccessChain %40 %131 %42 %185 %10
%340 = OpAtomicOr %5 %339 %10 %42 %338
%341 = OpBitwiseAnd %5 %340 %337
%342 = OpIEqual %123 %341 %337
%343 = OpLogicalAnd %123 %326 %342
%344 = OpBitFieldUExtract %5 %137 %345 %311
%346 = OpShiftLeftLogical %5 %313 %344
%347 = OpBitFieldUExtract %5 %137 %348 %311
%349 = OpShiftLeftLogical %5 %80 %347
%350 = OpBitwiseOr %5 %346 %349
%351 = OpBitFieldUExtract %5 %137 %352 %311
%353 = OpShiftLeftLogical %5 %320 %351
%354 = OpBitwiseOr %5 %350 %353
%355 = OpSelect %5 %307 %354 %42
%356 = OpInBoundsAccessChain %40 %131 %42 %189 %10
%357 = OpAtomicOr %5 %356 %10 %42 %355
%358 = OpBitwiseAnd %5 %357 %354
%359 = OpIEqual %123 %358 %354
%360 = OpLogicalAnd %123 %343 %359
%361 = OpBitFieldUExtract %5 %137 %362 %311
%363 = OpShiftLeftLogical %5 %313 %361
%364 = OpBitFieldUExtract %5 %137 %365 %311
%366 = OpShiftLeftLogical %5 %80 %364
%367 = OpBitwiseOr %5 %363 %366
%368 = OpBitFieldUExtract %5 %137 %369 %311
%370 = OpShiftLeftLogical %5 %320 %368
%371 = OpBitwiseOr %5 %367 %370
%372 = OpSelect %5 %307 %371 %42
%373 = OpInBoundsAccessChain %40 %131 %42 %192 %10
%374 = OpAtomicOr %5 %373 %10 %42 %372
%375 = OpBitwiseAnd %5 %374 %371
%376 = OpIEqual %123 %375 %371
%377 = OpLogicalAnd %123 %360 %376
%378 = OpBitFieldUExtract %5 %137 %379 %311
%380 = OpShiftLeftLogical %5 %313 %378
%381 = OpBitFieldUExtract %5 %137 %382 %311
%383 = OpShiftLeftLogical %5 %80 %381
%384 = OpBitwiseOr %5 %380 %383
%385 = OpBitFieldUExtract %5 %137 %386 %311
%387 = OpShiftLeftLogical %5 %320 %385
%388 = OpBitwiseOr %5 %384 %387
%389 = OpSelect %5 %307 %388 %42
%390 = OpInBoundsAccessChain %40 %131 %42 %196 %10
%391 = OpAtomicOr %5 %390 %10 %42 %389
%392 = OpBitwiseAnd %5 %391 %388
%393 = OpIEqual %123 %392 %388
%394 = OpLogicalAnd %123 %377 %393
%395 = OpBitFieldUExtract %5 %137 %328 %311
%396 = OpShiftLeftLogical %5 %313 %395
%397 = OpBitFieldUExtract %5 %137 %331 %311
%398 = OpShiftLeftLogical %5 %80 %397
%399 = OpBitwiseOr %5 %396 %398
%400 = OpBitFieldUExtract %5 %137 %335 %311
%401 = OpShiftLeftLogical %5 %320 %400
%402 = OpBitwiseOr %5 %399 %401
%403 = OpSelect %5 %307 %402 %42
%404 = OpInBoundsAccessChain %40 %131 %42 %200 %10
%405 = OpAtomicOr %5 %404 %10 %42 %403
%406 = OpBitwiseAnd %5 %405 %402
%407 = OpIEqual %123 %406 %402
%408 = OpLogicalAnd %123 %394 %407
%409 = OpBitFieldUExtract %5 %137 %410 %311
%411 = OpShiftLeftLogical %5 %313 %409
%412 = OpBitFieldUExtract %5 %137 %413 %311
%414 = OpShiftLeftLogical %5 %80 %412
%415 = OpBitwiseOr %5 %411 %414
%416 = OpBitFieldUExtract %5 %137 %362 %311
%417 = OpShiftLeftLogical %5 %320 %416
%418 = OpBitwiseOr %5 %415 %417
%419 = OpSelect %5 %307 %418 %42
%420 = OpInBoundsAccessChain %40 %131 %42 %204 %10
%421 = OpAtomicOr %5 %420 %10 %42 %419
%422 = OpBitwiseAnd %5 %421 %418
%423 = OpIEqual %123 %422 %418
%424 = OpLogicalAnd %123 %408 %423
%425 = OpBitFieldUExtract %5 %137 %426 %311
%427 = OpShiftLeftLogical %5 %313 %425
%428 = OpBitFieldUExtract %5 %137 %429 %311
%430 = OpShiftLeftLogical %5 %80 %428
%431 = OpBitwiseOr %5 %427 %430
%432 = OpBitFieldUExtract %5 %137 %433 %311
%434 = OpShiftLeftLogical %5 %320 %432
%435 = OpBitwiseOr %5 %431 %434
%436 = OpSelect %5 %307 %435 %42
%437 = OpInBoundsAccessChain %40 %131 %42 %208 %10
%438 = OpAtomicOr %5 %437 %10 %42 %436
%439 = OpBitwiseAnd %5 %438 %435
%440 = OpIEqual %123 %439 %435
%441 = OpLogicalAnd %123 %424 %440
OpSelectionMerge %446 None
OpSwitch %136 %445 0 %442 1 %443 2 %444
%445 = OpLabel
%454 = OpShiftLeftLogical %5 %167 %51
%455 = OpBitwiseAnd %5 %304 %454
%456 = OpINotEqual %123 %455 %42
OpBranch %446
%442 = OpLabel
%447 = OpBitwiseAnd %5 %303 %157
%448 = OpINotEqual %123 %447 %42
OpBranch %446
%443 = OpLabel
%449 = OpShiftLeftLogical %5 %157 %58
%450 = OpBitwiseAnd %5 %303 %449
%451 = OpINotEqual %123 %450 %42
OpBranch %446
%444 = OpLabel
%452 = OpBitwiseAnd %5 %304 %167
%453 = OpINotEqual %123 %452 %42
OpBranch %446
%446 = OpLabel
%457 = OpPhi %123 %448 %442 %451 %443 %453 %444 %456 %445
%458 = OpLogicalNot %123 %457
%459 = OpLogicalOr %123 %458 %441
OpReturnValue %459
OpFunctionEnd
%503 = OpFunction %1 None %500
%501 = OpFunctionParameter %123
%502 = OpFunctionParameter %5
%504 = OpLabel
%507 = OpLogicalNot %123 %501
%508 = OpLoad %123 %491
%509 = OpLogicalAnd %123 %507 %508
OpSelectionMerge %505 None
OpBranchConditional %509 %506 %505
%506 = OpLabel
%512 = OpIMul %5 %502 %514
%513 = OpBitwiseXor %5 %512 %515
%516 = OpArrayLength %5 %495 0
%517 = OpISub %5 %516 %169
%518 = OpAccessChain %40 %495 %42 %517
%519 = OpLoad %5 %518
%520 = OpIMul %5 %519 %521
%522 = OpBitwiseXor %5 %513 %520
%523 = OpArrayLength %5 %499 0
%524 = OpISub %5 %523 %10
%525 = OpBitwiseAnd %5 %522 %524
%526 = OpShiftRightLogical %5 %525 %51
%527 = OpBitwiseAnd %5 %525 %159
%528 = OpShiftLeftLogical %5 %10 %527
%529 = OpAccessChain %40 %495 %42 %526
%530 = OpAtomicOr %5 %529 %10 %42 %528
%531 = OpBitwiseAnd %5 %530 %528
%532 = OpIEqual %123 %531 %42
OpStore %491 %533
OpSelectionMerge %511 None
OpBranchConditional %532 %510 %511
%510 = OpLabel
%534 = OpCompositeConstruct %477 %515 %42 %502 %519
%535 = OpShiftLeftLogical %5 %528 %58
%537 = OpAccessChain %536 %499 %42 %525
OpStore %537 %534
OpMemoryBarrier %10 %539
%538 = OpAtomicOr %5 %529 %10 %42 %535
OpMemoryBarrier %10 %539
OpBranch %511
%511 = OpLabel
OpBranch %505
%505 = OpLabel
OpReturn
OpFunctionEnd
#endif
