spv.volatileAtomic.comp
// Module Version 10000
// Generated by (magic number): 8000a
// Id's are bound by 18

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint GLCompute 4  "main"
                              ExecutionMode 4 LocalSize 1 1 1
                              Source GLSL 450
                              Name 4  "main"
                              Name 8  "D"
                              MemberName 8(D) 0  "d"
                              Name 10  "d"
                              Decorate 7 ArrayStride 4
                              MemberDecorate 8(D) 0 Volatile
                              MemberDecorate 8(D) 0 Coherent
                              MemberDecorate 8(D) 0 Offset 0
                              Decorate 8(D) BufferBlock
                              Decorate 10(d) DescriptorSet 0
                              Decorate 10(d) Binding 3
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeInt 32 0
               7:             TypeRuntimeArray 6(int)
            8(D):             TypeStruct 7
               9:             TypePointer Uniform 8(D)
           10(d):      9(ptr) Variable Uniform
              11:             TypeInt 32 1
              12:     11(int) Constant 0
              13:             TypePointer Uniform 6(int)
              15:      6(int) Constant 0
              16:      6(int) Constant 1
         4(main):           2 Function None 3
               5:             Label
              14:     13(ptr) AccessChain 10(d) 12 12
              17:      6(int) AtomicExchange 14 16 15 15
                              Return
                              FunctionEnd
