remap.similar_1b.none.frag
// Module Version 10000
// Generated by (magic number): 80005
// Id's are bound by 91

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main" 58 78 80
                              ExecutionMode 4 OriginUpperLeft
                              Source GLSL 450
                              Name 4  "main"
                              Name 11  "Test1(i1;"
                              Name 10  "bound"
                              Name 14  "Test2(i1;"
                              Name 13  "bound"
                              Name 17  "r"
                              Name 19  "x"
                              Name 49  "param"
                              Name 58  "ini4"
                              Name 78  "outf4"
                              Name 80  "inf"
                              Name 83  "param"
                              Name 87  "param"
                              Decorate 58(ini4) Flat
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeInt 32 1
               7:             TypePointer Function 6(int)
               8:             TypeFloat 32
               9:             TypeFunction 8(float) 7(ptr)
              16:             TypePointer Function 8(float)
              18:    8(float) Constant 0
              20:      6(int) Constant 0
              28:             TypeBool
              30:    8(float) Constant 1056964608
              34:      6(int) Constant 1
              36:    8(float) Constant 1045220557
              43:      6(int) Constant 2
              54:      6(int) Constant 4
              56:             TypeVector 6(int) 4
              57:             TypePointer Input 56(ivec4)
        58(ini4):     57(ptr) Variable Input
              59:             TypeInt 32 0
              60:     59(int) Constant 1
              61:             TypePointer Input 6(int)
              64:     59(int) Constant 2
              69:     59(int) Constant 0
              76:             TypeVector 8(float) 4
              77:             TypePointer Output 76(fvec4)
       78(outf4):     77(ptr) Variable Output
              79:             TypePointer Input 8(float)
         80(inf):     79(ptr) Variable Input
         4(main):           2 Function None 3
               5:             Label
       83(param):      7(ptr) Variable Function
       87(param):      7(ptr) Variable Function
              81:    8(float) Load 80(inf)
              82:      6(int) ConvertFToS 81
                              Store 83(param) 82
              84:    8(float) FunctionCall 11(Test1(i1;) 83(param)
              85:    8(float) Load 80(inf)
              86:      6(int) ConvertFToS 85
                              Store 87(param) 86
              88:    8(float) FunctionCall 14(Test2(i1;) 87(param)
              89:    8(float) FAdd 84 88
              90:   76(fvec4) CompositeConstruct 89 89 89 89
                              Store 78(outf4) 90
                              Return
                              FunctionEnd
   11(Test1(i1;):    8(float) Function None 9
       10(bound):      7(ptr) FunctionParameter
              12:             Label
           17(r):     16(ptr) Variable Function
           19(x):      7(ptr) Variable Function
                              Store 17(r) 18
                              Store 19(x) 20
                              Branch 21
              21:             Label
                              LoopMerge 23 24 None
                              Branch 25
              25:             Label
              26:      6(int) Load 19(x)
              27:      6(int) Load 10(bound)
              29:    28(bool) SLessThan 26 27
                              BranchConditional 29 22 23
              22:               Label
              31:    8(float)   Load 17(r)
              32:    8(float)   FAdd 31 30
                                Store 17(r) 32
                                Branch 24
              24:               Label
              33:      6(int)   Load 19(x)
              35:      6(int)   IAdd 33 34
                                Store 19(x) 35
                                Branch 21
              23:             Label
              37:    8(float) Load 17(r)
              38:    8(float) FAdd 37 36
                              Store 17(r) 38
              39:    8(float) Load 17(r)
                              ReturnValue 39
                              FunctionEnd
   14(Test2(i1;):    8(float) Function None 9
       13(bound):      7(ptr) FunctionParameter
              15:             Label
       49(param):      7(ptr) Variable Function
              42:      6(int) Load 13(bound)
              44:    28(bool) SGreaterThan 42 43
                              SelectionMerge 46 None
                              BranchConditional 44 45 52
              45:               Label
              47:      6(int)   Load 13(bound)
              48:      6(int)   IMul 47 43
                                Store 49(param) 48
              50:    8(float)   FunctionCall 11(Test1(i1;) 49(param)
                                ReturnValue 50
              52:               Label
              53:      6(int)   Load 13(bound)
              55:      6(int)   IMul 53 54
              62:     61(ptr)   AccessChain 58(ini4) 60
              63:      6(int)   Load 62
              65:     61(ptr)   AccessChain 58(ini4) 64
              66:      6(int)   Load 65
              67:      6(int)   IMul 63 66
              68:      6(int)   IAdd 55 67
              70:     61(ptr)   AccessChain 58(ini4) 69
              71:      6(int)   Load 70
              72:      6(int)   IAdd 68 71
              73:    8(float)   ConvertSToF 72
                                ReturnValue 73
              46:             Label
              75:    8(float) Undef
                              ReturnValue 75
                              FunctionEnd
