SPV: OpGroupBroadcast is unable to handle vector operand.
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index a6c777c..c79b6c2 100755
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -156,9 +156,7 @@
     spv::Id makeSmearedConstant(spv::Id constant, int vectorSize);
     spv::Id createAtomicOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy);
     spv::Id createInvocationsOperation(glslang::TOperator op, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy);
-#ifdef AMD_EXTENSIONS
-    spv::Id CreateInvocationsVectorOperation(spv::Op op, spv::Id typeId, spv::Id operand);
-#endif
+    spv::Id CreateInvocationsVectorOperation(spv::Op op, spv::Id typeId, std::vector<spv::Id>& operands);
     spv::Id createMiscOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy);
     spv::Id createNoArgOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId);
     spv::Id getSymbolId(const glslang::TIntermSymbol* node);
@@ -4029,6 +4027,8 @@
 
     case glslang::EOpReadInvocation:
         opCode = spv::OpGroupBroadcast;
+        if (builder.isVectorType(typeId))
+            return CreateInvocationsVectorOperation(opCode, typeId, operands);
         break;
     case glslang::EOpReadFirstInvocation:
         opCode = spv::OpSubgroupFirstInvocationKHR;
@@ -4084,7 +4084,7 @@
         }
 
         if (builder.isVectorType(typeId))
-            return CreateInvocationsVectorOperation(opCode, typeId, operands[0]);
+            return CreateInvocationsVectorOperation(opCode, typeId, operands);
 
         break;
     case glslang::EOpMinInvocationsNonUniform:
@@ -4118,7 +4118,7 @@
         }
 
         if (builder.isVectorType(typeId))
-            return CreateInvocationsVectorOperation(opCode, typeId, operands[0]);
+            return CreateInvocationsVectorOperation(opCode, typeId, operands);
 
         break;
 #endif
@@ -4131,16 +4131,21 @@
     return builder.createOp(opCode, typeId, spvGroupOperands);
 }
 
-#ifdef AMD_EXTENSIONS
 // Create group invocation operations on a vector
-spv::Id TGlslangToSpvTraverser::CreateInvocationsVectorOperation(spv::Op op, spv::Id typeId, spv::Id operand)
+spv::Id TGlslangToSpvTraverser::CreateInvocationsVectorOperation(spv::Op op, spv::Id typeId, std::vector<spv::Id>& operands)
 {
+#ifdef AMD_EXTENSIONS
     assert(op == spv::OpGroupFMin || op == spv::OpGroupUMin || op == spv::OpGroupSMin ||
            op == spv::OpGroupFMax || op == spv::OpGroupUMax || op == spv::OpGroupSMax ||
-           op == spv::OpGroupFAdd || op == spv::OpGroupIAdd ||
+           op == spv::OpGroupFAdd || op == spv::OpGroupIAdd || op == spv::OpGroupBroadcast ||
            op == spv::OpGroupFMinNonUniformAMD || op == spv::OpGroupUMinNonUniformAMD || op == spv::OpGroupSMinNonUniformAMD ||
            op == spv::OpGroupFMaxNonUniformAMD || op == spv::OpGroupUMaxNonUniformAMD || op == spv::OpGroupSMaxNonUniformAMD ||
            op == spv::OpGroupFAddNonUniformAMD || op == spv::OpGroupIAddNonUniformAMD);
+#else
+    assert(op == spv::OpGroupFMin || op == spv::OpGroupUMin || op == spv::OpGroupSMin ||
+           op == spv::OpGroupFMax || op == spv::OpGroupUMax || op == spv::OpGroupSMax ||
+           op == spv::OpGroupFAdd || op == spv::OpGroupIAdd || op == spv::OpGroupBroadcast);
+#endif
 
     // Handle group invocation operations scalar by scalar.
     // The result type is the same type as the original type.
@@ -4150,28 +4155,32 @@
     //   - make a vector out the scalar results
 
     // get the types sorted out
-    int numComponents = builder.getNumComponents(operand);
-    spv::Id scalarType = builder.getScalarTypeId(builder.getTypeId(operand));
+    int numComponents = builder.getNumComponents(operands[0]);
+    spv::Id scalarType = builder.getScalarTypeId(builder.getTypeId(operands[0]));
     std::vector<spv::Id> results;
 
     // do each scalar op
     for (int comp = 0; comp < numComponents; ++comp) {
         std::vector<unsigned int> indexes;
         indexes.push_back(comp);
-        spv::Id scalar = builder.createCompositeExtract(operand, scalarType, indexes);
+        spv::Id scalar = builder.createCompositeExtract(operands[0], scalarType, indexes);
 
-        std::vector<spv::Id> operands;
-        operands.push_back(builder.makeUintConstant(spv::ScopeSubgroup));
-        operands.push_back(spv::GroupOperationReduce);
-        operands.push_back(scalar);
+        std::vector<spv::Id> spvGroupOperands;
+        spvGroupOperands.push_back(builder.makeUintConstant(spv::ScopeSubgroup));
+        if (op == spv::OpGroupBroadcast) {
+            spvGroupOperands.push_back(scalar);
+            spvGroupOperands.push_back(operands[1]);
+        } else {
+            spvGroupOperands.push_back(spv::GroupOperationReduce);
+            spvGroupOperands.push_back(scalar);
+        }
 
-        results.push_back(builder.createOp(op, scalarType, operands));
+        results.push_back(builder.createOp(op, scalarType, spvGroupOperands));
     }
 
     // put the pieces together
     return builder.createCompositeConstruct(typeId, results);
 }
