remap.similar_1b.none.frag
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.

// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 87

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