remap.similar_1a.none.frag
// Module Version 10000
// Generated by (magic number): 80006
// Id's are bound by 86

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main" 53 73 75
                              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 44  "param"
                              Name 53  "ini4"
                              Name 73  "outf4"
                              Name 75  "inf"
                              Name 78  "param"
                              Name 82  "param"
                              Decorate 53(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
              40:      6(int) Constant 2
              51:             TypeVector 6(int) 4
              52:             TypePointer Input 51(ivec4)
        53(ini4):     52(ptr) Variable Input
              54:             TypeInt 32 0
              55:     54(int) Constant 1
              56:             TypePointer Input 6(int)
              59:     54(int) Constant 2
              64:     54(int) Constant 0
              71:             TypeVector 8(float) 4
              72:             TypePointer Output 71(fvec4)
       73(outf4):     72(ptr) Variable Output
              74:             TypePointer Input 8(float)
         75(inf):     74(ptr) Variable Input
         4(main):           2 Function None 3
               5:             Label
       78(param):      7(ptr) Variable Function
       82(param):      7(ptr) Variable Function
              76:    8(float) Load 75(inf)
              77:      6(int) ConvertFToS 76
                              Store 78(param) 77
              79:    8(float) FunctionCall 11(Test1(i1;) 78(param)
              80:    8(float) Load 75(inf)
              81:      6(int) ConvertFToS 80
                              Store 82(param) 81
              83:    8(float) FunctionCall 14(Test2(i1;) 82(param)
              84:    8(float) FAdd 79 83
              85:   71(fvec4) CompositeConstruct 84 84 84 84
                              Store 73(outf4) 85
                              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
              36:    8(float) Load 17(r)
                              ReturnValue 36
                              FunctionEnd
   14(Test2(i1;):    8(float) Function None 9
       13(bound):      7(ptr) FunctionParameter
              15:             Label
       44(param):      7(ptr) Variable Function
              39:      6(int) Load 13(bound)
              41:    28(bool) SGreaterThan 39 40
                              SelectionMerge 43 None
                              BranchConditional 41 42 48
              42:               Label
              45:      6(int)   Load 13(bound)
                                Store 44(param) 45
              46:    8(float)   FunctionCall 11(Test1(i1;) 44(param)
                                ReturnValue 46
              48:               Label
              49:      6(int)   Load 13(bound)
              50:      6(int)   IMul 49 40
              57:     56(ptr)   AccessChain 53(ini4) 55
              58:      6(int)   Load 57
              60:     56(ptr)   AccessChain 53(ini4) 59
              61:      6(int)   Load 60
              62:      6(int)   IMul 58 61
              63:      6(int)   IAdd 50 62
              65:     56(ptr)   AccessChain 53(ini4) 64
              66:      6(int)   Load 65
              67:      6(int)   IAdd 63 66
              68:    8(float)   ConvertSToF 67
                                ReturnValue 68
              43:             Label
              70:    8(float) Undef
                              ReturnValue 70
                              FunctionEnd
