#version 460
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;

layout(set = 0, binding = 0, r32ui) uniform uimageBuffer _8;

void main()
{
    uint _28;
    if (gl_GlobalInvocationID.x < 100u)
    {
        uint frontier_phi_3_1_ladder;
        if (gl_GlobalInvocationID.x == 0u)
        {
            frontier_phi_3_1_ladder = 0u;
        }
        else
        {
            uint _35;
            _35 = 0u;
            uint _31;
            uint frontier_phi_12;
            uint _37 = 0u;
            bool _38;
            for (;;)
            {
                _38 = gl_GlobalInvocationID.y == 0u;
                uint frontier_phi_8_pred;
                if (_38)
                {
                    frontier_phi_8_pred = _37;
                }
                else
                {
                    bool ladder_phi_20;
                    uint frontier_phi_20_pred;
                    uint frontier_phi_20_pred_1;
                    uint _47 = _37;
                    uint _48 = 0u;
                    bool _54;
                    for (;;)
                    {
                        uint _50 = _48 ^ _35;
                        _54 = imageLoad(_8, int(_50)).x == 100u;
                        if (_54)
                        {
                            ladder_phi_20 = true;
                            frontier_phi_20_pred = _37;
                            frontier_phi_20_pred_1 = imageLoad(_8, int(32u)).x + _47;
                            break;
                        }
                        else
                        {
                            uint _43 = imageLoad(_8, int(((_35 << 2u) * _48) >> 2u)).x + _47;
                            uint _49 = _48 + 1u;
                            if (_49 < gl_GlobalInvocationID.y)
                            {
                                _47 = _43;
                                _48 = _49;
                                continue;
                            }
                            else
                            {
                                ladder_phi_20 = false;
                                frontier_phi_20_pred = _43;
                                frontier_phi_20_pred_1 = 0u;
                                break;
                            }
                        }
                    }
                    if (ladder_phi_20)
                    {
                        frontier_phi_12 = frontier_phi_20_pred_1;
                        break;
                    }
                    frontier_phi_8_pred = frontier_phi_20_pred;
                }
                _31 = frontier_phi_8_pred;
                uint _36 = _35 + 1u;
                if (_36 < gl_GlobalInvocationID.x)
                {
                    _35 = _36;
                    _37 = _31;
                    continue;
                }
                else
                {
                    frontier_phi_12 = _31;
                    break;
                }
            }
            frontier_phi_3_1_ladder = frontier_phi_12;
        }
        _28 = frontier_phi_3_1_ladder;
    }
    else
    {
        uint frontier_phi_3_2_ladder;
        if (gl_GlobalInvocationID.z == 0u)
        {
            frontier_phi_3_2_ladder = 0u;
        }
        else
        {
            uint _39;
            _39 = 0u;
            uint _32;
            uint frontier_phi_14;
            uint _41 = 0u;
            bool _42;
            for (;;)
            {
                _42 = gl_GlobalInvocationID.y == 0u;
                uint frontier_phi_10_pred;
                if (_42)
                {
                    frontier_phi_10_pred = _41;
                }
                else
                {
                    bool ladder_phi_21;
                    uint frontier_phi_21_pred;
                    uint frontier_phi_21_pred_1;
                    uint _55 = 0u;
                    uint _57 = _41;
                    bool _62;
                    for (;;)
                    {
                        uint _58 = _55 ^ _39;
                        _62 = imageLoad(_8, int(_58)).x == 100u;
                        if (_62)
                        {
                            ladder_phi_21 = true;
                            frontier_phi_21_pred = _41;
                            frontier_phi_21_pred_1 = imageLoad(_8, int(32u)).x + _57;
                            break;
                        }
                        else
                        {
                            uint _45 = imageLoad(_8, int(((_39 << 2u) * _55) >> 2u)).x + _57;
                            uint _56 = _55 + 1u;
                            if (_56 < gl_GlobalInvocationID.y)
                            {
                                _55 = _56;
                                _57 = _45;
                                continue;
                            }
                            else
                            {
                                ladder_phi_21 = false;
                                frontier_phi_21_pred = _45;
                                frontier_phi_21_pred_1 = 0u;
                                break;
                            }
                        }
                    }
                    if (ladder_phi_21)
                    {
                        frontier_phi_14 = frontier_phi_21_pred_1;
                        break;
                    }
                    frontier_phi_10_pred = frontier_phi_21_pred;
                }
                _32 = frontier_phi_10_pred;
                uint _40 = _39 + 1u;
                if (_40 < gl_GlobalInvocationID.z)
                {
                    _39 = _40;
                    _41 = _32;
                    continue;
                }
                else
                {
                    frontier_phi_14 = _32;
                    break;
                }
            }
            frontier_phi_3_2_ladder = frontier_phi_14;
        }
        _28 = frontier_phi_3_2_ladder;
    }
    imageStore(_8, int(0u), uvec4(_28));
}


