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