hlsl.attribute.expression.comp
Shader version: 500
local_size = (4, 6, 8)
0:? Sequence
0:9  Function Definition: @main( ( temp 4-component vector of float)
0:9    Function Parameters: 
0:?     Sequence
0:11      Sequence
0:11        move second child to first child ( temp int)
0:11          'x' ( temp int)
0:11          Constant:
0:11            0 (const int)
0:11        Loop with condition tested first: Unroll
0:11          Loop Condition
0:11          Compare Less Than ( temp bool)
0:11            'x' ( temp int)
0:11            bound: direct index for structure ( uniform int)
0:11              'anon@0' (layout( row_major std140) uniform block{ uniform int bound})
0:11              Constant:
0:11                0 (const uint)
0:11          No loop body
0:11          Loop Terminal Expression
0:11          Pre-Increment ( temp int)
0:11            'x' ( temp int)
0:14      Branch: Return with expression
0:14        Constant:
0:14          0.000000
0:14          0.000000
0:14          0.000000
0:14          0.000000
0:9  Function Definition: main( ( temp void)
0:9    Function Parameters: 
0:?     Sequence
0:9      move second child to first child ( temp 4-component vector of float)
0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:9        Function Call: @main( ( temp 4-component vector of float)
0:?   Linker Objects
0:?     'anon@0' (layout( row_major std140) uniform block{ uniform int bound})
0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)


Linked compute stage:


Shader version: 500
local_size = (4, 6, 8)
0:? Sequence
0:9  Function Definition: @main( ( temp 4-component vector of float)
0:9    Function Parameters: 
0:?     Sequence
0:11      Sequence
0:11        move second child to first child ( temp int)
0:11          'x' ( temp int)
0:11          Constant:
0:11            0 (const int)
0:11        Loop with condition tested first: Unroll
0:11          Loop Condition
0:11          Compare Less Than ( temp bool)
0:11            'x' ( temp int)
0:11            bound: direct index for structure ( uniform int)
0:11              'anon@0' (layout( row_major std140) uniform block{ uniform int bound})
0:11              Constant:
0:11                0 (const uint)
0:11          No loop body
0:11          Loop Terminal Expression
0:11          Pre-Increment ( temp int)
0:11            'x' ( temp int)
0:14      Branch: Return with expression
0:14        Constant:
0:14          0.000000
0:14          0.000000
0:14          0.000000
0:14          0.000000
0:9  Function Definition: main( ( temp void)
0:9    Function Parameters: 
0:?     Sequence
0:9      move second child to first child ( temp 4-component vector of float)
0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:9        Function Call: @main( ( temp 4-component vector of float)
0:?   Linker Objects
0:?     'anon@0' (layout( row_major std140) uniform block{ uniform int bound})
0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)

// Module Version 10000
// Generated by (magic number): 8000a
// Id's are bound by 39

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint GLCompute 4  "main" 37
                              ExecutionMode 4 LocalSize 4 6 8
                              Source HLSL 500
                              Name 4  "main"
                              Name 9  "@main("
                              Name 13  "x"
                              Name 21  "$Global"
                              MemberName 21($Global) 0  "bound"
                              Name 23  ""
                              Name 37  "@entryPointOutput"
                              MemberDecorate 21($Global) 0 Offset 0
                              Decorate 21($Global) Block
                              Decorate 23 DescriptorSet 0
                              Decorate 23 Binding 0
                              Decorate 37(@entryPointOutput) Location 0
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypeVector 6(float) 4
               8:             TypeFunction 7(fvec4)
              11:             TypeInt 32 1
              12:             TypePointer Function 11(int)
              14:     11(int) Constant 0
     21($Global):             TypeStruct 11(int)
              22:             TypePointer Uniform 21($Global)
              23:     22(ptr) Variable Uniform
              24:             TypePointer Uniform 11(int)
              27:             TypeBool
              30:     11(int) Constant 1
              32:    6(float) Constant 0
              33:    7(fvec4) ConstantComposite 32 32 32 32
              36:             TypePointer Output 7(fvec4)
37(@entryPointOutput):     36(ptr) Variable Output
         4(main):           2 Function None 3
               5:             Label
              38:    7(fvec4) FunctionCall 9(@main()
                              Store 37(@entryPointOutput) 38
                              Return
                              FunctionEnd
       9(@main():    7(fvec4) Function None 8
              10:             Label
           13(x):     12(ptr) Variable Function
                              Store 13(x) 14
                              Branch 15
              15:             Label
                              LoopMerge 17 18 Unroll 
                              Branch 19
              19:             Label
              20:     11(int) Load 13(x)
              25:     24(ptr) AccessChain 23 14
              26:     11(int) Load 25
              28:    27(bool) SLessThan 20 26
                              BranchConditional 28 16 17
              16:               Label
                                Branch 18
              18:               Label
              29:     11(int)   Load 13(x)
              31:     11(int)   IAdd 29 30
                                Store 13(x) 31
                                Branch 15
              17:             Label
                              ReturnValue 33
                              FunctionEnd