#if 0
// SPIR-V disassembly
; SPIR-V
; Version: 1.3
; Generator: Unknown(30017); 21022
; Bound: 131
; Schema: 0
OpCapability Shader
OpCapability ImageBuffer
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %3 "main" %12
OpExecutionMode %3 LocalSize 1 1 1
OpName %3 "main"
OpName %80 "ladder_phi_20"
OpName %83 "ladder_phi_21"
OpName %84 "frontier_phi_21.pred"
OpName %85 "frontier_phi_10.pred"
OpName %86 "frontier_phi_20.pred"
OpName %87 "frontier_phi_8.pred"
OpName %88 "frontier_phi_21.pred"
OpName %89 "frontier_phi_14"
OpName %90 "frontier_phi_3.2.ladder"
OpName %91 "frontier_phi_20.pred"
OpName %92 "frontier_phi_12"
OpName %93 "frontier_phi_3.1.ladder"
OpDecorate %8 DescriptorSet 0
OpDecorate %8 Binding 0
OpDecorate %12 BuiltIn GlobalInvocationId
%1 = OpTypeVoid
%2 = OpTypeFunction %1
%5 = OpTypeInt 32 0
%6 = OpTypeImage %5 Buffer 0 0 0 2 R32ui
%7 = OpTypePointer UniformConstant %6
%8 = OpVariable %7 UniformConstant
%10 = OpTypeVector %5 3
%11 = OpTypePointer Input %10
%12 = OpVariable %11 Input
%13 = OpTypePointer Input %5
%15 = OpConstant %5 0
%18 = OpConstant %5 1
%21 = OpConstant %5 2
%23 = OpTypeBool
%25 = OpConstant %5 100
%33 = OpTypeVector %5 4
%63 = OpConstant %5 32
%81 = OpConstantFalse %23
%82 = OpConstantTrue %23
%3 = OpFunction %1 None %2
%4 = OpLabel
OpBranch %94
%94 = OpLabel
%9 = OpLoad %6 %8
%14 = OpAccessChain %13 %12 %15
%16 = OpLoad %5 %14
%17 = OpAccessChain %13 %12 %18
%19 = OpLoad %5 %17
%20 = OpAccessChain %13 %12 %21
%22 = OpLoad %5 %20
%24 = OpULessThan %23 %16 %25
OpSelectionMerge %125 None
OpBranchConditional %24 %110 %95
%110 = OpLabel
%26 = OpIEqual %23 %16 %15
OpSelectionMerge %124 None
OpBranchConditional %26 %124 %111
%111 = OpLabel
OpBranch %112
%112 = OpLabel
%35 = OpPhi %5 %15 %111 %36 %122
%37 = OpPhi %5 %15 %111 %31 %122
%38 = OpIEqual %23 %19 %15
OpLoopMerge %123 %122 None
OpBranch %113
%113 = OpLabel
OpSelectionMerge %121 None
OpBranchConditional %38 %121 %114
%114 = OpLabel
OpBranch %115
%115 = OpLabel
%47 = OpPhi %5 %37 %114 %43 %117
%48 = OpPhi %5 %15 %114 %49 %117
%50 = OpBitwiseXor %5 %48 %35
%51 = OpShiftLeftLogical %5 %50 %21
%52 = OpImageRead %33 %9 %50
%53 = OpCompositeExtract %5 %52 0
%54 = OpIEqual %23 %53 %25
OpLoopMerge %119 %117 None
OpBranch %128
%128 = OpLabel
OpSelectionMerge %129 None
OpBranchConditional %54 %118 %116
%118 = OpLabel
%64 = OpImageRead %33 %9 %63
%65 = OpCompositeExtract %5 %64 0
%29 = OpIAdd %5 %65 %47
OpBranch %119
%116 = OpLabel
OpBranch %117
%129 = OpLabel
OpUnreachable
%117 = OpLabel
%66 = OpShiftLeftLogical %5 %35 %21
%67 = OpIMul %5 %66 %48
%68 = OpShiftRightLogical %5 %67 %21
%69 = OpImageRead %33 %9 %68
%70 = OpCompositeExtract %5 %69 0
%43 = OpIAdd %5 %70 %47
%49 = OpIAdd %5 %48 %18
%71 = OpULessThan %23 %49 %19
OpBranchConditional %71 %115 %119
%119 = OpLabel
%80 = OpPhi %23 %81 %117 %82 %118
%86 = OpPhi %5 %43 %117 %37 %118
%91 = OpPhi %5 %15 %117 %29 %118
OpSelectionMerge %120 None
OpBranchConditional %80 %123 %120
%120 = OpLabel
OpBranch %121
%121 = OpLabel
%87 = OpPhi %5 %37 %113 %86 %120
%31 = OpCopyObject %5 %87
OpBranch %122
%122 = OpLabel
%36 = OpIAdd %5 %35 %18
%44 = OpULessThan %23 %36 %16
OpBranchConditional %44 %112 %123
%123 = OpLabel
%92 = OpPhi %5 %31 %122 %91 %119
OpBranch %124
%124 = OpLabel
%93 = OpPhi %5 %15 %110 %92 %123
OpBranch %125
%95 = OpLabel
%27 = OpIEqual %23 %22 %15
OpSelectionMerge %109 None
OpBranchConditional %27 %109 %96
%96 = OpLabel
OpBranch %97
%97 = OpLabel
%39 = OpPhi %5 %15 %96 %40 %107
%41 = OpPhi %5 %15 %96 %32 %107
%42 = OpIEqual %23 %19 %15
OpLoopMerge %108 %107 None
OpBranch %98
%98 = OpLabel
OpSelectionMerge %106 None
OpBranchConditional %42 %106 %99
%99 = OpLabel
OpBranch %100
%100 = OpLabel
%55 = OpPhi %5 %15 %99 %56 %102
%57 = OpPhi %5 %41 %99 %45 %102
%58 = OpBitwiseXor %5 %55 %39
%59 = OpShiftLeftLogical %5 %58 %21
%60 = OpImageRead %33 %9 %58
%61 = OpCompositeExtract %5 %60 0
%62 = OpIEqual %23 %61 %25
OpLoopMerge %104 %102 None
OpBranch %126
%126 = OpLabel
OpSelectionMerge %127 None
OpBranchConditional %62 %103 %101
%103 = OpLabel
%72 = OpImageRead %33 %9 %63
%73 = OpCompositeExtract %5 %72 0
%30 = OpIAdd %5 %73 %57
OpBranch %104
%101 = OpLabel
OpBranch %102
%127 = OpLabel
OpUnreachable
%102 = OpLabel
%74 = OpShiftLeftLogical %5 %39 %21
%75 = OpIMul %5 %74 %55
%76 = OpShiftRightLogical %5 %75 %21
%77 = OpImageRead %33 %9 %76
%78 = OpCompositeExtract %5 %77 0
%45 = OpIAdd %5 %78 %57
%56 = OpIAdd %5 %55 %18
%79 = OpULessThan %23 %56 %19
OpBranchConditional %79 %100 %104
%104 = OpLabel
%83 = OpPhi %23 %81 %102 %82 %103
%84 = OpPhi %5 %45 %102 %41 %103
%88 = OpPhi %5 %15 %102 %30 %103
OpSelectionMerge %105 None
OpBranchConditional %83 %108 %105
%105 = OpLabel
OpBranch %106
%106 = OpLabel
%85 = OpPhi %5 %41 %98 %84 %105
%32 = OpCopyObject %5 %85
OpBranch %107
%107 = OpLabel
%40 = OpIAdd %5 %39 %18
%46 = OpULessThan %23 %40 %22
OpBranchConditional %46 %97 %108
%108 = OpLabel
%89 = OpPhi %5 %32 %107 %88 %104
OpBranch %109
%109 = OpLabel
%90 = OpPhi %5 %15 %95 %89 %108
OpBranch %125
%125 = OpLabel
%28 = OpPhi %5 %93 %124 %90 %109
%34 = OpCompositeConstruct %33 %28 %28 %28 %28
OpImageWrite %9 %15 %34
OpReturn
OpFunctionEnd
#endif
