spv.specConstant.vert
// Module Version 10000
// Generated by (magic number): 8000a
// 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[s216172782];"
                              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 20(color) Location 0
                              Decorate 22(ucol) Location 0
                              Decorate 28(size) Location 1
                              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 53(dupUcol) Location 5
                              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[s216172782];) 47(param)
                              Return
                              FunctionEnd
14(foo(vf4[s216172782];):           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
