Fix #857: Convert uniform int to local bool for struct alias assignment.

This was done for one direction, but not both directions, so this commit
picks up the other direction.
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index f8722fc..31f7aab 100755
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -2590,20 +2590,22 @@
         if (builder.isScalarType(nominalTypeId)) {
             // Conversion for bool
             spv::Id boolType = builder.makeBoolType();
-            if (nominalTypeId != boolType) {
-                spv::Id zero = builder.makeUintConstant(0);
-                spv::Id one  = builder.makeUintConstant(1);
-                rvalue = builder.createTriOp(spv::OpSelect, nominalTypeId, rvalue, one, zero);
-            }
+            if (nominalTypeId != boolType)
+                rvalue = builder.createTriOp(spv::OpSelect, nominalTypeId, rvalue, builder.makeUintConstant(1),
+                                                                                   builder.makeUintConstant(0));
+            else if (builder.getTypeId(rvalue) != boolType)
+                rvalue = builder.createBinOp(spv::OpINotEqual, boolType, rvalue, builder.makeUintConstant(0));
         } else if (builder.isVectorType(nominalTypeId)) {
             // Conversion for bvec
             int vecSize = builder.getNumTypeComponents(nominalTypeId);
             spv::Id bvecType = builder.makeVectorType(builder.makeBoolType(), vecSize);
-            if (nominalTypeId != bvecType) {
-                spv::Id zero = makeSmearedConstant(builder.makeUintConstant(0), vecSize);
-                spv::Id one  = makeSmearedConstant(builder.makeUintConstant(1), vecSize);
-                rvalue = builder.createTriOp(spv::OpSelect, nominalTypeId, rvalue, one, zero);
-            }
+            if (nominalTypeId != bvecType)
+                rvalue = builder.createTriOp(spv::OpSelect, nominalTypeId, rvalue,
+                                             makeSmearedConstant(builder.makeUintConstant(1), vecSize),
+                                             makeSmearedConstant(builder.makeUintConstant(0), vecSize));
+            else if (builder.getTypeId(rvalue) != bvecType)
+                rvalue = builder.createBinOp(spv::OpINotEqual, bvecType, rvalue,
+                                             makeSmearedConstant(builder.makeUintConstant(0), vecSize));
         }
     }
 
diff --git a/Test/baseResults/hlsl.structbuffer.frag.out b/Test/baseResults/hlsl.structbuffer.frag.out
index 634c1b8..72fba3b 100644
--- a/Test/baseResults/hlsl.structbuffer.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.frag.out
@@ -189,12 +189,12 @@
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 94
+// Id's are bound by 96
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 87 90
+                              EntryPoint Fragment 4  "main" 89 92
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -212,15 +212,15 @@
                               Name 21  "sbuf"
                               MemberName 21(sbuf) 0  "@data"
                               Name 23  "sbuf"
-                              Name 40  "size"
-                              Name 42  "stride"
-                              Name 57  "sbuf2"
-                              MemberName 57(sbuf2) 0  "@data"
+                              Name 43  "size"
+                              Name 45  "stride"
                               Name 59  "sbuf2"
-                              Name 85  "pos"
+                              MemberName 59(sbuf2) 0  "@data"
+                              Name 61  "sbuf2"
                               Name 87  "pos"
-                              Name 90  "@entryPointOutput"
-                              Name 91  "param"
+                              Name 89  "pos"
+                              Name 92  "@entryPointOutput"
+                              Name 93  "param"
                               MemberDecorate 19(sb_t) 0 NonWritable
                               MemberDecorate 19(sb_t) 0 Offset 0
                               MemberDecorate 19(sb_t) 1 NonWritable
@@ -233,13 +233,13 @@
                               Decorate 21(sbuf) BufferBlock
                               Decorate 23(sbuf) DescriptorSet 0
                               Decorate 23(sbuf) Binding 10
