; SPIR-V
; Version: 1.0
; Generator: rspirv
; Bound: 125
OpCapability Shader
OpCapability Int64Atomics
OpCapability Int64
OpExtension "SPV_KHR_storage_buffer_storage_class"
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %19 "test_atomic_compare_exchange_i64"
OpEntryPoint GLCompute %77 "test_atomic_compare_exchange_u64"
OpExecutionMode %19 LocalSize 1 1 1
OpExecutionMode %77 LocalSize 1 1 1
OpDecorate %5 ArrayStride 8
OpDecorate %8 ArrayStride 8
OpMemberDecorate %10 0 Offset 0
OpMemberDecorate %10 1 Offset 8
OpMemberDecorate %11 0 Offset 0
OpMemberDecorate %11 1 Offset 8
OpDecorate %12 DescriptorSet 0
OpDecorate %12 Binding 0
OpDecorate %13 Block
OpMemberDecorate %13 0 Offset 0
OpDecorate %15 DescriptorSet 0
OpDecorate %15 Binding 1
OpDecorate %16 Block
OpMemberDecorate %16 0 Offset 0
%2 = OpTypeVoid
%3 = OpTypeInt 32 0
%4 = OpTypeInt 64 1
%6 = OpConstant  %3  128
%5 = OpTypeArray %4 %6
%7 = OpTypeInt 64 0
%8 = OpTypeArray %7 %6
%9 = OpTypeBool
%10 = OpTypeStruct %4 %9
%11 = OpTypeStruct %7 %9
%13 = OpTypeStruct %5
%14 = OpTypePointer StorageBuffer %13
%12 = OpVariable  %14  StorageBuffer
%16 = OpTypeStruct %8
%17 = OpTypePointer StorageBuffer %16
%15 = OpVariable  %17  StorageBuffer
%20 = OpTypeFunction %2
%21 = OpTypePointer StorageBuffer %5
%22 = OpConstant  %3  0
%24 = OpConstantFalse  %9
%25 = OpConstant  %4  10
%26 = OpConstant  %3  1
%28 = OpTypePointer Function %3
%30 = OpTypePointer Function %4
%31 = OpConstantNull  %4
%33 = OpTypePointer Function %9
%34 = OpConstantNull  %9
%47 = OpTypePointer StorageBuffer %4
%51 = OpTypeInt 32 1
%50 = OpConstant  %51  1
%52 = OpConstant  %3  64
%78 = OpTypePointer StorageBuffer %8
%80 = OpConstant  %7  10
%83 = OpTypePointer Function %7
%84 = OpConstantNull  %7
%86 = OpConstantNull  %9
%99 = OpTypePointer StorageBuffer %7
%19 = OpFunction  %2  None %20
%18 = OpLabel
%27 = OpVariable  %28  Function %22
%29 = OpVariable  %30  Function %31
%32 = OpVariable  %33  Function %34
%23 = OpAccessChain  %21  %12 %22
OpBranch %35
%35 = OpLabel
OpBranch %36
%36 = OpLabel
OpLoopMerge %37 %39 None
OpBranch %38
%38 = OpLabel
%40 = OpLoad  %3  %27
%41 = OpULessThan  %9  %40 %6
OpSelectionMerge %42 None
OpBranchConditional %41 %42 %43
%43 = OpLabel
OpBranch %37
%42 = OpLabel
OpBranch %44
%44 = OpLabel
%46 = OpLoad  %3  %27
%48 = OpAccessChain  %47  %23 %46
%49 = OpAtomicLoad  %4  %48 %50 %52
OpStore %29 %49
OpStore %32 %24
OpBranch %53
%53 = OpLabel
OpLoopMerge %54 %56 None
OpBranch %55
%55 = OpLabel
%57 = OpLoad  %9  %32
%58 = OpLogicalNot  %9  %57
OpSelectionMerge %59 None
OpBranchConditional %58 %59 %60
%60 = OpLabel
OpBranch %54
%59 = OpLabel
OpBranch %61
%61 = OpLabel
%63 = OpLoad  %4  %29
%64 = OpIAdd  %4  %63 %25
%66 = OpLoad  %3  %27
%67 = OpLoad  %4  %29
%69 = OpAccessChain  %47  %23 %66
%70 = OpAtomicCompareExchange  %4  %69 %50 %52 %52 %64 %67
%71 = OpIEqual  %9  %70 %67
%68 = OpCompositeConstruct  %10  %70 %71
%72 = OpCompositeExtract  %4  %68 0
OpStore %29 %72
%73 = OpCompositeExtract  %9  %68 1
OpStore %32 %73
OpBranch %62
%62 = OpLabel
OpBranch %56
%56 = OpLabel
OpBranch %53
%54 = OpLabel
OpBranch %45
%45 = OpLabel
OpBranch %39
%39 = OpLabel
%74 = OpLoad  %3  %27
%75 = OpIAdd  %3  %74 %26
OpStore %27 %75
OpBranch %36
%37 = OpLabel
OpReturn
OpFunctionEnd
%77 = OpFunction  %2  None %20
%76 = OpLabel
%81 = OpVariable  %28  Function %22
%82 = OpVariable  %83  Function %84
%85 = OpVariable  %33  Function %86
%79 = OpAccessChain  %78  %15 %22
OpBranch %87
%87 = OpLabel
OpBranch %88
%88 = OpLabel
OpLoopMerge %89 %91 None
OpBranch %90
%90 = OpLabel
%92 = OpLoad  %3  %81
%93 = OpULessThan  %9  %92 %6
OpSelectionMerge %94 None
OpBranchConditional %93 %94 %95
%95 = OpLabel
OpBranch %89
%94 = OpLabel
OpBranch %96
%96 = OpLabel
%98 = OpLoad  %3  %81
%100 = OpAccessChain  %99  %79 %98
%101 = OpAtomicLoad  %7  %100 %50 %52
OpStore %82 %101
OpStore %85 %24
OpBranch %102
%102 = OpLabel
OpLoopMerge %103 %105 None
OpBranch %104
%104 = OpLabel
%106 = OpLoad  %9  %85
%107 = OpLogicalNot  %9  %106
OpSelectionMerge %108 None
OpBranchConditional %107 %108 %109
%109 = OpLabel
OpBranch %103
%108 = OpLabel
OpBranch %110
%110 = OpLabel
%112 = OpLoad  %7  %82
%113 = OpIAdd  %7  %112 %80
%115 = OpLoad  %3  %81
%116 = OpLoad  %7  %82
%118 = OpAccessChain  %99  %79 %115
%119 = OpAtomicCompareExchange  %7  %118 %50 %52 %52 %113 %116
%120 = OpIEqual  %9  %119 %116
%117 = OpCompositeConstruct  %11  %119 %120
%121 = OpCompositeExtract  %7  %117 0
OpStore %82 %121
%122 = OpCompositeExtract  %9  %117 1
OpStore %85 %122
OpBranch %111
%111 = OpLabel
OpBranch %105
%105 = OpLabel
OpBranch %102
%103 = OpLabel
OpBranch %97
%97 = OpLabel
OpBranch %91
%91 = OpLabel
%123 = OpLoad  %3  %81
%124 = OpIAdd  %3  %123 %26
OpStore %81 %124
OpBranch %88
%89 = OpLabel
OpReturn
OpFunctionEnd