spv.specConstant.vert
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 81

                              Capability Shader
                              Capability Float64
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Vertex 4  "main" 20 22 28 53
                              Source GLSL 400
                              Name 4  "main"
                              Name 9  "arraySize"
                              Name 14  "foo(vf4[s4389];"
                              Name 13  "p"
                              Name 17  "builtin_spec_constant("
                              Name 20  "color"
                              Name 22  "ucol"
                              Name 28  "size"
                              Name 30  "spBool"
                              Name 34  "scale"
                              Name 39  "spDouble"
                              Name 40  "spFloat"
                              Name 47  "param"
                              Name 50  "dupArraySize"
                              Name 53  "dupUcol"
                              Name 60  "spDupBool"
                              Name 63  "dupScale"
                              Name 67  "spDupDouble"
                              Name 68  "spDupFloat"
                              Name 76  "result"
                              Name 77  "gl_MaxImageUnits"
                              Decorate 9(arraySize) SpecId 16
                              Decorate 30(spBool) SpecId 17
                              Decorate 34(scale) SpecId 22
                              Decorate 39(spDouble) SpecId 19
                              Decorate 40(spFloat) SpecId 18
                              Decorate 50(dupArraySize) SpecId 116
                              Decorate 60(spDupBool) SpecId 117
                              Decorate 63(dupScale) SpecId 122
                              Decorate 67(spDupDouble) SpecId 119
                              Decorate 68(spDupFloat) SpecId 118
                              Decorate 77(gl_MaxImageUnits) SpecId 24
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypeVector 6(float) 4
               8:             TypeInt 32 1
    9(arraySize):      8(int) SpecConstant 5
              10:             TypeArray 7(fvec4) 9(arraySize)
              11:             TypePointer Function 10
              12:             TypeFunction 2 11(ptr)
              16:             TypeFunction 8(int)
              19:             TypePointer Output 7(fvec4)
       20(color):     19(ptr) Variable Output
              21:             TypePointer Input 10
        22(ucol):     21(ptr) Variable Input
              23:      8(int) Constant 2
              24:             TypePointer Input 7(fvec4)
              27:             TypePointer Output 8(int)
        28(size):     27(ptr) Variable Output
              29:             TypeBool
      30(spBool):    29(bool) SpecConstantTrue
              33:             TypeInt 32 0
       34(scale):     33(int) SpecConstant 2
              38:             TypeFloat 64
    39(spDouble):38(float64_t) SpecConstant 1413754136 1074340347
     40(spFloat):    6(float) SpecConstant 1078523331
              41:38(float64_t) SpecConstantOp 115 40(spFloat)
50(dupArraySize):      8(int) SpecConstant 12
              51:             TypeArray 7(fvec4) 50(dupArraySize)
              52:             TypePointer Input 51
     53(dupUcol):     52(ptr) Variable Input
   60(spDupBool):    29(bool) SpecConstantTrue
    63(dupScale):     33(int) SpecConstant 2
 67(spDupDouble):38(float64_t) SpecConstant 1413754136 1074340347
  68(spDupFloat):    6(float) SpecConstant 1078523331
              69:38(float64_t) SpecConstantOp 115 68(spDupFloat)
              75:             TypePointer Function 8(int)
77(gl_MaxImageUnits):      8(int) SpecConstant 8
         4(main):           2 Function None 3
               5:             Label
       47(param):     11(ptr) Variable Function
              25:     24(ptr) AccessChain 22(ucol) 23
              26:    7(fvec4) Load 25
                              Store 20(color) 26
                              Store 28(size) 9(arraySize)
                              SelectionMerge 32 None
                              BranchConditional 30(spBool) 31 32
              31:               Label
              35:    6(float)   ConvertUToF 34(scale)
              36:    7(fvec4)   Load 20(color)
              37:    7(fvec4)   VectorTimesScalar 36 35
                                Store 20(color) 37
                                Branch 32
              32:             Label
              42:38(float64_t) FDiv 39(spDouble) 41
              43:    6(float) FConvert 42
              44:    7(fvec4) Load 20(color)
              45:    7(fvec4) CompositeConstruct 43 43 43 43
              46:    7(fvec4) FAdd 44 45
                              Store 20(color) 46
              48:          10 Load 22(ucol)
                              Store 47(param) 48
              49:           2 FunctionCall 14(foo(vf4[s4389];) 47(param)
                              Return
                              FunctionEnd
14(foo(vf4[s4389];):           2 Function None 12
           13(p):     11(ptr) FunctionParameter
              15:             Label
              54:     24(ptr) AccessChain 53(dupUcol) 23
              55:    7(fvec4) Load 54
              56:    7(fvec4) Load 20(color)
              57:    7(fvec4) FAdd 56 55
                              Store 20(color) 57
              58:      8(int) Load 28(size)
              59:      8(int) IAdd 58 50(dupArraySize)
                              Store 28(size) 59
                              SelectionMerge 62 None
                              BranchConditional 60(spDupBool) 61 62
              61:               Label
              64:    6(float)   ConvertUToF 63(dupScale)
              65:    7(fvec4)   Load 20(color)
              66:    7(fvec4)   VectorTimesScalar 65 64
                                Store 20(color) 66
                                Branch 62
              62:             Label
              70:38(float64_t) FDiv 67(spDupDouble) 69
              71:    6(float) FConvert 70
              72:    7(fvec4) Load 20(color)
              73:    7(fvec4) CompositeConstruct 71 71 71 71
              74:    7(fvec4) FAdd 72 73
                              Store 20(color) 74
                              Return
                              FunctionEnd
17(builtin_spec_constant():      8(int) Function None 16
              18:             Label
      76(result):     75(ptr) Variable Function
                              Store 76(result) 77(gl_MaxImageUnits)
              78:      8(int) Load 76(result)
                              ReturnValue 78
                              FunctionEnd