-                              Decorate 56 ArrayStride 4
-                              MemberDecorate 57(sbuf2) 0 NonWritable
-                              MemberDecorate 57(sbuf2) 0 Offset 0
-                              Decorate 57(sbuf2) BufferBlock
-                              Decorate 59(sbuf2) DescriptorSet 0
-                              Decorate 87(pos) Location 0
-                              Decorate 90(@entryPointOutput) Location 0
+                              Decorate 58 ArrayStride 4
+                              MemberDecorate 59(sbuf2) 0 NonWritable
+                              MemberDecorate 59(sbuf2) 0 Offset 0
+                              Decorate 59(sbuf2) BufferBlock
+                              Decorate 61(sbuf2) DescriptorSet 0
+                              Decorate 89(pos) Location 0
+                              Decorate 92(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -261,41 +261,41 @@
               27:             TypePointer Uniform 19(sb_t)
               31:             TypePointer Function 14(fvec3)
               34:     24(int) Constant 1
-              35:             TypePointer Function 15(bool)
-              38:     24(int) Constant 2
-              43:      6(int) Constant 32
-              45:             TypePointer Uniform 6(int)
-              48:      6(int) Constant 0
-              53:             TypePointer Uniform 14(fvec3)
-              56:             TypeRuntimeArray 8(float)
-       57(sbuf2):             TypeStruct 56
-              58:             TypePointer Uniform 57(sbuf2)
-       59(sbuf2):     58(ptr) Variable Uniform
-              61:             TypePointer Uniform 8(float)
-              66:    8(float) Constant 0
-              73:             TypePointer Function 8(float)
-              86:             TypePointer Input 6(int)
-         87(pos):     86(ptr) Variable Input
-              89:             TypePointer Output 9(fvec4)
-90(@entryPointOutput):     89(ptr) Variable Output
+              35:      6(int) Constant 0
+              37:             TypePointer Function 15(bool)
+              40:     24(int) Constant 2
+              46:      6(int) Constant 32
+              48:             TypePointer Uniform 6(int)
+              55:             TypePointer Uniform 14(fvec3)
+              58:             TypeRuntimeArray 8(float)
+       59(sbuf2):             TypeStruct 58
+              60:             TypePointer Uniform 59(sbuf2)
+       61(sbuf2):     60(ptr) Variable Uniform
+              63:             TypePointer Uniform 8(float)
+              68:    8(float) Constant 0
+              75:             TypePointer Function 8(float)
+              88:             TypePointer Input 6(int)
+         89(pos):     88(ptr) Variable Input
+              91:             TypePointer Output 9(fvec4)
+92(@entryPointOutput):     91(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-         85(pos):      7(ptr) Variable Function
-       91(param):      7(ptr) Variable Function
-              88:      6(int) Load 87(pos)
-                              Store 85(pos) 88
-              92:      6(int) Load 85(pos)
-                              Store 91(param) 92
-              93:    9(fvec4) FunctionCall 12(@main(u1;) 91(param)
-                              Store 90(@entryPointOutput) 93
+         87(pos):      7(ptr) Variable Function
+       93(param):      7(ptr) Variable Function
+              90:      6(int) Load 89(pos)
+                              Store 87(pos) 90
+              94:      6(int) Load 87(pos)
+                              Store 93(param) 94
+              95:    9(fvec4) FunctionCall 12(@main(u1;) 93(param)
+                              Store 92(@entryPointOutput) 95
                               Return
                               FunctionEnd
    12(@main(u1;):    9(fvec4) Function None 10
          11(pos):      7(ptr) FunctionParameter
               13:             Label
       18(mydata):     17(ptr) Variable Function
-        40(size):      7(ptr) Variable Function
-      42(stride):      7(ptr) Variable Function
+        43(size):      7(ptr) Variable Function
+      45(stride):      7(ptr) Variable Function
               26:      6(int) Load 11(pos)
               28:     27(ptr) AccessChain 23(sbuf) 25 26
               29:    19(sb_t) Load 28
@@ -303,46 +303,48 @@
               32:     31(ptr) AccessChain 18(mydata) 25
                               Store 32 30
               33:      6(int) CompositeExtract 29 1
-              36:     35(ptr) AccessChain 18(mydata) 34
-                              Store 36 33
-              37:      6(int) CompositeExtract 29 2
-              39:     35(ptr) AccessChain 18(mydata) 38
-                              Store 39 37
-              41:     24(int) ArrayLength 23(sbuf) 0
-                              Store 40(size) 41
-                              Store 42(stride) 43
-              44:      6(int) Load 11(pos)
-              46:     45(ptr) AccessChain 23(sbuf) 25 44 34
-              47:      6(int) Load 46
-              49:    15(bool) INotEqual 47 48
-                              SelectionMerge 51 None
-                              BranchConditional 49 50 72
-              50:               Label
-              52:      6(int)   Load 11(pos)
-              54:     53(ptr)   AccessChain 23(sbuf) 25 52 25
-              55:   14(fvec3)   Load 54
-              60:      6(int)   Load 11(pos)
-              62:     61(ptr)   AccessChain 59(sbuf2) 25 60
-              63:    8(float)   Load 62
-              64:   14(fvec3)   CompositeConstruct 63 63 63
-              65:   14(fvec3)   FAdd 55 64
-              67:    8(float)   CompositeExtract 65 0
-              68:    8(float)   CompositeExtract 65 1
-              69:    8(float)   CompositeExtract 65 2
-              70:    9(fvec4)   CompositeConstruct 67 68 69 66
-                                ReturnValue 70
-              72:               Label
-              74:     73(ptr)   AccessChain 18(mydata) 25 48
-              75:    8(float)   Load 74
-              76:      6(int)   Load 40(size)
-              77:    8(float)   ConvertUToF 76
-              78:    8(float)   FAdd 75 77
-              79:      6(int)   Load 42(stride)
-              80:    8(float)   ConvertUToF 79
-              81:    8(float)   FAdd 78 80
-              82:    9(fvec4)   CompositeConstruct 81 81 81 81
-                                ReturnValue 82
-              51:             Label
-              84:    9(fvec4) Undef
-                              ReturnValue 84
+              36:    15(bool) INotEqual 33 35
+              38:     37(ptr) AccessChain 18(mydata) 34
+                              Store 38 36
+              39:      6(int) CompositeExtract 29 2
+              41:    15(bool) INotEqual 39 35
+              42:     37(ptr) AccessChain 18(mydata) 40
+                              Store 42 41
+              44:     24(int) ArrayLength 23(sbuf) 0
+                              Store 43(size) 44
+                              Store 45(stride) 46
+              47:      6(int) Load 11(pos)
+              49:     48(ptr) AccessChain 23(sbuf) 25 47 34
+              50:      6(int) Load 49
+              51:    15(bool) INotEqual 50 35
+                              SelectionMerge 53 None
+                              BranchConditional 51 52 74
+              52:               Label
+              54:      6(int)   Load 11(pos)
+              56:     55(ptr)   AccessChain 23(sbuf) 25 54 25
+              57:   14(fvec3)   Load 56
+              62:      6(int)   Load 11(pos)
+              64:     63(ptr)   AccessChain 61(sbuf2) 25 62
+              65:    8(float)   Load 64
+              66:   14(fvec3)   CompositeConstruct 65 65 65
+              67:   14(fvec3)   FAdd 57 66
+              69:    8(float)   CompositeExtract 67 0
+              70:    8(float)   CompositeExtract 67 1
+              71:    8(float)   CompositeExtract 67 2
+              72:    9(fvec4)   CompositeConstruct 69 70 71 68
+                                ReturnValue 72
+              74:               Label
+              76:     75(ptr)   AccessChain 18(mydata) 25 35
+              77:    8(float)   Load 76
+              78:      6(int)   Load 43(size)
+              79:    8(float)   ConvertUToF 78
+              80:    8(float)   FAdd 77 79
+              81:      6(int)   Load 45(stride)
+              82:    8(float)   ConvertUToF 81
+              83:    8(float)   FAdd 80 82
+              84:    9(fvec4)   CompositeConstruct 83 83 83 83
+                                ReturnValue 84
+              53:             Label
+              86:    9(fvec4) Undef
+                              ReturnValue 86
                               FunctionEnd
diff --git a/Test/baseResults/spv.boolInBlock.frag.out b/Test/baseResults/spv.boolInBlock.frag.out
index 2181f26..4742dad 100644
--- a/Test/baseResults/spv.boolInBlock.frag.out
+++ b/Test/baseResults/spv.boolInBlock.frag.out
@@ -53,9 +53,9 @@
               29:     6(bool) ConstantFalse
               30:    9(bvec2) ConstantComposite 29 29
               31:     22(int) Constant 0
-              32:   23(ivec2) ConstantComposite 31 31
-              33:     22(int) Constant 1
-              34:   23(ivec2) ConstantComposite 33 33
+              32:     22(int) Constant 1
+              33:   23(ivec2) ConstantComposite 31 31
+              34:   23(ivec2) ConstantComposite 32 32
               36:             TypePointer Uniform 23(ivec2)
               38:             TypeVector 22(int) 4
      39(Uniform):             TypeStruct 38(ivec4)
@@ -73,7 +73,7 @@
                5:             Label
        62(param):      8(ptr) Variable Function
        67(param):     10(ptr) Variable Function
-              35:   23(ivec2) Select 30 34 32
+              35:   23(ivec2) Select 30 34 33
               37:     36(ptr) AccessChain 26 28
                               Store 37 35
               43:     42(ptr) AccessChain 41 28
@@ -88,7 +88,7 @@
               51:     22(int)   CompositeExtract 50 0
               52:     6(bool)   INotEqual 51 31
               53:    9(bvec2)   CompositeConstruct 52 52
-              54:   23(ivec2)   Select 53 34 32
+              54:   23(ivec2)   Select 53 34 33
               55:     36(ptr)   AccessChain 26 28
                                 Store 55 54
                                 Branch 48
@@ -106,7 +106,7 @@
                                 Store 62(param) 66
               68:           2   FunctionCall 14(foo(vb4;vb2;) 62(param) 67(param)
               69:    9(bvec2)   Load 67(param)
-              70:   23(ivec2)   Select 69 34 32
+              70:   23(ivec2)   Select 69 34 33
               71:     36(ptr)   AccessChain 26 28
                                 Store 71 70
                                 Branch 61
diff --git a/Test/baseResults/spv.multiStruct.comp.out b/Test/baseResults/spv.multiStruct.comp.out
index f8c0eea..5eebe40 100755
--- a/Test/baseResults/spv.multiStruct.comp.out
+++ b/Test/baseResults/spv.multiStruct.comp.out
@@ -3,7 +3,7 @@
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 157
+// Id's are bound by 161
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
@@ -22,31 +22,31 @@
                               Name 17  "SSBO0"
                               MemberName 17(SSBO0) 0  "a"
                               Name 19  "inBuf"
-                              Name 37  "SSBO1"
-                              MemberName 37(SSBO1) 0  "b"
-                              Name 39  "outBuf"
-                              Name 57  "MyStruct"
-                              MemberName 57(MyStruct) 0  "foo"
-                              MemberName 57(MyStruct) 1  "sb"
-                              Name 58  "UBO"
-                              MemberName 58(UBO) 0  "c"
-                              Name 60  "uBuf"
-                              Name 84  "Nested"
-                              MemberName 84(Nested) 0  "f"
-                              MemberName 84(Nested) 1  "S"
-                              Name 86  "n"
-                              Name 88  "Nested"
-                              MemberName 88(Nested) 0  "f"
-                              MemberName 88(Nested) 1  "S"
-                              Name 89  "UBON"
-                              MemberName 89(UBON) 0  "N1"
-                              Name 91  "uBufN"
-                              Name 122  "Nested"
-                              MemberName 122(Nested) 0  "f"
-                              MemberName 122(Nested) 1  "S"
-                              Name 123  "SSBO1N"
-                              MemberName 123(SSBO1N) 0  "N2"
-                              Name 125  "outBufN"
+                              Name 39  "SSBO1"
+                              MemberName 39(SSBO1) 0  "b"
+                              Name 41  "outBuf"
+                              Name 58  "MyStruct"
+                              MemberName 58(MyStruct) 0  "foo"
+                              MemberName 58(MyStruct) 1  "sb"
+                              Name 59  "UBO"
+                              MemberName 59(UBO) 0  "c"
+                              Name 61  "uBuf"
+                              Name 86  "Nested"
+                              MemberName 86(Nested) 0  "f"
+                              MemberName 86(Nested) 1  "S"
+                              Name 88  "n"
+                              Name 90  "Nested"
+                              MemberName 90(Nested) 0  "f"
+                              MemberName 90(Nested) 1  "S"
+                              Name 91  "UBON"
+                              MemberName 91(UBON) 0  "N1"
+                              Name 93  "uBufN"
+                              Name 126  "Nested"
+                              MemberName 126(Nested) 0  "f"
+                              MemberName 126(Nested) 1  "S"
+                              Name 127  "SSBO1N"
+                              MemberName 127(SSBO1N) 0  "N2"
+                              Name 129  "outBufN"
                               Decorate 15 ArrayStride 8
                               MemberDecorate 16(MyStruct) 0 Offset 0
                               MemberDecorate 16(MyStruct) 1 Offset 16
@@ -54,31 +54,31 @@
                               Decorate 17(SSBO0) BufferBlock
                               Decorate 19(inBuf) DescriptorSet 0
                               Decorate 19(inBuf) Binding 0
-                              MemberDecorate 37(SSBO1) 0 Offset 0
-                              Decorate 37(SSBO1) BufferBlock
-                              Decorate 39(outBuf) DescriptorSet 0
-                              Decorate 39(outBuf) Binding 1
-                              Decorate 56 ArrayStride 16
-                              MemberDecorate 57(MyStruct) 0 Offset 0
-                              MemberDecorate 57(MyStruct) 1 Offset 32
-                              MemberDecorate 58(UBO) 0 Offset 0
-                              Decorate 58(UBO) Block
-                              Decorate 60(uBuf) DescriptorSet 0
-                              Decorate 60(uBuf) Binding 2
-                              Decorate 87 ArrayStride 48
-                              MemberDecorate 88(Nested) 0 Offset 0
-                              MemberDecorate 88(Nested) 1 Offset 16
-                              MemberDecorate 89(UBON) 0 Offset 0
-                              Decorate 89(UBON) Block
-                              Decorate 91(uBufN) DescriptorSet 0
-                              Decorate 91(uBufN) Binding 2
-                              Decorate 121 ArrayStride 24
-                              MemberDecorate 122(Nested) 0 Offset 0
-                              MemberDecorate 122(Nested) 1 Offset 8
-                              MemberDecorate 123(SSBO1N) 0 Offset 0
-                              Decorate 123(SSBO1N) BufferBlock
-                              Decorate 125(outBufN) DescriptorSet 0
-                              Decorate 125(outBufN) Binding 1
+                              MemberDecorate 39(SSBO1) 0 Offset 0
+                              Decorate 39(SSBO1) BufferBlock
+                              Decorate 41(outBuf) DescriptorSet 0
+                              Decorate 41(outBuf) Binding 1
+                              Decorate 57 ArrayStride 16
+                              MemberDecorate 58(MyStruct) 0 Offset 0
+                              MemberDecorate 58(MyStruct) 1 Offset 32
+                              MemberDecorate 59(UBO) 0 Offset 0
+                              Decorate 59(UBO) Block
+                              Decorate 61(uBuf) DescriptorSet 0
+                              Decorate 61(uBuf) Binding 2
+                              Decorate 89 ArrayStride 48
+                              MemberDecorate 90(Nested) 0 Offset 0
+                              MemberDecorate 90(Nested) 1 Offset 16
+                              MemberDecorate 91(UBON) 0 Offset 0
+                              Decorate 91(UBON) Block
+                              Decorate 93(uBufN) DescriptorSet 0
+                              Decorate 93(uBufN) Binding 2
+                              Decorate 125 ArrayStride 24
+                              MemberDecorate 126(Nested) 0 Offset 0
+                              MemberDecorate 126(Nested) 1 Offset 8
+                              MemberDecorate 127(SSBO1N) 0 Offset 0
+                              Decorate 127(SSBO1N) BufferBlock
+                              Decorate 129(outBufN) DescriptorSet 0
+                              Decorate 129(outBufN) Binding 1
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -100,44 +100,44 @@
               26:             TypePointer Function 10
               29:             TypePointer Function 7(fvec2)
               32:     20(int) Constant 1
-              35:             TypePointer Function 11(bool)
-       37(SSBO1):             TypeStruct 16(MyStruct)
-              38:             TypePointer Uniform 37(SSBO1)
-      39(outBuf):     38(ptr) Variable Uniform
-              43:             TypePointer Uniform 15
-              46:             TypePointer Uniform 7(fvec2)
-              51:      8(int) Constant 0
-              52:      8(int) Constant 1
-              54:             TypePointer Uniform 8(int)
-              56:             TypeArray 7(fvec2) 9
-    57(MyStruct):             TypeStruct 56 8(int)
-         58(UBO):             TypeStruct 57(MyStruct)
-              59:             TypePointer Uniform 58(UBO)
-        60(uBuf):     59(ptr) Variable Uniform
-              61:             TypePointer Uniform 57(MyStruct)
-              83:             TypeArray 12(MyStruct) 9
-      84(Nested):             TypeStruct 6(float) 83
-              85:             TypePointer Function 84(Nested)
-              87:             TypeArray 57(MyStruct) 9
-      88(Nested):             TypeStruct 6(float) 87
-        89(UBON):             TypeStruct 88(Nested)
-              90:             TypePointer Uniform 89(UBON)
-       91(uBufN):     90(ptr) Variable Uniform
-              92:             TypePointer Uniform 88(Nested)
-              96:             TypePointer Function 6(float)
-              99:             TypePointer Function 83
-             121:             TypeArray 16(MyStruct) 9
-     122(Nested):             TypeStruct 6(float) 121
-     123(SSBO1N):             TypeStruct 122(Nested)
-             124:             TypePointer Uniform 123(SSBO1N)
-    125(outBufN):    124(ptr) Variable Uniform
-             127:             TypePointer Uniform 122(Nested)
-             130:             TypePointer Uniform 6(float)
-             133:             TypePointer Uniform 121
+              35:      8(int) Constant 0
+              37:             TypePointer Function 11(bool)
+       39(SSBO1):             TypeStruct 16(MyStruct)
+              40:             TypePointer Uniform 39(SSBO1)
+      41(outBuf):     40(ptr) Variable Uniform
+              45:             TypePointer Uniform 15
+              48:             TypePointer Uniform 7(fvec2)
+              53:      8(int) Constant 1
+              55:             TypePointer Uniform 8(int)
+              57:             TypeArray 7(fvec2) 9
+    58(MyStruct):             TypeStruct 57 8(int)
+         59(UBO):             TypeStruct 58(MyStruct)
+              60:             TypePointer Uniform 59(UBO)
+        61(uBuf):     60(ptr) Variable Uniform
+              62:             TypePointer Uniform 58(MyStruct)
+              85:             TypeArray 12(MyStruct) 9
+      86(Nested):             TypeStruct 6(float) 85
+              87:             TypePointer Function 86(Nested)
+              89:             TypeArray 58(MyStruct) 9
+      90(Nested):             TypeStruct 6(float) 89
+        91(UBON):             TypeStruct 90(Nested)
+              92:             TypePointer Uniform 91(UBON)
+       93(uBufN):     92(ptr) Variable Uniform
+              94:             TypePointer Uniform 90(Nested)
+              98:             TypePointer Function 6(float)
+             101:             TypePointer Function 85
+             125:             TypeArray 16(MyStruct) 9
+     126(Nested):             TypeStruct 6(float) 125
+     127(SSBO1N):             TypeStruct 126(Nested)
+             128:             TypePointer Uniform 127(SSBO1N)
+    129(outBufN):    128(ptr) Variable Uniform
+             131:             TypePointer Uniform 126(Nested)
+             134:             TypePointer Uniform 6(float)
+             137:             TypePointer Uniform 125
          4(main):           2 Function None 3
                5:             Label
            14(t):     13(ptr) Variable Function
-           86(n):     85(ptr) Variable Function
+           88(n):     87(ptr) Variable Function
               23:     22(ptr) AccessChain 19(inBuf) 21
               24:16(MyStruct) Load 23
               25:          15 CompositeExtract 24 0
@@ -149,116 +149,120 @@
               33:     29(ptr) AccessChain 27 32
                               Store 33 31
               34:      8(int) CompositeExtract 24 1
-              36:     35(ptr) AccessChain 14(t) 32
-                              Store 36 34
-              40:12(MyStruct) Load 14(t)
-              41:     22(ptr) AccessChain 39(outBuf) 21
-              42:          10 CompositeExtract 40 0
-              44:     43(ptr) AccessChain 41 21
-              45:    7(fvec2) CompositeExtract 42 0
-              47:     46(ptr) AccessChain 44 21
-                              Store 47 45
-              48:    7(fvec2) CompositeExtract 42 1
-              49:     46(ptr) AccessChain 44 32
-                              Store 49 48
-              50:    11(bool) CompositeExtract 40 1
-              53:      8(int) Select 50 52 51
-              55:     54(ptr) AccessChain 41 32
-                              Store 55 53
-              62:     61(ptr) AccessChain 60(uBuf) 21
-              63:57(MyStruct) Load 62
-              64:          56 CompositeExtract 63 0
-              65:     26(ptr) AccessChain 14(t) 21
-              66:    7(fvec2) CompositeExtract 64 0
-              67:     29(ptr) AccessChain 65 21
-                              Store 67 66
-              68:    7(fvec2) CompositeExtract 64 1
-              69:     29(ptr) AccessChain 65 32
-                              Store 69 68
-              70:      8(int) CompositeExtract 63 1
-              71:     35(ptr) AccessChain 14(t) 32
-                              Store 71 70
-              72:12(MyStruct) Load 14(t)
-              73:     22(ptr) AccessChain 39(outBuf) 21
-              74:          10 CompositeExtract 72 0
-              75:     43(ptr) AccessChain 73 21
-              76:    7(fvec2) CompositeExtract 74 0
-              77:     46(ptr) AccessChain 75 21
-                              Store 77 76
-              78:    7(fvec2) CompositeExtract 74 1
-              79:     46(ptr) AccessChain 75 32
+              36:    11(bool) INotEqual 34 35
+              38:     37(ptr) AccessChain 14(t) 32
+                              Store 38 36
+              42:12(MyStruct) Load 14(t)
+              43:     22(ptr) AccessChain 41(outBuf) 21
+              44:          10 CompositeExtract 42 0
+              46:     45(ptr) AccessChain 43 21
+              47:    7(fvec2) CompositeExtract 44 0
+              49:     48(ptr) AccessChain 46 21
+                              Store 49 47
+              50:    7(fvec2) CompositeExtract 44 1
+              51:     48(ptr) AccessChain 46 32
+                              Store 51 50
+              52:    11(bool) CompositeExtract 42 1
+              54:      8(int) Select 52 53 35
+              56:     55(ptr) AccessChain 43 32
+                              Store 56 54
+              63:     62(ptr) AccessChain 61(uBuf) 21
+              64:58(MyStruct) Load 63
+              65:          57 CompositeExtract 64 0
+              66:     26(ptr) AccessChain 14(t) 21
+              67:    7(fvec2) CompositeExtract 65 0
+              68:     29(ptr) AccessChain 66 21
+                              Store 68 67
+              69:    7(fvec2) CompositeExtract 65 1
+              70:     29(ptr) AccessChain 66 32
+                              Store 70 69
+              71:      8(int) CompositeExtract 64 1
+              72:    11(bool) INotEqual 71 35
+              73:     37(ptr) AccessChain 14(t) 32
+                              Store 73 72
+              74:12(MyStruct) Load 14(t)
+              75:     22(ptr) AccessChain 41(outBuf) 21
+              76:          10 CompositeExtract 74 0
+              77:     45(ptr) AccessChain 75 21
+              78:    7(fvec2) CompositeExtract 76 0
+              79:     48(ptr) AccessChain 77 21
                               Store 79 78
-              80:    11(bool) CompositeExtract 72 1
-              81:      8(int) Select 80 52 51
-              82:     54(ptr) AccessChain 73 32
-                              Store 82 81
-              93:     92(ptr) AccessChain 91(uBufN) 21
-              94:  88(Nested) Load 93
-              95:    6(float) CompositeExtract 94 0
-              97:     96(ptr) AccessChain 86(n) 21
-                              Store 97 95
-              98:          87 CompositeExtract 94 1
-             100:     99(ptr) AccessChain 86(n) 32
-             101:57(MyStruct) CompositeExtract 98 0
-             102:     13(ptr) AccessChain 100 21
-             103:          56 CompositeExtract 101 0
-             104:     26(ptr) AccessChain 102 21
-             105:    7(fvec2) CompositeExtract 103 0
-             106:     29(ptr) AccessChain 104 21
-                              Store 106 105
-             107:    7(fvec2) CompositeExtract 103 1
-             108:     29(ptr) AccessChain 104 32
+              80:    7(fvec2) CompositeExtract 76 1
+              81:     48(ptr) AccessChain 77 32
+                              Store 81 80
+              82:    11(bool) CompositeExtract 74 1
+              83:      8(int) Select 82 53 35
+              84:     55(ptr) AccessChain 75 32
+                              Store 84 83
+              95:     94(ptr) AccessChain 93(uBufN) 21
+              96:  90(Nested) Load 95
+              97:    6(float) CompositeExtract 96 0
+              99:     98(ptr) AccessChain 88(n) 21
+                              Store 99 97
+             100:          89 CompositeExtract 96 1
+             102:    101(ptr) AccessChain 88(n) 32
+             103:58(MyStruct) CompositeExtract 100 0
+             104:     13(ptr) AccessChain 102 21
+             105:          57 CompositeExtract 103 0
+             106:     26(ptr) AccessChain 104 21
+             107:    7(fvec2) CompositeExtract 105 0
+             108:     29(ptr) AccessChain 106 21
                               Store 108 107
-             109:      8(int) CompositeExtract 101 1
-             110:     35(ptr) AccessChain 102 32
+             109:    7(fvec2) CompositeExtract 105 1
+             110:     29(ptr) AccessChain 106 32
                               Store 110 109
-             111:57(MyStruct) CompositeExtract 98 1
-             112:     13(ptr) AccessChain 100 32
-             113:          56 CompositeExtract 111 0
-             114:     26(ptr) AccessChain 112 21
-             115:    7(fvec2) CompositeExtract 113 0
-             116:     29(ptr) AccessChain 114 21
-                              Store 116 115
-             117:    7(fvec2) CompositeExtract 113 1
-             118:     29(ptr) AccessChain 114 32
-                              Store 118 117
-             119:      8(int) CompositeExtract 111 1
-             120:     35(ptr) AccessChain 112 32
-                              Store 120 119
-             126:  84(Nested) Load 86(n)
-             128:    127(ptr) AccessChain 125(outBufN) 21
-             129:    6(float) CompositeExtract 126 0
-             131:    130(ptr) AccessChain 128 21
-                              Store 131 129
-             132:          83 CompositeExtract 126 1
-             134:    133(ptr) AccessChain 128 32
-             135:12(MyStruct) CompositeExtract 132 0
-             136:     22(ptr) AccessChain 134 21
-             137:          10 CompositeExtract 135 0
-             138:     43(ptr) AccessChain 136 21
-             139:    7(fvec2) CompositeExtract 137 0
-             140:     46(ptr) AccessChain 138 21
-                              Store 140 139
-             141:    7(fvec2) CompositeExtract 137 1
-             142:     46(ptr) AccessChain 138 32
-                              Store 142 141
-             143:    11(bool) CompositeExtract 135 1
-             144:      8(int) Select 143 52 51
-             145:     54(ptr) AccessChain 136 32
-                              Store 145 144
-             146:12(MyStruct) CompositeExtract 132 1
-             147:     22(ptr) AccessChain 134 32
-             148:          10 CompositeExtract 146 0
-             149:     43(ptr) AccessChain 147 21
-             150:    7(fvec2) CompositeExtract 148 0
-             151:     46(ptr) AccessChain 149 21
-                              Store 151 150
-             152:    7(fvec2) CompositeExtract 148 1
-             153:     46(ptr) AccessChain 149 32
-                              Store 153 152
-             154:    11(bool) CompositeExtract 146 1
-             155:      8(int) Select 154 52 51
-             156:     54(ptr) AccessChain 147 32
-                              Store 156 155
+             111:      8(int) CompositeExtract 103 1
+             112:    11(bool) INotEqual 111 35
+             113:     37(ptr) AccessChain 104 32
+                              Store 113 112
+             114:58(MyStruct) CompositeExtract 100 1
+             115:     13(ptr) AccessChain 102 32
+             116:          57 CompositeExtract 114 0
+             117:     26(ptr) AccessChain 115 21
+             118:    7(fvec2) CompositeExtract 116 0
+             119:     29(ptr) AccessChain 117 21
+                              Store 119 118
+             120:    7(fvec2) CompositeExtract 116 1
+             121:     29(ptr) AccessChain 117 32
+                              Store 121 120
+             122:      8(int) CompositeExtract 114 1
+             123:    11(bool) INotEqual 122 35
+             124:     37(ptr) AccessChain 115 32
+                              Store 124 123
+             130:  86(Nested) Load 88(n)
+             132:    131(ptr) AccessChain 129(outBufN) 21
+             133:    6(float) CompositeExtract 130 0
+             135:    134(ptr) AccessChain 132 21
+                              Store 135 133
+             136:          85 CompositeExtract 130 1
+             138:    137(ptr) AccessChain 132 32
+             139:12(MyStruct) CompositeExtract 136 0
+             140:     22(ptr) AccessChain 138 21
+             141:          10 CompositeExtract 139 0
+             142:     45(ptr) AccessChain 140 21
+             143:    7(fvec2) CompositeExtract 141 0
+             144:     48(ptr) AccessChain 142 21
+                              Store 144 143
+             145:    7(fvec2) CompositeExtract 141 1
+             146:     48(ptr) AccessChain 142 32
+                              Store 146 145
+             147:    11(bool) CompositeExtract 139 1
+             148:      8(int) Select 147 53 35
+             149:     55(ptr) AccessChain 140 32
+                              Store 149 148
+             150:12(MyStruct) CompositeExtract 136 1
+             151:     22(ptr) AccessChain 138 32
+             152:          10 CompositeExtract 150 0
+             153:     45(ptr) AccessChain 151 21
+             154:    7(fvec2) CompositeExtract 152 0
+             155:     48(ptr) AccessChain 153 21
+                              Store 155 154
+             156:    7(fvec2) CompositeExtract 152 1
+             157:     48(ptr) AccessChain 153 32
+                              Store 157 156
+             158:    11(bool) CompositeExtract 150 1
+             159:      8(int) Select 158 53 35
+             160:     55(ptr) AccessChain 151 32
+                              Store 160 159
                               Return
                               FunctionEnd