-#endif
 
 spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy)
 {
diff --git a/Test/baseResults/spv.shaderBallot.comp.out b/Test/baseResults/spv.shaderBallot.comp.out
index c60db16..b837b8b 100644
--- a/Test/baseResults/spv.shaderBallot.comp.out
+++ b/Test/baseResults/spv.shaderBallot.comp.out
@@ -7,7 +7,7 @@
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 245
+// Id's are bound by 299
 
                               Capability Shader
                               Capability Int64
@@ -49,7 +49,7 @@
                               Decorate 52(Buffers) BufferBlock
                               Decorate 55(data) DescriptorSet 0
                               Decorate 55(data) Binding 0
-                              Decorate 244 BuiltIn WorkgroupSize
+                              Decorate 298 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -85,19 +85,19 @@
               67:     50(int) Constant 1
               68:             TypeVector 48(float) 2
               69:             TypePointer Uniform 49(fvec4)
-              79:     50(int) Constant 2
-              80:             TypeVector 48(float) 3
-              90:     50(int) Constant 3
-              97:             TypePointer Uniform 50(int)
-             104:             TypeVector 50(int) 2
-             105:             TypePointer Uniform 51(ivec4)
-             115:             TypeVector 50(int) 3
-             131:             TypePointer Uniform 6(int)
-             138:             TypePointer Uniform 38(ivec4)
-             148:             TypeVector 6(int) 3
-             242:      6(int) Constant 8
-             243:      6(int) Constant 1
-             244:  148(ivec3) ConstantComposite 242 242 243
+              83:     50(int) Constant 2
+              84:             TypeVector 48(float) 3
+             100:     50(int) Constant 3
+             115:             TypePointer Uniform 50(int)
+             122:             TypeVector 50(int) 2
+             123:             TypePointer Uniform 51(ivec4)
+             137:             TypeVector 50(int) 3
+             167:             TypePointer Uniform 6(int)
+             174:             TypePointer Uniform 38(ivec4)
+             188:             TypeVector 6(int) 3
+             296:      6(int) Constant 8
+             297:      6(int) Constant 1
+             298:  188(ivec3) ConstantComposite 296 296 297
          4(main):           2 Function None 3
                5:             Label
    8(invocation):      7(ptr) Variable Function
@@ -125,7 +125,7 @@
               44:     17(int) Bitcast 43
               45:    36(bool) IEqual 35 44
                               SelectionMerge 47 None
-                              BranchConditional 45 46 163
+                              BranchConditional 45 46 217
               46:               Label
               56:      6(int)   Load 8(invocation)
               60:     59(ptr)   AccessChain 55(data) 57 57 58
@@ -139,188 +139,242 @@
               71:   49(fvec4)   Load 70
               72:   68(fvec2)   VectorShuffle 71 71 0 1
               73:      6(int)   Load 8(invocation)
-              74:   68(fvec2)   GroupBroadcast 63 72 73
-              75:     69(ptr)   AccessChain 55(data) 66 57
-              76:   49(fvec4)   Load 75
-              77:   49(fvec4)   VectorShuffle 76 74 4 5 2 3
-                                Store 75 77
-              78:      6(int)   Load 8(invocation)
-              81:     69(ptr)   AccessChain 55(data) 79 57
-              82:   49(fvec4)   Load 81
-              83:   80(fvec3)   VectorShuffle 82 82 0 1 2
-              84:      6(int)   Load 8(invocation)
-              85:   80(fvec3)   GroupBroadcast 63 83 84
-              86:     69(ptr)   AccessChain 55(data) 78 57
-              87:   49(fvec4)   Load 86
-              88:   49(fvec4)   VectorShuffle 87 85 4 5 6 3
-                                Store 86 88
-              89:      6(int)   Load 8(invocation)
-              91:     69(ptr)   AccessChain 55(data) 90 57
-              92:   49(fvec4)   Load 91
-              93:      6(int)   Load 8(invocation)
-              94:   49(fvec4)   GroupBroadcast 63 92 93
-              95:     69(ptr)   AccessChain 55(data) 89 57
-                                Store 95 94
-              96:      6(int)   Load 8(invocation)
-              98:     97(ptr)   AccessChain 55(data) 57 67 58
-              99:     50(int)   Load 98
-             100:      6(int)   Load 8(invocation)
-             101:     50(int)   GroupBroadcast 63 99 100
-             102:     97(ptr)   AccessChain 55(data) 96 67 58
-                                Store 102 101
+              74:   48(float)   CompositeExtract 72 0
+              75:   48(float)   GroupBroadcast 63 74 73
+              76:   48(float)   CompositeExtract 72 1
+              77:   48(float)   GroupBroadcast 63 76 73
+              78:   68(fvec2)   CompositeConstruct 75 77
+              79:     69(ptr)   AccessChain 55(data) 66 57
+              80:   49(fvec4)   Load 79
+              81:   49(fvec4)   VectorShuffle 80 78 4 5 2 3
+                                Store 79 81
+              82:      6(int)   Load 8(invocation)
+              85:     69(ptr)   AccessChain 55(data) 83 57
+              86:   49(fvec4)   Load 85
+              87:   84(fvec3)   VectorShuffle 86 86 0 1 2
+              88:      6(int)   Load 8(invocation)
+              89:   48(float)   CompositeExtract 87 0
+              90:   48(float)   GroupBroadcast 63 89 88
+              91:   48(float)   CompositeExtract 87 1
+              92:   48(float)   GroupBroadcast 63 91 88
+              93:   48(float)   CompositeExtract 87 2
+              94:   48(float)   GroupBroadcast 63 93 88
+              95:   84(fvec3)   CompositeConstruct 90 92 94
+              96:     69(ptr)   AccessChain 55(data) 82 57
+              97:   49(fvec4)   Load 96
+              98:   49(fvec4)   VectorShuffle 97 95 4 5 6 3
+                                Store 96 98
+              99:      6(int)   Load 8(invocation)
+             101:     69(ptr)   AccessChain 55(data) 100 57
+             102:   49(fvec4)   Load 101
              103:      6(int)   Load 8(invocation)
-             106:    105(ptr)   AccessChain 55(data) 67 67
-             107:   51(ivec4)   Load 106
-             108:  104(ivec2)   VectorShuffle 107 107 0 1
-             109:      6(int)   Load 8(invocation)
-             110:  104(ivec2)   GroupBroadcast 63 108 109
-             111:    105(ptr)   AccessChain 55(data) 103 67
-             112:   51(ivec4)   Load 111
-             113:   51(ivec4)   VectorShuffle 112 110 4 5 2 3
-                                Store 111 113
+             104:   48(float)   CompositeExtract 102 0
+             105:   48(float)   GroupBroadcast 63 104 103
+             106:   48(float)   CompositeExtract 102 1
+             107:   48(float)   GroupBroadcast 63 106 103
+             108:   48(float)   CompositeExtract 102 2
+             109:   48(float)   GroupBroadcast 63 108 103
+             110:   48(float)   CompositeExtract 102 3
+             111:   48(float)   GroupBroadcast 63 110 103
+             112:   49(fvec4)   CompositeConstruct 105 107 109 111
+             113:     69(ptr)   AccessChain 55(data) 99 57
+                                Store 113 112
              114:      6(int)   Load 8(invocation)
-             116:    105(ptr)   AccessChain 55(data) 79 67
-             117:   51(ivec4)   Load 116
-             118:  115(ivec3)   VectorShuffle 117 117 0 1 2
-             119:      6(int)   Load 8(invocation)
-             120:  115(ivec3)   GroupBroadcast 63 118 119
-             121:    105(ptr)   AccessChain 55(data) 114 67
-             122:   51(ivec4)   Load 121
-             123:   51(ivec4)   VectorShuffle 122 120 4 5 6 3
-                                Store 121 123
-             124:      6(int)   Load 8(invocation)
-             125:    105(ptr)   AccessChain 55(data) 90 67
-             126:   51(ivec4)   Load 125
+             116:    115(ptr)   AccessChain 55(data) 57 67 58
+             117:     50(int)   Load 116
+             118:      6(int)   Load 8(invocation)
+             119:     50(int)   GroupBroadcast 63 117 118
+             120:    115(ptr)   AccessChain 55(data) 114 67 58
+                                Store 120 119
+             121:      6(int)   Load 8(invocation)
+             124:    123(ptr)   AccessChain 55(data) 67 67
+             125:   51(ivec4)   Load 124
+             126:  122(ivec2)   VectorShuffle 125 125 0 1
              127:      6(int)   Load 8(invocation)
-             128:   51(ivec4)   GroupBroadcast 63 126 127
-             129:    105(ptr)   AccessChain 55(data) 124 67
-                                Store 129 128
-             130:      6(int)   Load 8(invocation)
-             132:    131(ptr)   AccessChain 55(data) 57 79 58
-             133:      6(int)   Load 132
-             134:      6(int)   Load 8(invocation)
-             135:      6(int)   GroupBroadcast 63 133 134
-             136:    131(ptr)   AccessChain 55(data) 130 79 58
-                                Store 136 135
-             137:      6(int)   Load 8(invocation)
-             139:    138(ptr)   AccessChain 55(data) 67 79
-             140:   38(ivec4)   Load 139
-             141:   42(ivec2)   VectorShuffle 140 140 0 1
-             142:      6(int)   Load 8(invocation)
-             143:   42(ivec2)   GroupBroadcast 63 141 142
-             144:    138(ptr)   AccessChain 55(data) 137 79
-             145:   38(ivec4)   Load 144
-             146:   38(ivec4)   VectorShuffle 145 143 4 5 2 3
-                                Store 144 146
-             147:      6(int)   Load 8(invocation)
-             149:    138(ptr)   AccessChain 55(data) 79 79
-             150:   38(ivec4)   Load 149
-             151:  148(ivec3)   VectorShuffle 150 150 0 1 2
+             128:     50(int)   CompositeExtract 126 0
+             129:     50(int)   GroupBroadcast 63 128 127
+             130:     50(int)   CompositeExtract 126 1
+             131:     50(int)   GroupBroadcast 63 130 127
+             132:  122(ivec2)   CompositeConstruct 129 131
+             133:    123(ptr)   AccessChain 55(data) 121 67
+             134:   51(ivec4)   Load 133
+             135:   51(ivec4)   VectorShuffle 134 132 4 5 2 3
+                                Store 133 135
+             136:      6(int)   Load 8(invocation)
+             138:    123(ptr)   AccessChain 55(data) 83 67
+             139:   51(ivec4)   Load 138
+             140:  137(ivec3)   VectorShuffle 139 139 0 1 2
+             141:      6(int)   Load 8(invocation)
+             142:     50(int)   CompositeExtract 140 0
+             143:     50(int)   GroupBroadcast 63 142 141
+             144:     50(int)   CompositeExtract 140 1
+             145:     50(int)   GroupBroadcast 63 144 141
+             146:     50(int)   CompositeExtract 140 2
+             147:     50(int)   GroupBroadcast 63 146 141
+             148:  137(ivec3)   CompositeConstruct 143 145 147
+             149:    123(ptr)   AccessChain 55(data) 136 67
+             150:   51(ivec4)   Load 149
+             151:   51(ivec4)   VectorShuffle 150 148 4 5 6 3
+                                Store 149 151
              152:      6(int)   Load 8(invocation)
-             153:  148(ivec3)   GroupBroadcast 63 151 152
-             154:    138(ptr)   AccessChain 55(data) 147 79
-             155:   38(ivec4)   Load 154
-             156:   38(ivec4)   VectorShuffle 155 153 4 5 6 3
-                                Store 154 156
-             157:      6(int)   Load 8(invocation)
-             158:    138(ptr)   AccessChain 55(data) 90 79
-             159:   38(ivec4)   Load 158
-             160:      6(int)   Load 8(invocation)
-             161:   38(ivec4)   GroupBroadcast 63 159 160
-             162:    138(ptr)   AccessChain 55(data) 157 79
-                                Store 162 161
-                                Branch 47
-             163:               Label
-             164:      6(int)   Load 8(invocation)
-             165:     59(ptr)   AccessChain 55(data) 57 57 58
-             166:   48(float)   Load 165
-             167:   48(float)   SubgroupFirstInvocationKHR 166
-             168:     59(ptr)   AccessChain 55(data) 164 57 58
-                                Store 168 167
-             169:      6(int)   Load 8(invocation)
-             170:     69(ptr)   AccessChain 55(data) 67 57
-             171:   49(fvec4)   Load 170
-             172:   68(fvec2)   VectorShuffle 171 171 0 1
-             173:   68(fvec2)   SubgroupFirstInvocationKHR 172
-             174:     69(ptr)   AccessChain 55(data) 169 57
-             175:   49(fvec4)   Load 174
-             176:   49(fvec4)   VectorShuffle 175 173 4 5 2 3
-                                Store 174 176
-             177:      6(int)   Load 8(invocation)
-             178:     69(ptr)   AccessChain 55(data) 79 57
-             179:   49(fvec4)   Load 178
-             180:   80(fvec3)   VectorShuffle 179 179 0 1 2
-             181:   80(fvec3)   SubgroupFirstInvocationKHR 180
-             182:     69(ptr)   AccessChain 55(data) 177 57
-             183:   49(fvec4)   Load 182
-             184:   49(fvec4)   VectorShuffle 183 181 4 5 6 3
-                                Store 182 184
-             185:      6(int)   Load 8(invocation)
-             186:     69(ptr)   AccessChain 55(data) 90 57
-             187:   49(fvec4)   Load 186
-             188:   49(fvec4)   SubgroupFirstInvocationKHR 187
-             189:     69(ptr)   AccessChain 55(data) 185 57
-                                Store 189 188
-             190:      6(int)   Load 8(invocation)
-             191:     97(ptr)   AccessChain 55(data) 57 67 58
-             192:     50(int)   Load 191
-             193:     50(int)   SubgroupFirstInvocationKHR 192
-             194:     97(ptr)   AccessChain 55(data) 190 67 58
-                                Store 194 193
-             195:      6(int)   Load 8(invocation)
-             196:    105(ptr)   AccessChain 55(data) 67 67
-             197:   51(ivec4)   Load 196
-             198:  104(ivec2)   VectorShuffle 197 197 0 1
-             199:  104(ivec2)   SubgroupFirstInvocationKHR 198
-             200:    105(ptr)   AccessChain 55(data) 195 67
-             201:   51(ivec4)   Load 200
-             202:   51(ivec4)   VectorShuffle 201 199 4 5 2 3
+             153:    123(ptr)   AccessChain 55(data) 100 67
+             154:   51(ivec4)   Load 153
+             155:      6(int)   Load 8(invocation)
+             156:     50(int)   CompositeExtract 154 0
+             157:     50(int)   GroupBroadcast 63 156 155
+             158:     50(int)   CompositeExtract 154 1
+             159:     50(int)   GroupBroadcast 63 158 155
+             160:     50(int)   CompositeExtract 154 2
+             161:     50(int)   GroupBroadcast 63 160 155
+             162:     50(int)   CompositeExtract 154 3
+             163:     50(int)   GroupBroadcast 63 162 155
+             164:   51(ivec4)   CompositeConstruct 157 159 161 163
+             165:    123(ptr)   AccessChain 55(data) 152 67
+                                Store 165 164
+             166:      6(int)   Load 8(invocation)
+             168:    167(ptr)   AccessChain 55(data) 57 83 58
+             169:      6(int)   Load 168
+             170:      6(int)   Load 8(invocation)
+             171:      6(int)   GroupBroadcast 63 169 170
+             172:    167(ptr)   AccessChain 55(data) 166 83 58
+                                Store 172 171
+             173:      6(int)   Load 8(invocation)
+             175:    174(ptr)   AccessChain 55(data) 67 83
+             176:   38(ivec4)   Load 175
+             177:   42(ivec2)   VectorShuffle 176 176 0 1
+             178:      6(int)   Load 8(invocation)
+             179:      6(int)   CompositeExtract 177 0
+             180:      6(int)   GroupBroadcast 63 179 178
+             181:      6(int)   CompositeExtract 177 1
+             182:      6(int)   GroupBroadcast 63 181 178
+             183:   42(ivec2)   CompositeConstruct 180 182
+             184:    174(ptr)   AccessChain 55(data) 173 83
+             185:   38(ivec4)   Load 184
+             186:   38(ivec4)   VectorShuffle 185 183 4 5 2 3
+                                Store 184 186
+             187:      6(int)   Load 8(invocation)
+             189:    174(ptr)   AccessChain 55(data) 83 83
+             190:   38(ivec4)   Load 189
+             191:  188(ivec3)   VectorShuffle 190 190 0 1 2
+             192:      6(int)   Load 8(invocation)
+             193:      6(int)   CompositeExtract 191 0
+             194:      6(int)   GroupBroadcast 63 193 192
+             195:      6(int)   CompositeExtract 191 1
+             196:      6(int)   GroupBroadcast 63 195 192
+             197:      6(int)   CompositeExtract 191 2
+             198:      6(int)   GroupBroadcast 63 197 192
+             199:  188(ivec3)   CompositeConstruct 194 196 198
+             200:    174(ptr)   AccessChain 55(data) 187 83
+             201:   38(ivec4)   Load 200
+             202:   38(ivec4)   VectorShuffle 201 199 4 5 6 3
                                 Store 200 202
              203:      6(int)   Load 8(invocation)
-             204:    105(ptr)   AccessChain 55(data) 79 67
-             205:   51(ivec4)   Load 204
-             206:  115(ivec3)   VectorShuffle 205 205 0 1 2
-             207:  115(ivec3)   SubgroupFirstInvocationKHR 206
-             208:    105(ptr)   AccessChain 55(data) 203 67
-             209:   51(ivec4)   Load 208
-             210:   51(ivec4)   VectorShuffle 209 207 4 5 6 3
-                                Store 208 210
-             211:      6(int)   Load 8(invocation)
-             212:    105(ptr)   AccessChain 55(data) 90 67
-             213:   51(ivec4)   Load 212
-             214:   51(ivec4)   SubgroupFirstInvocationKHR 213
-             215:    105(ptr)   AccessChain 55(data) 211 67
-                                Store 215 214
-             216:      6(int)   Load 8(invocation)
-             217:    131(ptr)   AccessChain 55(data) 57 79 58
-             218:      6(int)   Load 217
-             219:      6(int)   SubgroupFirstInvocationKHR 218
-             220:    131(ptr)   AccessChain 55(data) 216 79 58
-                                Store 220 219
-             221:      6(int)   Load 8(invocation)
-             222:    138(ptr)   AccessChain 55(data) 67 79
-             223:   38(ivec4)   Load 222
-             224:   42(ivec2)   VectorShuffle 223 223 0 1
-             225:   42(ivec2)   SubgroupFirstInvocationKHR 224
-             226:    138(ptr)   AccessChain 55(data) 221 79
-             227:   38(ivec4)   Load 226
-             228:   38(ivec4)   VectorShuffle 227 225 4 5 2 3
-                                Store 226 228
-             229:      6(int)   Load 8(invocation)
-             230:    138(ptr)   AccessChain 55(data) 79 79
-             231:   38(ivec4)   Load 230
-             232:  148(ivec3)   VectorShuffle 231 231 0 1 2
-             233:  148(ivec3)   SubgroupFirstInvocationKHR 232
-             234:    138(ptr)   AccessChain 55(data) 229 79
-             235:   38(ivec4)   Load 234
-             236:   38(ivec4)   VectorShuffle 235 233 4 5 6 3
-                                Store 234 236
-             237:      6(int)   Load 8(invocation)
-             238:    138(ptr)   AccessChain 55(data) 90 79
-             239:   38(ivec4)   Load 238
-             240:   38(ivec4)   SubgroupFirstInvocationKHR 239
-             241:    138(ptr)   AccessChain 55(data) 237 79
-                                Store 241 240
+             204:    174(ptr)   AccessChain 55(data) 100 83
+             205:   38(ivec4)   Load 204
+             206:      6(int)   Load 8(invocation)
+             207:      6(int)   CompositeExtract 205 0
+             208:      6(int)   GroupBroadcast 63 207 206
+             209:      6(int)   CompositeExtract 205 1
+             210:      6(int)   GroupBroadcast 63 209 206
+             211:      6(int)   CompositeExtract 205 2
+             212:      6(int)   GroupBroadcast 63 211 206
+             213:      6(int)   CompositeExtract 205 3
+             214:      6(int)   GroupBroadcast 63 213 206
+             215:   38(ivec4)   CompositeConstruct 208 210 212 214
+             216:    174(ptr)   AccessChain 55(data) 203 83
+                                Store 216 215
+                                Branch 47
+             217:               Label
+             218:      6(int)   Load 8(invocation)
+             219:     59(ptr)   AccessChain 55(data) 57 57 58
+             220:   48(float)   Load 219
+             221:   48(float)   SubgroupFirstInvocationKHR 220
+             222:     59(ptr)   AccessChain 55(data) 218 57 58
+                                Store 222 221
+             223:      6(int)   Load 8(invocation)
+             224:     69(ptr)   AccessChain 55(data) 67 57
+             225:   49(fvec4)   Load 224
+             226:   68(fvec2)   VectorShuffle 225 225 0 1
+             227:   68(fvec2)   SubgroupFirstInvocationKHR 226
+             228:     69(ptr)   AccessChain 55(data) 223 57
+             229:   49(fvec4)   Load 228
+             230:   49(fvec4)   VectorShuffle 229 227 4 5 2 3
+                                Store 228 230
+             231:      6(int)   Load 8(invocation)
+             232:     69(ptr)   AccessChain 55(data) 83 57
+             233:   49(fvec4)   Load 232
+             234:   84(fvec3)   VectorShuffle 233 233 0 1 2
+             235:   84(fvec3)   SubgroupFirstInvocationKHR 234
+             236:     69(ptr)   AccessChain 55(data) 231 57
+             237:   49(fvec4)   Load 236
+             238:   49(fvec4)   VectorShuffle 237 235 4 5 6 3
+                                Store 236 238
+             239:      6(int)   Load 8(invocation)
+             240:     69(ptr)   AccessChain 55(data) 100 57
+             241:   49(fvec4)   Load 240
+             242:   49(fvec4)   SubgroupFirstInvocationKHR 241
+             243:     69(ptr)   AccessChain 55(data) 239 57
+                                Store 243 242
+             244:      6(int)   Load 8(invocation)
+             245:    115(ptr)   AccessChain 55(data) 57 67 58
+             246:     50(int)   Load 245
+             247:     50(int)   SubgroupFirstInvocationKHR 246
+             248:    115(ptr)   AccessChain 55(data) 244 67 58
+                                Store 248 247
+             249:      6(int)   Load 8(invocation)
+             250:    123(ptr)   AccessChain 55(data) 67 67
+             251:   51(ivec4)   Load 250
+             252:  122(ivec2)   VectorShuffle 251 251 0 1
+             253:  122(ivec2)   SubgroupFirstInvocationKHR 252
+             254:    123(ptr)   AccessChain 55(data) 249 67
+             255:   51(ivec4)   Load 254
+             256:   51(ivec4)   VectorShuffle 255 253 4 5 2 3
+                                Store 254 256
+             257:      6(int)   Load 8(invocation)
+             258:    123(ptr)   AccessChain 55(data) 83 67
+             259:   51(ivec4)   Load 258
+             260:  137(ivec3)   VectorShuffle 259 259 0 1 2
+             261:  137(ivec3)   SubgroupFirstInvocationKHR 260
+             262:    123(ptr)   AccessChain 55(data) 257 67
+             263:   51(ivec4)   Load 262
+             264:   51(ivec4)   VectorShuffle 263 261 4 5 6 3
+                                Store 262 264
+             265:      6(int)   Load 8(invocation)
+             266:    123(ptr)   AccessChain 55(data) 100 67
+             267:   51(ivec4)   Load 266
+             268:   51(ivec4)   SubgroupFirstInvocationKHR 267
+             269:    123(ptr)   AccessChain 55(data) 265 67
+                                Store 269 268
+             270:      6(int)   Load 8(invocation)
+             271:    167(ptr)   AccessChain 55(data) 57 83 58
+             272:      6(int)   Load 271
+             273:      6(int)   SubgroupFirstInvocationKHR 272
+             274:    167(ptr)   AccessChain 55(data) 270 83 58
+                                Store 274 273
+             275:      6(int)   Load 8(invocation)
+             276:    174(ptr)   AccessChain 55(data) 67 83
+             277:   38(ivec4)   Load 276
+             278:   42(ivec2)   VectorShuffle 277 277 0 1
+             279:   42(ivec2)   SubgroupFirstInvocationKHR 278
+             280:    174(ptr)   AccessChain 55(data) 275 83
+             281:   38(ivec4)   Load 280
+             282:   38(ivec4)   VectorShuffle 281 279 4 5 2 3
+                                Store 280 282
+             283:      6(int)   Load 8(invocation)
+             284:    174(ptr)   AccessChain 55(data) 83 83
+             285:   38(ivec4)   Load 284
+             286:  188(ivec3)   VectorShuffle 285 285 0 1 2
+             287:  188(ivec3)   SubgroupFirstInvocationKHR 286
+             288:    174(ptr)   AccessChain 55(data) 283 83
+             289:   38(ivec4)   Load 288
+             290:   38(ivec4)   VectorShuffle 289 287 4 5 6 3
+                                Store 288 290
+             291:      6(int)   Load 8(invocation)
+             292:    174(ptr)   AccessChain 55(data) 100 83
+             293:   38(ivec4)   Load 292
+             294:   38(ivec4)   SubgroupFirstInvocationKHR 293
+             295:    174(ptr)   AccessChain 55(data) 291 83
+                                Store 295 294
                                 Branch 47
               47:             Label
                               Return