Merge pull request #1277 from KhronosGroup/Vulkan_1_1

SPV: Implement Vulkan 1.1 features and extensions.
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
old mode 100755
new mode 100644
index 21cd869..45e76ad
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2014-2016 LunarG, Inc.
 // Copyright (C) 2015-2016 Google, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -172,10 +173,12 @@
     spv::Id createUnaryOperation(glslang::TOperator op, spv::Decoration precision, spv::Decoration noContraction, spv::Id typeId, spv::Id operand,glslang::TBasicType typeProxy);
     spv::Id createUnaryMatrixOperation(spv::Op op, spv::Decoration precision, spv::Decoration noContraction, spv::Id typeId, spv::Id operand,glslang::TBasicType typeProxy);
     spv::Id createConversion(glslang::TOperator op, spv::Decoration precision, spv::Decoration noContraction, spv::Id destTypeId, spv::Id operand, glslang::TBasicType typeProxy);
+    spv::Id createConversionOperation(glslang::TOperator op, spv::Id operand, int vectorSize);
     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);
     spv::Id CreateInvocationsVectorOperation(spv::Op op, spv::GroupOperation groupOperation, spv::Id typeId, std::vector<spv::Id>& operands);
+    spv::Id createSubgroupOperation(glslang::TOperator op, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy);
     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);
@@ -191,6 +194,11 @@
 #ifdef AMD_EXTENSIONS
     spv::Id getExtBuiltins(const char* name);
 #endif
+    void addPre13Extension(const char* ext)
+    {
+        if (builder.getSpvVersion() < glslang::EShTargetSpv_1_3)
+            builder.addExtension(ext);
+    }
 
     glslang::SpvOptions& options;
     spv::Function* shaderEntry;
@@ -504,17 +512,17 @@
     case glslang::EbvInstanceIndex:        return spv::BuiltInInstanceIndex;
 
     case glslang::EbvBaseVertex:
-        builder.addExtension(spv::E_SPV_KHR_shader_draw_parameters);
+        addPre13Extension(spv::E_SPV_KHR_shader_draw_parameters);
         builder.addCapability(spv::CapabilityDrawParameters);
         return spv::BuiltInBaseVertex;
 
     case glslang::EbvBaseInstance:
-        builder.addExtension(spv::E_SPV_KHR_shader_draw_parameters);
+        addPre13Extension(spv::E_SPV_KHR_shader_draw_parameters);
         builder.addCapability(spv::CapabilityDrawParameters);
         return spv::BuiltInBaseInstance;
 
     case glslang::EbvDrawId:
-        builder.addExtension(spv::E_SPV_KHR_shader_draw_parameters);
+        addPre13Extension(spv::E_SPV_KHR_shader_draw_parameters);
         builder.addCapability(spv::CapabilityDrawParameters);
         return spv::BuiltInDrawIndex;
 
@@ -580,6 +588,46 @@
         builder.addCapability(spv::CapabilitySubgroupBallotKHR);
         return spv::BuiltInSubgroupLtMaskKHR;
 
+    case glslang::EbvNumSubgroups:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        return spv::BuiltInNumSubgroups;
+
+    case glslang::EbvSubgroupID:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        return spv::BuiltInSubgroupId;
+
+    case glslang::EbvSubgroupSize2:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        return spv::BuiltInSubgroupSize;
+
+    case glslang::EbvSubgroupInvocation2:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        return spv::BuiltInSubgroupLocalInvocationId;
+
+    case glslang::EbvSubgroupEqMask2:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        builder.addCapability(spv::CapabilityGroupNonUniformBallot);
+        return spv::BuiltInSubgroupEqMask;
+
+    case glslang::EbvSubgroupGeMask2:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        builder.addCapability(spv::CapabilityGroupNonUniformBallot);
+        return spv::BuiltInSubgroupGeMask;
+
+    case glslang::EbvSubgroupGtMask2:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        builder.addCapability(spv::CapabilityGroupNonUniformBallot);
+        return spv::BuiltInSubgroupGtMask;
+
+    case glslang::EbvSubgroupLeMask2:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        builder.addCapability(spv::CapabilityGroupNonUniformBallot);
+        return spv::BuiltInSubgroupLeMask;
+
+    case glslang::EbvSubgroupLtMask2:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        builder.addCapability(spv::CapabilityGroupNonUniformBallot);
+        return spv::BuiltInSubgroupLtMask;
 #ifdef AMD_EXTENSIONS
     case glslang::EbvBaryCoordNoPersp:
         builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter);
@@ -611,12 +659,12 @@
 #endif
 
     case glslang::EbvDeviceIndex:
-        builder.addExtension(spv::E_SPV_KHR_device_group);
+        addPre13Extension(spv::E_SPV_KHR_device_group);
         builder.addCapability(spv::CapabilityDeviceGroup);
         return spv::BuiltInDeviceIndex;
 
     case glslang::EbvViewIndex:
-        builder.addExtension(spv::E_SPV_KHR_multiview);
+        addPre13Extension(spv::E_SPV_KHR_multiview);
         builder.addCapability(spv::CapabilityMultiView);
         return spv::BuiltInViewIndex;
 
@@ -804,7 +852,7 @@
     }
 
     if (glslangIntermediate->usingStorageBuffer() && type.getQualifier().storage == glslang::EvqBuffer) {
-        builder.addExtension(spv::E_SPV_KHR_storage_buffer_storage_class);
+        addPre13Extension(spv::E_SPV_KHR_storage_buffer_storage_class);
         return spv::StorageClassStorageBuffer;
     }
 
@@ -1436,16 +1484,14 @@
                 one = builder.makeFloatConstant(1.0F);
             else if (node->getBasicType() == glslang::EbtDouble)
                 one = builder.makeDoubleConstant(1.0);
-#ifdef AMD_EXTENSIONS
             else if (node->getBasicType() == glslang::EbtFloat16)
                 one = builder.makeFloat16Constant(1.0F);
-#endif
-            else if (node->getBasicType() == glslang::EbtInt64 || node->getBasicType() == glslang::EbtUint64)
-                one = builder.makeInt64Constant(1);
-#ifdef AMD_EXTENSIONS
+            else if (node->getBasicType() == glslang::EbtInt8  || node->getBasicType() == glslang::EbtUint8)
+                one = builder.makeInt8Constant(1);
             else if (node->getBasicType() == glslang::EbtInt16 || node->getBasicType() == glslang::EbtUint16)
                 one = builder.makeInt16Constant(1);
-#endif
+            else if (node->getBasicType() == glslang::EbtInt64 || node->getBasicType() == glslang::EbtUint64)
+                one = builder.makeInt64Constant(1);
             else
                 one = builder.makeIntConstant(1);
             glslang::TOperator op;
@@ -1650,7 +1696,6 @@
     case glslang::EOpConstructBMat4x2:
     case glslang::EOpConstructBMat4x3:
     case glslang::EOpConstructBMat4x4:
-#ifdef AMD_EXTENSIONS
     case glslang::EOpConstructF16Mat2x2:
     case glslang::EOpConstructF16Mat2x3:
     case glslang::EOpConstructF16Mat2x4:
@@ -1660,7 +1705,6 @@
     case glslang::EOpConstructF16Mat4x2:
     case glslang::EOpConstructF16Mat4x3:
     case glslang::EOpConstructF16Mat4x4:
-#endif
         isMatrix = true;
         // fall through
     case glslang::EOpConstructFloat:
@@ -1671,16 +1715,30 @@
     case glslang::EOpConstructDVec2:
     case glslang::EOpConstructDVec3:
     case glslang::EOpConstructDVec4:
-#ifdef AMD_EXTENSIONS
     case glslang::EOpConstructFloat16:
     case glslang::EOpConstructF16Vec2:
     case glslang::EOpConstructF16Vec3:
     case glslang::EOpConstructF16Vec4:
-#endif
     case glslang::EOpConstructBool:
     case glslang::EOpConstructBVec2:
     case glslang::EOpConstructBVec3:
     case glslang::EOpConstructBVec4:
+    case glslang::EOpConstructInt8:
+    case glslang::EOpConstructI8Vec2:
+    case glslang::EOpConstructI8Vec3:
+    case glslang::EOpConstructI8Vec4:
+    case glslang::EOpConstructUint8:
+    case glslang::EOpConstructU8Vec2:
+    case glslang::EOpConstructU8Vec3:
+    case glslang::EOpConstructU8Vec4:
+    case glslang::EOpConstructInt16:
+    case glslang::EOpConstructI16Vec2:
+    case glslang::EOpConstructI16Vec3:
+    case glslang::EOpConstructI16Vec4:
+    case glslang::EOpConstructUint16:
+    case glslang::EOpConstructU16Vec2:
+    case glslang::EOpConstructU16Vec3:
+    case glslang::EOpConstructU16Vec4:
     case glslang::EOpConstructInt:
     case glslang::EOpConstructIVec2:
     case glslang::EOpConstructIVec3:
@@ -1697,16 +1755,6 @@
     case glslang::EOpConstructU64Vec2:
     case glslang::EOpConstructU64Vec3:
     case glslang::EOpConstructU64Vec4:
-#ifdef AMD_EXTENSIONS
-    case glslang::EOpConstructInt16:
-    case glslang::EOpConstructI16Vec2:
-    case glslang::EOpConstructI16Vec3:
-    case glslang::EOpConstructI16Vec4:
-    case glslang::EOpConstructUint16:
-    case glslang::EOpConstructU16Vec2:
-    case glslang::EOpConstructU16Vec3:
-    case glslang::EOpConstructU16Vec4:
-#endif
     case glslang::EOpConstructStruct:
     case glslang::EOpConstructTextureSampler:
     {
@@ -1787,6 +1835,11 @@
     case glslang::EOpDeviceMemoryBarrierWithGroupSync:
     case glslang::EOpWorkgroupMemoryBarrier:
     case glslang::EOpWorkgroupMemoryBarrierWithGroupSync:
+    case glslang::EOpSubgroupBarrier:
+    case glslang::EOpSubgroupMemoryBarrier:
+    case glslang::EOpSubgroupMemoryBarrierBuffer:
+    case glslang::EOpSubgroupMemoryBarrierImage:
+    case glslang::EOpSubgroupMemoryBarrierShared:
         noReturnValue = true;
         // These all have 0 operands and will naturally finish up in the code below for 0 operands
         break;
@@ -2308,25 +2361,23 @@
     spv::StorageClass storageClass = TranslateStorageClass(node->getType());
     spv::Id spvType = convertGlslangToSpvType(node->getType());
 
-#ifdef AMD_EXTENSIONS
     const bool contains16BitType = node->getType().containsBasicType(glslang::EbtFloat16) ||
                                    node->getType().containsBasicType(glslang::EbtInt16)   ||
                                    node->getType().containsBasicType(glslang::EbtUint16);
     if (contains16BitType) {
         if (storageClass == spv::StorageClassInput || storageClass == spv::StorageClassOutput) {
-            builder.addExtension(spv::E_SPV_KHR_16bit_storage);
+            addPre13Extension(spv::E_SPV_KHR_16bit_storage);
             builder.addCapability(spv::CapabilityStorageInputOutput16);
         } else if (storageClass == spv::StorageClassPushConstant) {
-            builder.addExtension(spv::E_SPV_KHR_16bit_storage);
+            addPre13Extension(spv::E_SPV_KHR_16bit_storage);
             builder.addCapability(spv::CapabilityStoragePushConstant16);
         } else if (storageClass == spv::StorageClassUniform) {
-            builder.addExtension(spv::E_SPV_KHR_16bit_storage);
+            addPre13Extension(spv::E_SPV_KHR_16bit_storage);
             builder.addCapability(spv::CapabilityStorageUniform16);
             if (node->getType().getQualifier().storage == glslang::EvqBuffer)
                 builder.addCapability(spv::CapabilityStorageUniformBufferBlock16);
         }
     }
-#endif
 
     const char* name = node->getName().c_str();
     if (glslang::IsAnonymous(name))
@@ -2409,12 +2460,14 @@
     case glslang::EbtDouble:
         spvType = builder.makeFloatType(64);
         break;
-#ifdef AMD_EXTENSIONS
     case glslang::EbtFloat16:
-        builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float);
+        builder.addCapability(spv::CapabilityFloat16);
+#if AMD_EXTENSIONS
+        if (builder.getSpvVersion() < glslang::EShTargetSpv_1_3)
+            builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float);
+#endif
         spvType = builder.makeFloatType(16);
         break;
-#endif
     case glslang::EbtBool:
         // "transparent" bool doesn't exist in SPIR-V.  The GLSL convention is
         // a 32-bit int where non-0 means true.
@@ -2423,6 +2476,30 @@
         else
             spvType = builder.makeBoolType();
         break;
+   case glslang::EbtInt8:
+        builder.addCapability(spv::CapabilityInt8);
+        spvType = builder.makeIntType(8);
+        break;
+    case glslang::EbtUint8:
+        builder.addCapability(spv::CapabilityInt8);
+        spvType = builder.makeUintType(8);
+        break;
+   case glslang::EbtInt16:
+        builder.addCapability(spv::CapabilityInt16);
+#ifdef AMD_EXTENSIONS
+        if (builder.getSpvVersion() < glslang::EShTargetSpv_1_3)
+            builder.addExtension(spv::E_SPV_AMD_gpu_shader_int16);
+#endif
+        spvType = builder.makeIntType(16);
+        break;
+    case glslang::EbtUint16:
+        builder.addCapability(spv::CapabilityInt16);
+#ifdef AMD_EXTENSIONS
+        if (builder.getSpvVersion() < glslang::EShTargetSpv_1_3)
+            builder.addExtension(spv::E_SPV_AMD_gpu_shader_int16);
+#endif
+        spvType = builder.makeUintType(16);
+        break;
     case glslang::EbtInt:
         spvType = builder.makeIntType(32);
         break;
@@ -2435,16 +2512,6 @@
     case glslang::EbtUint64:
         spvType = builder.makeUintType(64);
         break;
-#ifdef AMD_EXTENSIONS
-    case glslang::EbtInt16:
-        builder.addExtension(spv::E_SPV_AMD_gpu_shader_int16);
-        spvType = builder.makeIntType(16);
-        break;
-    case glslang::EbtUint16:
-        builder.addExtension(spv::E_SPV_AMD_gpu_shader_int16);
-        spvType = builder.makeUintType(16);
-        break;
-#endif
     case glslang::EbtAtomicUint:
         builder.addCapability(spv::CapabilityAtomicStorage);
         spvType = builder.makeUintType(32);
@@ -3830,13 +3897,8 @@
                                                       spv::Id typeId, spv::Id left, spv::Id right,
                                                       glslang::TBasicType typeProxy, bool reduceComparison)
 {
-#ifdef AMD_EXTENSIONS
-    bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64 || typeProxy == glslang::EbtUint16;
-    bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble || typeProxy == glslang::EbtFloat16;
-#else
-    bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64;
-    bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble;
-#endif
+    bool isUnsigned = isTypeUnsignedInt(typeProxy);
+    bool isFloat = isTypeFloat(typeProxy);
     bool isBool = typeProxy == glslang::EbtBool;
 
     spv::Op binOp = spv::OpNop;
@@ -4161,13 +4223,8 @@
     spv::Op unaryOp = spv::OpNop;
     int extBuiltins = -1;
     int libCall = -1;
-#ifdef AMD_EXTENSIONS
-    bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64 || typeProxy == glslang::EbtUint16;
-    bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble || typeProxy == glslang::EbtFloat16;
-#else
-    bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64;
-    bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble;
-#endif
+    bool isUnsigned = isTypeUnsignedInt(typeProxy);
+    bool isFloat = isTypeFloat(typeProxy);
 
     switch (op) {
     case glslang::EOpNegative:
@@ -4304,12 +4361,10 @@
     case glslang::EOpDoubleBitsToUint64:
     case glslang::EOpInt64BitsToDouble:
     case glslang::EOpUint64BitsToDouble:
-#ifdef AMD_EXTENSIONS
     case glslang::EOpFloat16BitsToInt16:
     case glslang::EOpFloat16BitsToUint16:
     case glslang::EOpInt16BitsToFloat16:
     case glslang::EOpUint16BitsToFloat16:
-#endif
         unaryOp = spv::OpBitcast;
         break;
 
@@ -4354,10 +4409,12 @@
     case glslang::EOpUnpackInt2x32:
     case glslang::EOpPackUint2x32:
     case glslang::EOpUnpackUint2x32:
-        unaryOp = spv::OpBitcast;
-        break;
-
-#ifdef AMD_EXTENSIONS
+    case glslang::EOpPack16:
+    case glslang::EOpPack32:
+    case glslang::EOpPack64:
+    case glslang::EOpUnpack32:
+    case glslang::EOpUnpack16:
+    case glslang::EOpUnpack8:
     case glslang::EOpPackInt2x16:
     case glslang::EOpUnpackInt2x16:
     case glslang::EOpPackUint2x16:
@@ -4370,7 +4427,6 @@
     case glslang::EOpUnpackFloat2x16:
         unaryOp = spv::OpBitcast;
         break;
-#endif
 
     case glslang::EOpDPdx:
         unaryOp = spv::OpDPdx;
@@ -4485,7 +4541,45 @@
         operands.push_back(operand);
         return createInvocationsOperation(op, typeId, operands, typeProxy);
     }
-
+    case glslang::EOpSubgroupAll:
+    case glslang::EOpSubgroupAny:
+    case glslang::EOpSubgroupAllEqual:
+    case glslang::EOpSubgroupBroadcastFirst:
+    case glslang::EOpSubgroupBallot:
+    case glslang::EOpSubgroupInverseBallot:
+    case glslang::EOpSubgroupBallotBitCount:
+    case glslang::EOpSubgroupBallotInclusiveBitCount:
+    case glslang::EOpSubgroupBallotExclusiveBitCount:
+    case glslang::EOpSubgroupBallotFindLSB:
+    case glslang::EOpSubgroupBallotFindMSB:
+    case glslang::EOpSubgroupAdd:
+    case glslang::EOpSubgroupMul:
+    case glslang::EOpSubgroupMin:
+    case glslang::EOpSubgroupMax:
+    case glslang::EOpSubgroupAnd:
+    case glslang::EOpSubgroupOr:
+    case glslang::EOpSubgroupXor:
+    case glslang::EOpSubgroupInclusiveAdd:
+    case glslang::EOpSubgroupInclusiveMul:
+    case glslang::EOpSubgroupInclusiveMin:
+    case glslang::EOpSubgroupInclusiveMax:
+    case glslang::EOpSubgroupInclusiveAnd:
+    case glslang::EOpSubgroupInclusiveOr:
+    case glslang::EOpSubgroupInclusiveXor:
+    case glslang::EOpSubgroupExclusiveAdd:
+    case glslang::EOpSubgroupExclusiveMul:
+    case glslang::EOpSubgroupExclusiveMin:
+    case glslang::EOpSubgroupExclusiveMax:
+    case glslang::EOpSubgroupExclusiveAnd:
+    case glslang::EOpSubgroupExclusiveOr:
+    case glslang::EOpSubgroupExclusiveXor:
+    case glslang::EOpSubgroupQuadSwapHorizontal:
+    case glslang::EOpSubgroupQuadSwapVertical:
+    case glslang::EOpSubgroupQuadSwapDiagonal: {
+        std::vector<spv::Id> operands;
+        operands.push_back(operand);
+        return createSubgroupOperation(op, typeId, operands, typeProxy);
+    }
 #ifdef AMD_EXTENSIONS
     case glslang::EOpMbcnt:
         extBuiltins = getExtBuiltins(spv::E_SPV_AMD_shader_ballot);
@@ -4551,32 +4645,150 @@
     return builder.setPrecision(builder.createCompositeConstruct(typeId, results), precision);
 }
 
+spv::Id TGlslangToSpvTraverser::createConversionOperation(glslang::TOperator op, spv::Id operand, int vectorSize)
+{
+    spv::Op convOp = spv::OpNop;
+    spv::Id type = 0;
+
+    spv::Id result = 0;
+
+    switch(op) {
+    case glslang::EOpConvInt8ToUint16:
+        convOp = spv::OpSConvert;
+        type   = builder.makeIntType(16);
+        break;
+    case glslang::EOpConvInt8ToUint:
+        convOp = spv::OpSConvert;
+        type   = builder.makeIntType(32);
+        break;
+    case glslang::EOpConvInt8ToUint64:
+        convOp = spv::OpSConvert;
+        type   = builder.makeIntType(64);
+        break;
+    case glslang::EOpConvInt16ToUint8:
+        convOp = spv::OpSConvert;
+        type   = builder.makeIntType(8);
+        break;
+    case glslang::EOpConvInt16ToUint:
+        convOp = spv::OpSConvert;
+        type   = builder.makeIntType(32);
+        break;
+    case glslang::EOpConvInt16ToUint64:
+        convOp = spv::OpSConvert;
+        type   = builder.makeIntType(64);
+        break;
+    case glslang::EOpConvIntToUint8:
+        convOp = spv::OpSConvert;
+        type   = builder.makeIntType(8);
+        break;
+    case glslang::EOpConvIntToUint16:
+        convOp = spv::OpSConvert;
+        type   = builder.makeIntType(16);
+        break;
+    case glslang::EOpConvIntToUint64:
+        convOp = spv::OpSConvert;
+        type   = builder.makeIntType(64);
+        break;
+    case glslang::EOpConvInt64ToUint8:
+        convOp = spv::OpSConvert;
+        type   = builder.makeIntType(8);
+        break;
+    case glslang::EOpConvInt64ToUint16:
+        convOp = spv::OpSConvert;
+        type   = builder.makeIntType(16);
+        break;
+    case glslang::EOpConvInt64ToUint:
+        convOp = spv::OpSConvert;
+        type   = builder.makeIntType(32);
+        break;
+    case glslang::EOpConvUint8ToInt16:
+        convOp = spv::OpUConvert;
+        type   = builder.makeIntType(16);
+        break;
+    case glslang::EOpConvUint8ToInt:
+        convOp = spv::OpUConvert;
+        type   = builder.makeIntType(32);
+        break;
+    case glslang::EOpConvUint8ToInt64:
+        convOp = spv::OpUConvert;
+        type   = builder.makeIntType(64);
+        break;
+    case glslang::EOpConvUint16ToInt8:
+        convOp = spv::OpUConvert;
+        type   = builder.makeIntType(8);
+        break;
+    case glslang::EOpConvUint16ToInt:
+        convOp = spv::OpUConvert;
+        type   = builder.makeIntType(32);
+        break;
+    case glslang::EOpConvUint16ToInt64:
+        convOp = spv::OpUConvert;
+        type   = builder.makeIntType(64);
+        break;
+    case glslang::EOpConvUintToInt8:
+        convOp = spv::OpUConvert;
+        type   = builder.makeIntType(8);
+        break;
+    case glslang::EOpConvUintToInt16:
+        convOp = spv::OpUConvert;
+        type   = builder.makeIntType(16);
+        break;
+    case glslang::EOpConvUintToInt64:
+        convOp = spv::OpUConvert;
+        type   = builder.makeIntType(64);
+        break;
+    case glslang::EOpConvUint64ToInt8:
+        convOp = spv::OpUConvert;
+        type   = builder.makeIntType(8);
+        break;
+    case glslang::EOpConvUint64ToInt16:
+        convOp = spv::OpUConvert;
+        type   = builder.makeIntType(16);
+        break;
+    case glslang::EOpConvUint64ToInt:
+        convOp = spv::OpUConvert;
+        type   = builder.makeIntType(32);
+        break;
+
+    default:
+        assert(false && "Default missing");
+        break;
+    }
+
+    if (vectorSize > 0)
+        type = builder.makeVectorType(type, vectorSize);
+
+    result = builder.createUnaryOp(convOp, type, operand);
+    return result;
+}
+
 spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, spv::Decoration precision, spv::Decoration noContraction, spv::Id destType, spv::Id operand, glslang::TBasicType typeProxy)
 {
     spv::Op convOp = spv::OpNop;
     spv::Id zero = 0;
     spv::Id one = 0;
-    spv::Id type = 0;
 
     int vectorSize = builder.isVectorType(destType) ? builder.getNumTypeComponents(destType) : 0;
 
     switch (op) {
-    case glslang::EOpConvIntToBool:
-    case glslang::EOpConvUintToBool:
-    case glslang::EOpConvInt64ToBool:
-    case glslang::EOpConvUint64ToBool:
-#ifdef AMD_EXTENSIONS
+    case glslang::EOpConvInt8ToBool:
+    case glslang::EOpConvUint8ToBool:
+        zero = builder.makeUint8Constant(0);
+        zero = makeSmearedConstant(zero, vectorSize);
+        return builder.createBinOp(spv::OpINotEqual, destType, operand, zero);
     case glslang::EOpConvInt16ToBool:
     case glslang::EOpConvUint16ToBool:
-#endif
-        if (op == glslang::EOpConvInt64ToBool || op == glslang::EOpConvUint64ToBool)
-            zero = builder.makeUint64Constant(0);
-#ifdef AMD_EXTENSIONS
-        else if (op == glslang::EOpConvInt16ToBool || op == glslang::EOpConvUint16ToBool)
-            zero = builder.makeUint16Constant(0);
-#endif
-        else
-            zero = builder.makeUintConstant(0);
+        zero = builder.makeUint16Constant(0);
+        zero = makeSmearedConstant(zero, vectorSize);
+        return builder.createBinOp(spv::OpINotEqual, destType, operand, zero);
+    case glslang::EOpConvIntToBool:
+    case glslang::EOpConvUintToBool:
+        zero = builder.makeUintConstant(0);
+        zero = makeSmearedConstant(zero, vectorSize);
+        return builder.createBinOp(spv::OpINotEqual, destType, operand, zero);
+    case glslang::EOpConvInt64ToBool:
+    case glslang::EOpConvUint64ToBool:
+        zero = builder.makeUint64Constant(0);
         zero = makeSmearedConstant(zero, vectorSize);
         return builder.createBinOp(spv::OpINotEqual, destType, operand, zero);
 
@@ -4590,12 +4802,10 @@
         zero = makeSmearedConstant(zero, vectorSize);
         return builder.createBinOp(spv::OpFOrdNotEqual, destType, operand, zero);
 
-#ifdef AMD_EXTENSIONS
     case glslang::EOpConvFloat16ToBool:
         zero = builder.makeFloat16Constant(0.0F);
         zero = makeSmearedConstant(zero, vectorSize);
         return builder.createBinOp(spv::OpFOrdNotEqual, destType, operand, zero);
-#endif
 
     case glslang::EOpConvBoolToFloat:
         convOp = spv::OpSelect;
@@ -4609,34 +4819,45 @@
         one  = builder.makeDoubleConstant(1.0);
         break;
 
-#ifdef AMD_EXTENSIONS
     case glslang::EOpConvBoolToFloat16:
         convOp = spv::OpSelect;
         zero = builder.makeFloat16Constant(0.0F);
         one = builder.makeFloat16Constant(1.0F);
         break;
-#endif
+
+    case glslang::EOpConvBoolToInt8:
+        zero = builder.makeInt8Constant(0);
+        one  = builder.makeInt8Constant(1);
+        convOp = spv::OpSelect;
+        break;
+
+    case glslang::EOpConvBoolToUint8:
+        zero = builder.makeUint8Constant(0);
+        one  = builder.makeUint8Constant(1);
+        convOp = spv::OpSelect;
+        break;
+
+    case glslang::EOpConvBoolToInt16:
+        zero = builder.makeInt16Constant(0);
+        one  = builder.makeInt16Constant(1);
+        convOp = spv::OpSelect;
+        break;
+
+    case glslang::EOpConvBoolToUint16:
+        zero = builder.makeUint16Constant(0);
+        one  = builder.makeUint16Constant(1);
+        convOp = spv::OpSelect;
+        break;
 
     case glslang::EOpConvBoolToInt:
     case glslang::EOpConvBoolToInt64:
-#ifdef AMD_EXTENSIONS
-    case glslang::EOpConvBoolToInt16:
-#endif
         if (op == glslang::EOpConvBoolToInt64)
             zero = builder.makeInt64Constant(0);
-#ifdef AMD_EXTENSIONS
-        else if (op == glslang::EOpConvBoolToInt16)
-            zero = builder.makeInt16Constant(0);
-#endif
         else
             zero = builder.makeIntConstant(0);
 
         if (op == glslang::EOpConvBoolToInt64)
             one = builder.makeInt64Constant(1);
-#ifdef AMD_EXTENSIONS
-        else if (op == glslang::EOpConvBoolToInt16)
-            one = builder.makeInt16Constant(1);
-#endif
         else
             one = builder.makeIntConstant(1);
 
@@ -4645,104 +4866,94 @@
 
     case glslang::EOpConvBoolToUint:
     case glslang::EOpConvBoolToUint64:
-#ifdef AMD_EXTENSIONS
-    case glslang::EOpConvBoolToUint16:
-#endif
         if (op == glslang::EOpConvBoolToUint64)
             zero = builder.makeUint64Constant(0);
-#ifdef AMD_EXTENSIONS
-        else if (op == glslang::EOpConvBoolToUint16)
-            zero = builder.makeUint16Constant(0);
-#endif
         else
             zero = builder.makeUintConstant(0);
 
         if (op == glslang::EOpConvBoolToUint64)
             one = builder.makeUint64Constant(1);
-#ifdef AMD_EXTENSIONS
-        else if (op == glslang::EOpConvBoolToUint16)
-            one = builder.makeUint16Constant(1);
-#endif
         else
             one = builder.makeUintConstant(1);
 
         convOp = spv::OpSelect;
         break;
 
+    case glslang::EOpConvInt8ToFloat16:
+    case glslang::EOpConvInt8ToFloat:
+    case glslang::EOpConvInt8ToDouble:
+    case glslang::EOpConvInt16ToFloat16:
+    case glslang::EOpConvInt16ToFloat:
+    case glslang::EOpConvInt16ToDouble:
+    case glslang::EOpConvIntToFloat16:
     case glslang::EOpConvIntToFloat:
     case glslang::EOpConvIntToDouble:
     case glslang::EOpConvInt64ToFloat:
     case glslang::EOpConvInt64ToDouble:
-#ifdef AMD_EXTENSIONS
-    case glslang::EOpConvInt16ToFloat:
-    case glslang::EOpConvInt16ToDouble:
-    case glslang::EOpConvInt16ToFloat16:
-    case glslang::EOpConvIntToFloat16:
     case glslang::EOpConvInt64ToFloat16:
-#endif
         convOp = spv::OpConvertSToF;
         break;
 
+    case glslang::EOpConvUint8ToFloat16:
+    case glslang::EOpConvUint8ToFloat:
+    case glslang::EOpConvUint8ToDouble:
+    case glslang::EOpConvUint16ToFloat16:
+    case glslang::EOpConvUint16ToFloat:
+    case glslang::EOpConvUint16ToDouble:
+    case glslang::EOpConvUintToFloat16:
     case glslang::EOpConvUintToFloat:
     case glslang::EOpConvUintToDouble:
     case glslang::EOpConvUint64ToFloat:
     case glslang::EOpConvUint64ToDouble:
-#ifdef AMD_EXTENSIONS
-    case glslang::EOpConvUint16ToFloat:
-    case glslang::EOpConvUint16ToDouble:
-    case glslang::EOpConvUint16ToFloat16:
-    case glslang::EOpConvUintToFloat16:
     case glslang::EOpConvUint64ToFloat16:
-#endif
         convOp = spv::OpConvertUToF;
         break;
 
     case glslang::EOpConvDoubleToFloat:
     case glslang::EOpConvFloatToDouble:
-#ifdef AMD_EXTENSIONS
     case glslang::EOpConvDoubleToFloat16:
     case glslang::EOpConvFloat16ToDouble:
     case glslang::EOpConvFloatToFloat16:
     case glslang::EOpConvFloat16ToFloat:
-#endif
         convOp = spv::OpFConvert;
         if (builder.isMatrixType(destType))
             return createUnaryMatrixOperation(convOp, precision, noContraction, destType, operand, typeProxy);
         break;
 
-    case glslang::EOpConvFloatToInt:
-    case glslang::EOpConvDoubleToInt:
-    case glslang::EOpConvFloatToInt64:
-    case glslang::EOpConvDoubleToInt64:
-#ifdef AMD_EXTENSIONS
+    case glslang::EOpConvFloat16ToInt8:
+    case glslang::EOpConvFloatToInt8:
+    case glslang::EOpConvDoubleToInt8:
+    case glslang::EOpConvFloat16ToInt16:
     case glslang::EOpConvFloatToInt16:
     case glslang::EOpConvDoubleToInt16:
-    case glslang::EOpConvFloat16ToInt16:
     case glslang::EOpConvFloat16ToInt:
+    case glslang::EOpConvFloatToInt:
+    case glslang::EOpConvDoubleToInt:
     case glslang::EOpConvFloat16ToInt64:
-#endif
+    case glslang::EOpConvFloatToInt64:
+    case glslang::EOpConvDoubleToInt64:
         convOp = spv::OpConvertFToS;
         break;
 
+    case glslang::EOpConvUint8ToInt8:
+    case glslang::EOpConvInt8ToUint8:
+    case glslang::EOpConvUint16ToInt16:
+    case glslang::EOpConvInt16ToUint16:
     case glslang::EOpConvUintToInt:
     case glslang::EOpConvIntToUint:
     case glslang::EOpConvUint64ToInt64:
     case glslang::EOpConvInt64ToUint64:
-#ifdef AMD_EXTENSIONS
-    case glslang::EOpConvUint16ToInt16:
-    case glslang::EOpConvInt16ToUint16:
-#endif
         if (builder.isInSpecConstCodeGenMode()) {
             // Build zero scalar or vector for OpIAdd.
-            if (op == glslang::EOpConvUint64ToInt64 || op == glslang::EOpConvInt64ToUint64)
-                zero = builder.makeUint64Constant(0);
-#ifdef AMD_EXTENSIONS
-            else if (op == glslang::EOpConvUint16ToInt16 || op == glslang::EOpConvInt16ToUint16)
+            if(op == glslang::EOpConvUint8ToInt8 || op == glslang::EOpConvInt8ToUint8) {
+                zero = builder.makeUint8Constant(0);
+            } else if (op == glslang::EOpConvUint16ToInt16 || op == glslang::EOpConvInt16ToUint16) {
                 zero = builder.makeUint16Constant(0);
-#endif
-            else
+            } else if (op == glslang::EOpConvUint64ToInt64 || op == glslang::EOpConvInt64ToUint64) {
+                zero = builder.makeUint64Constant(0);
+            } else {
                 zero = builder.makeUintConstant(0);
-
+            }
             zero = makeSmearedConstant(zero, vectorSize);
             // Use OpIAdd, instead of OpBitcast to do the conversion when
             // generating for OpSpecConstantOp instruction.
@@ -4752,126 +4963,117 @@
         convOp = spv::OpBitcast;
         break;
 
+    case glslang::EOpConvFloat16ToUint8:
+    case glslang::EOpConvFloatToUint8:
+    case glslang::EOpConvDoubleToUint8:
+    case glslang::EOpConvFloat16ToUint16:
+    case glslang::EOpConvFloatToUint16:
+    case glslang::EOpConvDoubleToUint16:
+    case glslang::EOpConvFloat16ToUint:
     case glslang::EOpConvFloatToUint:
     case glslang::EOpConvDoubleToUint:
     case glslang::EOpConvFloatToUint64:
     case glslang::EOpConvDoubleToUint64:
-#ifdef AMD_EXTENSIONS
-    case glslang::EOpConvFloatToUint16:
-    case glslang::EOpConvDoubleToUint16:
-    case glslang::EOpConvFloat16ToUint16:
-    case glslang::EOpConvFloat16ToUint:
     case glslang::EOpConvFloat16ToUint64:
-#endif
         convOp = spv::OpConvertFToU;
         break;
 
-    case glslang::EOpConvIntToInt64:
-    case glslang::EOpConvInt64ToInt:
-#ifdef AMD_EXTENSIONS
-    case glslang::EOpConvIntToInt16:
+    case glslang::EOpConvInt8ToInt16:
+    case glslang::EOpConvInt8ToInt:
+    case glslang::EOpConvInt8ToInt64:
+    case glslang::EOpConvInt16ToInt8:
     case glslang::EOpConvInt16ToInt:
-    case glslang::EOpConvInt64ToInt16:
     case glslang::EOpConvInt16ToInt64:
-#endif
+    case glslang::EOpConvIntToInt8:
+    case glslang::EOpConvIntToInt16:
+    case glslang::EOpConvIntToInt64:
+    case glslang::EOpConvInt64ToInt8:
+    case glslang::EOpConvInt64ToInt16:
+    case glslang::EOpConvInt64ToInt:
         convOp = spv::OpSConvert;
         break;
 
-    case glslang::EOpConvUintToUint64:
-    case glslang::EOpConvUint64ToUint:
-#ifdef AMD_EXTENSIONS
-    case glslang::EOpConvUintToUint16:
+    case glslang::EOpConvUint8ToUint16:
+    case glslang::EOpConvUint8ToUint:
+    case glslang::EOpConvUint8ToUint64:
+    case glslang::EOpConvUint16ToUint8:
     case glslang::EOpConvUint16ToUint:
-    case glslang::EOpConvUint64ToUint16:
     case glslang::EOpConvUint16ToUint64:
-#endif
+    case glslang::EOpConvUintToUint8:
+    case glslang::EOpConvUintToUint16:
+    case glslang::EOpConvUintToUint64:
+    case glslang::EOpConvUint64ToUint8:
+    case glslang::EOpConvUint64ToUint16:
+    case glslang::EOpConvUint64ToUint:
         convOp = spv::OpUConvert;
         break;
 
-    case glslang::EOpConvIntToUint64:
-    case glslang::EOpConvInt64ToUint:
-    case glslang::EOpConvUint64ToInt:
-    case glslang::EOpConvUintToInt64:
-#ifdef AMD_EXTENSIONS
+    case glslang::EOpConvInt8ToUint16:
+    case glslang::EOpConvInt8ToUint:
+    case glslang::EOpConvInt8ToUint64:
+    case glslang::EOpConvInt16ToUint8:
     case glslang::EOpConvInt16ToUint:
-    case glslang::EOpConvUintToInt16:
     case glslang::EOpConvInt16ToUint64:
-    case glslang::EOpConvUint64ToInt16:
-    case glslang::EOpConvUint16ToInt:
+    case glslang::EOpConvIntToUint8:
     case glslang::EOpConvIntToUint16:
-    case glslang::EOpConvUint16ToInt64:
+    case glslang::EOpConvIntToUint64:
+    case glslang::EOpConvInt64ToUint8:
     case glslang::EOpConvInt64ToUint16:
-#endif
+    case glslang::EOpConvInt64ToUint:
+    case glslang::EOpConvUint8ToInt16:
+    case glslang::EOpConvUint8ToInt:
+    case glslang::EOpConvUint8ToInt64:
+    case glslang::EOpConvUint16ToInt8:
+    case glslang::EOpConvUint16ToInt:
+    case glslang::EOpConvUint16ToInt64:
+    case glslang::EOpConvUintToInt8:
+    case glslang::EOpConvUintToInt16:
+    case glslang::EOpConvUintToInt64:
+    case glslang::EOpConvUint64ToInt8:
+    case glslang::EOpConvUint64ToInt16:
+    case glslang::EOpConvUint64ToInt:
         // OpSConvert/OpUConvert + OpBitCast
-        switch (op) {
-        case glslang::EOpConvIntToUint64:
-#ifdef AMD_EXTENSIONS
-        case glslang::EOpConvInt16ToUint64:
-#endif
-            convOp = spv::OpSConvert;
-            type   = builder.makeIntType(64);
-            break;
-        case glslang::EOpConvInt64ToUint:
-#ifdef AMD_EXTENSIONS
-        case glslang::EOpConvInt16ToUint:
-#endif
-            convOp = spv::OpSConvert;
-            type   = builder.makeIntType(32);
-            break;
-        case glslang::EOpConvUint64ToInt:
-#ifdef AMD_EXTENSIONS
-        case glslang::EOpConvUint16ToInt:
-#endif
-            convOp = spv::OpUConvert;
-            type   = builder.makeUintType(32);
-            break;
-        case glslang::EOpConvUintToInt64:
-#ifdef AMD_EXTENSIONS
-        case glslang::EOpConvUint16ToInt64:
-#endif
-            convOp = spv::OpUConvert;
-            type   = builder.makeUintType(64);
-            break;
-#ifdef AMD_EXTENSIONS
-        case glslang::EOpConvUintToInt16:
-        case glslang::EOpConvUint64ToInt16:
-            convOp = spv::OpUConvert;
-            type   = builder.makeUintType(16);
-            break;
-        case glslang::EOpConvIntToUint16:
-        case glslang::EOpConvInt64ToUint16:
-            convOp = spv::OpSConvert;
-            type   = builder.makeIntType(16);
-            break;
-#endif
-        default:
-            assert(0);
-            break;
-        }
-
-        if (vectorSize > 0)
-            type = builder.makeVectorType(type, vectorSize);
-
-        operand = builder.createUnaryOp(convOp, type, operand);
+        operand = createConversionOperation(op, operand, vectorSize);
 
         if (builder.isInSpecConstCodeGenMode()) {
             // Build zero scalar or vector for OpIAdd.
-#ifdef AMD_EXTENSIONS
-            if (op == glslang::EOpConvIntToUint64 || op == glslang::EOpConvUintToInt64 ||
-                op == glslang::EOpConvInt16ToUint64 || op == glslang::EOpConvUint16ToInt64)
-                zero = builder.makeUint64Constant(0);
-            else if (op == glslang::EOpConvIntToUint16 || op == glslang::EOpConvUintToInt16 ||
-                     op == glslang::EOpConvInt64ToUint16 || op == glslang::EOpConvUint64ToInt16)
+            switch(op) {
+            case glslang::EOpConvInt16ToUint8:
+            case glslang::EOpConvIntToUint8:
+            case glslang::EOpConvInt64ToUint8:
+            case glslang::EOpConvUint16ToInt8:
+            case glslang::EOpConvUintToInt8:
+            case glslang::EOpConvUint64ToInt8:
+                zero = builder.makeUint8Constant(0);
+                break;
+            case glslang::EOpConvInt8ToUint16:
+            case glslang::EOpConvIntToUint16:
+            case glslang::EOpConvInt64ToUint16:
+            case glslang::EOpConvUint8ToInt16:
+            case glslang::EOpConvUintToInt16:
+            case glslang::EOpConvUint64ToInt16:
                 zero = builder.makeUint16Constant(0);
-            else
+                break;
+            case glslang::EOpConvInt8ToUint:
+            case glslang::EOpConvInt16ToUint:
+            case glslang::EOpConvInt64ToUint:
+            case glslang::EOpConvUint8ToInt:
+            case glslang::EOpConvUint16ToInt:
+            case glslang::EOpConvUint64ToInt:
                 zero = builder.makeUintConstant(0);
-#else
-            if (op == glslang::EOpConvIntToUint64 || op == glslang::EOpConvUintToInt64)
+                break;
+            case glslang::EOpConvInt8ToUint64:
+            case glslang::EOpConvInt16ToUint64:
+            case glslang::EOpConvIntToUint64:
+            case glslang::EOpConvUint8ToInt64:
+            case glslang::EOpConvUint16ToInt64:
+            case glslang::EOpConvUintToInt64:
                 zero = builder.makeUint64Constant(0);
-            else
-                zero = builder.makeUintConstant(0);
-#endif
-
+                break;
+            default:
+                assert(false && "Default missing");
+                break;
+            }
             zero = makeSmearedConstant(zero, vectorSize);
             // Use OpIAdd, instead of OpBitcast to do the conversion when
             // generating for OpSpecConstantOp instruction.
@@ -5013,10 +5215,8 @@
 // Create group invocation operations.
 spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy)
 {
-#ifdef AMD_EXTENSIONS
-    bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64;
-    bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble || typeProxy == glslang::EbtFloat16;
-#endif
+    bool isUnsigned = isTypeUnsignedInt(typeProxy);
+    bool isFloat = isTypeFloat(typeProxy);
 
     spv::Op opCode = spv::OpNop;
     std::vector<spv::Id> spvGroupOperands;
@@ -5277,15 +5477,263 @@
     return builder.createCompositeConstruct(typeId, results);
 }
 
+// Create subgroup invocation operations.
+spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy)
+{
+    // Add the required capabilities.
+    switch (op) {
+    case glslang::EOpSubgroupElect:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        break;
+    case glslang::EOpSubgroupAll:
+    case glslang::EOpSubgroupAny:
+    case glslang::EOpSubgroupAllEqual:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        builder.addCapability(spv::CapabilityGroupNonUniformVote);
+        break;
+    case glslang::EOpSubgroupBroadcast:
+    case glslang::EOpSubgroupBroadcastFirst:
+    case glslang::EOpSubgroupBallot:
+    case glslang::EOpSubgroupInverseBallot:
+    case glslang::EOpSubgroupBallotBitExtract:
+    case glslang::EOpSubgroupBallotBitCount:
+    case glslang::EOpSubgroupBallotInclusiveBitCount:
+    case glslang::EOpSubgroupBallotExclusiveBitCount:
+    case glslang::EOpSubgroupBallotFindLSB:
+    case glslang::EOpSubgroupBallotFindMSB:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        builder.addCapability(spv::CapabilityGroupNonUniformBallot);
+        break;
+    case glslang::EOpSubgroupShuffle:
+    case glslang::EOpSubgroupShuffleXor:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        builder.addCapability(spv::CapabilityGroupNonUniformShuffle);
+        break;
+    case glslang::EOpSubgroupShuffleUp:
+    case glslang::EOpSubgroupShuffleDown:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        builder.addCapability(spv::CapabilityGroupNonUniformShuffleRelative);
+        break;
+    case glslang::EOpSubgroupAdd:
+    case glslang::EOpSubgroupMul:
+    case glslang::EOpSubgroupMin:
+    case glslang::EOpSubgroupMax:
+    case glslang::EOpSubgroupAnd:
+    case glslang::EOpSubgroupOr:
+    case glslang::EOpSubgroupXor:
+    case glslang::EOpSubgroupInclusiveAdd:
+    case glslang::EOpSubgroupInclusiveMul:
+    case glslang::EOpSubgroupInclusiveMin:
+    case glslang::EOpSubgroupInclusiveMax:
+    case glslang::EOpSubgroupInclusiveAnd:
+    case glslang::EOpSubgroupInclusiveOr:
+    case glslang::EOpSubgroupInclusiveXor:
+    case glslang::EOpSubgroupExclusiveAdd:
+    case glslang::EOpSubgroupExclusiveMul:
+    case glslang::EOpSubgroupExclusiveMin:
+    case glslang::EOpSubgroupExclusiveMax:
+    case glslang::EOpSubgroupExclusiveAnd:
+    case glslang::EOpSubgroupExclusiveOr:
+    case glslang::EOpSubgroupExclusiveXor:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        builder.addCapability(spv::CapabilityGroupNonUniformArithmetic);
+        break;
+    case glslang::EOpSubgroupClusteredAdd:
+    case glslang::EOpSubgroupClusteredMul:
+    case glslang::EOpSubgroupClusteredMin:
+    case glslang::EOpSubgroupClusteredMax:
+    case glslang::EOpSubgroupClusteredAnd:
+    case glslang::EOpSubgroupClusteredOr:
+    case glslang::EOpSubgroupClusteredXor:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        builder.addCapability(spv::CapabilityGroupNonUniformClustered);
+        break;
+    case glslang::EOpSubgroupQuadBroadcast:
+    case glslang::EOpSubgroupQuadSwapHorizontal:
+    case glslang::EOpSubgroupQuadSwapVertical:
+    case glslang::EOpSubgroupQuadSwapDiagonal:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        builder.addCapability(spv::CapabilityGroupNonUniformQuad);
+        break;
+    default: assert(0 && "Unhandled subgroup operation!");
+    }
+
+    const bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64;
+    const bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble;
+    const bool isBool = typeProxy == glslang::EbtBool;
+
+    spv::Op opCode = spv::OpNop;
+
+    // Figure out which opcode to use.
+    switch (op) {
+    case glslang::EOpSubgroupElect:                   opCode = spv::OpGroupNonUniformElect; break;
+    case glslang::EOpSubgroupAll:                     opCode = spv::OpGroupNonUniformAll; break;
+    case glslang::EOpSubgroupAny:                     opCode = spv::OpGroupNonUniformAny; break;
+    case glslang::EOpSubgroupAllEqual:                opCode = spv::OpGroupNonUniformAllEqual; break;
+    case glslang::EOpSubgroupBroadcast:               opCode = spv::OpGroupNonUniformBroadcast; break;
+    case glslang::EOpSubgroupBroadcastFirst:          opCode = spv::OpGroupNonUniformBroadcastFirst; break;
+    case glslang::EOpSubgroupBallot:                  opCode = spv::OpGroupNonUniformBallot; break;
+    case glslang::EOpSubgroupInverseBallot:           opCode = spv::OpGroupNonUniformInverseBallot; break;
+    case glslang::EOpSubgroupBallotBitExtract:        opCode = spv::OpGroupNonUniformBallotBitExtract; break;
+    case glslang::EOpSubgroupBallotBitCount:
+    case glslang::EOpSubgroupBallotInclusiveBitCount:
+    case glslang::EOpSubgroupBallotExclusiveBitCount: opCode = spv::OpGroupNonUniformBallotBitCount; break;
+    case glslang::EOpSubgroupBallotFindLSB:           opCode = spv::OpGroupNonUniformBallotFindLSB; break;
+    case glslang::EOpSubgroupBallotFindMSB:           opCode = spv::OpGroupNonUniformBallotFindMSB; break;
+    case glslang::EOpSubgroupShuffle:                 opCode = spv::OpGroupNonUniformShuffle; break;
+    case glslang::EOpSubgroupShuffleXor:              opCode = spv::OpGroupNonUniformShuffleXor; break;
+    case glslang::EOpSubgroupShuffleUp:               opCode = spv::OpGroupNonUniformShuffleUp; break;
+    case glslang::EOpSubgroupShuffleDown:             opCode = spv::OpGroupNonUniformShuffleDown; break;
+    case glslang::EOpSubgroupAdd:
+    case glslang::EOpSubgroupInclusiveAdd:
+    case glslang::EOpSubgroupExclusiveAdd:
+    case glslang::EOpSubgroupClusteredAdd:
+        if (isFloat) {
+            opCode = spv::OpGroupNonUniformFAdd;
+        } else {
+            opCode = spv::OpGroupNonUniformIAdd;
+        }
+        break;
+    case glslang::EOpSubgroupMul:
+    case glslang::EOpSubgroupInclusiveMul:
+    case glslang::EOpSubgroupExclusiveMul:
+    case glslang::EOpSubgroupClusteredMul:
+        if (isFloat) {
+            opCode = spv::OpGroupNonUniformFMul;
+        } else {
+            opCode = spv::OpGroupNonUniformIMul;
+        }
+        break;
+    case glslang::EOpSubgroupMin:
+    case glslang::EOpSubgroupInclusiveMin:
+    case glslang::EOpSubgroupExclusiveMin:
+    case glslang::EOpSubgroupClusteredMin:
+        if (isFloat) {
+            opCode = spv::OpGroupNonUniformFMin;
+        } else if (isUnsigned) {
+            opCode = spv::OpGroupNonUniformUMin;
+        } else {
+            opCode = spv::OpGroupNonUniformSMin;
+        }
+        break;
+    case glslang::EOpSubgroupMax:
+    case glslang::EOpSubgroupInclusiveMax:
+    case glslang::EOpSubgroupExclusiveMax:
+    case glslang::EOpSubgroupClusteredMax:
+        if (isFloat) {
+            opCode = spv::OpGroupNonUniformFMax;
+        } else if (isUnsigned) {
+            opCode = spv::OpGroupNonUniformUMax;
+        } else {
+            opCode = spv::OpGroupNonUniformSMax;
+        }
+        break;
+    case glslang::EOpSubgroupAnd:
+    case glslang::EOpSubgroupInclusiveAnd:
+    case glslang::EOpSubgroupExclusiveAnd:
+    case glslang::EOpSubgroupClusteredAnd:
+        if (isBool) {
+            opCode = spv::OpGroupNonUniformLogicalAnd;
+        } else {
+            opCode = spv::OpGroupNonUniformBitwiseAnd;
+        }
+        break;
+    case glslang::EOpSubgroupOr:
+    case glslang::EOpSubgroupInclusiveOr:
+    case glslang::EOpSubgroupExclusiveOr:
+    case glslang::EOpSubgroupClusteredOr:
+        if (isBool) {
+            opCode = spv::OpGroupNonUniformLogicalOr;
+        } else {
+            opCode = spv::OpGroupNonUniformBitwiseOr;
+        }
+        break;
+    case glslang::EOpSubgroupXor:
+    case glslang::EOpSubgroupInclusiveXor:
+    case glslang::EOpSubgroupExclusiveXor:
+    case glslang::EOpSubgroupClusteredXor:
+        if (isBool) {
+            opCode = spv::OpGroupNonUniformLogicalXor;
+        } else {
+            opCode = spv::OpGroupNonUniformBitwiseXor;
+        }
+        break;
+    case glslang::EOpSubgroupQuadBroadcast:      opCode = spv::OpGroupNonUniformQuadBroadcast; break;
+    case glslang::EOpSubgroupQuadSwapHorizontal:
+    case glslang::EOpSubgroupQuadSwapVertical:
+    case glslang::EOpSubgroupQuadSwapDiagonal:   opCode = spv::OpGroupNonUniformQuadSwap; break;
+    default: assert(0 && "Unhandled subgroup operation!");
+    }
+
+    std::vector<spv::Id> spvGroupOperands;
+
+    // Every operation begins with the Execution Scope operand.
+    spvGroupOperands.push_back(builder.makeUintConstant(spv::ScopeSubgroup));
+
+    // Next, for all operations that use a Group Operation, push that as an operand.
+    switch (op) {
+    default: break;
+    case glslang::EOpSubgroupBallotBitCount:
+    case glslang::EOpSubgroupAdd:
+    case glslang::EOpSubgroupMul:
+    case glslang::EOpSubgroupMin:
+    case glslang::EOpSubgroupMax:
+    case glslang::EOpSubgroupAnd:
+    case glslang::EOpSubgroupOr:
+    case glslang::EOpSubgroupXor:
+        spvGroupOperands.push_back(spv::GroupOperationReduce);
+        break;
+    case glslang::EOpSubgroupBallotInclusiveBitCount:
+    case glslang::EOpSubgroupInclusiveAdd:
+    case glslang::EOpSubgroupInclusiveMul:
+    case glslang::EOpSubgroupInclusiveMin:
+    case glslang::EOpSubgroupInclusiveMax:
+    case glslang::EOpSubgroupInclusiveAnd:
+    case glslang::EOpSubgroupInclusiveOr:
+    case glslang::EOpSubgroupInclusiveXor:
+        spvGroupOperands.push_back(spv::GroupOperationInclusiveScan);
+        break;
+    case glslang::EOpSubgroupBallotExclusiveBitCount:
+    case glslang::EOpSubgroupExclusiveAdd:
+    case glslang::EOpSubgroupExclusiveMul:
+    case glslang::EOpSubgroupExclusiveMin:
+    case glslang::EOpSubgroupExclusiveMax:
+    case glslang::EOpSubgroupExclusiveAnd:
+    case glslang::EOpSubgroupExclusiveOr:
+    case glslang::EOpSubgroupExclusiveXor:
+        spvGroupOperands.push_back(spv::GroupOperationExclusiveScan);
+        break;
+    case glslang::EOpSubgroupClusteredAdd:
+    case glslang::EOpSubgroupClusteredMul:
+    case glslang::EOpSubgroupClusteredMin:
+    case glslang::EOpSubgroupClusteredMax:
+    case glslang::EOpSubgroupClusteredAnd:
+    case glslang::EOpSubgroupClusteredOr:
+    case glslang::EOpSubgroupClusteredXor:
+        spvGroupOperands.push_back(spv::GroupOperationClusteredReduce);
+        break;
+    }
+
+    // Push back the operands next.
+    for (auto opIt : operands) {
+        spvGroupOperands.push_back(opIt);
+    }
+
+    // Some opcodes have additional operands.
+    switch (op) {
+    default: break;
+    case glslang::EOpSubgroupQuadSwapHorizontal: spvGroupOperands.push_back(builder.makeUintConstant(0)); break;
+    case glslang::EOpSubgroupQuadSwapVertical:   spvGroupOperands.push_back(builder.makeUintConstant(1)); break;
+    case glslang::EOpSubgroupQuadSwapDiagonal:   spvGroupOperands.push_back(builder.makeUintConstant(2)); break;
+    }
+
+    return builder.createOp(opCode, typeId, spvGroupOperands);
+}
+
 spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy)
 {
-#ifdef AMD_EXTENSIONS
-    bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64 || typeProxy == glslang::EbtUint16;
-    bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble || typeProxy == glslang::EbtFloat16;
-#else
-    bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64;
-    bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble;
-#endif
+    bool isUnsigned = isTypeUnsignedInt(typeProxy);
+    bool isFloat = isTypeFloat(typeProxy);
 
     spv::Op opCode = spv::OpNop;
     int extBuiltins = -1;
@@ -5422,11 +5870,7 @@
             libCall = spv::GLSLstd450FrexpStruct;
             assert(builder.isPointerType(typeId1));
             typeId1 = builder.getContainedTypeId(typeId1);
-#ifdef AMD_EXTENSIONS
             int width = builder.getScalarTypeWidth(typeId1);
-#else
-            int width = 32;
-#endif
             if (builder.getNumComponents(operands[0]) == 1)
                 frexpIntType = builder.makeIntegerType(width, true);
             else
@@ -5442,6 +5886,22 @@
     case glslang::EOpReadInvocation:
         return createInvocationsOperation(op, typeId, operands, typeProxy);
 
+    case glslang::EOpSubgroupBroadcast:
+    case glslang::EOpSubgroupBallotBitExtract:
+    case glslang::EOpSubgroupShuffle:
+    case glslang::EOpSubgroupShuffleXor:
+    case glslang::EOpSubgroupShuffleUp:
+    case glslang::EOpSubgroupShuffleDown:
+    case glslang::EOpSubgroupClusteredAdd:
+    case glslang::EOpSubgroupClusteredMul:
+    case glslang::EOpSubgroupClusteredMin:
+    case glslang::EOpSubgroupClusteredMax:
+    case glslang::EOpSubgroupClusteredAnd:
+    case glslang::EOpSubgroupClusteredOr:
+    case glslang::EOpSubgroupClusteredXor:
+    case glslang::EOpSubgroupQuadBroadcast:
+        return createSubgroupOperation(op, typeId, operands, typeProxy);
+
 #ifdef AMD_EXTENSIONS
     case glslang::EOpSwizzleInvocations:
         extBuiltins = getExtBuiltins(spv::E_SPV_AMD_shader_ballot);
@@ -5634,6 +6094,30 @@
                                         spv::MemorySemanticsWorkgroupMemoryMask |
                                         spv::MemorySemanticsAcquireReleaseMask);
         return 0;
+    case glslang::EOpSubgroupBarrier:
+        builder.createControlBarrier(spv::ScopeSubgroup, spv::ScopeSubgroup, spv::MemorySemanticsAllMemory |
+                                                                             spv::MemorySemanticsAcquireReleaseMask);
+        return spv::NoResult;
+    case glslang::EOpSubgroupMemoryBarrier:
+        builder.createMemoryBarrier(spv::ScopeSubgroup, spv::MemorySemanticsAllMemory |
+                                                        spv::MemorySemanticsAcquireReleaseMask);
+        return spv::NoResult;
+    case glslang::EOpSubgroupMemoryBarrierBuffer:
+        builder.createMemoryBarrier(spv::ScopeSubgroup, spv::MemorySemanticsUniformMemoryMask |
+                                                        spv::MemorySemanticsAcquireReleaseMask);
+        return spv::NoResult;
+    case glslang::EOpSubgroupMemoryBarrierImage:
+        builder.createMemoryBarrier(spv::ScopeSubgroup, spv::MemorySemanticsImageMemoryMask |
+                                                        spv::MemorySemanticsAcquireReleaseMask);
+        return spv::NoResult;
+    case glslang::EOpSubgroupMemoryBarrierShared:
+        builder.createMemoryBarrier(spv::ScopeSubgroup, spv::MemorySemanticsWorkgroupMemoryMask |
+                                                        spv::MemorySemanticsAcquireReleaseMask);
+        return spv::NoResult;
+    case glslang::EOpSubgroupElect: {
+        std::vector<spv::Id> operands;
+        return createSubgroupOperation(op, typeId, operands, glslang::EbtVoid);
+    }
 #ifdef AMD_EXTENSIONS
     case glslang::EOpTime:
     {
@@ -5876,6 +6360,18 @@
         for (unsigned int i = 0; i < (unsigned int)glslangType.getVectorSize(); ++i) {
             bool zero = nextConst >= consts.size();
             switch (glslangType.getBasicType()) {
+            case glslang::EbtInt8:
+                spvConsts.push_back(builder.makeInt8Constant(zero ? 0 : consts[nextConst].getI8Const()));
+                break;
+            case glslang::EbtUint8:
+                spvConsts.push_back(builder.makeUint8Constant(zero ? 0 : consts[nextConst].getU8Const()));
+                break;
+            case glslang::EbtInt16:
+                spvConsts.push_back(builder.makeInt16Constant(zero ? 0 : consts[nextConst].getI16Const()));
+                break;
+            case glslang::EbtUint16:
+                spvConsts.push_back(builder.makeUint16Constant(zero ? 0 : consts[nextConst].getU16Const()));
+                break;
             case glslang::EbtInt:
                 spvConsts.push_back(builder.makeIntConstant(zero ? 0 : consts[nextConst].getIConst()));
                 break;
@@ -5888,25 +6384,15 @@
             case glslang::EbtUint64:
                 spvConsts.push_back(builder.makeUint64Constant(zero ? 0 : consts[nextConst].getU64Const()));
                 break;
-#ifdef AMD_EXTENSIONS
-            case glslang::EbtInt16:
-                spvConsts.push_back(builder.makeInt16Constant(zero ? 0 : (short)consts[nextConst].getIConst()));
-                break;
-            case glslang::EbtUint16:
-                spvConsts.push_back(builder.makeUint16Constant(zero ? 0 : (unsigned short)consts[nextConst].getUConst()));
-                break;
-#endif
             case glslang::EbtFloat:
                 spvConsts.push_back(builder.makeFloatConstant(zero ? 0.0F : (float)consts[nextConst].getDConst()));
                 break;
             case glslang::EbtDouble:
                 spvConsts.push_back(builder.makeDoubleConstant(zero ? 0.0 : consts[nextConst].getDConst()));
                 break;
-#ifdef AMD_EXTENSIONS
             case glslang::EbtFloat16:
                 spvConsts.push_back(builder.makeFloat16Constant(zero ? 0.0F : (float)consts[nextConst].getDConst()));
                 break;
-#endif
             case glslang::EbtBool:
                 spvConsts.push_back(builder.makeBoolConstant(zero ? false : consts[nextConst].getBConst()));
                 break;
@@ -5921,6 +6407,18 @@
         bool zero = nextConst >= consts.size();
         spv::Id scalar = 0;
         switch (glslangType.getBasicType()) {
+        case glslang::EbtInt8:
+            scalar = builder.makeInt8Constant(zero ? 0 : consts[nextConst].getI8Const(), specConstant);
+            break;
+        case glslang::EbtUint8:
+            scalar = builder.makeUint8Constant(zero ? 0 : consts[nextConst].getU8Const(), specConstant);
+            break;
+        case glslang::EbtInt16:
+            scalar = builder.makeInt16Constant(zero ? 0 : consts[nextConst].getI16Const(), specConstant);
+            break;
+        case glslang::EbtUint16:
+            scalar = builder.makeUint16Constant(zero ? 0 : consts[nextConst].getU16Const(), specConstant);
+            break;
         case glslang::EbtInt:
             scalar = builder.makeIntConstant(zero ? 0 : consts[nextConst].getIConst(), specConstant);
             break;
@@ -5933,25 +6431,15 @@
         case glslang::EbtUint64:
             scalar = builder.makeUint64Constant(zero ? 0 : consts[nextConst].getU64Const(), specConstant);
             break;
-#ifdef AMD_EXTENSIONS
-        case glslang::EbtInt16:
-            scalar = builder.makeInt16Constant(zero ? 0 : (short)consts[nextConst].getIConst(), specConstant);
-            break;
-        case glslang::EbtUint16:
-            scalar = builder.makeUint16Constant(zero ? 0 : (unsigned short)consts[nextConst].getUConst(), specConstant);
-            break;
-#endif
         case glslang::EbtFloat:
             scalar = builder.makeFloatConstant(zero ? 0.0F : (float)consts[nextConst].getDConst(), specConstant);
             break;
         case glslang::EbtDouble:
             scalar = builder.makeDoubleConstant(zero ? 0.0 : consts[nextConst].getDConst(), specConstant);
             break;
-#ifdef AMD_EXTENSIONS
         case glslang::EbtFloat16:
             scalar = builder.makeFloat16Constant(zero ? 0.0F : (float)consts[nextConst].getDConst(), specConstant);
             break;
-#endif
         case glslang::EbtBool:
             scalar = builder.makeBoolConstant(zero ? false : consts[nextConst].getBConst(), specConstant);
             break;
diff --git a/SPIRV/SPVRemapper.cpp b/SPIRV/SPVRemapper.cpp
index 4e45cbb..4bac145 100755
--- a/SPIRV/SPVRemapper.cpp
+++ b/SPIRV/SPVRemapper.cpp
@@ -256,7 +256,7 @@
 
     spv::Id spirvbin_t::localId(spv::Id id, spv::Id newId)
     {
-        assert(id != spv::NoResult && newId != spv::NoResult);
+        //assert(id != spv::NoResult && newId != spv::NoResult);
 
         if (id > bound()) {
             error(std::string("ID out of range: ") + std::to_string(id));
diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp
index 245102b..081f198 100644
--- a/SPIRV/SpvBuilder.cpp
+++ b/SPIRV/SpvBuilder.cpp
@@ -46,9 +46,7 @@
 
 #include "SpvBuilder.h"
 
-#ifdef AMD_EXTENSIONS
-    #include "hex_float.h"
-#endif
+#include "hex_float.h"
 
 #ifndef _WIN32
     #include <cstdio>
@@ -194,6 +192,9 @@
 
     // deal with capabilities
     switch (width) {
+    case 8:
+        addCapability(CapabilityInt8);
+        break;
     case 16:
         addCapability(CapabilityInt16);
         break;
@@ -819,7 +820,6 @@
     return c->getResultId();
 }
 
-#ifdef AMD_EXTENSIONS
 Id Builder::makeFloat16Constant(float f16, bool specConstant)
 {
     Op opcode = specConstant ? OpSpecConstant : OpConstant;
@@ -847,7 +847,6 @@
 
     return c->getResultId();
 }
-#endif
 
 Id Builder::findCompositeConstant(Op typeClass, const std::vector<Id>& comps)
 {
diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h
index 154687d..d4d2719 100755
--- a/SPIRV/SpvBuilder.h
+++ b/SPIRV/SpvBuilder.h
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2014-2015 LunarG, Inc.
 // Copyright (C) 2015-2016 Google, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -66,6 +67,8 @@
 
     static const int maxMatrixSize = 4;
 
+    unsigned int getSpvVersion() const { return spvVersion; }
+
     void setSource(spv::SourceLanguage lang, int version)
     {
         source = lang;
@@ -212,19 +215,17 @@
 
     // For making new constants (will return old constant if the requested one was already made).
     Id makeBoolConstant(bool b, bool specConstant = false);
+    Id makeInt8Constant(int i, bool specConstant = false)        { return makeIntConstant(makeIntType(8),  (unsigned)i, specConstant); }
+    Id makeUint8Constant(unsigned u, bool specConstant = false)  { return makeIntConstant(makeUintType(8),           u, specConstant); }
+    Id makeInt16Constant(int i, bool specConstant = false)       { return makeIntConstant(makeIntType(16),  (unsigned)i, specConstant); }
+    Id makeUint16Constant(unsigned u, bool specConstant = false) { return makeIntConstant(makeUintType(16),           u, specConstant); }
     Id makeIntConstant(int i, bool specConstant = false)         { return makeIntConstant(makeIntType(32),  (unsigned)i, specConstant); }
     Id makeUintConstant(unsigned u, bool specConstant = false)   { return makeIntConstant(makeUintType(32),           u, specConstant); }
     Id makeInt64Constant(long long i, bool specConstant = false)            { return makeInt64Constant(makeIntType(64),  (unsigned long long)i, specConstant); }
     Id makeUint64Constant(unsigned long long u, bool specConstant = false)  { return makeInt64Constant(makeUintType(64),                     u, specConstant); }
-#ifdef AMD_EXTENSIONS
-    Id makeInt16Constant(short i, bool specConstant = false)        { return makeIntConstant(makeIntType(16),      (unsigned)((unsigned short)i), specConstant); }
-    Id makeUint16Constant(unsigned short u, bool specConstant = false)  { return makeIntConstant(makeUintType(16), (unsigned)u, specConstant); }
-#endif
     Id makeFloatConstant(float f, bool specConstant = false);
     Id makeDoubleConstant(double d, bool specConstant = false);
-#ifdef AMD_EXTENSIONS
     Id makeFloat16Constant(float f16, bool specConstant = false);
-#endif
 
     // Turn the array of constants into a proper spv constant of the requested type.
     Id makeCompositeConstant(Id type, const std::vector<Id>& comps, bool specConst = false);
@@ -331,7 +332,7 @@
     // Generally, the type of 'scalar' does not need to be the same type as the components in 'vector'.
     // The type of the created vector is a vector of components of the same type as the scalar.
     //
-    // Note: One of the arguments will change, with the result coming back that way rather than 
+    // Note: One of the arguments will change, with the result coming back that way rather than
     // through the return value.
     void promoteScalar(Decoration precision, Id& left, Id& right);
 
diff --git a/SPIRV/disassemble.cpp b/SPIRV/disassemble.cpp
index c950a66..c07dfc7 100644
--- a/SPIRV/disassemble.cpp
+++ b/SPIRV/disassemble.cpp
@@ -54,6 +54,7 @@
 #ifdef AMD_EXTENSIONS
         #include "GLSL.ext.AMD.h"
 #endif
+
 #ifdef NV_EXTENSIONS
         #include "GLSL.ext.NV.h"
 #endif
@@ -80,12 +81,15 @@
 // used to identify the extended instruction library imported when printing
 enum ExtInstSet {
     GLSL450Inst,
+
 #ifdef AMD_EXTENSIONS
     GLSLextAMDInst,
 #endif
+
 #ifdef NV_EXTENSIONS
     GLSLextNVInst,
 #endif
+
     OpenCLExtInst,
 };
 
@@ -653,7 +657,6 @@
 }
 #endif
 
-
 #ifdef NV_EXTENSIONS
 static const char* GLSLextNVGetDebugNames(const char* name, unsigned entrypoint)
 {
diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp
old mode 100755
new mode 100644
index 3629396..6171873
--- a/SPIRV/doc.cpp
+++ b/SPIRV/doc.cpp
@@ -725,7 +725,7 @@
     }
 }
 
-const int GroupOperationCeiling = 3;
+const int GroupOperationCeiling = 4;
 
 const char* GroupOperationString(int gop)
 {
@@ -735,6 +735,7 @@
     case 0:  return "Reduce";
     case 1:  return "InclusiveScan";
     case 2:  return "ExclusiveScan";
+    case 3:  return "ClusteredReduce";
 
     case GroupOperationCeiling:
     default: return "Bad";
@@ -833,6 +834,14 @@
     case 55: return "StorageImageReadWithoutFormat";
     case 56: return "StorageImageWriteWithoutFormat";
     case 57: return "MultiViewport";
+    case 61: return "GroupNonUniform";
+    case 62: return "GroupNonUniformVote";
+    case 63: return "GroupNonUniformArithmetic";
+    case 64: return "GroupNonUniformBallot";
+    case 65: return "GroupNonUniformShuffle";
+    case 66: return "GroupNonUniformShuffleRelative";
+    case 67: return "GroupNonUniformClustered";
+    case 68: return "GroupNonUniformQuad";
 
     case 4423: return "SubgroupBallotKHR";
     case 4427: return "DrawParameters";
@@ -1200,6 +1209,41 @@
 
     case OpModuleProcessed: return "OpModuleProcessed";
 
+    case 333: return "OpGroupNonUniformElect";
+    case 334: return "OpGroupNonUniformAll";
+    case 335: return "OpGroupNonUniformAny";
+    case 336: return "OpGroupNonUniformAllEqual";
+    case 337: return "OpGroupNonUniformBroadcast";
+    case 338: return "OpGroupNonUniformBroadcastFirst";
+    case 339: return "OpGroupNonUniformBallot";
+    case 340: return "OpGroupNonUniformInverseBallot";
+    case 341: return "OpGroupNonUniformBallotBitExtract";
+    case 342: return "OpGroupNonUniformBallotBitCount";
+    case 343: return "OpGroupNonUniformBallotFindLSB";
+    case 344: return "OpGroupNonUniformBallotFindMSB";
+    case 345: return "OpGroupNonUniformShuffle";
+    case 346: return "OpGroupNonUniformShuffleXor";
+    case 347: return "OpGroupNonUniformShuffleUp";
+    case 348: return "OpGroupNonUniformShuffleDown";
+    case 349: return "OpGroupNonUniformIAdd";
+    case 350: return "OpGroupNonUniformFAdd";
+    case 351: return "OpGroupNonUniformIMul";
+    case 352: return "OpGroupNonUniformFMul";
+    case 353: return "OpGroupNonUniformSMin";
+    case 354: return "OpGroupNonUniformUMin";
+    case 355: return "OpGroupNonUniformFMin";
+    case 356: return "OpGroupNonUniformSMax";
+    case 357: return "OpGroupNonUniformUMax";
+    case 358: return "OpGroupNonUniformFMax";
+    case 359: return "OpGroupNonUniformBitwiseAnd";
+    case 360: return "OpGroupNonUniformBitwiseOr";
+    case 361: return "OpGroupNonUniformBitwiseXor";
+    case 362: return "OpGroupNonUniformLogicalAnd";
+    case 363: return "OpGroupNonUniformLogicalOr";
+    case 364: return "OpGroupNonUniformLogicalXor";
+    case 365: return "OpGroupNonUniformQuadBroadcast";
+    case 366: return "OpGroupNonUniformQuadSwap";
+
     case 4421: return "OpSubgroupBallotKHR";
     case 4422: return "OpSubgroupFirstInvocationKHR";
     case 4428: return "OpSubgroupAllKHR";
@@ -2823,6 +2867,182 @@
     InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Wait Events'");
     InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Ret Event'");
 
+    InstructionDesc[OpGroupNonUniformElect].capabilities.push_back(CapabilityGroupNonUniform);
+    InstructionDesc[OpGroupNonUniformElect].operands.push(OperandScope, "'Execution'");
+
+    InstructionDesc[OpGroupNonUniformAll].capabilities.push_back(CapabilityGroupNonUniformVote);
+    InstructionDesc[OpGroupNonUniformAll].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformAll].operands.push(OperandId, "X");
+
+    InstructionDesc[OpGroupNonUniformAny].capabilities.push_back(CapabilityGroupNonUniformVote);
+    InstructionDesc[OpGroupNonUniformAny].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformAny].operands.push(OperandId, "X");
+
+    InstructionDesc[OpGroupNonUniformAllEqual].capabilities.push_back(CapabilityGroupNonUniformVote);
+    InstructionDesc[OpGroupNonUniformAllEqual].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformAllEqual].operands.push(OperandId, "X");
+
+    InstructionDesc[OpGroupNonUniformBroadcast].capabilities.push_back(CapabilityGroupNonUniformBallot);
+    InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandId, "ID");
+
+    InstructionDesc[OpGroupNonUniformBroadcastFirst].capabilities.push_back(CapabilityGroupNonUniformBallot);
+    InstructionDesc[OpGroupNonUniformBroadcastFirst].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformBroadcastFirst].operands.push(OperandId, "X");
+
+    InstructionDesc[OpGroupNonUniformBallot].capabilities.push_back(CapabilityGroupNonUniformBallot);
+    InstructionDesc[OpGroupNonUniformBallot].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformBallot].operands.push(OperandId, "X");
+
+    InstructionDesc[OpGroupNonUniformInverseBallot].capabilities.push_back(CapabilityGroupNonUniformBallot);
+    InstructionDesc[OpGroupNonUniformInverseBallot].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformInverseBallot].operands.push(OperandId, "X");
+
+    InstructionDesc[OpGroupNonUniformBallotBitExtract].capabilities.push_back(CapabilityGroupNonUniformBallot);
+    InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandId, "Bit");
+
+    InstructionDesc[OpGroupNonUniformBallotBitCount].capabilities.push_back(CapabilityGroupNonUniformBallot);
+    InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandId, "X");
+
+    InstructionDesc[OpGroupNonUniformBallotFindLSB].capabilities.push_back(CapabilityGroupNonUniformBallot);
+    InstructionDesc[OpGroupNonUniformBallotFindLSB].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformBallotFindLSB].operands.push(OperandId, "X");
+
+    InstructionDesc[OpGroupNonUniformBallotFindMSB].capabilities.push_back(CapabilityGroupNonUniformBallot);
+    InstructionDesc[OpGroupNonUniformBallotFindMSB].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformBallotFindMSB].operands.push(OperandId, "X");
+
+    InstructionDesc[OpGroupNonUniformShuffle].capabilities.push_back(CapabilityGroupNonUniformShuffle);
+    InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandId, "'Id'");
+
+    InstructionDesc[OpGroupNonUniformShuffleXor].capabilities.push_back(CapabilityGroupNonUniformShuffle);
+    InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandId, "Mask");
+
+    InstructionDesc[OpGroupNonUniformShuffleUp].capabilities.push_back(CapabilityGroupNonUniformShuffleRelative);
+    InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandId, "Offset");
+
+    InstructionDesc[OpGroupNonUniformShuffleDown].capabilities.push_back(CapabilityGroupNonUniformShuffleRelative);
+    InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandId, "Offset");
+
+    InstructionDesc[OpGroupNonUniformIAdd].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
+    InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandId, "'ClusterSize'", true);
+
+    InstructionDesc[OpGroupNonUniformFAdd].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
+    InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandId, "'ClusterSize'", true);
+
+    InstructionDesc[OpGroupNonUniformIMul].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
+    InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandId, "'ClusterSize'", true);
+
+    InstructionDesc[OpGroupNonUniformFMul].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
+    InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandId, "'ClusterSize'", true);
+
+    InstructionDesc[OpGroupNonUniformSMin].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
+    InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandId, "'ClusterSize'", true);
+
+    InstructionDesc[OpGroupNonUniformUMin].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
+    InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandId, "'ClusterSize'", true);
+
+    InstructionDesc[OpGroupNonUniformFMin].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
+    InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandId, "'ClusterSize'", true);
+
+    InstructionDesc[OpGroupNonUniformSMax].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
+    InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandId, "'ClusterSize'", true);
+
+    InstructionDesc[OpGroupNonUniformUMax].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
+    InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandId, "'ClusterSize'", true);
+
+    InstructionDesc[OpGroupNonUniformFMax].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
+    InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandId, "'ClusterSize'", true);
+
+    InstructionDesc[OpGroupNonUniformBitwiseAnd].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
+    InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandId, "'ClusterSize'", true);
+
+    InstructionDesc[OpGroupNonUniformBitwiseOr].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
+    InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandId, "'ClusterSize'", true);
+
+    InstructionDesc[OpGroupNonUniformBitwiseXor].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
+    InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandId, "'ClusterSize'", true);
+
+    InstructionDesc[OpGroupNonUniformLogicalAnd].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
+    InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandId, "'ClusterSize'", true);
+
+    InstructionDesc[OpGroupNonUniformLogicalOr].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
+    InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandId, "'ClusterSize'", true);
+
+    InstructionDesc[OpGroupNonUniformLogicalXor].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
+    InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandId, "'ClusterSize'", true);
+
+    InstructionDesc[OpGroupNonUniformQuadBroadcast].capabilities.push_back(CapabilityGroupNonUniformQuad);
+    InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandId, "'Id'");
+
+    InstructionDesc[OpGroupNonUniformQuadSwap].capabilities.push_back(CapabilityGroupNonUniformQuad);
+    InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandLiteralNumber, "'Direction'");
+
     InstructionDesc[OpSubgroupBallotKHR].operands.push(OperandId, "'Predicate'");
 
     InstructionDesc[OpSubgroupFirstInvocationKHR].operands.push(OperandId, "'Value'");
diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp
index f6227a1..1fc24fb 100755
--- a/SPIRV/spirv.hpp
+++ b/SPIRV/spirv.hpp
@@ -46,12 +46,12 @@
 
 typedef unsigned int Id;
 
-#define SPV_VERSION 0x10200
-#define SPV_REVISION 3
+#define SPV_VERSION 0x10300
+#define SPV_REVISION 1
 
 static const unsigned int MagicNumber = 0x07230203;
-static const unsigned int Version = 0x00010200;
-static const unsigned int Revision = 3;
+static const unsigned int Version = 0x00010300;
+static const unsigned int Revision = 1;
 static const unsigned int OpCodeMask = 0xffff;
 static const unsigned int WordCountShift = 16;
 
@@ -440,10 +440,15 @@
     BuiltInSubgroupLocalInvocationId = 41,
     BuiltInVertexIndex = 42,
     BuiltInInstanceIndex = 43,
+    BuiltInSubgroupEqMask = 4416,
     BuiltInSubgroupEqMaskKHR = 4416,
+    BuiltInSubgroupGeMask = 4417,
     BuiltInSubgroupGeMaskKHR = 4417,
+    BuiltInSubgroupGtMask = 4418,
     BuiltInSubgroupGtMaskKHR = 4418,
+    BuiltInSubgroupLeMask = 4419,
     BuiltInSubgroupLeMaskKHR = 4419,
+    BuiltInSubgroupLtMask = 4420,
     BuiltInSubgroupLtMaskKHR = 4420,
     BuiltInBaseVertex = 4424,
     BuiltInBaseInstance = 4425,
@@ -566,6 +571,7 @@
     GroupOperationReduce = 0,
     GroupOperationInclusiveScan = 1,
     GroupOperationExclusiveScan = 2,
+    GroupOperationClusteredReduce = 3,
     GroupOperationMax = 0x7fffffff,
 };
 
@@ -646,6 +652,14 @@
     CapabilitySubgroupDispatch = 58,
     CapabilityNamedBarrier = 59,
     CapabilityPipeStorage = 60,
+    CapabilityGroupNonUniform = 61,
+    CapabilityGroupNonUniformVote = 62,
+    CapabilityGroupNonUniformArithmetic = 63,
+    CapabilityGroupNonUniformBallot = 64,
+    CapabilityGroupNonUniformShuffle = 65,
+    CapabilityGroupNonUniformShuffleRelative = 66,
+    CapabilityGroupNonUniformClustered = 67,
+    CapabilityGroupNonUniformQuad = 68,
     CapabilitySubgroupBallotKHR = 4423,
     CapabilityDrawParameters = 4427,
     CapabilitySubgroupVoteKHR = 4431,
@@ -987,6 +1001,40 @@
     OpModuleProcessed = 330,
     OpExecutionModeId = 331,
     OpDecorateId = 332,
+    OpGroupNonUniformElect = 333,
+    OpGroupNonUniformAll = 334,
+    OpGroupNonUniformAny = 335,
+    OpGroupNonUniformAllEqual = 336,
+    OpGroupNonUniformBroadcast = 337,
+    OpGroupNonUniformBroadcastFirst = 338,
+    OpGroupNonUniformBallot = 339,
+    OpGroupNonUniformInverseBallot = 340,
+    OpGroupNonUniformBallotBitExtract = 341,
+    OpGroupNonUniformBallotBitCount = 342,
+    OpGroupNonUniformBallotFindLSB = 343,
+    OpGroupNonUniformBallotFindMSB = 344,
+    OpGroupNonUniformShuffle = 345,
+    OpGroupNonUniformShuffleXor = 346,
+    OpGroupNonUniformShuffleUp = 347,
+    OpGroupNonUniformShuffleDown = 348,
+    OpGroupNonUniformIAdd = 349,
+    OpGroupNonUniformFAdd = 350,
+    OpGroupNonUniformIMul = 351,
+    OpGroupNonUniformFMul = 352,
+    OpGroupNonUniformSMin = 353,
+    OpGroupNonUniformUMin = 354,
+    OpGroupNonUniformFMin = 355,
+    OpGroupNonUniformSMax = 356,
+    OpGroupNonUniformUMax = 357,
+    OpGroupNonUniformFMax = 358,
+    OpGroupNonUniformBitwiseAnd = 359,
+    OpGroupNonUniformBitwiseOr = 360,
+    OpGroupNonUniformBitwiseXor = 361,
+    OpGroupNonUniformLogicalAnd = 362,
+    OpGroupNonUniformLogicalOr = 363,
+    OpGroupNonUniformLogicalXor = 364,
+    OpGroupNonUniformQuadBroadcast = 365,
+    OpGroupNonUniformQuadSwap = 366,
     OpSubgroupBallotKHR = 4421,
     OpSubgroupFirstInvocationKHR = 4422,
     OpSubgroupAllKHR = 4428,
diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp
index 8452a68..e96680d 100644
--- a/StandAlone/StandAlone.cpp
+++ b/StandAlone/StandAlone.cpp
@@ -157,11 +157,14 @@
 const char* shaderStageName = nullptr;
 const char* variableName = nullptr;
 std::vector<std::string> IncludeDirectoryList;
-int ClientInputSemanticsVersion = 100;   // maps to, say, #define VULKAN 100
-int VulkanClientVersion = 100;           // would map to, say, Vulkan 1.0
-int OpenGLClientVersion = 450;           // doesn't influence anything yet, but maps to OpenGL 4.50
-unsigned int TargetVersion = 0x00010000; // maps to, say, SPIR-V 1.0
-std::vector<std::string> Processes;      // what should be recorded by OpModuleProcessed, or equivalent
+int ClientInputSemanticsVersion = 100;                  // maps to, say, #define VULKAN 100
+glslang::EshTargetClientVersion VulkanClientVersion =
+                          glslang::EShTargetVulkan_1_0; // would map to, say, Vulkan 1.0
+glslang::EshTargetClientVersion OpenGLClientVersion =
+                          glslang::EShTargetOpenGL_450; // doesn't influence anything yet, but maps to OpenGL 4.50
+glslang::EShTargetLanguageVersion TargetVersion =
+                          glslang::EShTargetSpv_1_0;    // maps to, say, SPIR-V 1.0
+std::vector<std::string> Processes;                     // what should be recorded by OpModuleProcessed, or equivalent
 
 // Per descriptor-set binding base data
 typedef std::map<unsigned int, unsigned int> TPerSetBaseBinding;
@@ -508,16 +511,20 @@
                         if (argc > 1) {
                             if (strcmp(argv[1], "vulkan1.0") == 0) {
                                 setVulkanSpv();
-                                VulkanClientVersion = 100;
+                                VulkanClientVersion = glslang::EShTargetVulkan_1_0;
+                            } else if (strcmp(argv[1], "vulkan1.1") == 0) {
+                                setVulkanSpv();
+                                TargetVersion = glslang::EShTargetSpv_1_3;
+                                VulkanClientVersion = glslang::EShTargetVulkan_1_1;
                             } else if (strcmp(argv[1], "opengl") == 0) {
                                 setOpenGlSpv();
-                                OpenGLClientVersion = 450;
+                                OpenGLClientVersion = glslang::EShTargetOpenGL_450;
                             } else
                                 Error("--target-env expected vulkan1.0 or opengl");
                         }
                         bumpArg();
                     } else if (lowerword == "variable-name" || // synonyms
-                        lowerword == "vn") {
+                               lowerword == "vn") {
                         Options |= EOptionOutputHexadecimal;
                         if (argc <= 1)
                             Error("no <C-variable-name> provided for --variable-name");
@@ -1373,8 +1380,9 @@
            "                                       using -S.\n"
            "  --suppress-warnings                  suppress GLSL warnings\n"
            "                                       (except as required by #extension : warn)\n"
-           "  --target-env {vulkan1.0|opengl}      set the execution environment code will\n"
-           "                                       execute in (as opposed to language\n"
+           "  --target-env {vulkan1.0 | vulkan1.1 | opengl} \n"
+           "                                       set execution environment that emitted code\n"
+           "                                       will execute in (as opposed to the language\n"
            "                                       semantics selected by --client) defaults:\n"
            "                                        'vulkan1.0' under '--client vulkan<ver>'\n"
            "                                        'opengl' under '--client opengl<ver>'\n"
diff --git a/Test/baseResults/120.frag.out b/Test/baseResults/120.frag.out
index 4f0b925..e63c001 100644
--- a/Test/baseResults/120.frag.out
+++ b/Test/baseResults/120.frag.out
@@ -52,7 +52,10 @@
 ERROR: 0:212: 'sampler2DRect' : Reserved word. 
 ERROR: 0:244: ':' :  wrong operand types: no operation ':' exists that takes a left-hand operand of type ' global void' and a right operand of type ' const int' (or there is no acceptable conversion)
 ERROR: 0:245: ':' :  wrong operand types: no operation ':' exists that takes a left-hand operand of type ' const int' and a right operand of type ' global void' (or there is no acceptable conversion)
-ERROR: 0:248: 'half floating-point suffix' : required extension not requested: GL_AMD_gpu_shader_half_float
+ERROR: 0:248: 'explicit types' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_half_float
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_float16
 ERROR: 0:248: 'half floating-point suffix' : not supported with this profile: none
 ERROR: 0:248: '' :  syntax error, unexpected IDENTIFIER, expecting COMMA or SEMICOLON
 ERROR: 56 compilation errors.  No code generated.
diff --git a/Test/baseResults/constFoldIntMin.frag.out b/Test/baseResults/constFoldIntMin.frag.out
index da5bc26..2c45ca8 100644
--- a/Test/baseResults/constFoldIntMin.frag.out
+++ b/Test/baseResults/constFoldIntMin.frag.out
@@ -10,7 +10,7 @@
 0:6        move second child to first child ( temp int16_t)
 0:6          'u' ( temp int16_t)
 0:6          Constant:
-0:6            32768 (const int)
+0:6            -32768 (const int16_t)
 0:7      Sequence
 0:7        move second child to first child ( temp int)
 0:7          'v' ( temp int)
@@ -25,7 +25,7 @@
 0:9        move second child to first child ( temp int16_t)
 0:9          'x' ( temp int16_t)
 0:9          Constant:
-0:9            0 (const int)
+0:9            0 (const int8_t)
 0:10      Sequence
 0:10        move second child to first child ( temp int)
 0:10          'y' ( temp int)
diff --git a/Test/baseResults/findFunction.frag.out b/Test/baseResults/findFunction.frag.out
new file mode 100644
index 0000000..ec4f3e4
--- /dev/null
+++ b/Test/baseResults/findFunction.frag.out
@@ -0,0 +1,233 @@
+findFunction.frag
+ERROR: 0:39: 'func' : ambiguous best function under implicit type conversion 
+ERROR: 0:40: 'func' : no matching overloaded function found 
+ERROR: 0:40: '=' :  cannot convert from ' const float' to ' temp int64_t'
+ERROR: 0:41: 'func' : no matching overloaded function found 
+ERROR: 0:41: '=' :  cannot convert from ' const float' to ' temp int64_t'
+ERROR: 0:44: 'func' : no matching overloaded function found 
+ERROR: 0:44: '=' :  cannot convert from ' const float' to ' temp int64_t'
+ERROR: 0:45: 'func' : ambiguous best function under implicit type conversion 
+ERROR: 8 compilation errors.  No code generated.
+
+
+Shader version: 450
+Requested GL_KHX_shader_explicit_arithmetic_types
+ERROR: node is still EOpNull!
+0:5  Function Definition: func(i81;i161;i161; ( global int64_t)
+0:5    Function Parameters: 
+0:5      'a' ( in int8_t)
+0:5      'b' ( in int16_t)
+0:5      'c' ( in int16_t)
+0:7    Sequence
+0:7      Branch: Return with expression
+0:7        Convert int16_t to int64 ( temp int64_t)
+0:7          inclusive-or ( temp int16_t)
+0:7            Convert int8_t to int16_t ( temp int16_t)
+0:7              'a' ( in int8_t)
+0:7            add ( temp int16_t)
+0:7              'b' ( in int16_t)
+0:7              'c' ( in int16_t)
+0:10  Function Definition: func(i81;i161;i1; ( global int64_t)
+0:10    Function Parameters: 
+0:10      'a' ( in int8_t)
+0:10      'b' ( in int16_t)
+0:10      'c' ( in int)
+0:12    Sequence
+0:12      Branch: Return with expression
+0:12        Convert int to int64 ( temp int64_t)
+0:12          inclusive-or ( temp int)
+0:12            Convert int8_t to int ( temp int)
+0:12              'a' ( in int8_t)
+0:12            subtract ( temp int)
+0:12              Convert int16_t to int ( temp int)
+0:12                'b' ( in int16_t)
+0:12              'c' ( in int)
+0:15  Function Definition: func(i1;i1;i1; ( global int64_t)
+0:15    Function Parameters: 
+0:15      'a' ( in int)
+0:15      'b' ( in int)
+0:15      'c' ( in int)
+0:17    Sequence
+0:17      Branch: Return with expression
+0:17        Convert int to int64 ( temp int64_t)
+0:17          add ( temp int)
+0:17            divide ( temp int)
+0:17              'a' ( in int)
+0:17              'b' ( in int)
+0:17            'c' ( in int)
+0:20  Function Definition: func(f161;f161;f1; ( global int64_t)
+0:20    Function Parameters: 
+0:20      'a' ( in float16_t)
+0:20      'b' ( in float16_t)
+0:20      'c' ( in float)
+0:22    Sequence
+0:22      Branch: Return with expression
+0:22        Convert float to int64 ( temp int64_t)
+0:22          subtract ( temp float)
+0:22            Convert float16_t to float ( temp float)
+0:22              'a' ( in float16_t)
+0:22            component-wise multiply ( temp float)
+0:22              Convert float16_t to float ( temp float)
+0:22                'b' ( in float16_t)
+0:22              'c' ( in float)
+0:25  Function Definition: func(f161;i161;f1; ( global int64_t)
+0:25    Function Parameters: 
+0:25      'a' ( in float16_t)
+0:25      'b' ( in int16_t)
+0:25      'c' ( in float)
+0:27    Sequence
+0:27      Branch: Return with expression
+0:27        Convert float to int64 ( temp int64_t)
+0:27          subtract ( temp float)
+0:27            Convert float16_t to float ( temp float)
+0:27              'a' ( in float16_t)
+0:27            component-wise multiply ( temp float)
+0:27              Convert int16_t to float ( temp float)
+0:27                'b' ( in int16_t)
+0:27              'c' ( in float)
+0:30  Function Definition: main( ( global void)
+0:30    Function Parameters: 
+0:?     Sequence
+0:38      Sequence
+0:38        move second child to first child ( temp int64_t)
+0:38          'b1' ( temp int64_t)
+0:38          Function Call: func(i81;i161;i1; ( global int64_t)
+0:38            'x' ( temp int8_t)
+0:38            'y' ( temp int16_t)
+0:38            'z' ( temp int)
+0:39      Sequence
+0:39        move second child to first child ( temp int64_t)
+0:39          'b2' ( temp int64_t)
+0:39          Function Call: func(f161;i161;f1; ( global int64_t)
+0:39            Convert int16_t to float16_t ( temp float16_t)
+0:39              'y' ( temp int16_t)
+0:39            'y' ( temp int16_t)
+0:39            Convert int to float ( temp float)
+0:39              'z' ( temp int)
+0:42      Sequence
+0:42        move second child to first child ( temp int64_t)
+0:42          'b5' ( temp int64_t)
+0:42          Function Call: func(f161;i161;f1; ( global int64_t)
+0:42            Convert int16_t to float16_t ( temp float16_t)
+0:42              'y' ( temp int16_t)
+0:42            'y' ( temp int16_t)
+0:42            Convert float16_t to float ( temp float)
+0:42              'f16' ( temp float16_t)
+0:43      Sequence
+0:43        move second child to first child ( temp int64_t)
+0:43          'b7' ( temp int64_t)
+0:43          Function Call: func(f161;f161;f1; ( global int64_t)
+0:43            'f16' ( temp float16_t)
+0:43            'f16' ( temp float16_t)
+0:43            Convert int16_t to float ( temp float)
+0:43              'y' ( temp int16_t)
+0:45      Sequence
+0:45        move second child to first child ( temp int64_t)
+0:45          'b9' ( temp int64_t)
+0:45          Function Call: func(f161;f161;f1; ( global int64_t)
+0:45            'f16' ( temp float16_t)
+0:45            Convert int8_t to float16_t ( temp float16_t)
+0:45              'x' ( temp int8_t)
+0:45            Convert float16_t to float ( temp float)
+0:45              'f16' ( temp float16_t)
+0:?   Linker Objects
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+Requested GL_KHX_shader_explicit_arithmetic_types
+ERROR: node is still EOpNull!
+0:10  Function Definition: func(i81;i161;i1; ( global int64_t)
+0:10    Function Parameters: 
+0:10      'a' ( in int8_t)
+0:10      'b' ( in int16_t)
+0:10      'c' ( in int)
+0:12    Sequence
+0:12      Branch: Return with expression
+0:12        Convert int to int64 ( temp int64_t)
+0:12          inclusive-or ( temp int)
+0:12            Convert int8_t to int ( temp int)
+0:12              'a' ( in int8_t)
+0:12            subtract ( temp int)
+0:12              Convert int16_t to int ( temp int)
+0:12                'b' ( in int16_t)
+0:12              'c' ( in int)
+0:20  Function Definition: func(f161;f161;f1; ( global int64_t)
+0:20    Function Parameters: 
+0:20      'a' ( in float16_t)
+0:20      'b' ( in float16_t)
+0:20      'c' ( in float)
+0:22    Sequence
+0:22      Branch: Return with expression
+0:22        Convert float to int64 ( temp int64_t)
+0:22          subtract ( temp float)
+0:22            Convert float16_t to float ( temp float)
+0:22              'a' ( in float16_t)
+0:22            component-wise multiply ( temp float)
+0:22              Convert float16_t to float ( temp float)
+0:22                'b' ( in float16_t)
+0:22              'c' ( in float)
+0:25  Function Definition: func(f161;i161;f1; ( global int64_t)
+0:25    Function Parameters: 
+0:25      'a' ( in float16_t)
+0:25      'b' ( in int16_t)
+0:25      'c' ( in float)
+0:27    Sequence
+0:27      Branch: Return with expression
+0:27        Convert float to int64 ( temp int64_t)
+0:27          subtract ( temp float)
+0:27            Convert float16_t to float ( temp float)
+0:27              'a' ( in float16_t)
+0:27            component-wise multiply ( temp float)
+0:27              Convert int16_t to float ( temp float)
+0:27                'b' ( in int16_t)
+0:27              'c' ( in float)
+0:30  Function Definition: main( ( global void)
+0:30    Function Parameters: 
+0:?     Sequence
+0:38      Sequence
+0:38        move second child to first child ( temp int64_t)
+0:38          'b1' ( temp int64_t)
+0:38          Function Call: func(i81;i161;i1; ( global int64_t)
+0:38            'x' ( temp int8_t)
+0:38            'y' ( temp int16_t)
+0:38            'z' ( temp int)
+0:39      Sequence
+0:39        move second child to first child ( temp int64_t)
+0:39          'b2' ( temp int64_t)
+0:39          Function Call: func(f161;i161;f1; ( global int64_t)
+0:39            Convert int16_t to float16_t ( temp float16_t)
+0:39              'y' ( temp int16_t)
+0:39            'y' ( temp int16_t)
+0:39            Convert int to float ( temp float)
+0:39              'z' ( temp int)
+0:42      Sequence
+0:42        move second child to first child ( temp int64_t)
+0:42          'b5' ( temp int64_t)
+0:42          Function Call: func(f161;i161;f1; ( global int64_t)
+0:42            Convert int16_t to float16_t ( temp float16_t)
+0:42              'y' ( temp int16_t)
+0:42            'y' ( temp int16_t)
+0:42            Convert float16_t to float ( temp float)
+0:42              'f16' ( temp float16_t)
+0:43      Sequence
+0:43        move second child to first child ( temp int64_t)
+0:43          'b7' ( temp int64_t)
+0:43          Function Call: func(f161;f161;f1; ( global int64_t)
+0:43            'f16' ( temp float16_t)
+0:43            'f16' ( temp float16_t)
+0:43            Convert int16_t to float ( temp float)
+0:43              'y' ( temp int16_t)
+0:45      Sequence
+0:45        move second child to first child ( temp int64_t)
+0:45          'b9' ( temp int64_t)
+0:45          Function Call: func(f161;f161;f1; ( global int64_t)
+0:45            'f16' ( temp float16_t)
+0:45            Convert int8_t to float16_t ( temp float16_t)
+0:45              'x' ( temp int8_t)
+0:45            Convert float16_t to float ( temp float)
+0:45              'f16' ( temp float16_t)
+0:?   Linker Objects
+
diff --git a/Test/baseResults/hlsl.wavebroadcast.comp.out b/Test/baseResults/hlsl.wavebroadcast.comp.out
new file mode 100644
index 0000000..e64dd45
--- /dev/null
+++ b/Test/baseResults/hlsl.wavebroadcast.comp.out
@@ -0,0 +1,2731 @@
+hlsl.wavebroadcast.comp
+Shader version: 500
+local_size = (32, 16, 1)
+0:? Sequence
+0:13  Function Definition: @CSMain(vu3; ( temp void)
+0:13    Function Parameters: 
+0:13      'dti' ( in 3-component vector of uint)
+0:?     Sequence
+0:14      move second child to first child ( temp 4-component vector of uint)
+0:14        u: direct index for structure ( temp 4-component vector of uint)
+0:14          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:14              Constant:
+0:14                0 (const uint)
+0:14            direct index ( temp uint)
+0:14              'dti' ( in 3-component vector of uint)
+0:14              Constant:
+0:14                0 (const int)
+0:14          Constant:
+0:14            0 (const int)
+0:14        subgroupShuffle ( temp 4-component vector of uint)
+0:14          u: direct index for structure ( temp 4-component vector of uint)
+0:14            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:14                Constant:
+0:14                  0 (const uint)
+0:14              direct index ( temp uint)
+0:14                'dti' ( in 3-component vector of uint)
+0:14                Constant:
+0:14                  0 (const int)
+0:14            Constant:
+0:14              0 (const int)
+0:14          Constant:
+0:14            13 (const uint)
+0:15      move second child to first child ( temp uint)
+0:15        direct index ( temp uint)
+0:15          u: direct index for structure ( temp 4-component vector of uint)
+0:15            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:15                Constant:
+0:15                  0 (const uint)
+0:15              direct index ( temp uint)
+0:15                'dti' ( in 3-component vector of uint)
+0:15                Constant:
+0:15                  0 (const int)
+0:15            Constant:
+0:15              0 (const int)
+0:15          Constant:
+0:15            0 (const int)
+0:15        subgroupShuffle ( temp uint)
+0:15          direct index ( temp uint)
+0:15            u: direct index for structure ( temp 4-component vector of uint)
+0:15              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:15                  Constant:
+0:15                    0 (const uint)
+0:15                direct index ( temp uint)
+0:15                  'dti' ( in 3-component vector of uint)
+0:15                  Constant:
+0:15                    0 (const int)
+0:15              Constant:
+0:15                0 (const int)
+0:15            Constant:
+0:15              0 (const int)
+0:15          Constant:
+0:15            13 (const uint)
+0:16      move second child to first child ( temp 2-component vector of uint)
+0:16        vector swizzle ( temp 2-component vector of uint)
+0:16          u: direct index for structure ( temp 4-component vector of uint)
+0:16            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:16                Constant:
+0:16                  0 (const uint)
+0:16              direct index ( temp uint)
+0:16                'dti' ( in 3-component vector of uint)
+0:16                Constant:
+0:16                  0 (const int)
+0:16            Constant:
+0:16              0 (const int)
+0:16          Sequence
+0:16            Constant:
+0:16              0 (const int)
+0:16            Constant:
+0:16              1 (const int)
+0:16        subgroupShuffle ( temp 2-component vector of uint)
+0:16          vector swizzle ( temp 2-component vector of uint)
+0:16            u: direct index for structure ( temp 4-component vector of uint)
+0:16              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:16                  Constant:
+0:16                    0 (const uint)
+0:16                direct index ( temp uint)
+0:16                  'dti' ( in 3-component vector of uint)
+0:16                  Constant:
+0:16                    0 (const int)
+0:16              Constant:
+0:16                0 (const int)
+0:16            Sequence
+0:16              Constant:
+0:16                0 (const int)
+0:16              Constant:
+0:16                1 (const int)
+0:16          Constant:
+0:16            13 (const uint)
+0:17      move second child to first child ( temp 3-component vector of uint)
+0:17        vector swizzle ( temp 3-component vector of uint)
+0:17          u: direct index for structure ( temp 4-component vector of uint)
+0:17            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:17                Constant:
+0:17                  0 (const uint)
+0:17              direct index ( temp uint)
+0:17                'dti' ( in 3-component vector of uint)
+0:17                Constant:
+0:17                  0 (const int)
+0:17            Constant:
+0:17              0 (const int)
+0:17          Sequence
+0:17            Constant:
+0:17              0 (const int)
+0:17            Constant:
+0:17              1 (const int)
+0:17            Constant:
+0:17              2 (const int)
+0:17        subgroupShuffle ( temp 3-component vector of uint)
+0:17          vector swizzle ( temp 3-component vector of uint)
+0:17            u: direct index for structure ( temp 4-component vector of uint)
+0:17              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:17                  Constant:
+0:17                    0 (const uint)
+0:17                direct index ( temp uint)
+0:17                  'dti' ( in 3-component vector of uint)
+0:17                  Constant:
+0:17                    0 (const int)
+0:17              Constant:
+0:17                0 (const int)
+0:17            Sequence
+0:17              Constant:
+0:17                0 (const int)
+0:17              Constant:
+0:17                1 (const int)
+0:17              Constant:
+0:17                2 (const int)
+0:17          Constant:
+0:17            13 (const uint)
+0:19      move second child to first child ( temp 4-component vector of int)
+0:19        i: direct index for structure ( temp 4-component vector of int)
+0:19          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:19              Constant:
+0:19                0 (const uint)
+0:19            direct index ( temp uint)
+0:19              'dti' ( in 3-component vector of uint)
+0:19              Constant:
+0:19                0 (const int)
+0:19          Constant:
+0:19            1 (const int)
+0:19        subgroupShuffle ( temp 4-component vector of int)
+0:19          i: direct index for structure ( temp 4-component vector of int)
+0:19            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:19                Constant:
+0:19                  0 (const uint)
+0:19              direct index ( temp uint)
+0:19                'dti' ( in 3-component vector of uint)
+0:19                Constant:
+0:19                  0 (const int)
+0:19            Constant:
+0:19              1 (const int)
+0:19          Constant:
+0:19            13 (const uint)
+0:20      move second child to first child ( temp int)
+0:20        direct index ( temp int)
+0:20          i: direct index for structure ( temp 4-component vector of int)
+0:20            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:20                Constant:
+0:20                  0 (const uint)
+0:20              direct index ( temp uint)
+0:20                'dti' ( in 3-component vector of uint)
+0:20                Constant:
+0:20                  0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20          Constant:
+0:20            0 (const int)
+0:20        subgroupShuffle ( temp int)
+0:20          direct index ( temp int)
+0:20            i: direct index for structure ( temp 4-component vector of int)
+0:20              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:20                  Constant:
+0:20                    0 (const uint)
+0:20                direct index ( temp uint)
+0:20                  'dti' ( in 3-component vector of uint)
+0:20                  Constant:
+0:20                    0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20            Constant:
+0:20              0 (const int)
+0:20          Constant:
+0:20            13 (const uint)
+0:21      move second child to first child ( temp 2-component vector of int)
+0:21        vector swizzle ( temp 2-component vector of int)
+0:21          i: direct index for structure ( temp 4-component vector of int)
+0:21            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:21                Constant:
+0:21                  0 (const uint)
+0:21              direct index ( temp uint)
+0:21                'dti' ( in 3-component vector of uint)
+0:21                Constant:
+0:21                  0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21          Sequence
+0:21            Constant:
+0:21              0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21        subgroupShuffle ( temp 2-component vector of int)
+0:21          vector swizzle ( temp 2-component vector of int)
+0:21            i: direct index for structure ( temp 4-component vector of int)
+0:21              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:21                  Constant:
+0:21                    0 (const uint)
+0:21                direct index ( temp uint)
+0:21                  'dti' ( in 3-component vector of uint)
+0:21                  Constant:
+0:21                    0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21            Sequence
+0:21              Constant:
+0:21                0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21          Constant:
+0:21            13 (const uint)
+0:22      move second child to first child ( temp 3-component vector of int)
+0:22        vector swizzle ( temp 3-component vector of int)
+0:22          i: direct index for structure ( temp 4-component vector of int)
+0:22            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:22                Constant:
+0:22                  0 (const uint)
+0:22              direct index ( temp uint)
+0:22                'dti' ( in 3-component vector of uint)
+0:22                Constant:
+0:22                  0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22          Sequence
+0:22            Constant:
+0:22              0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22            Constant:
+0:22              2 (const int)
+0:22        subgroupShuffle ( temp 3-component vector of int)
+0:22          vector swizzle ( temp 3-component vector of int)
+0:22            i: direct index for structure ( temp 4-component vector of int)
+0:22              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:22                  Constant:
+0:22                    0 (const uint)
+0:22                direct index ( temp uint)
+0:22                  'dti' ( in 3-component vector of uint)
+0:22                  Constant:
+0:22                    0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22            Sequence
+0:22              Constant:
+0:22                0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22              Constant:
+0:22                2 (const int)
+0:22          Constant:
+0:22            13 (const uint)
+0:24      move second child to first child ( temp 4-component vector of float)
+0:24        f: direct index for structure ( temp 4-component vector of float)
+0:24          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:24              Constant:
+0:24                0 (const uint)
+0:24            direct index ( temp uint)
+0:24              'dti' ( in 3-component vector of uint)
+0:24              Constant:
+0:24                0 (const int)
+0:24          Constant:
+0:24            2 (const int)
+0:24        subgroupShuffle ( temp 4-component vector of float)
+0:24          f: direct index for structure ( temp 4-component vector of float)
+0:24            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:24                Constant:
+0:24                  0 (const uint)
+0:24              direct index ( temp uint)
+0:24                'dti' ( in 3-component vector of uint)
+0:24                Constant:
+0:24                  0 (const int)
+0:24            Constant:
+0:24              2 (const int)
+0:24          Constant:
+0:24            13 (const uint)
+0:25      move second child to first child ( temp float)
+0:25        direct index ( temp float)
+0:25          f: direct index for structure ( temp 4-component vector of float)
+0:25            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:25                Constant:
+0:25                  0 (const uint)
+0:25              direct index ( temp uint)
+0:25                'dti' ( in 3-component vector of uint)
+0:25                Constant:
+0:25                  0 (const int)
+0:25            Constant:
+0:25              2 (const int)
+0:25          Constant:
+0:25            0 (const int)
+0:25        subgroupShuffle ( temp float)
+0:25          direct index ( temp float)
+0:25            f: direct index for structure ( temp 4-component vector of float)
+0:25              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:25                  Constant:
+0:25                    0 (const uint)
+0:25                direct index ( temp uint)
+0:25                  'dti' ( in 3-component vector of uint)
+0:25                  Constant:
+0:25                    0 (const int)
+0:25              Constant:
+0:25                2 (const int)
+0:25            Constant:
+0:25              0 (const int)
+0:25          Constant:
+0:25            13 (const uint)
+0:26      move second child to first child ( temp 2-component vector of float)
+0:26        vector swizzle ( temp 2-component vector of float)
+0:26          f: direct index for structure ( temp 4-component vector of float)
+0:26            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:26                Constant:
+0:26                  0 (const uint)
+0:26              direct index ( temp uint)
+0:26                'dti' ( in 3-component vector of uint)
+0:26                Constant:
+0:26                  0 (const int)
+0:26            Constant:
+0:26              2 (const int)
+0:26          Sequence
+0:26            Constant:
+0:26              0 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26        subgroupShuffle ( temp 2-component vector of float)
+0:26          vector swizzle ( temp 2-component vector of float)
+0:26            f: direct index for structure ( temp 4-component vector of float)
+0:26              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:26                  Constant:
+0:26                    0 (const uint)
+0:26                direct index ( temp uint)
+0:26                  'dti' ( in 3-component vector of uint)
+0:26                  Constant:
+0:26                    0 (const int)
+0:26              Constant:
+0:26                2 (const int)
+0:26            Sequence
+0:26              Constant:
+0:26                0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26          Constant:
+0:26            13 (const uint)
+0:27      move second child to first child ( temp 3-component vector of float)
+0:27        vector swizzle ( temp 3-component vector of float)
+0:27          f: direct index for structure ( temp 4-component vector of float)
+0:27            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:27                Constant:
+0:27                  0 (const uint)
+0:27              direct index ( temp uint)
+0:27                'dti' ( in 3-component vector of uint)
+0:27                Constant:
+0:27                  0 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27          Sequence
+0:27            Constant:
+0:27              0 (const int)
+0:27            Constant:
+0:27              1 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27        subgroupShuffle ( temp 3-component vector of float)
+0:27          vector swizzle ( temp 3-component vector of float)
+0:27            f: direct index for structure ( temp 4-component vector of float)
+0:27              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:27                  Constant:
+0:27                    0 (const uint)
+0:27                direct index ( temp uint)
+0:27                  'dti' ( in 3-component vector of uint)
+0:27                  Constant:
+0:27                    0 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:27            Sequence
+0:27              Constant:
+0:27                0 (const int)
+0:27              Constant:
+0:27                1 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:27          Constant:
+0:27            13 (const uint)
+0:29      move second child to first child ( temp 4-component vector of double)
+0:29        d: direct index for structure ( temp 4-component vector of double)
+0:29          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:29              Constant:
+0:29                0 (const uint)
+0:29            direct index ( temp uint)
+0:29              'dti' ( in 3-component vector of uint)
+0:29              Constant:
+0:29                0 (const int)
+0:29          Constant:
+0:29            3 (const int)
+0:29        subgroupBroadcastFirst ( temp 4-component vector of double)
+0:29          d: direct index for structure ( temp 4-component vector of double)
+0:29            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:29                Constant:
+0:29                  0 (const uint)
+0:29              direct index ( temp uint)
+0:29                'dti' ( in 3-component vector of uint)
+0:29                Constant:
+0:29                  0 (const int)
+0:29            Constant:
+0:29              3 (const int)
+0:30      move second child to first child ( temp double)
+0:30        direct index ( temp double)
+0:30          d: direct index for structure ( temp 4-component vector of double)
+0:30            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:30                Constant:
+0:30                  0 (const uint)
+0:30              direct index ( temp uint)
+0:30                'dti' ( in 3-component vector of uint)
+0:30                Constant:
+0:30                  0 (const int)
+0:30            Constant:
+0:30              3 (const int)
+0:30          Constant:
+0:30            0 (const int)
+0:30        subgroupBroadcastFirst ( temp double)
+0:30          direct index ( temp double)
+0:30            d: direct index for structure ( temp 4-component vector of double)
+0:30              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:30                  Constant:
+0:30                    0 (const uint)
+0:30                direct index ( temp uint)
+0:30                  'dti' ( in 3-component vector of uint)
+0:30                  Constant:
+0:30                    0 (const int)
+0:30              Constant:
+0:30                3 (const int)
+0:30            Constant:
+0:30              0 (const int)
+0:31      move second child to first child ( temp 2-component vector of double)
+0:31        vector swizzle ( temp 2-component vector of double)
+0:31          d: direct index for structure ( temp 4-component vector of double)
+0:31            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:31                Constant:
+0:31                  0 (const uint)
+0:31              direct index ( temp uint)
+0:31                'dti' ( in 3-component vector of uint)
+0:31                Constant:
+0:31                  0 (const int)
+0:31            Constant:
+0:31              3 (const int)
+0:31          Sequence
+0:31            Constant:
+0:31              0 (const int)
+0:31            Constant:
+0:31              1 (const int)
+0:31        subgroupBroadcastFirst ( temp 2-component vector of double)
+0:31          vector swizzle ( temp 2-component vector of double)
+0:31            d: direct index for structure ( temp 4-component vector of double)
+0:31              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:31                  Constant:
+0:31                    0 (const uint)
+0:31                direct index ( temp uint)
+0:31                  'dti' ( in 3-component vector of uint)
+0:31                  Constant:
+0:31                    0 (const int)
+0:31              Constant:
+0:31                3 (const int)
+0:31            Sequence
+0:31              Constant:
+0:31                0 (const int)
+0:31              Constant:
+0:31                1 (const int)
+0:32      move second child to first child ( temp 3-component vector of double)
+0:32        vector swizzle ( temp 3-component vector of double)
+0:32          d: direct index for structure ( temp 4-component vector of double)
+0:32            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:32                Constant:
+0:32                  0 (const uint)
+0:32              direct index ( temp uint)
+0:32                'dti' ( in 3-component vector of uint)
+0:32                Constant:
+0:32                  0 (const int)
+0:32            Constant:
+0:32              3 (const int)
+0:32          Sequence
+0:32            Constant:
+0:32              0 (const int)
+0:32            Constant:
+0:32              1 (const int)
+0:32            Constant:
+0:32              2 (const int)
+0:32        subgroupBroadcastFirst ( temp 3-component vector of double)
+0:32          vector swizzle ( temp 3-component vector of double)
+0:32            d: direct index for structure ( temp 4-component vector of double)
+0:32              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:32                  Constant:
+0:32                    0 (const uint)
+0:32                direct index ( temp uint)
+0:32                  'dti' ( in 3-component vector of uint)
+0:32                  Constant:
+0:32                    0 (const int)
+0:32              Constant:
+0:32                3 (const int)
+0:32            Sequence
+0:32              Constant:
+0:32                0 (const int)
+0:32              Constant:
+0:32                1 (const int)
+0:32              Constant:
+0:32                2 (const int)
+0:34      move second child to first child ( temp 4-component vector of uint)
+0:34        u: direct index for structure ( temp 4-component vector of uint)
+0:34          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:34              Constant:
+0:34                0 (const uint)
+0:34            direct index ( temp uint)
+0:34              'dti' ( in 3-component vector of uint)
+0:34              Constant:
+0:34                0 (const int)
+0:34          Constant:
+0:34            0 (const int)
+0:34        subgroupBroadcastFirst ( temp 4-component vector of uint)
+0:34          u: direct index for structure ( temp 4-component vector of uint)
+0:34            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:34                Constant:
+0:34                  0 (const uint)
+0:34              direct index ( temp uint)
+0:34                'dti' ( in 3-component vector of uint)
+0:34                Constant:
+0:34                  0 (const int)
+0:34            Constant:
+0:34              0 (const int)
+0:35      move second child to first child ( temp uint)
+0:35        direct index ( temp uint)
+0:35          u: direct index for structure ( temp 4-component vector of uint)
+0:35            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:35                Constant:
+0:35                  0 (const uint)
+0:35              direct index ( temp uint)
+0:35                'dti' ( in 3-component vector of uint)
+0:35                Constant:
+0:35                  0 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:35          Constant:
+0:35            0 (const int)
+0:35        subgroupBroadcastFirst ( temp uint)
+0:35          direct index ( temp uint)
+0:35            u: direct index for structure ( temp 4-component vector of uint)
+0:35              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:35                  Constant:
+0:35                    0 (const uint)
+0:35                direct index ( temp uint)
+0:35                  'dti' ( in 3-component vector of uint)
+0:35                  Constant:
+0:35                    0 (const int)
+0:35              Constant:
+0:35                0 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:36      move second child to first child ( temp 2-component vector of uint)
+0:36        vector swizzle ( temp 2-component vector of uint)
+0:36          u: direct index for structure ( temp 4-component vector of uint)
+0:36            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:36                Constant:
+0:36                  0 (const uint)
+0:36              direct index ( temp uint)
+0:36                'dti' ( in 3-component vector of uint)
+0:36                Constant:
+0:36                  0 (const int)
+0:36            Constant:
+0:36              0 (const int)
+0:36          Sequence
+0:36            Constant:
+0:36              0 (const int)
+0:36            Constant:
+0:36              1 (const int)
+0:36        subgroupBroadcastFirst ( temp 2-component vector of uint)
+0:36          vector swizzle ( temp 2-component vector of uint)
+0:36            u: direct index for structure ( temp 4-component vector of uint)
+0:36              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:36                  Constant:
+0:36                    0 (const uint)
+0:36                direct index ( temp uint)
+0:36                  'dti' ( in 3-component vector of uint)
+0:36                  Constant:
+0:36                    0 (const int)
+0:36              Constant:
+0:36                0 (const int)
+0:36            Sequence
+0:36              Constant:
+0:36                0 (const int)
+0:36              Constant:
+0:36                1 (const int)
+0:37      move second child to first child ( temp 3-component vector of uint)
+0:37        vector swizzle ( temp 3-component vector of uint)
+0:37          u: direct index for structure ( temp 4-component vector of uint)
+0:37            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:37                Constant:
+0:37                  0 (const uint)
+0:37              direct index ( temp uint)
+0:37                'dti' ( in 3-component vector of uint)
+0:37                Constant:
+0:37                  0 (const int)
+0:37            Constant:
+0:37              0 (const int)
+0:37          Sequence
+0:37            Constant:
+0:37              0 (const int)
+0:37            Constant:
+0:37              1 (const int)
+0:37            Constant:
+0:37              2 (const int)
+0:37        subgroupBroadcastFirst ( temp 3-component vector of uint)
+0:37          vector swizzle ( temp 3-component vector of uint)
+0:37            u: direct index for structure ( temp 4-component vector of uint)
+0:37              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:37                  Constant:
+0:37                    0 (const uint)
+0:37                direct index ( temp uint)
+0:37                  'dti' ( in 3-component vector of uint)
+0:37                  Constant:
+0:37                    0 (const int)
+0:37              Constant:
+0:37                0 (const int)
+0:37            Sequence
+0:37              Constant:
+0:37                0 (const int)
+0:37              Constant:
+0:37                1 (const int)
+0:37              Constant:
+0:37                2 (const int)
+0:39      move second child to first child ( temp 4-component vector of int)
+0:39        i: direct index for structure ( temp 4-component vector of int)
+0:39          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:39              Constant:
+0:39                0 (const uint)
+0:39            direct index ( temp uint)
+0:39              'dti' ( in 3-component vector of uint)
+0:39              Constant:
+0:39                0 (const int)
+0:39          Constant:
+0:39            1 (const int)
+0:39        subgroupBroadcastFirst ( temp 4-component vector of int)
+0:39          i: direct index for structure ( temp 4-component vector of int)
+0:39            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:39                Constant:
+0:39                  0 (const uint)
+0:39              direct index ( temp uint)
+0:39                'dti' ( in 3-component vector of uint)
+0:39                Constant:
+0:39                  0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:40      move second child to first child ( temp int)
+0:40        direct index ( temp int)
+0:40          i: direct index for structure ( temp 4-component vector of int)
+0:40            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:40                Constant:
+0:40                  0 (const uint)
+0:40              direct index ( temp uint)
+0:40                'dti' ( in 3-component vector of uint)
+0:40                Constant:
+0:40                  0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40          Constant:
+0:40            0 (const int)
+0:40        subgroupBroadcastFirst ( temp int)
+0:40          direct index ( temp int)
+0:40            i: direct index for structure ( temp 4-component vector of int)
+0:40              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:40                  Constant:
+0:40                    0 (const uint)
+0:40                direct index ( temp uint)
+0:40                  'dti' ( in 3-component vector of uint)
+0:40                  Constant:
+0:40                    0 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40            Constant:
+0:40              0 (const int)
+0:41      move second child to first child ( temp 2-component vector of int)
+0:41        vector swizzle ( temp 2-component vector of int)
+0:41          i: direct index for structure ( temp 4-component vector of int)
+0:41            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:41                Constant:
+0:41                  0 (const uint)
+0:41              direct index ( temp uint)
+0:41                'dti' ( in 3-component vector of uint)
+0:41                Constant:
+0:41                  0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41          Sequence
+0:41            Constant:
+0:41              0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41        subgroupBroadcastFirst ( temp 2-component vector of int)
+0:41          vector swizzle ( temp 2-component vector of int)
+0:41            i: direct index for structure ( temp 4-component vector of int)
+0:41              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:41                  Constant:
+0:41                    0 (const uint)
+0:41                direct index ( temp uint)
+0:41                  'dti' ( in 3-component vector of uint)
+0:41                  Constant:
+0:41                    0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:41            Sequence
+0:41              Constant:
+0:41                0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:42      move second child to first child ( temp 3-component vector of int)
+0:42        vector swizzle ( temp 3-component vector of int)
+0:42          i: direct index for structure ( temp 4-component vector of int)
+0:42            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:42                Constant:
+0:42                  0 (const uint)
+0:42              direct index ( temp uint)
+0:42                'dti' ( in 3-component vector of uint)
+0:42                Constant:
+0:42                  0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42          Sequence
+0:42            Constant:
+0:42              0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42            Constant:
+0:42              2 (const int)
+0:42        subgroupBroadcastFirst ( temp 3-component vector of int)
+0:42          vector swizzle ( temp 3-component vector of int)
+0:42            i: direct index for structure ( temp 4-component vector of int)
+0:42              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:42                  Constant:
+0:42                    0 (const uint)
+0:42                direct index ( temp uint)
+0:42                  'dti' ( in 3-component vector of uint)
+0:42                  Constant:
+0:42                    0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42            Sequence
+0:42              Constant:
+0:42                0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42              Constant:
+0:42                2 (const int)
+0:44      move second child to first child ( temp 4-component vector of float)
+0:44        f: direct index for structure ( temp 4-component vector of float)
+0:44          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:44              Constant:
+0:44                0 (const uint)
+0:44            direct index ( temp uint)
+0:44              'dti' ( in 3-component vector of uint)
+0:44              Constant:
+0:44                0 (const int)
+0:44          Constant:
+0:44            2 (const int)
+0:44        subgroupBroadcastFirst ( temp 4-component vector of float)
+0:44          f: direct index for structure ( temp 4-component vector of float)
+0:44            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:44                Constant:
+0:44                  0 (const uint)
+0:44              direct index ( temp uint)
+0:44                'dti' ( in 3-component vector of uint)
+0:44                Constant:
+0:44                  0 (const int)
+0:44            Constant:
+0:44              2 (const int)
+0:45      move second child to first child ( temp float)
+0:45        direct index ( temp float)
+0:45          f: direct index for structure ( temp 4-component vector of float)
+0:45            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:45                Constant:
+0:45                  0 (const uint)
+0:45              direct index ( temp uint)
+0:45                'dti' ( in 3-component vector of uint)
+0:45                Constant:
+0:45                  0 (const int)
+0:45            Constant:
+0:45              2 (const int)
+0:45          Constant:
+0:45            0 (const int)
+0:45        subgroupBroadcastFirst ( temp float)
+0:45          direct index ( temp float)
+0:45            f: direct index for structure ( temp 4-component vector of float)
+0:45              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:45                  Constant:
+0:45                    0 (const uint)
+0:45                direct index ( temp uint)
+0:45                  'dti' ( in 3-component vector of uint)
+0:45                  Constant:
+0:45                    0 (const int)
+0:45              Constant:
+0:45                2 (const int)
+0:45            Constant:
+0:45              0 (const int)
+0:46      move second child to first child ( temp 2-component vector of float)
+0:46        vector swizzle ( temp 2-component vector of float)
+0:46          f: direct index for structure ( temp 4-component vector of float)
+0:46            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:46                Constant:
+0:46                  0 (const uint)
+0:46              direct index ( temp uint)
+0:46                'dti' ( in 3-component vector of uint)
+0:46                Constant:
+0:46                  0 (const int)
+0:46            Constant:
+0:46              2 (const int)
+0:46          Sequence
+0:46            Constant:
+0:46              0 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46        subgroupBroadcastFirst ( temp 2-component vector of float)
+0:46          vector swizzle ( temp 2-component vector of float)
+0:46            f: direct index for structure ( temp 4-component vector of float)
+0:46              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:46                  Constant:
+0:46                    0 (const uint)
+0:46                direct index ( temp uint)
+0:46                  'dti' ( in 3-component vector of uint)
+0:46                  Constant:
+0:46                    0 (const int)
+0:46              Constant:
+0:46                2 (const int)
+0:46            Sequence
+0:46              Constant:
+0:46                0 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:47      move second child to first child ( temp 3-component vector of float)
+0:47        vector swizzle ( temp 3-component vector of float)
+0:47          f: direct index for structure ( temp 4-component vector of float)
+0:47            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:47                Constant:
+0:47                  0 (const uint)
+0:47              direct index ( temp uint)
+0:47                'dti' ( in 3-component vector of uint)
+0:47                Constant:
+0:47                  0 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47          Sequence
+0:47            Constant:
+0:47              0 (const int)
+0:47            Constant:
+0:47              1 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47        subgroupBroadcastFirst ( temp 3-component vector of float)
+0:47          vector swizzle ( temp 3-component vector of float)
+0:47            f: direct index for structure ( temp 4-component vector of float)
+0:47              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:47                  Constant:
+0:47                    0 (const uint)
+0:47                direct index ( temp uint)
+0:47                  'dti' ( in 3-component vector of uint)
+0:47                  Constant:
+0:47                    0 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:47            Sequence
+0:47              Constant:
+0:47                0 (const int)
+0:47              Constant:
+0:47                1 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:49      move second child to first child ( temp 4-component vector of double)
+0:49        d: direct index for structure ( temp 4-component vector of double)
+0:49          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:49              Constant:
+0:49                0 (const uint)
+0:49            direct index ( temp uint)
+0:49              'dti' ( in 3-component vector of uint)
+0:49              Constant:
+0:49                0 (const int)
+0:49          Constant:
+0:49            3 (const int)
+0:49        subgroupBroadcastFirst ( temp 4-component vector of double)
+0:49          d: direct index for structure ( temp 4-component vector of double)
+0:49            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:49                Constant:
+0:49                  0 (const uint)
+0:49              direct index ( temp uint)
+0:49                'dti' ( in 3-component vector of uint)
+0:49                Constant:
+0:49                  0 (const int)
+0:49            Constant:
+0:49              3 (const int)
+0:50      move second child to first child ( temp double)
+0:50        direct index ( temp double)
+0:50          d: direct index for structure ( temp 4-component vector of double)
+0:50            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:50                Constant:
+0:50                  0 (const uint)
+0:50              direct index ( temp uint)
+0:50                'dti' ( in 3-component vector of uint)
+0:50                Constant:
+0:50                  0 (const int)
+0:50            Constant:
+0:50              3 (const int)
+0:50          Constant:
+0:50            0 (const int)
+0:50        subgroupBroadcastFirst ( temp double)
+0:50          direct index ( temp double)
+0:50            d: direct index for structure ( temp 4-component vector of double)
+0:50              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:50                  Constant:
+0:50                    0 (const uint)
+0:50                direct index ( temp uint)
+0:50                  'dti' ( in 3-component vector of uint)
+0:50                  Constant:
+0:50                    0 (const int)
+0:50              Constant:
+0:50                3 (const int)
+0:50            Constant:
+0:50              0 (const int)
+0:51      move second child to first child ( temp 2-component vector of double)
+0:51        vector swizzle ( temp 2-component vector of double)
+0:51          d: direct index for structure ( temp 4-component vector of double)
+0:51            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:51                Constant:
+0:51                  0 (const uint)
+0:51              direct index ( temp uint)
+0:51                'dti' ( in 3-component vector of uint)
+0:51                Constant:
+0:51                  0 (const int)
+0:51            Constant:
+0:51              3 (const int)
+0:51          Sequence
+0:51            Constant:
+0:51              0 (const int)
+0:51            Constant:
+0:51              1 (const int)
+0:51        subgroupBroadcastFirst ( temp 2-component vector of double)
+0:51          vector swizzle ( temp 2-component vector of double)
+0:51            d: direct index for structure ( temp 4-component vector of double)
+0:51              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:51                  Constant:
+0:51                    0 (const uint)
+0:51                direct index ( temp uint)
+0:51                  'dti' ( in 3-component vector of uint)
+0:51                  Constant:
+0:51                    0 (const int)
+0:51              Constant:
+0:51                3 (const int)
+0:51            Sequence
+0:51              Constant:
+0:51                0 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:52      move second child to first child ( temp 3-component vector of double)
+0:52        vector swizzle ( temp 3-component vector of double)
+0:52          d: direct index for structure ( temp 4-component vector of double)
+0:52            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:52                Constant:
+0:52                  0 (const uint)
+0:52              direct index ( temp uint)
+0:52                'dti' ( in 3-component vector of uint)
+0:52                Constant:
+0:52                  0 (const int)
+0:52            Constant:
+0:52              3 (const int)
+0:52          Sequence
+0:52            Constant:
+0:52              0 (const int)
+0:52            Constant:
+0:52              1 (const int)
+0:52            Constant:
+0:52              2 (const int)
+0:52        subgroupBroadcastFirst ( temp 3-component vector of double)
+0:52          vector swizzle ( temp 3-component vector of double)
+0:52            d: direct index for structure ( temp 4-component vector of double)
+0:52              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:52                  Constant:
+0:52                    0 (const uint)
+0:52                direct index ( temp uint)
+0:52                  'dti' ( in 3-component vector of uint)
+0:52                  Constant:
+0:52                    0 (const int)
+0:52              Constant:
+0:52                3 (const int)
+0:52            Sequence
+0:52              Constant:
+0:52                0 (const int)
+0:52              Constant:
+0:52                1 (const int)
+0:52              Constant:
+0:52                2 (const int)
+0:13  Function Definition: CSMain( ( temp void)
+0:13    Function Parameters: 
+0:?     Sequence
+0:13      move second child to first child ( temp 3-component vector of uint)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?         'dti' ( in 3-component vector of uint GlobalInvocationID)
+0:13      Function Call: @CSMain(vu3; ( temp void)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?   Linker Objects
+0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
+
+
+Linked compute stage:
+
+
+Shader version: 500
+local_size = (32, 16, 1)
+0:? Sequence
+0:13  Function Definition: @CSMain(vu3; ( temp void)
+0:13    Function Parameters: 
+0:13      'dti' ( in 3-component vector of uint)
+0:?     Sequence
+0:14      move second child to first child ( temp 4-component vector of uint)
+0:14        u: direct index for structure ( temp 4-component vector of uint)
+0:14          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:14              Constant:
+0:14                0 (const uint)
+0:14            direct index ( temp uint)
+0:14              'dti' ( in 3-component vector of uint)
+0:14              Constant:
+0:14                0 (const int)
+0:14          Constant:
+0:14            0 (const int)
+0:14        subgroupShuffle ( temp 4-component vector of uint)
+0:14          u: direct index for structure ( temp 4-component vector of uint)
+0:14            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:14                Constant:
+0:14                  0 (const uint)
+0:14              direct index ( temp uint)
+0:14                'dti' ( in 3-component vector of uint)
+0:14                Constant:
+0:14                  0 (const int)
+0:14            Constant:
+0:14              0 (const int)
+0:14          Constant:
+0:14            13 (const uint)
+0:15      move second child to first child ( temp uint)
+0:15        direct index ( temp uint)
+0:15          u: direct index for structure ( temp 4-component vector of uint)
+0:15            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:15                Constant:
+0:15                  0 (const uint)
+0:15              direct index ( temp uint)
+0:15                'dti' ( in 3-component vector of uint)
+0:15                Constant:
+0:15                  0 (const int)
+0:15            Constant:
+0:15              0 (const int)
+0:15          Constant:
+0:15            0 (const int)
+0:15        subgroupShuffle ( temp uint)
+0:15          direct index ( temp uint)
+0:15            u: direct index for structure ( temp 4-component vector of uint)
+0:15              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:15                  Constant:
+0:15                    0 (const uint)
+0:15                direct index ( temp uint)
+0:15                  'dti' ( in 3-component vector of uint)
+0:15                  Constant:
+0:15                    0 (const int)
+0:15              Constant:
+0:15                0 (const int)
+0:15            Constant:
+0:15              0 (const int)
+0:15          Constant:
+0:15            13 (const uint)
+0:16      move second child to first child ( temp 2-component vector of uint)
+0:16        vector swizzle ( temp 2-component vector of uint)
+0:16          u: direct index for structure ( temp 4-component vector of uint)
+0:16            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:16                Constant:
+0:16                  0 (const uint)
+0:16              direct index ( temp uint)
+0:16                'dti' ( in 3-component vector of uint)
+0:16                Constant:
+0:16                  0 (const int)
+0:16            Constant:
+0:16              0 (const int)
+0:16          Sequence
+0:16            Constant:
+0:16              0 (const int)
+0:16            Constant:
+0:16              1 (const int)
+0:16        subgroupShuffle ( temp 2-component vector of uint)
+0:16          vector swizzle ( temp 2-component vector of uint)
+0:16            u: direct index for structure ( temp 4-component vector of uint)
+0:16              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:16                  Constant:
+0:16                    0 (const uint)
+0:16                direct index ( temp uint)
+0:16                  'dti' ( in 3-component vector of uint)
+0:16                  Constant:
+0:16                    0 (const int)
+0:16              Constant:
+0:16                0 (const int)
+0:16            Sequence
+0:16              Constant:
+0:16                0 (const int)
+0:16              Constant:
+0:16                1 (const int)
+0:16          Constant:
+0:16            13 (const uint)
+0:17      move second child to first child ( temp 3-component vector of uint)
+0:17        vector swizzle ( temp 3-component vector of uint)
+0:17          u: direct index for structure ( temp 4-component vector of uint)
+0:17            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:17                Constant:
+0:17                  0 (const uint)
+0:17              direct index ( temp uint)
+0:17                'dti' ( in 3-component vector of uint)
+0:17                Constant:
+0:17                  0 (const int)
+0:17            Constant:
+0:17              0 (const int)
+0:17          Sequence
+0:17            Constant:
+0:17              0 (const int)
+0:17            Constant:
+0:17              1 (const int)
+0:17            Constant:
+0:17              2 (const int)
+0:17        subgroupShuffle ( temp 3-component vector of uint)
+0:17          vector swizzle ( temp 3-component vector of uint)
+0:17            u: direct index for structure ( temp 4-component vector of uint)
+0:17              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:17                  Constant:
+0:17                    0 (const uint)
+0:17                direct index ( temp uint)
+0:17                  'dti' ( in 3-component vector of uint)
+0:17                  Constant:
+0:17                    0 (const int)
+0:17              Constant:
+0:17                0 (const int)
+0:17            Sequence
+0:17              Constant:
+0:17                0 (const int)
+0:17              Constant:
+0:17                1 (const int)
+0:17              Constant:
+0:17                2 (const int)
+0:17          Constant:
+0:17            13 (const uint)
+0:19      move second child to first child ( temp 4-component vector of int)
+0:19        i: direct index for structure ( temp 4-component vector of int)
+0:19          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:19              Constant:
+0:19                0 (const uint)
+0:19            direct index ( temp uint)
+0:19              'dti' ( in 3-component vector of uint)
+0:19              Constant:
+0:19                0 (const int)
+0:19          Constant:
+0:19            1 (const int)
+0:19        subgroupShuffle ( temp 4-component vector of int)
+0:19          i: direct index for structure ( temp 4-component vector of int)
+0:19            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:19                Constant:
+0:19                  0 (const uint)
+0:19              direct index ( temp uint)
+0:19                'dti' ( in 3-component vector of uint)
+0:19                Constant:
+0:19                  0 (const int)
+0:19            Constant:
+0:19              1 (const int)
+0:19          Constant:
+0:19            13 (const uint)
+0:20      move second child to first child ( temp int)
+0:20        direct index ( temp int)
+0:20          i: direct index for structure ( temp 4-component vector of int)
+0:20            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:20                Constant:
+0:20                  0 (const uint)
+0:20              direct index ( temp uint)
+0:20                'dti' ( in 3-component vector of uint)
+0:20                Constant:
+0:20                  0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20          Constant:
+0:20            0 (const int)
+0:20        subgroupShuffle ( temp int)
+0:20          direct index ( temp int)
+0:20            i: direct index for structure ( temp 4-component vector of int)
+0:20              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:20                  Constant:
+0:20                    0 (const uint)
+0:20                direct index ( temp uint)
+0:20                  'dti' ( in 3-component vector of uint)
+0:20                  Constant:
+0:20                    0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20            Constant:
+0:20              0 (const int)
+0:20          Constant:
+0:20            13 (const uint)
+0:21      move second child to first child ( temp 2-component vector of int)
+0:21        vector swizzle ( temp 2-component vector of int)
+0:21          i: direct index for structure ( temp 4-component vector of int)
+0:21            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:21                Constant:
+0:21                  0 (const uint)
+0:21              direct index ( temp uint)
+0:21                'dti' ( in 3-component vector of uint)
+0:21                Constant:
+0:21                  0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21          Sequence
+0:21            Constant:
+0:21              0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21        subgroupShuffle ( temp 2-component vector of int)
+0:21          vector swizzle ( temp 2-component vector of int)
+0:21            i: direct index for structure ( temp 4-component vector of int)
+0:21              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:21                  Constant:
+0:21                    0 (const uint)
+0:21                direct index ( temp uint)
+0:21                  'dti' ( in 3-component vector of uint)
+0:21                  Constant:
+0:21                    0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21            Sequence
+0:21              Constant:
+0:21                0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21          Constant:
+0:21            13 (const uint)
+0:22      move second child to first child ( temp 3-component vector of int)
+0:22        vector swizzle ( temp 3-component vector of int)
+0:22          i: direct index for structure ( temp 4-component vector of int)
+0:22            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:22                Constant:
+0:22                  0 (const uint)
+0:22              direct index ( temp uint)
+0:22                'dti' ( in 3-component vector of uint)
+0:22                Constant:
+0:22                  0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22          Sequence
+0:22            Constant:
+0:22              0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22            Constant:
+0:22              2 (const int)
+0:22        subgroupShuffle ( temp 3-component vector of int)
+0:22          vector swizzle ( temp 3-component vector of int)
+0:22            i: direct index for structure ( temp 4-component vector of int)
+0:22              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:22                  Constant:
+0:22                    0 (const uint)
+0:22                direct index ( temp uint)
+0:22                  'dti' ( in 3-component vector of uint)
+0:22                  Constant:
+0:22                    0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22            Sequence
+0:22              Constant:
+0:22                0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22              Constant:
+0:22                2 (const int)
+0:22          Constant:
+0:22            13 (const uint)
+0:24      move second child to first child ( temp 4-component vector of float)
+0:24        f: direct index for structure ( temp 4-component vector of float)
+0:24          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:24              Constant:
+0:24                0 (const uint)
+0:24            direct index ( temp uint)
+0:24              'dti' ( in 3-component vector of uint)
+0:24              Constant:
+0:24                0 (const int)
+0:24          Constant:
+0:24            2 (const int)
+0:24        subgroupShuffle ( temp 4-component vector of float)
+0:24          f: direct index for structure ( temp 4-component vector of float)
+0:24            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:24                Constant:
+0:24                  0 (const uint)
+0:24              direct index ( temp uint)
+0:24                'dti' ( in 3-component vector of uint)
+0:24                Constant:
+0:24                  0 (const int)
+0:24            Constant:
+0:24              2 (const int)
+0:24          Constant:
+0:24            13 (const uint)
+0:25      move second child to first child ( temp float)
+0:25        direct index ( temp float)
+0:25          f: direct index for structure ( temp 4-component vector of float)
+0:25            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:25                Constant:
+0:25                  0 (const uint)
+0:25              direct index ( temp uint)
+0:25                'dti' ( in 3-component vector of uint)
+0:25                Constant:
+0:25                  0 (const int)
+0:25            Constant:
+0:25              2 (const int)
+0:25          Constant:
+0:25            0 (const int)
+0:25        subgroupShuffle ( temp float)
+0:25          direct index ( temp float)
+0:25            f: direct index for structure ( temp 4-component vector of float)
+0:25              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:25                  Constant:
+0:25                    0 (const uint)
+0:25                direct index ( temp uint)
+0:25                  'dti' ( in 3-component vector of uint)
+0:25                  Constant:
+0:25                    0 (const int)
+0:25              Constant:
+0:25                2 (const int)
+0:25            Constant:
+0:25              0 (const int)
+0:25          Constant:
+0:25            13 (const uint)
+0:26      move second child to first child ( temp 2-component vector of float)
+0:26        vector swizzle ( temp 2-component vector of float)
+0:26          f: direct index for structure ( temp 4-component vector of float)
+0:26            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:26                Constant:
+0:26                  0 (const uint)
+0:26              direct index ( temp uint)
+0:26                'dti' ( in 3-component vector of uint)
+0:26                Constant:
+0:26                  0 (const int)
+0:26            Constant:
+0:26              2 (const int)
+0:26          Sequence
+0:26            Constant:
+0:26              0 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26        subgroupShuffle ( temp 2-component vector of float)
+0:26          vector swizzle ( temp 2-component vector of float)
+0:26            f: direct index for structure ( temp 4-component vector of float)
+0:26              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:26                  Constant:
+0:26                    0 (const uint)
+0:26                direct index ( temp uint)
+0:26                  'dti' ( in 3-component vector of uint)
+0:26                  Constant:
+0:26                    0 (const int)
+0:26              Constant:
+0:26                2 (const int)
+0:26            Sequence
+0:26              Constant:
+0:26                0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26          Constant:
+0:26            13 (const uint)
+0:27      move second child to first child ( temp 3-component vector of float)
+0:27        vector swizzle ( temp 3-component vector of float)
+0:27          f: direct index for structure ( temp 4-component vector of float)
+0:27            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:27                Constant:
+0:27                  0 (const uint)
+0:27              direct index ( temp uint)
+0:27                'dti' ( in 3-component vector of uint)
+0:27                Constant:
+0:27                  0 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27          Sequence
+0:27            Constant:
+0:27              0 (const int)
+0:27            Constant:
+0:27              1 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27        subgroupShuffle ( temp 3-component vector of float)
+0:27          vector swizzle ( temp 3-component vector of float)
+0:27            f: direct index for structure ( temp 4-component vector of float)
+0:27              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:27                  Constant:
+0:27                    0 (const uint)
+0:27                direct index ( temp uint)
+0:27                  'dti' ( in 3-component vector of uint)
+0:27                  Constant:
+0:27                    0 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:27            Sequence
+0:27              Constant:
+0:27                0 (const int)
+0:27              Constant:
+0:27                1 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:27          Constant:
+0:27            13 (const uint)
+0:29      move second child to first child ( temp 4-component vector of double)
+0:29        d: direct index for structure ( temp 4-component vector of double)
+0:29          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:29              Constant:
+0:29                0 (const uint)
+0:29            direct index ( temp uint)
+0:29              'dti' ( in 3-component vector of uint)
+0:29              Constant:
+0:29                0 (const int)
+0:29          Constant:
+0:29            3 (const int)
+0:29        subgroupBroadcastFirst ( temp 4-component vector of double)
+0:29          d: direct index for structure ( temp 4-component vector of double)
+0:29            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:29                Constant:
+0:29                  0 (const uint)
+0:29              direct index ( temp uint)
+0:29                'dti' ( in 3-component vector of uint)
+0:29                Constant:
+0:29                  0 (const int)
+0:29            Constant:
+0:29              3 (const int)
+0:30      move second child to first child ( temp double)
+0:30        direct index ( temp double)
+0:30          d: direct index for structure ( temp 4-component vector of double)
+0:30            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:30                Constant:
+0:30                  0 (const uint)
+0:30              direct index ( temp uint)
+0:30                'dti' ( in 3-component vector of uint)
+0:30                Constant:
+0:30                  0 (const int)
+0:30            Constant:
+0:30              3 (const int)
+0:30          Constant:
+0:30            0 (const int)
+0:30        subgroupBroadcastFirst ( temp double)
+0:30          direct index ( temp double)
+0:30            d: direct index for structure ( temp 4-component vector of double)
+0:30              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:30                  Constant:
+0:30                    0 (const uint)
+0:30                direct index ( temp uint)
+0:30                  'dti' ( in 3-component vector of uint)
+0:30                  Constant:
+0:30                    0 (const int)
+0:30              Constant:
+0:30                3 (const int)
+0:30            Constant:
+0:30              0 (const int)
+0:31      move second child to first child ( temp 2-component vector of double)
+0:31        vector swizzle ( temp 2-component vector of double)
+0:31          d: direct index for structure ( temp 4-component vector of double)
+0:31            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:31                Constant:
+0:31                  0 (const uint)
+0:31              direct index ( temp uint)
+0:31                'dti' ( in 3-component vector of uint)
+0:31                Constant:
+0:31                  0 (const int)
+0:31            Constant:
+0:31              3 (const int)
+0:31          Sequence
+0:31            Constant:
+0:31              0 (const int)
+0:31            Constant:
+0:31              1 (const int)
+0:31        subgroupBroadcastFirst ( temp 2-component vector of double)
+0:31          vector swizzle ( temp 2-component vector of double)
+0:31            d: direct index for structure ( temp 4-component vector of double)
+0:31              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:31                  Constant:
+0:31                    0 (const uint)
+0:31                direct index ( temp uint)
+0:31                  'dti' ( in 3-component vector of uint)
+0:31                  Constant:
+0:31                    0 (const int)
+0:31              Constant:
+0:31                3 (const int)
+0:31            Sequence
+0:31              Constant:
+0:31                0 (const int)
+0:31              Constant:
+0:31                1 (const int)
+0:32      move second child to first child ( temp 3-component vector of double)
+0:32        vector swizzle ( temp 3-component vector of double)
+0:32          d: direct index for structure ( temp 4-component vector of double)
+0:32            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:32                Constant:
+0:32                  0 (const uint)
+0:32              direct index ( temp uint)
+0:32                'dti' ( in 3-component vector of uint)
+0:32                Constant:
+0:32                  0 (const int)
+0:32            Constant:
+0:32              3 (const int)
+0:32          Sequence
+0:32            Constant:
+0:32              0 (const int)
+0:32            Constant:
+0:32              1 (const int)
+0:32            Constant:
+0:32              2 (const int)
+0:32        subgroupBroadcastFirst ( temp 3-component vector of double)
+0:32          vector swizzle ( temp 3-component vector of double)
+0:32            d: direct index for structure ( temp 4-component vector of double)
+0:32              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:32                  Constant:
+0:32                    0 (const uint)
+0:32                direct index ( temp uint)
+0:32                  'dti' ( in 3-component vector of uint)
+0:32                  Constant:
+0:32                    0 (const int)
+0:32              Constant:
+0:32                3 (const int)
+0:32            Sequence
+0:32              Constant:
+0:32                0 (const int)
+0:32              Constant:
+0:32                1 (const int)
+0:32              Constant:
+0:32                2 (const int)
+0:34      move second child to first child ( temp 4-component vector of uint)
+0:34        u: direct index for structure ( temp 4-component vector of uint)
+0:34          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:34              Constant:
+0:34                0 (const uint)
+0:34            direct index ( temp uint)
+0:34              'dti' ( in 3-component vector of uint)
+0:34              Constant:
+0:34                0 (const int)
+0:34          Constant:
+0:34            0 (const int)
+0:34        subgroupBroadcastFirst ( temp 4-component vector of uint)
+0:34          u: direct index for structure ( temp 4-component vector of uint)
+0:34            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:34                Constant:
+0:34                  0 (const uint)
+0:34              direct index ( temp uint)
+0:34                'dti' ( in 3-component vector of uint)
+0:34                Constant:
+0:34                  0 (const int)
+0:34            Constant:
+0:34              0 (const int)
+0:35      move second child to first child ( temp uint)
+0:35        direct index ( temp uint)
+0:35          u: direct index for structure ( temp 4-component vector of uint)
+0:35            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:35                Constant:
+0:35                  0 (const uint)
+0:35              direct index ( temp uint)
+0:35                'dti' ( in 3-component vector of uint)
+0:35                Constant:
+0:35                  0 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:35          Constant:
+0:35            0 (const int)
+0:35        subgroupBroadcastFirst ( temp uint)
+0:35          direct index ( temp uint)
+0:35            u: direct index for structure ( temp 4-component vector of uint)
+0:35              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:35                  Constant:
+0:35                    0 (const uint)
+0:35                direct index ( temp uint)
+0:35                  'dti' ( in 3-component vector of uint)
+0:35                  Constant:
+0:35                    0 (const int)
+0:35              Constant:
+0:35                0 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:36      move second child to first child ( temp 2-component vector of uint)
+0:36        vector swizzle ( temp 2-component vector of uint)
+0:36          u: direct index for structure ( temp 4-component vector of uint)
+0:36            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:36                Constant:
+0:36                  0 (const uint)
+0:36              direct index ( temp uint)
+0:36                'dti' ( in 3-component vector of uint)
+0:36                Constant:
+0:36                  0 (const int)
+0:36            Constant:
+0:36              0 (const int)
+0:36          Sequence
+0:36            Constant:
+0:36              0 (const int)
+0:36            Constant:
+0:36              1 (const int)
+0:36        subgroupBroadcastFirst ( temp 2-component vector of uint)
+0:36          vector swizzle ( temp 2-component vector of uint)
+0:36            u: direct index for structure ( temp 4-component vector of uint)
+0:36              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:36                  Constant:
+0:36                    0 (const uint)
+0:36                direct index ( temp uint)
+0:36                  'dti' ( in 3-component vector of uint)
+0:36                  Constant:
+0:36                    0 (const int)
+0:36              Constant:
+0:36                0 (const int)
+0:36            Sequence
+0:36              Constant:
+0:36                0 (const int)
+0:36              Constant:
+0:36                1 (const int)
+0:37      move second child to first child ( temp 3-component vector of uint)
+0:37        vector swizzle ( temp 3-component vector of uint)
+0:37          u: direct index for structure ( temp 4-component vector of uint)
+0:37            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:37                Constant:
+0:37                  0 (const uint)
+0:37              direct index ( temp uint)
+0:37                'dti' ( in 3-component vector of uint)
+0:37                Constant:
+0:37                  0 (const int)
+0:37            Constant:
+0:37              0 (const int)
+0:37          Sequence
+0:37            Constant:
+0:37              0 (const int)
+0:37            Constant:
+0:37              1 (const int)
+0:37            Constant:
+0:37              2 (const int)
+0:37        subgroupBroadcastFirst ( temp 3-component vector of uint)
+0:37          vector swizzle ( temp 3-component vector of uint)
+0:37            u: direct index for structure ( temp 4-component vector of uint)
+0:37              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:37                  Constant:
+0:37                    0 (const uint)
+0:37                direct index ( temp uint)
+0:37                  'dti' ( in 3-component vector of uint)
+0:37                  Constant:
+0:37                    0 (const int)
+0:37              Constant:
+0:37                0 (const int)
+0:37            Sequence
+0:37              Constant:
+0:37                0 (const int)
+0:37              Constant:
+0:37                1 (const int)
+0:37              Constant:
+0:37                2 (const int)
+0:39      move second child to first child ( temp 4-component vector of int)
+0:39        i: direct index for structure ( temp 4-component vector of int)
+0:39          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:39              Constant:
+0:39                0 (const uint)
+0:39            direct index ( temp uint)
+0:39              'dti' ( in 3-component vector of uint)
+0:39              Constant:
+0:39                0 (const int)
+0:39          Constant:
+0:39            1 (const int)
+0:39        subgroupBroadcastFirst ( temp 4-component vector of int)
+0:39          i: direct index for structure ( temp 4-component vector of int)
+0:39            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:39                Constant:
+0:39                  0 (const uint)
+0:39              direct index ( temp uint)
+0:39                'dti' ( in 3-component vector of uint)
+0:39                Constant:
+0:39                  0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:40      move second child to first child ( temp int)
+0:40        direct index ( temp int)
+0:40          i: direct index for structure ( temp 4-component vector of int)
+0:40            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:40                Constant:
+0:40                  0 (const uint)
+0:40              direct index ( temp uint)
+0:40                'dti' ( in 3-component vector of uint)
+0:40                Constant:
+0:40                  0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40          Constant:
+0:40            0 (const int)
+0:40        subgroupBroadcastFirst ( temp int)
+0:40          direct index ( temp int)
+0:40            i: direct index for structure ( temp 4-component vector of int)
+0:40              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:40                  Constant:
+0:40                    0 (const uint)
+0:40                direct index ( temp uint)
+0:40                  'dti' ( in 3-component vector of uint)
+0:40                  Constant:
+0:40                    0 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40            Constant:
+0:40              0 (const int)
+0:41      move second child to first child ( temp 2-component vector of int)
+0:41        vector swizzle ( temp 2-component vector of int)
+0:41          i: direct index for structure ( temp 4-component vector of int)
+0:41            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:41                Constant:
+0:41                  0 (const uint)
+0:41              direct index ( temp uint)
+0:41                'dti' ( in 3-component vector of uint)
+0:41                Constant:
+0:41                  0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41          Sequence
+0:41            Constant:
+0:41              0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41        subgroupBroadcastFirst ( temp 2-component vector of int)
+0:41          vector swizzle ( temp 2-component vector of int)
+0:41            i: direct index for structure ( temp 4-component vector of int)
+0:41              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:41                  Constant:
+0:41                    0 (const uint)
+0:41                direct index ( temp uint)
+0:41                  'dti' ( in 3-component vector of uint)
+0:41                  Constant:
+0:41                    0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:41            Sequence
+0:41              Constant:
+0:41                0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:42      move second child to first child ( temp 3-component vector of int)
+0:42        vector swizzle ( temp 3-component vector of int)
+0:42          i: direct index for structure ( temp 4-component vector of int)
+0:42            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:42                Constant:
+0:42                  0 (const uint)
+0:42              direct index ( temp uint)
+0:42                'dti' ( in 3-component vector of uint)
+0:42                Constant:
+0:42                  0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42          Sequence
+0:42            Constant:
+0:42              0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42            Constant:
+0:42              2 (const int)
+0:42        subgroupBroadcastFirst ( temp 3-component vector of int)
+0:42          vector swizzle ( temp 3-component vector of int)
+0:42            i: direct index for structure ( temp 4-component vector of int)
+0:42              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:42                  Constant:
+0:42                    0 (const uint)
+0:42                direct index ( temp uint)
+0:42                  'dti' ( in 3-component vector of uint)
+0:42                  Constant:
+0:42                    0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42            Sequence
+0:42              Constant:
+0:42                0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42              Constant:
+0:42                2 (const int)
+0:44      move second child to first child ( temp 4-component vector of float)
+0:44        f: direct index for structure ( temp 4-component vector of float)
+0:44          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:44              Constant:
+0:44                0 (const uint)
+0:44            direct index ( temp uint)
+0:44              'dti' ( in 3-component vector of uint)
+0:44              Constant:
+0:44                0 (const int)
+0:44          Constant:
+0:44            2 (const int)
+0:44        subgroupBroadcastFirst ( temp 4-component vector of float)
+0:44          f: direct index for structure ( temp 4-component vector of float)
+0:44            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:44                Constant:
+0:44                  0 (const uint)
+0:44              direct index ( temp uint)
+0:44                'dti' ( in 3-component vector of uint)
+0:44                Constant:
+0:44                  0 (const int)
+0:44            Constant:
+0:44              2 (const int)
+0:45      move second child to first child ( temp float)
+0:45        direct index ( temp float)
+0:45          f: direct index for structure ( temp 4-component vector of float)
+0:45            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:45                Constant:
+0:45                  0 (const uint)
+0:45              direct index ( temp uint)
+0:45                'dti' ( in 3-component vector of uint)
+0:45                Constant:
+0:45                  0 (const int)
+0:45            Constant:
+0:45              2 (const int)
+0:45          Constant:
+0:45            0 (const int)
+0:45        subgroupBroadcastFirst ( temp float)
+0:45          direct index ( temp float)
+0:45            f: direct index for structure ( temp 4-component vector of float)
+0:45              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:45                  Constant:
+0:45                    0 (const uint)
+0:45                direct index ( temp uint)
+0:45                  'dti' ( in 3-component vector of uint)
+0:45                  Constant:
+0:45                    0 (const int)
+0:45              Constant:
+0:45                2 (const int)
+0:45            Constant:
+0:45              0 (const int)
+0:46      move second child to first child ( temp 2-component vector of float)
+0:46        vector swizzle ( temp 2-component vector of float)
+0:46          f: direct index for structure ( temp 4-component vector of float)
+0:46            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:46                Constant:
+0:46                  0 (const uint)
+0:46              direct index ( temp uint)
+0:46                'dti' ( in 3-component vector of uint)
+0:46                Constant:
+0:46                  0 (const int)
+0:46            Constant:
+0:46              2 (const int)
+0:46          Sequence
+0:46            Constant:
+0:46              0 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46        subgroupBroadcastFirst ( temp 2-component vector of float)
+0:46          vector swizzle ( temp 2-component vector of float)
+0:46            f: direct index for structure ( temp 4-component vector of float)
+0:46              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:46                  Constant:
+0:46                    0 (const uint)
+0:46                direct index ( temp uint)
+0:46                  'dti' ( in 3-component vector of uint)
+0:46                  Constant:
+0:46                    0 (const int)
+0:46              Constant:
+0:46                2 (const int)
+0:46            Sequence
+0:46              Constant:
+0:46                0 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:47      move second child to first child ( temp 3-component vector of float)
+0:47        vector swizzle ( temp 3-component vector of float)
+0:47          f: direct index for structure ( temp 4-component vector of float)
+0:47            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:47                Constant:
+0:47                  0 (const uint)
+0:47              direct index ( temp uint)
+0:47                'dti' ( in 3-component vector of uint)
+0:47                Constant:
+0:47                  0 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47          Sequence
+0:47            Constant:
+0:47              0 (const int)
+0:47            Constant:
+0:47              1 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47        subgroupBroadcastFirst ( temp 3-component vector of float)
+0:47          vector swizzle ( temp 3-component vector of float)
+0:47            f: direct index for structure ( temp 4-component vector of float)
+0:47              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:47                  Constant:
+0:47                    0 (const uint)
+0:47                direct index ( temp uint)
+0:47                  'dti' ( in 3-component vector of uint)
+0:47                  Constant:
+0:47                    0 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:47            Sequence
+0:47              Constant:
+0:47                0 (const int)
+0:47              Constant:
+0:47                1 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:49      move second child to first child ( temp 4-component vector of double)
+0:49        d: direct index for structure ( temp 4-component vector of double)
+0:49          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:49              Constant:
+0:49                0 (const uint)
+0:49            direct index ( temp uint)
+0:49              'dti' ( in 3-component vector of uint)
+0:49              Constant:
+0:49                0 (const int)
+0:49          Constant:
+0:49            3 (const int)
+0:49        subgroupBroadcastFirst ( temp 4-component vector of double)
+0:49          d: direct index for structure ( temp 4-component vector of double)
+0:49            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:49                Constant:
+0:49                  0 (const uint)
+0:49              direct index ( temp uint)
+0:49                'dti' ( in 3-component vector of uint)
+0:49                Constant:
+0:49                  0 (const int)
+0:49            Constant:
+0:49              3 (const int)
+0:50      move second child to first child ( temp double)
+0:50        direct index ( temp double)
+0:50          d: direct index for structure ( temp 4-component vector of double)
+0:50            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:50                Constant:
+0:50                  0 (const uint)
+0:50              direct index ( temp uint)
+0:50                'dti' ( in 3-component vector of uint)
+0:50                Constant:
+0:50                  0 (const int)
+0:50            Constant:
+0:50              3 (const int)
+0:50          Constant:
+0:50            0 (const int)
+0:50        subgroupBroadcastFirst ( temp double)
+0:50          direct index ( temp double)
+0:50            d: direct index for structure ( temp 4-component vector of double)
+0:50              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:50                  Constant:
+0:50                    0 (const uint)
+0:50                direct index ( temp uint)
+0:50                  'dti' ( in 3-component vector of uint)
+0:50                  Constant:
+0:50                    0 (const int)
+0:50              Constant:
+0:50                3 (const int)
+0:50            Constant:
+0:50              0 (const int)
+0:51      move second child to first child ( temp 2-component vector of double)
+0:51        vector swizzle ( temp 2-component vector of double)
+0:51          d: direct index for structure ( temp 4-component vector of double)
+0:51            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:51                Constant:
+0:51                  0 (const uint)
+0:51              direct index ( temp uint)
+0:51                'dti' ( in 3-component vector of uint)
+0:51                Constant:
+0:51                  0 (const int)
+0:51            Constant:
+0:51              3 (const int)
+0:51          Sequence
+0:51            Constant:
+0:51              0 (const int)
+0:51            Constant:
+0:51              1 (const int)
+0:51        subgroupBroadcastFirst ( temp 2-component vector of double)
+0:51          vector swizzle ( temp 2-component vector of double)
+0:51            d: direct index for structure ( temp 4-component vector of double)
+0:51              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:51                  Constant:
+0:51                    0 (const uint)
+0:51                direct index ( temp uint)
+0:51                  'dti' ( in 3-component vector of uint)
+0:51                  Constant:
+0:51                    0 (const int)
+0:51              Constant:
+0:51                3 (const int)
+0:51            Sequence
+0:51              Constant:
+0:51                0 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:52      move second child to first child ( temp 3-component vector of double)
+0:52        vector swizzle ( temp 3-component vector of double)
+0:52          d: direct index for structure ( temp 4-component vector of double)
+0:52            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:52                Constant:
+0:52                  0 (const uint)
+0:52              direct index ( temp uint)
+0:52                'dti' ( in 3-component vector of uint)
+0:52                Constant:
+0:52                  0 (const int)
+0:52            Constant:
+0:52              3 (const int)
+0:52          Sequence
+0:52            Constant:
+0:52              0 (const int)
+0:52            Constant:
+0:52              1 (const int)
+0:52            Constant:
+0:52              2 (const int)
+0:52        subgroupBroadcastFirst ( temp 3-component vector of double)
+0:52          vector swizzle ( temp 3-component vector of double)
+0:52            d: direct index for structure ( temp 4-component vector of double)
+0:52              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:52                  Constant:
+0:52                    0 (const uint)
+0:52                direct index ( temp uint)
+0:52                  'dti' ( in 3-component vector of uint)
+0:52                  Constant:
+0:52                    0 (const int)
+0:52              Constant:
+0:52                3 (const int)
+0:52            Sequence
+0:52              Constant:
+0:52                0 (const int)
+0:52              Constant:
+0:52                1 (const int)
+0:52              Constant:
+0:52                2 (const int)
+0:13  Function Definition: CSMain( ( temp void)
+0:13    Function Parameters: 
+0:?     Sequence
+0:13      move second child to first child ( temp 3-component vector of uint)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?         'dti' ( in 3-component vector of uint GlobalInvocationID)
+0:13      Function Call: @CSMain(vu3; ( temp void)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?   Linker Objects
+0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
+
+// Module Version 10300
+// Generated by (magic number): 80005
+// Id's are bound by 359
+
+                              Capability Shader
+                              Capability Float64
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformBallot
+                              Capability GroupNonUniformShuffle
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "CSMain" 354
+                              ExecutionMode 4 LocalSize 32 16 1
+                              Source HLSL 500
+                              Name 4  "CSMain"
+                              Name 11  "@CSMain(vu3;"
+                              Name 10  "dti"
+                              Name 20  "Types"
+                              MemberName 20(Types) 0  "u"
+                              MemberName 20(Types) 1  "i"
+                              MemberName 20(Types) 2  "f"
+                              MemberName 20(Types) 3  "d"
+                              Name 22  "data"
+                              MemberName 22(data) 0  "@data"
+                              Name 24  "data"
+                              Name 352  "dti"
+                              Name 354  "dti"
+                              Name 356  "param"
+                              MemberDecorate 20(Types) 0 Offset 0
+                              MemberDecorate 20(Types) 1 Offset 16
+                              MemberDecorate 20(Types) 2 Offset 32
+                              MemberDecorate 20(Types) 3 Offset 64
+                              Decorate 21 ArrayStride 96
+                              MemberDecorate 22(data) 0 Offset 0
+                              Decorate 22(data) BufferBlock
+                              Decorate 24(data) DescriptorSet 0
+                              Decorate 354(dti) BuiltIn GlobalInvocationId
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 3
+               8:             TypePointer Function 7(ivec3)
+               9:             TypeFunction 2 8(ptr)
+              13:             TypeVector 6(int) 4
+              14:             TypeInt 32 1
+              15:             TypeVector 14(int) 4
+              16:             TypeFloat 32
+              17:             TypeVector 16(float) 4
+              18:             TypeFloat 64
+              19:             TypeVector 18(float) 4
+       20(Types):             TypeStruct 13(ivec4) 15(ivec4) 17(fvec4) 19(fvec4)
+              21:             TypeRuntimeArray 20(Types)
+        22(data):             TypeStruct 21
+              23:             TypePointer Uniform 22(data)
+        24(data):     23(ptr) Variable Uniform
+              25:     14(int) Constant 0
+              26:      6(int) Constant 0
+              27:             TypePointer Function 6(int)
+              32:             TypePointer Uniform 13(ivec4)
+              35:      6(int) Constant 13
+              36:      6(int) Constant 3
+              43:             TypePointer Uniform 6(int)
+              52:             TypeVector 6(int) 2
+              73:     14(int) Constant 1
+              76:             TypePointer Uniform 15(ivec4)
+              85:             TypePointer Uniform 14(int)
+              94:             TypeVector 14(int) 2
+             106:             TypeVector 14(int) 3
+             116:     14(int) Constant 2
+             119:             TypePointer Uniform 17(fvec4)
+             128:             TypePointer Uniform 16(float)
+             137:             TypeVector 16(float) 2
+             149:             TypeVector 16(float) 3
+             159:     14(int) Constant 3
+             162:             TypePointer Uniform 19(fvec4)
+             171:             TypePointer Uniform 18(float)
+             180:             TypeVector 18(float) 2
+             192:             TypeVector 18(float) 3
+             353:             TypePointer Input 7(ivec3)
+        354(dti):    353(ptr) Variable Input
+       4(CSMain):           2 Function None 3
+               5:             Label
+        352(dti):      8(ptr) Variable Function
+      356(param):      8(ptr) Variable Function
+             355:    7(ivec3) Load 354(dti)
+                              Store 352(dti) 355
+             357:    7(ivec3) Load 352(dti)
+                              Store 356(param) 357
+             358:           2 FunctionCall 11(@CSMain(vu3;) 356(param)
+                              Return
+                              FunctionEnd
+11(@CSMain(vu3;):           2 Function None 9
+         10(dti):      8(ptr) FunctionParameter
+              12:             Label
+              28:     27(ptr) AccessChain 10(dti) 26
+              29:      6(int) Load 28
+              30:     27(ptr) AccessChain 10(dti) 26
+              31:      6(int) Load 30
+              33:     32(ptr) AccessChain 24(data) 25 31 25
+              34:   13(ivec4) Load 33
+              37:   13(ivec4) GroupNonUniformShuffle 36 34 35
+              38:     32(ptr) AccessChain 24(data) 25 29 25
+                              Store 38 37
+              39:     27(ptr) AccessChain 10(dti) 26
+              40:      6(int) Load 39
+              41:     27(ptr) AccessChain 10(dti) 26
+              42:      6(int) Load 41
+              44:     43(ptr) AccessChain 24(data) 25 42 25 26
+              45:      6(int) Load 44
+              46:      6(int) GroupNonUniformShuffle 36 45 35
+              47:     43(ptr) AccessChain 24(data) 25 40 25 26
+                              Store 47 46
+              48:     27(ptr) AccessChain 10(dti) 26
+              49:      6(int) Load 48
+              50:     27(ptr) AccessChain 10(dti) 26
+              51:      6(int) Load 50
+              53:     32(ptr) AccessChain 24(data) 25 51 25
+              54:   13(ivec4) Load 53
+              55:   52(ivec2) VectorShuffle 54 54 0 1
+              56:   52(ivec2) GroupNonUniformShuffle 36 55 35
+              57:     32(ptr) AccessChain 24(data) 25 49 25
+              58:   13(ivec4) Load 57
+              59:   13(ivec4) VectorShuffle 58 56 4 5 2 3
+                              Store 57 59
+              60:     27(ptr) AccessChain 10(dti) 26
+              61:      6(int) Load 60
+              62:     27(ptr) AccessChain 10(dti) 26
+              63:      6(int) Load 62
+              64:     32(ptr) AccessChain 24(data) 25 63 25
+              65:   13(ivec4) Load 64
+              66:    7(ivec3) VectorShuffle 65 65 0 1 2
+              67:    7(ivec3) GroupNonUniformShuffle 36 66 35
+              68:     32(ptr) AccessChain 24(data) 25 61 25
+              69:   13(ivec4) Load 68
+              70:   13(ivec4) VectorShuffle 69 67 4 5 6 3
+                              Store 68 70
+              71:     27(ptr) AccessChain 10(dti) 26
+              72:      6(int) Load 71
+              74:     27(ptr) AccessChain 10(dti) 26
+              75:      6(int) Load 74
+              77:     76(ptr) AccessChain 24(data) 25 75 73
+              78:   15(ivec4) Load 77
+              79:   15(ivec4) GroupNonUniformShuffle 36 78 35
+              80:     76(ptr) AccessChain 24(data) 25 72 73
+                              Store 80 79
+              81:     27(ptr) AccessChain 10(dti) 26
+              82:      6(int) Load 81
+              83:     27(ptr) AccessChain 10(dti) 26
+              84:      6(int) Load 83
+              86:     85(ptr) AccessChain 24(data) 25 84 73 26
+              87:     14(int) Load 86
+              88:     14(int) GroupNonUniformShuffle 36 87 35
+              89:     85(ptr) AccessChain 24(data) 25 82 73 26
+                              Store 89 88
+              90:     27(ptr) AccessChain 10(dti) 26
+              91:      6(int) Load 90
+              92:     27(ptr) AccessChain 10(dti) 26
+              93:      6(int) Load 92
+              95:     76(ptr) AccessChain 24(data) 25 93 73
+              96:   15(ivec4) Load 95
+              97:   94(ivec2) VectorShuffle 96 96 0 1
+              98:   94(ivec2) GroupNonUniformShuffle 36 97 35
+              99:     76(ptr) AccessChain 24(data) 25 91 73
+             100:   15(ivec4) Load 99
+             101:   15(ivec4) VectorShuffle 100 98 4 5 2 3
+                              Store 99 101
+             102:     27(ptr) AccessChain 10(dti) 26
+             103:      6(int) Load 102
+             104:     27(ptr) AccessChain 10(dti) 26
+             105:      6(int) Load 104
+             107:     76(ptr) AccessChain 24(data) 25 105 73
+             108:   15(ivec4) Load 107
+             109:  106(ivec3) VectorShuffle 108 108 0 1 2
+             110:  106(ivec3) GroupNonUniformShuffle 36 109 35
+             111:     76(ptr) AccessChain 24(data) 25 103 73
+             112:   15(ivec4) Load 111
+             113:   15(ivec4) VectorShuffle 112 110 4 5 6 3
+                              Store 111 113
+             114:     27(ptr) AccessChain 10(dti) 26
+             115:      6(int) Load 114
+             117:     27(ptr) AccessChain 10(dti) 26
+             118:      6(int) Load 117
+             120:    119(ptr) AccessChain 24(data) 25 118 116
+             121:   17(fvec4) Load 120
+             122:   17(fvec4) GroupNonUniformShuffle 36 121 35
+             123:    119(ptr) AccessChain 24(data) 25 115 116
+                              Store 123 122
+             124:     27(ptr) AccessChain 10(dti) 26
+             125:      6(int) Load 124
+             126:     27(ptr) AccessChain 10(dti) 26
+             127:      6(int) Load 126
+             129:    128(ptr) AccessChain 24(data) 25 127 116 26
+             130:   16(float) Load 129
+             131:   16(float) GroupNonUniformShuffle 36 130 35
+             132:    128(ptr) AccessChain 24(data) 25 125 116 26
+                              Store 132 131
+             133:     27(ptr) AccessChain 10(dti) 26
+             134:      6(int) Load 133
+             135:     27(ptr) AccessChain 10(dti) 26
+             136:      6(int) Load 135
+             138:    119(ptr) AccessChain 24(data) 25 136 116
+             139:   17(fvec4) Load 138
+             140:  137(fvec2) VectorShuffle 139 139 0 1
+             141:  137(fvec2) GroupNonUniformShuffle 36 140 35
+             142:    119(ptr) AccessChain 24(data) 25 134 116
+             143:   17(fvec4) Load 142
+             144:   17(fvec4) VectorShuffle 143 141 4 5 2 3
+                              Store 142 144
+             145:     27(ptr) AccessChain 10(dti) 26
+             146:      6(int) Load 145
+             147:     27(ptr) AccessChain 10(dti) 26
+             148:      6(int) Load 147
+             150:    119(ptr) AccessChain 24(data) 25 148 116
+             151:   17(fvec4) Load 150
+             152:  149(fvec3) VectorShuffle 151 151 0 1 2
+             153:  149(fvec3) GroupNonUniformShuffle 36 152 35
+             154:    119(ptr) AccessChain 24(data) 25 146 116
+             155:   17(fvec4) Load 154
+             156:   17(fvec4) VectorShuffle 155 153 4 5 6 3
+                              Store 154 156
+             157:     27(ptr) AccessChain 10(dti) 26
+             158:      6(int) Load 157
+             160:     27(ptr) AccessChain 10(dti) 26
+             161:      6(int) Load 160
+             163:    162(ptr) AccessChain 24(data) 25 161 159
+             164:   19(fvec4) Load 163
+             165:   19(fvec4) GroupNonUniformBroadcastFirst 36 164
+             166:    162(ptr) AccessChain 24(data) 25 158 159
+                              Store 166 165
+             167:     27(ptr) AccessChain 10(dti) 26
+             168:      6(int) Load 167
+             169:     27(ptr) AccessChain 10(dti) 26
+             170:      6(int) Load 169
+             172:    171(ptr) AccessChain 24(data) 25 170 159 26
+             173:   18(float) Load 172
+             174:   18(float) GroupNonUniformBroadcastFirst 36 173
+             175:    171(ptr) AccessChain 24(data) 25 168 159 26
+                              Store 175 174
+             176:     27(ptr) AccessChain 10(dti) 26
+             177:      6(int) Load 176
+             178:     27(ptr) AccessChain 10(dti) 26
+             179:      6(int) Load 178
+             181:    162(ptr) AccessChain 24(data) 25 179 159
+             182:   19(fvec4) Load 181
+             183:  180(fvec2) VectorShuffle 182 182 0 1
+             184:  180(fvec2) GroupNonUniformBroadcastFirst 36 183
+             185:    162(ptr) AccessChain 24(data) 25 177 159
+             186:   19(fvec4) Load 185
+             187:   19(fvec4) VectorShuffle 186 184 4 5 2 3
+                              Store 185 187
+             188:     27(ptr) AccessChain 10(dti) 26
+             189:      6(int) Load 188
+             190:     27(ptr) AccessChain 10(dti) 26
+             191:      6(int) Load 190
+             193:    162(ptr) AccessChain 24(data) 25 191 159
+             194:   19(fvec4) Load 193
+             195:  192(fvec3) VectorShuffle 194 194 0 1 2
+             196:  192(fvec3) GroupNonUniformBroadcastFirst 36 195
+             197:    162(ptr) AccessChain 24(data) 25 189 159
+             198:   19(fvec4) Load 197
+             199:   19(fvec4) VectorShuffle 198 196 4 5 6 3
+                              Store 197 199
+             200:     27(ptr) AccessChain 10(dti) 26
+             201:      6(int) Load 200
+             202:     27(ptr) AccessChain 10(dti) 26
+             203:      6(int) Load 202
+             204:     32(ptr) AccessChain 24(data) 25 203 25
+             205:   13(ivec4) Load 204
+             206:   13(ivec4) GroupNonUniformBroadcastFirst 36 205
+             207:     32(ptr) AccessChain 24(data) 25 201 25
+                              Store 207 206
+             208:     27(ptr) AccessChain 10(dti) 26
+             209:      6(int) Load 208
+             210:     27(ptr) AccessChain 10(dti) 26
+             211:      6(int) Load 210
+             212:     43(ptr) AccessChain 24(data) 25 211 25 26
+             213:      6(int) Load 212
+             214:      6(int) GroupNonUniformBroadcastFirst 36 213
+             215:     43(ptr) AccessChain 24(data) 25 209 25 26
+                              Store 215 214
+             216:     27(ptr) AccessChain 10(dti) 26
+             217:      6(int) Load 216
+             218:     27(ptr) AccessChain 10(dti) 26
+             219:      6(int) Load 218
+             220:     32(ptr) AccessChain 24(data) 25 219 25
+             221:   13(ivec4) Load 220
+             222:   52(ivec2) VectorShuffle 221 221 0 1
+             223:   52(ivec2) GroupNonUniformBroadcastFirst 36 222
+             224:     32(ptr) AccessChain 24(data) 25 217 25
+             225:   13(ivec4) Load 224
+             226:   13(ivec4) VectorShuffle 225 223 4 5 2 3
+                              Store 224 226
+             227:     27(ptr) AccessChain 10(dti) 26
+             228:      6(int) Load 227
+             229:     27(ptr) AccessChain 10(dti) 26
+             230:      6(int) Load 229
+             231:     32(ptr) AccessChain 24(data) 25 230 25
+             232:   13(ivec4) Load 231
+             233:    7(ivec3) VectorShuffle 232 232 0 1 2
+             234:    7(ivec3) GroupNonUniformBroadcastFirst 36 233
+             235:     32(ptr) AccessChain 24(data) 25 228 25
+             236:   13(ivec4) Load 235
+             237:   13(ivec4) VectorShuffle 236 234 4 5 6 3
+                              Store 235 237
+             238:     27(ptr) AccessChain 10(dti) 26
+             239:      6(int) Load 238
+             240:     27(ptr) AccessChain 10(dti) 26
+             241:      6(int) Load 240
+             242:     76(ptr) AccessChain 24(data) 25 241 73
+             243:   15(ivec4) Load 242
+             244:   15(ivec4) GroupNonUniformBroadcastFirst 36 243
+             245:     76(ptr) AccessChain 24(data) 25 239 73
+                              Store 245 244
+             246:     27(ptr) AccessChain 10(dti) 26
+             247:      6(int) Load 246
+             248:     27(ptr) AccessChain 10(dti) 26
+             249:      6(int) Load 248
+             250:     85(ptr) AccessChain 24(data) 25 249 73 26
+             251:     14(int) Load 250
+             252:     14(int) GroupNonUniformBroadcastFirst 36 251
+             253:     85(ptr) AccessChain 24(data) 25 247 73 26
+                              Store 253 252
+             254:     27(ptr) AccessChain 10(dti) 26
+             255:      6(int) Load 254
+             256:     27(ptr) AccessChain 10(dti) 26
+             257:      6(int) Load 256
+             258:     76(ptr) AccessChain 24(data) 25 257 73
+             259:   15(ivec4) Load 258
+             260:   94(ivec2) VectorShuffle 259 259 0 1
+             261:   94(ivec2) GroupNonUniformBroadcastFirst 36 260
+             262:     76(ptr) AccessChain 24(data) 25 255 73
+             263:   15(ivec4) Load 262
+             264:   15(ivec4) VectorShuffle 263 261 4 5 2 3
+                              Store 262 264
+             265:     27(ptr) AccessChain 10(dti) 26
+             266:      6(int) Load 265
+             267:     27(ptr) AccessChain 10(dti) 26
+             268:      6(int) Load 267
+             269:     76(ptr) AccessChain 24(data) 25 268 73
+             270:   15(ivec4) Load 269
+             271:  106(ivec3) VectorShuffle 270 270 0 1 2
+             272:  106(ivec3) GroupNonUniformBroadcastFirst 36 271
+             273:     76(ptr) AccessChain 24(data) 25 266 73
+             274:   15(ivec4) Load 273
+             275:   15(ivec4) VectorShuffle 274 272 4 5 6 3
+                              Store 273 275
+             276:     27(ptr) AccessChain 10(dti) 26
+             277:      6(int) Load 276
+             278:     27(ptr) AccessChain 10(dti) 26
+             279:      6(int) Load 278
+             280:    119(ptr) AccessChain 24(data) 25 279 116
+             281:   17(fvec4) Load 280
+             282:   17(fvec4) GroupNonUniformBroadcastFirst 36 281
+             283:    119(ptr) AccessChain 24(data) 25 277 116
+                              Store 283 282
+             284:     27(ptr) AccessChain 10(dti) 26
+             285:      6(int) Load 284
+             286:     27(ptr) AccessChain 10(dti) 26
+             287:      6(int) Load 286
+             288:    128(ptr) AccessChain 24(data) 25 287 116 26
+             289:   16(float) Load 288
+             290:   16(float) GroupNonUniformBroadcastFirst 36 289
+             291:    128(ptr) AccessChain 24(data) 25 285 116 26
+                              Store 291 290
+             292:     27(ptr) AccessChain 10(dti) 26
+             293:      6(int) Load 292
+             294:     27(ptr) AccessChain 10(dti) 26
+             295:      6(int) Load 294
+             296:    119(ptr) AccessChain 24(data) 25 295 116
+             297:   17(fvec4) Load 296
+             298:  137(fvec2) VectorShuffle 297 297 0 1
+             299:  137(fvec2) GroupNonUniformBroadcastFirst 36 298
+             300:    119(ptr) AccessChain 24(data) 25 293 116
+             301:   17(fvec4) Load 300
+             302:   17(fvec4) VectorShuffle 301 299 4 5 2 3
+                              Store 300 302
+             303:     27(ptr) AccessChain 10(dti) 26
+             304:      6(int) Load 303
+             305:     27(ptr) AccessChain 10(dti) 26
+             306:      6(int) Load 305
+             307:    119(ptr) AccessChain 24(data) 25 306 116
+             308:   17(fvec4) Load 307
+             309:  149(fvec3) VectorShuffle 308 308 0 1 2
+             310:  149(fvec3) GroupNonUniformBroadcastFirst 36 309
+             311:    119(ptr) AccessChain 24(data) 25 304 116
+             312:   17(fvec4) Load 311
+             313:   17(fvec4) VectorShuffle 312 310 4 5 6 3
+                              Store 311 313
+             314:     27(ptr) AccessChain 10(dti) 26
+             315:      6(int) Load 314
+             316:     27(ptr) AccessChain 10(dti) 26
+             317:      6(int) Load 316
+             318:    162(ptr) AccessChain 24(data) 25 317 159
+             319:   19(fvec4) Load 318
+             320:   19(fvec4) GroupNonUniformBroadcastFirst 36 319
+             321:    162(ptr) AccessChain 24(data) 25 315 159
+                              Store 321 320
+             322:     27(ptr) AccessChain 10(dti) 26
+             323:      6(int) Load 322
+             324:     27(ptr) AccessChain 10(dti) 26
+             325:      6(int) Load 324
+             326:    171(ptr) AccessChain 24(data) 25 325 159 26
+             327:   18(float) Load 326
+             328:   18(float) GroupNonUniformBroadcastFirst 36 327
+             329:    171(ptr) AccessChain 24(data) 25 323 159 26
+                              Store 329 328
+             330:     27(ptr) AccessChain 10(dti) 26
+             331:      6(int) Load 330
+             332:     27(ptr) AccessChain 10(dti) 26
+             333:      6(int) Load 332
+             334:    162(ptr) AccessChain 24(data) 25 333 159
+             335:   19(fvec4) Load 334
+             336:  180(fvec2) VectorShuffle 335 335 0 1
+             337:  180(fvec2) GroupNonUniformBroadcastFirst 36 336
+             338:    162(ptr) AccessChain 24(data) 25 331 159
+             339:   19(fvec4) Load 338
+             340:   19(fvec4) VectorShuffle 339 337 4 5 2 3
+                              Store 338 340
+             341:     27(ptr) AccessChain 10(dti) 26
+             342:      6(int) Load 341
+             343:     27(ptr) AccessChain 10(dti) 26
+             344:      6(int) Load 343
+             345:    162(ptr) AccessChain 24(data) 25 344 159
+             346:   19(fvec4) Load 345
+             347:  192(fvec3) VectorShuffle 346 346 0 1 2
+             348:  192(fvec3) GroupNonUniformBroadcastFirst 36 347
+             349:    162(ptr) AccessChain 24(data) 25 342 159
+             350:   19(fvec4) Load 349
+             351:   19(fvec4) VectorShuffle 350 348 4 5 6 3
+                              Store 349 351
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.waveprefix.comp.out b/Test/baseResults/hlsl.waveprefix.comp.out
new file mode 100644
index 0000000..ce5fd9f
--- /dev/null
+++ b/Test/baseResults/hlsl.waveprefix.comp.out
@@ -0,0 +1,2766 @@
+hlsl.waveprefix.comp
+Shader version: 500
+local_size = (32, 16, 1)
+0:? Sequence
+0:13  Function Definition: @CSMain(vu3; ( temp void)
+0:13    Function Parameters: 
+0:13      'dti' ( in 3-component vector of uint)
+0:?     Sequence
+0:14      move second child to first child ( temp 4-component vector of uint)
+0:14        u: direct index for structure ( temp 4-component vector of uint)
+0:14          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:14              Constant:
+0:14                0 (const uint)
+0:14            direct index ( temp uint)
+0:14              'dti' ( in 3-component vector of uint)
+0:14              Constant:
+0:14                0 (const int)
+0:14          Constant:
+0:14            0 (const int)
+0:14        subgroupInclusiveAdd ( temp 4-component vector of uint)
+0:14          u: direct index for structure ( temp 4-component vector of uint)
+0:14            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:14                Constant:
+0:14                  0 (const uint)
+0:14              direct index ( temp uint)
+0:14                'dti' ( in 3-component vector of uint)
+0:14                Constant:
+0:14                  0 (const int)
+0:14            Constant:
+0:14              0 (const int)
+0:15      move second child to first child ( temp uint)
+0:15        direct index ( temp uint)
+0:15          u: direct index for structure ( temp 4-component vector of uint)
+0:15            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:15                Constant:
+0:15                  0 (const uint)
+0:15              direct index ( temp uint)
+0:15                'dti' ( in 3-component vector of uint)
+0:15                Constant:
+0:15                  0 (const int)
+0:15            Constant:
+0:15              0 (const int)
+0:15          Constant:
+0:15            0 (const int)
+0:15        subgroupInclusiveAdd ( temp uint)
+0:15          direct index ( temp uint)
+0:15            u: direct index for structure ( temp 4-component vector of uint)
+0:15              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:15                  Constant:
+0:15                    0 (const uint)
+0:15                direct index ( temp uint)
+0:15                  'dti' ( in 3-component vector of uint)
+0:15                  Constant:
+0:15                    0 (const int)
+0:15              Constant:
+0:15                0 (const int)
+0:15            Constant:
+0:15              0 (const int)
+0:16      move second child to first child ( temp 2-component vector of uint)
+0:16        vector swizzle ( temp 2-component vector of uint)
+0:16          u: direct index for structure ( temp 4-component vector of uint)
+0:16            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:16                Constant:
+0:16                  0 (const uint)
+0:16              direct index ( temp uint)
+0:16                'dti' ( in 3-component vector of uint)
+0:16                Constant:
+0:16                  0 (const int)
+0:16            Constant:
+0:16              0 (const int)
+0:16          Sequence
+0:16            Constant:
+0:16              0 (const int)
+0:16            Constant:
+0:16              1 (const int)
+0:16        subgroupInclusiveAdd ( temp 2-component vector of uint)
+0:16          vector swizzle ( temp 2-component vector of uint)
+0:16            u: direct index for structure ( temp 4-component vector of uint)
+0:16              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:16                  Constant:
+0:16                    0 (const uint)
+0:16                direct index ( temp uint)
+0:16                  'dti' ( in 3-component vector of uint)
+0:16                  Constant:
+0:16                    0 (const int)
+0:16              Constant:
+0:16                0 (const int)
+0:16            Sequence
+0:16              Constant:
+0:16                0 (const int)
+0:16              Constant:
+0:16                1 (const int)
+0:17      move second child to first child ( temp 3-component vector of uint)
+0:17        vector swizzle ( temp 3-component vector of uint)
+0:17          u: direct index for structure ( temp 4-component vector of uint)
+0:17            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:17                Constant:
+0:17                  0 (const uint)
+0:17              direct index ( temp uint)
+0:17                'dti' ( in 3-component vector of uint)
+0:17                Constant:
+0:17                  0 (const int)
+0:17            Constant:
+0:17              0 (const int)
+0:17          Sequence
+0:17            Constant:
+0:17              0 (const int)
+0:17            Constant:
+0:17              1 (const int)
+0:17            Constant:
+0:17              2 (const int)
+0:17        subgroupInclusiveAdd ( temp 3-component vector of uint)
+0:17          vector swizzle ( temp 3-component vector of uint)
+0:17            u: direct index for structure ( temp 4-component vector of uint)
+0:17              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:17                  Constant:
+0:17                    0 (const uint)
+0:17                direct index ( temp uint)
+0:17                  'dti' ( in 3-component vector of uint)
+0:17                  Constant:
+0:17                    0 (const int)
+0:17              Constant:
+0:17                0 (const int)
+0:17            Sequence
+0:17              Constant:
+0:17                0 (const int)
+0:17              Constant:
+0:17                1 (const int)
+0:17              Constant:
+0:17                2 (const int)
+0:19      move second child to first child ( temp 4-component vector of int)
+0:19        i: direct index for structure ( temp 4-component vector of int)
+0:19          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:19              Constant:
+0:19                0 (const uint)
+0:19            direct index ( temp uint)
+0:19              'dti' ( in 3-component vector of uint)
+0:19              Constant:
+0:19                0 (const int)
+0:19          Constant:
+0:19            1 (const int)
+0:19        subgroupInclusiveAdd ( temp 4-component vector of int)
+0:19          i: direct index for structure ( temp 4-component vector of int)
+0:19            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:19                Constant:
+0:19                  0 (const uint)
+0:19              direct index ( temp uint)
+0:19                'dti' ( in 3-component vector of uint)
+0:19                Constant:
+0:19                  0 (const int)
+0:19            Constant:
+0:19              1 (const int)
+0:20      move second child to first child ( temp int)
+0:20        direct index ( temp int)
+0:20          i: direct index for structure ( temp 4-component vector of int)
+0:20            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:20                Constant:
+0:20                  0 (const uint)
+0:20              direct index ( temp uint)
+0:20                'dti' ( in 3-component vector of uint)
+0:20                Constant:
+0:20                  0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20          Constant:
+0:20            0 (const int)
+0:20        subgroupInclusiveAdd ( temp int)
+0:20          direct index ( temp int)
+0:20            i: direct index for structure ( temp 4-component vector of int)
+0:20              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:20                  Constant:
+0:20                    0 (const uint)
+0:20                direct index ( temp uint)
+0:20                  'dti' ( in 3-component vector of uint)
+0:20                  Constant:
+0:20                    0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20            Constant:
+0:20              0 (const int)
+0:21      move second child to first child ( temp 2-component vector of int)
+0:21        vector swizzle ( temp 2-component vector of int)
+0:21          i: direct index for structure ( temp 4-component vector of int)
+0:21            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:21                Constant:
+0:21                  0 (const uint)
+0:21              direct index ( temp uint)
+0:21                'dti' ( in 3-component vector of uint)
+0:21                Constant:
+0:21                  0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21          Sequence
+0:21            Constant:
+0:21              0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21        subgroupInclusiveAdd ( temp 2-component vector of int)
+0:21          vector swizzle ( temp 2-component vector of int)
+0:21            i: direct index for structure ( temp 4-component vector of int)
+0:21              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:21                  Constant:
+0:21                    0 (const uint)
+0:21                direct index ( temp uint)
+0:21                  'dti' ( in 3-component vector of uint)
+0:21                  Constant:
+0:21                    0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21            Sequence
+0:21              Constant:
+0:21                0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:22      move second child to first child ( temp 3-component vector of int)
+0:22        vector swizzle ( temp 3-component vector of int)
+0:22          i: direct index for structure ( temp 4-component vector of int)
+0:22            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:22                Constant:
+0:22                  0 (const uint)
+0:22              direct index ( temp uint)
+0:22                'dti' ( in 3-component vector of uint)
+0:22                Constant:
+0:22                  0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22          Sequence
+0:22            Constant:
+0:22              0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22            Constant:
+0:22              2 (const int)
+0:22        subgroupInclusiveAdd ( temp 3-component vector of int)
+0:22          vector swizzle ( temp 3-component vector of int)
+0:22            i: direct index for structure ( temp 4-component vector of int)
+0:22              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:22                  Constant:
+0:22                    0 (const uint)
+0:22                direct index ( temp uint)
+0:22                  'dti' ( in 3-component vector of uint)
+0:22                  Constant:
+0:22                    0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22            Sequence
+0:22              Constant:
+0:22                0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22              Constant:
+0:22                2 (const int)
+0:24      move second child to first child ( temp 4-component vector of float)
+0:24        f: direct index for structure ( temp 4-component vector of float)
+0:24          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:24              Constant:
+0:24                0 (const uint)
+0:24            direct index ( temp uint)
+0:24              'dti' ( in 3-component vector of uint)
+0:24              Constant:
+0:24                0 (const int)
+0:24          Constant:
+0:24            2 (const int)
+0:24        subgroupInclusiveAdd ( temp 4-component vector of float)
+0:24          f: direct index for structure ( temp 4-component vector of float)
+0:24            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:24                Constant:
+0:24                  0 (const uint)
+0:24              direct index ( temp uint)
+0:24                'dti' ( in 3-component vector of uint)
+0:24                Constant:
+0:24                  0 (const int)
+0:24            Constant:
+0:24              2 (const int)
+0:25      move second child to first child ( temp float)
+0:25        direct index ( temp float)
+0:25          f: direct index for structure ( temp 4-component vector of float)
+0:25            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:25                Constant:
+0:25                  0 (const uint)
+0:25              direct index ( temp uint)
+0:25                'dti' ( in 3-component vector of uint)
+0:25                Constant:
+0:25                  0 (const int)
+0:25            Constant:
+0:25              2 (const int)
+0:25          Constant:
+0:25            0 (const int)
+0:25        subgroupInclusiveAdd ( temp float)
+0:25          direct index ( temp float)
+0:25            f: direct index for structure ( temp 4-component vector of float)
+0:25              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:25                  Constant:
+0:25                    0 (const uint)
+0:25                direct index ( temp uint)
+0:25                  'dti' ( in 3-component vector of uint)
+0:25                  Constant:
+0:25                    0 (const int)
+0:25              Constant:
+0:25                2 (const int)
+0:25            Constant:
+0:25              0 (const int)
+0:26      move second child to first child ( temp 2-component vector of float)
+0:26        vector swizzle ( temp 2-component vector of float)
+0:26          f: direct index for structure ( temp 4-component vector of float)
+0:26            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:26                Constant:
+0:26                  0 (const uint)
+0:26              direct index ( temp uint)
+0:26                'dti' ( in 3-component vector of uint)
+0:26                Constant:
+0:26                  0 (const int)
+0:26            Constant:
+0:26              2 (const int)
+0:26          Sequence
+0:26            Constant:
+0:26              0 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26        subgroupInclusiveAdd ( temp 2-component vector of float)
+0:26          vector swizzle ( temp 2-component vector of float)
+0:26            f: direct index for structure ( temp 4-component vector of float)
+0:26              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:26                  Constant:
+0:26                    0 (const uint)
+0:26                direct index ( temp uint)
+0:26                  'dti' ( in 3-component vector of uint)
+0:26                  Constant:
+0:26                    0 (const int)
+0:26              Constant:
+0:26                2 (const int)
+0:26            Sequence
+0:26              Constant:
+0:26                0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:27      move second child to first child ( temp 3-component vector of float)
+0:27        vector swizzle ( temp 3-component vector of float)
+0:27          f: direct index for structure ( temp 4-component vector of float)
+0:27            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:27                Constant:
+0:27                  0 (const uint)
+0:27              direct index ( temp uint)
+0:27                'dti' ( in 3-component vector of uint)
+0:27                Constant:
+0:27                  0 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27          Sequence
+0:27            Constant:
+0:27              0 (const int)
+0:27            Constant:
+0:27              1 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27        subgroupInclusiveAdd ( temp 3-component vector of float)
+0:27          vector swizzle ( temp 3-component vector of float)
+0:27            f: direct index for structure ( temp 4-component vector of float)
+0:27              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:27                  Constant:
+0:27                    0 (const uint)
+0:27                direct index ( temp uint)
+0:27                  'dti' ( in 3-component vector of uint)
+0:27                  Constant:
+0:27                    0 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:27            Sequence
+0:27              Constant:
+0:27                0 (const int)
+0:27              Constant:
+0:27                1 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:29      move second child to first child ( temp 4-component vector of double)
+0:29        d: direct index for structure ( temp 4-component vector of double)
+0:29          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:29              Constant:
+0:29                0 (const uint)
+0:29            direct index ( temp uint)
+0:29              'dti' ( in 3-component vector of uint)
+0:29              Constant:
+0:29                0 (const int)
+0:29          Constant:
+0:29            3 (const int)
+0:29        subgroupInclusiveAdd ( temp 4-component vector of double)
+0:29          d: direct index for structure ( temp 4-component vector of double)
+0:29            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:29                Constant:
+0:29                  0 (const uint)
+0:29              direct index ( temp uint)
+0:29                'dti' ( in 3-component vector of uint)
+0:29                Constant:
+0:29                  0 (const int)
+0:29            Constant:
+0:29              3 (const int)
+0:30      move second child to first child ( temp double)
+0:30        direct index ( temp double)
+0:30          d: direct index for structure ( temp 4-component vector of double)
+0:30            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:30                Constant:
+0:30                  0 (const uint)
+0:30              direct index ( temp uint)
+0:30                'dti' ( in 3-component vector of uint)
+0:30                Constant:
+0:30                  0 (const int)
+0:30            Constant:
+0:30              3 (const int)
+0:30          Constant:
+0:30            0 (const int)
+0:30        subgroupInclusiveAdd ( temp double)
+0:30          direct index ( temp double)
+0:30            d: direct index for structure ( temp 4-component vector of double)
+0:30              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:30                  Constant:
+0:30                    0 (const uint)
+0:30                direct index ( temp uint)
+0:30                  'dti' ( in 3-component vector of uint)
+0:30                  Constant:
+0:30                    0 (const int)
+0:30              Constant:
+0:30                3 (const int)
+0:30            Constant:
+0:30              0 (const int)
+0:31      move second child to first child ( temp 2-component vector of double)
+0:31        vector swizzle ( temp 2-component vector of double)
+0:31          d: direct index for structure ( temp 4-component vector of double)
+0:31            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:31                Constant:
+0:31                  0 (const uint)
+0:31              direct index ( temp uint)
+0:31                'dti' ( in 3-component vector of uint)
+0:31                Constant:
+0:31                  0 (const int)
+0:31            Constant:
+0:31              3 (const int)
+0:31          Sequence
+0:31            Constant:
+0:31              0 (const int)
+0:31            Constant:
+0:31              1 (const int)
+0:31        subgroupInclusiveAdd ( temp 2-component vector of double)
+0:31          vector swizzle ( temp 2-component vector of double)
+0:31            d: direct index for structure ( temp 4-component vector of double)
+0:31              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:31                  Constant:
+0:31                    0 (const uint)
+0:31                direct index ( temp uint)
+0:31                  'dti' ( in 3-component vector of uint)
+0:31                  Constant:
+0:31                    0 (const int)
+0:31              Constant:
+0:31                3 (const int)
+0:31            Sequence
+0:31              Constant:
+0:31                0 (const int)
+0:31              Constant:
+0:31                1 (const int)
+0:32      move second child to first child ( temp 3-component vector of double)
+0:32        vector swizzle ( temp 3-component vector of double)
+0:32          d: direct index for structure ( temp 4-component vector of double)
+0:32            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:32                Constant:
+0:32                  0 (const uint)
+0:32              direct index ( temp uint)
+0:32                'dti' ( in 3-component vector of uint)
+0:32                Constant:
+0:32                  0 (const int)
+0:32            Constant:
+0:32              3 (const int)
+0:32          Sequence
+0:32            Constant:
+0:32              0 (const int)
+0:32            Constant:
+0:32              1 (const int)
+0:32            Constant:
+0:32              2 (const int)
+0:32        subgroupInclusiveAdd ( temp 3-component vector of double)
+0:32          vector swizzle ( temp 3-component vector of double)
+0:32            d: direct index for structure ( temp 4-component vector of double)
+0:32              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:32                  Constant:
+0:32                    0 (const uint)
+0:32                direct index ( temp uint)
+0:32                  'dti' ( in 3-component vector of uint)
+0:32                  Constant:
+0:32                    0 (const int)
+0:32              Constant:
+0:32                3 (const int)
+0:32            Sequence
+0:32              Constant:
+0:32                0 (const int)
+0:32              Constant:
+0:32                1 (const int)
+0:32              Constant:
+0:32                2 (const int)
+0:34      move second child to first child ( temp 4-component vector of uint)
+0:34        u: direct index for structure ( temp 4-component vector of uint)
+0:34          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:34              Constant:
+0:34                0 (const uint)
+0:34            direct index ( temp uint)
+0:34              'dti' ( in 3-component vector of uint)
+0:34              Constant:
+0:34                0 (const int)
+0:34          Constant:
+0:34            0 (const int)
+0:34        subgroupInclusiveMul ( temp 4-component vector of uint)
+0:34          u: direct index for structure ( temp 4-component vector of uint)
+0:34            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:34                Constant:
+0:34                  0 (const uint)
+0:34              direct index ( temp uint)
+0:34                'dti' ( in 3-component vector of uint)
+0:34                Constant:
+0:34                  0 (const int)
+0:34            Constant:
+0:34              0 (const int)
+0:35      move second child to first child ( temp uint)
+0:35        direct index ( temp uint)
+0:35          u: direct index for structure ( temp 4-component vector of uint)
+0:35            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:35                Constant:
+0:35                  0 (const uint)
+0:35              direct index ( temp uint)
+0:35                'dti' ( in 3-component vector of uint)
+0:35                Constant:
+0:35                  0 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:35          Constant:
+0:35            0 (const int)
+0:35        subgroupInclusiveMul ( temp uint)
+0:35          direct index ( temp uint)
+0:35            u: direct index for structure ( temp 4-component vector of uint)
+0:35              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:35                  Constant:
+0:35                    0 (const uint)
+0:35                direct index ( temp uint)
+0:35                  'dti' ( in 3-component vector of uint)
+0:35                  Constant:
+0:35                    0 (const int)
+0:35              Constant:
+0:35                0 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:36      move second child to first child ( temp 2-component vector of uint)
+0:36        vector swizzle ( temp 2-component vector of uint)
+0:36          u: direct index for structure ( temp 4-component vector of uint)
+0:36            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:36                Constant:
+0:36                  0 (const uint)
+0:36              direct index ( temp uint)
+0:36                'dti' ( in 3-component vector of uint)
+0:36                Constant:
+0:36                  0 (const int)
+0:36            Constant:
+0:36              0 (const int)
+0:36          Sequence
+0:36            Constant:
+0:36              0 (const int)
+0:36            Constant:
+0:36              1 (const int)
+0:36        subgroupInclusiveMul ( temp 2-component vector of uint)
+0:36          vector swizzle ( temp 2-component vector of uint)
+0:36            u: direct index for structure ( temp 4-component vector of uint)
+0:36              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:36                  Constant:
+0:36                    0 (const uint)
+0:36                direct index ( temp uint)
+0:36                  'dti' ( in 3-component vector of uint)
+0:36                  Constant:
+0:36                    0 (const int)
+0:36              Constant:
+0:36                0 (const int)
+0:36            Sequence
+0:36              Constant:
+0:36                0 (const int)
+0:36              Constant:
+0:36                1 (const int)
+0:37      move second child to first child ( temp 3-component vector of uint)
+0:37        vector swizzle ( temp 3-component vector of uint)
+0:37          u: direct index for structure ( temp 4-component vector of uint)
+0:37            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:37                Constant:
+0:37                  0 (const uint)
+0:37              direct index ( temp uint)
+0:37                'dti' ( in 3-component vector of uint)
+0:37                Constant:
+0:37                  0 (const int)
+0:37            Constant:
+0:37              0 (const int)
+0:37          Sequence
+0:37            Constant:
+0:37              0 (const int)
+0:37            Constant:
+0:37              1 (const int)
+0:37            Constant:
+0:37              2 (const int)
+0:37        subgroupInclusiveMul ( temp 3-component vector of uint)
+0:37          vector swizzle ( temp 3-component vector of uint)
+0:37            u: direct index for structure ( temp 4-component vector of uint)
+0:37              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:37                  Constant:
+0:37                    0 (const uint)
+0:37                direct index ( temp uint)
+0:37                  'dti' ( in 3-component vector of uint)
+0:37                  Constant:
+0:37                    0 (const int)
+0:37              Constant:
+0:37                0 (const int)
+0:37            Sequence
+0:37              Constant:
+0:37                0 (const int)
+0:37              Constant:
+0:37                1 (const int)
+0:37              Constant:
+0:37                2 (const int)
+0:39      move second child to first child ( temp 4-component vector of int)
+0:39        i: direct index for structure ( temp 4-component vector of int)
+0:39          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:39              Constant:
+0:39                0 (const uint)
+0:39            direct index ( temp uint)
+0:39              'dti' ( in 3-component vector of uint)
+0:39              Constant:
+0:39                0 (const int)
+0:39          Constant:
+0:39            1 (const int)
+0:39        subgroupInclusiveMul ( temp 4-component vector of int)
+0:39          i: direct index for structure ( temp 4-component vector of int)
+0:39            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:39                Constant:
+0:39                  0 (const uint)
+0:39              direct index ( temp uint)
+0:39                'dti' ( in 3-component vector of uint)
+0:39                Constant:
+0:39                  0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:40      move second child to first child ( temp int)
+0:40        direct index ( temp int)
+0:40          i: direct index for structure ( temp 4-component vector of int)
+0:40            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:40                Constant:
+0:40                  0 (const uint)
+0:40              direct index ( temp uint)
+0:40                'dti' ( in 3-component vector of uint)
+0:40                Constant:
+0:40                  0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40          Constant:
+0:40            0 (const int)
+0:40        subgroupInclusiveMul ( temp int)
+0:40          direct index ( temp int)
+0:40            i: direct index for structure ( temp 4-component vector of int)
+0:40              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:40                  Constant:
+0:40                    0 (const uint)
+0:40                direct index ( temp uint)
+0:40                  'dti' ( in 3-component vector of uint)
+0:40                  Constant:
+0:40                    0 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40            Constant:
+0:40              0 (const int)
+0:41      move second child to first child ( temp 2-component vector of int)
+0:41        vector swizzle ( temp 2-component vector of int)
+0:41          i: direct index for structure ( temp 4-component vector of int)
+0:41            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:41                Constant:
+0:41                  0 (const uint)
+0:41              direct index ( temp uint)
+0:41                'dti' ( in 3-component vector of uint)
+0:41                Constant:
+0:41                  0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41          Sequence
+0:41            Constant:
+0:41              0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41        subgroupInclusiveMul ( temp 2-component vector of int)
+0:41          vector swizzle ( temp 2-component vector of int)
+0:41            i: direct index for structure ( temp 4-component vector of int)
+0:41              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:41                  Constant:
+0:41                    0 (const uint)
+0:41                direct index ( temp uint)
+0:41                  'dti' ( in 3-component vector of uint)
+0:41                  Constant:
+0:41                    0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:41            Sequence
+0:41              Constant:
+0:41                0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:42      move second child to first child ( temp 3-component vector of int)
+0:42        vector swizzle ( temp 3-component vector of int)
+0:42          i: direct index for structure ( temp 4-component vector of int)
+0:42            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:42                Constant:
+0:42                  0 (const uint)
+0:42              direct index ( temp uint)
+0:42                'dti' ( in 3-component vector of uint)
+0:42                Constant:
+0:42                  0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42          Sequence
+0:42            Constant:
+0:42              0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42            Constant:
+0:42              2 (const int)
+0:42        subgroupInclusiveMul ( temp 3-component vector of int)
+0:42          vector swizzle ( temp 3-component vector of int)
+0:42            i: direct index for structure ( temp 4-component vector of int)
+0:42              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:42                  Constant:
+0:42                    0 (const uint)
+0:42                direct index ( temp uint)
+0:42                  'dti' ( in 3-component vector of uint)
+0:42                  Constant:
+0:42                    0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42            Sequence
+0:42              Constant:
+0:42                0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42              Constant:
+0:42                2 (const int)
+0:44      move second child to first child ( temp 4-component vector of float)
+0:44        f: direct index for structure ( temp 4-component vector of float)
+0:44          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:44              Constant:
+0:44                0 (const uint)
+0:44            direct index ( temp uint)
+0:44              'dti' ( in 3-component vector of uint)
+0:44              Constant:
+0:44                0 (const int)
+0:44          Constant:
+0:44            2 (const int)
+0:44        subgroupInclusiveMul ( temp 4-component vector of float)
+0:44          f: direct index for structure ( temp 4-component vector of float)
+0:44            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:44                Constant:
+0:44                  0 (const uint)
+0:44              direct index ( temp uint)
+0:44                'dti' ( in 3-component vector of uint)
+0:44                Constant:
+0:44                  0 (const int)
+0:44            Constant:
+0:44              2 (const int)
+0:45      move second child to first child ( temp float)
+0:45        direct index ( temp float)
+0:45          f: direct index for structure ( temp 4-component vector of float)
+0:45            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:45                Constant:
+0:45                  0 (const uint)
+0:45              direct index ( temp uint)
+0:45                'dti' ( in 3-component vector of uint)
+0:45                Constant:
+0:45                  0 (const int)
+0:45            Constant:
+0:45              2 (const int)
+0:45          Constant:
+0:45            0 (const int)
+0:45        subgroupInclusiveMul ( temp float)
+0:45          direct index ( temp float)
+0:45            f: direct index for structure ( temp 4-component vector of float)
+0:45              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:45                  Constant:
+0:45                    0 (const uint)
+0:45                direct index ( temp uint)
+0:45                  'dti' ( in 3-component vector of uint)
+0:45                  Constant:
+0:45                    0 (const int)
+0:45              Constant:
+0:45                2 (const int)
+0:45            Constant:
+0:45              0 (const int)
+0:46      move second child to first child ( temp 2-component vector of float)
+0:46        vector swizzle ( temp 2-component vector of float)
+0:46          f: direct index for structure ( temp 4-component vector of float)
+0:46            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:46                Constant:
+0:46                  0 (const uint)
+0:46              direct index ( temp uint)
+0:46                'dti' ( in 3-component vector of uint)
+0:46                Constant:
+0:46                  0 (const int)
+0:46            Constant:
+0:46              2 (const int)
+0:46          Sequence
+0:46            Constant:
+0:46              0 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46        subgroupInclusiveMul ( temp 2-component vector of float)
+0:46          vector swizzle ( temp 2-component vector of float)
+0:46            f: direct index for structure ( temp 4-component vector of float)
+0:46              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:46                  Constant:
+0:46                    0 (const uint)
+0:46                direct index ( temp uint)
+0:46                  'dti' ( in 3-component vector of uint)
+0:46                  Constant:
+0:46                    0 (const int)
+0:46              Constant:
+0:46                2 (const int)
+0:46            Sequence
+0:46              Constant:
+0:46                0 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:47      move second child to first child ( temp 3-component vector of float)
+0:47        vector swizzle ( temp 3-component vector of float)
+0:47          f: direct index for structure ( temp 4-component vector of float)
+0:47            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:47                Constant:
+0:47                  0 (const uint)
+0:47              direct index ( temp uint)
+0:47                'dti' ( in 3-component vector of uint)
+0:47                Constant:
+0:47                  0 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47          Sequence
+0:47            Constant:
+0:47              0 (const int)
+0:47            Constant:
+0:47              1 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47        subgroupInclusiveMul ( temp 3-component vector of float)
+0:47          vector swizzle ( temp 3-component vector of float)
+0:47            f: direct index for structure ( temp 4-component vector of float)
+0:47              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:47                  Constant:
+0:47                    0 (const uint)
+0:47                direct index ( temp uint)
+0:47                  'dti' ( in 3-component vector of uint)
+0:47                  Constant:
+0:47                    0 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:47            Sequence
+0:47              Constant:
+0:47                0 (const int)
+0:47              Constant:
+0:47                1 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:49      move second child to first child ( temp 4-component vector of double)
+0:49        d: direct index for structure ( temp 4-component vector of double)
+0:49          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:49              Constant:
+0:49                0 (const uint)
+0:49            direct index ( temp uint)
+0:49              'dti' ( in 3-component vector of uint)
+0:49              Constant:
+0:49                0 (const int)
+0:49          Constant:
+0:49            3 (const int)
+0:49        subgroupInclusiveMul ( temp 4-component vector of double)
+0:49          d: direct index for structure ( temp 4-component vector of double)
+0:49            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:49                Constant:
+0:49                  0 (const uint)
+0:49              direct index ( temp uint)
+0:49                'dti' ( in 3-component vector of uint)
+0:49                Constant:
+0:49                  0 (const int)
+0:49            Constant:
+0:49              3 (const int)
+0:50      move second child to first child ( temp double)
+0:50        direct index ( temp double)
+0:50          d: direct index for structure ( temp 4-component vector of double)
+0:50            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:50                Constant:
+0:50                  0 (const uint)
+0:50              direct index ( temp uint)
+0:50                'dti' ( in 3-component vector of uint)
+0:50                Constant:
+0:50                  0 (const int)
+0:50            Constant:
+0:50              3 (const int)
+0:50          Constant:
+0:50            0 (const int)
+0:50        subgroupInclusiveMul ( temp double)
+0:50          direct index ( temp double)
+0:50            d: direct index for structure ( temp 4-component vector of double)
+0:50              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:50                  Constant:
+0:50                    0 (const uint)
+0:50                direct index ( temp uint)
+0:50                  'dti' ( in 3-component vector of uint)
+0:50                  Constant:
+0:50                    0 (const int)
+0:50              Constant:
+0:50                3 (const int)
+0:50            Constant:
+0:50              0 (const int)
+0:51      move second child to first child ( temp 2-component vector of double)
+0:51        vector swizzle ( temp 2-component vector of double)
+0:51          d: direct index for structure ( temp 4-component vector of double)
+0:51            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:51                Constant:
+0:51                  0 (const uint)
+0:51              direct index ( temp uint)
+0:51                'dti' ( in 3-component vector of uint)
+0:51                Constant:
+0:51                  0 (const int)
+0:51            Constant:
+0:51              3 (const int)
+0:51          Sequence
+0:51            Constant:
+0:51              0 (const int)
+0:51            Constant:
+0:51              1 (const int)
+0:51        subgroupInclusiveMul ( temp 2-component vector of double)
+0:51          vector swizzle ( temp 2-component vector of double)
+0:51            d: direct index for structure ( temp 4-component vector of double)
+0:51              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:51                  Constant:
+0:51                    0 (const uint)
+0:51                direct index ( temp uint)
+0:51                  'dti' ( in 3-component vector of uint)
+0:51                  Constant:
+0:51                    0 (const int)
+0:51              Constant:
+0:51                3 (const int)
+0:51            Sequence
+0:51              Constant:
+0:51                0 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:52      move second child to first child ( temp 3-component vector of double)
+0:52        vector swizzle ( temp 3-component vector of double)
+0:52          d: direct index for structure ( temp 4-component vector of double)
+0:52            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:52                Constant:
+0:52                  0 (const uint)
+0:52              direct index ( temp uint)
+0:52                'dti' ( in 3-component vector of uint)
+0:52                Constant:
+0:52                  0 (const int)
+0:52            Constant:
+0:52              3 (const int)
+0:52          Sequence
+0:52            Constant:
+0:52              0 (const int)
+0:52            Constant:
+0:52              1 (const int)
+0:52            Constant:
+0:52              2 (const int)
+0:52        subgroupInclusiveMul ( temp 3-component vector of double)
+0:52          vector swizzle ( temp 3-component vector of double)
+0:52            d: direct index for structure ( temp 4-component vector of double)
+0:52              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:52                  Constant:
+0:52                    0 (const uint)
+0:52                direct index ( temp uint)
+0:52                  'dti' ( in 3-component vector of uint)
+0:52                  Constant:
+0:52                    0 (const int)
+0:52              Constant:
+0:52                3 (const int)
+0:52            Sequence
+0:52              Constant:
+0:52                0 (const int)
+0:52              Constant:
+0:52                1 (const int)
+0:52              Constant:
+0:52                2 (const int)
+0:54      move second child to first child ( temp uint)
+0:54        direct index ( temp uint)
+0:54          u: direct index for structure ( temp 4-component vector of uint)
+0:54            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:54                Constant:
+0:54                  0 (const uint)
+0:54              direct index ( temp uint)
+0:54                'dti' ( in 3-component vector of uint)
+0:54                Constant:
+0:54                  0 (const int)
+0:54            Constant:
+0:54              0 (const int)
+0:54          Constant:
+0:54            0 (const int)
+0:54        subgroupBallotInclusiveBitCount ( temp uint)
+0:54          subgroupBallot ( temp 4-component vector of uint)
+0:54            Compare Equal ( temp bool)
+0:54              direct index ( temp uint)
+0:54                u: direct index for structure ( temp 4-component vector of uint)
+0:54                  indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54                      'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:54                      Constant:
+0:54                        0 (const uint)
+0:54                    direct index ( temp uint)
+0:54                      'dti' ( in 3-component vector of uint)
+0:54                      Constant:
+0:54                        0 (const int)
+0:54                  Constant:
+0:54                    0 (const int)
+0:54                Constant:
+0:54                  0 (const int)
+0:54              Constant:
+0:54                0 (const uint)
+0:13  Function Definition: CSMain( ( temp void)
+0:13    Function Parameters: 
+0:?     Sequence
+0:13      move second child to first child ( temp 3-component vector of uint)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?         'dti' ( in 3-component vector of uint GlobalInvocationID)
+0:13      Function Call: @CSMain(vu3; ( temp void)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?   Linker Objects
+0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
+
+
+Linked compute stage:
+
+
+Shader version: 500
+local_size = (32, 16, 1)
+0:? Sequence
+0:13  Function Definition: @CSMain(vu3; ( temp void)
+0:13    Function Parameters: 
+0:13      'dti' ( in 3-component vector of uint)
+0:?     Sequence
+0:14      move second child to first child ( temp 4-component vector of uint)
+0:14        u: direct index for structure ( temp 4-component vector of uint)
+0:14          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:14              Constant:
+0:14                0 (const uint)
+0:14            direct index ( temp uint)
+0:14              'dti' ( in 3-component vector of uint)
+0:14              Constant:
+0:14                0 (const int)
+0:14          Constant:
+0:14            0 (const int)
+0:14        subgroupInclusiveAdd ( temp 4-component vector of uint)
+0:14          u: direct index for structure ( temp 4-component vector of uint)
+0:14            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:14                Constant:
+0:14                  0 (const uint)
+0:14              direct index ( temp uint)
+0:14                'dti' ( in 3-component vector of uint)
+0:14                Constant:
+0:14                  0 (const int)
+0:14            Constant:
+0:14              0 (const int)
+0:15      move second child to first child ( temp uint)
+0:15        direct index ( temp uint)
+0:15          u: direct index for structure ( temp 4-component vector of uint)
+0:15            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:15                Constant:
+0:15                  0 (const uint)
+0:15              direct index ( temp uint)
+0:15                'dti' ( in 3-component vector of uint)
+0:15                Constant:
+0:15                  0 (const int)
+0:15            Constant:
+0:15              0 (const int)
+0:15          Constant:
+0:15            0 (const int)
+0:15        subgroupInclusiveAdd ( temp uint)
+0:15          direct index ( temp uint)
+0:15            u: direct index for structure ( temp 4-component vector of uint)
+0:15              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:15                  Constant:
+0:15                    0 (const uint)
+0:15                direct index ( temp uint)
+0:15                  'dti' ( in 3-component vector of uint)
+0:15                  Constant:
+0:15                    0 (const int)
+0:15              Constant:
+0:15                0 (const int)
+0:15            Constant:
+0:15              0 (const int)
+0:16      move second child to first child ( temp 2-component vector of uint)
+0:16        vector swizzle ( temp 2-component vector of uint)
+0:16          u: direct index for structure ( temp 4-component vector of uint)
+0:16            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:16                Constant:
+0:16                  0 (const uint)
+0:16              direct index ( temp uint)
+0:16                'dti' ( in 3-component vector of uint)
+0:16                Constant:
+0:16                  0 (const int)
+0:16            Constant:
+0:16              0 (const int)
+0:16          Sequence
+0:16            Constant:
+0:16              0 (const int)
+0:16            Constant:
+0:16              1 (const int)
+0:16        subgroupInclusiveAdd ( temp 2-component vector of uint)
+0:16          vector swizzle ( temp 2-component vector of uint)
+0:16            u: direct index for structure ( temp 4-component vector of uint)
+0:16              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:16                  Constant:
+0:16                    0 (const uint)
+0:16                direct index ( temp uint)
+0:16                  'dti' ( in 3-component vector of uint)
+0:16                  Constant:
+0:16                    0 (const int)
+0:16              Constant:
+0:16                0 (const int)
+0:16            Sequence
+0:16              Constant:
+0:16                0 (const int)
+0:16              Constant:
+0:16                1 (const int)
+0:17      move second child to first child ( temp 3-component vector of uint)
+0:17        vector swizzle ( temp 3-component vector of uint)
+0:17          u: direct index for structure ( temp 4-component vector of uint)
+0:17            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:17                Constant:
+0:17                  0 (const uint)
+0:17              direct index ( temp uint)
+0:17                'dti' ( in 3-component vector of uint)
+0:17                Constant:
+0:17                  0 (const int)
+0:17            Constant:
+0:17              0 (const int)
+0:17          Sequence
+0:17            Constant:
+0:17              0 (const int)
+0:17            Constant:
+0:17              1 (const int)
+0:17            Constant:
+0:17              2 (const int)
+0:17        subgroupInclusiveAdd ( temp 3-component vector of uint)
+0:17          vector swizzle ( temp 3-component vector of uint)
+0:17            u: direct index for structure ( temp 4-component vector of uint)
+0:17              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:17                  Constant:
+0:17                    0 (const uint)
+0:17                direct index ( temp uint)
+0:17                  'dti' ( in 3-component vector of uint)
+0:17                  Constant:
+0:17                    0 (const int)
+0:17              Constant:
+0:17                0 (const int)
+0:17            Sequence
+0:17              Constant:
+0:17                0 (const int)
+0:17              Constant:
+0:17                1 (const int)
+0:17              Constant:
+0:17                2 (const int)
+0:19      move second child to first child ( temp 4-component vector of int)
+0:19        i: direct index for structure ( temp 4-component vector of int)
+0:19          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:19              Constant:
+0:19                0 (const uint)
+0:19            direct index ( temp uint)
+0:19              'dti' ( in 3-component vector of uint)
+0:19              Constant:
+0:19                0 (const int)
+0:19          Constant:
+0:19            1 (const int)
+0:19        subgroupInclusiveAdd ( temp 4-component vector of int)
+0:19          i: direct index for structure ( temp 4-component vector of int)
+0:19            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:19                Constant:
+0:19                  0 (const uint)
+0:19              direct index ( temp uint)
+0:19                'dti' ( in 3-component vector of uint)
+0:19                Constant:
+0:19                  0 (const int)
+0:19            Constant:
+0:19              1 (const int)
+0:20      move second child to first child ( temp int)
+0:20        direct index ( temp int)
+0:20          i: direct index for structure ( temp 4-component vector of int)
+0:20            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:20                Constant:
+0:20                  0 (const uint)
+0:20              direct index ( temp uint)
+0:20                'dti' ( in 3-component vector of uint)
+0:20                Constant:
+0:20                  0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20          Constant:
+0:20            0 (const int)
+0:20        subgroupInclusiveAdd ( temp int)
+0:20          direct index ( temp int)
+0:20            i: direct index for structure ( temp 4-component vector of int)
+0:20              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:20                  Constant:
+0:20                    0 (const uint)
+0:20                direct index ( temp uint)
+0:20                  'dti' ( in 3-component vector of uint)
+0:20                  Constant:
+0:20                    0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20            Constant:
+0:20              0 (const int)
+0:21      move second child to first child ( temp 2-component vector of int)
+0:21        vector swizzle ( temp 2-component vector of int)
+0:21          i: direct index for structure ( temp 4-component vector of int)
+0:21            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:21                Constant:
+0:21                  0 (const uint)
+0:21              direct index ( temp uint)
+0:21                'dti' ( in 3-component vector of uint)
+0:21                Constant:
+0:21                  0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21          Sequence
+0:21            Constant:
+0:21              0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21        subgroupInclusiveAdd ( temp 2-component vector of int)
+0:21          vector swizzle ( temp 2-component vector of int)
+0:21            i: direct index for structure ( temp 4-component vector of int)
+0:21              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:21                  Constant:
+0:21                    0 (const uint)
+0:21                direct index ( temp uint)
+0:21                  'dti' ( in 3-component vector of uint)
+0:21                  Constant:
+0:21                    0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21            Sequence
+0:21              Constant:
+0:21                0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:22      move second child to first child ( temp 3-component vector of int)
+0:22        vector swizzle ( temp 3-component vector of int)
+0:22          i: direct index for structure ( temp 4-component vector of int)
+0:22            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:22                Constant:
+0:22                  0 (const uint)
+0:22              direct index ( temp uint)
+0:22                'dti' ( in 3-component vector of uint)
+0:22                Constant:
+0:22                  0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22          Sequence
+0:22            Constant:
+0:22              0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22            Constant:
+0:22              2 (const int)
+0:22        subgroupInclusiveAdd ( temp 3-component vector of int)
+0:22          vector swizzle ( temp 3-component vector of int)
+0:22            i: direct index for structure ( temp 4-component vector of int)
+0:22              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:22                  Constant:
+0:22                    0 (const uint)
+0:22                direct index ( temp uint)
+0:22                  'dti' ( in 3-component vector of uint)
+0:22                  Constant:
+0:22                    0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22            Sequence
+0:22              Constant:
+0:22                0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22              Constant:
+0:22                2 (const int)
+0:24      move second child to first child ( temp 4-component vector of float)
+0:24        f: direct index for structure ( temp 4-component vector of float)
+0:24          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:24              Constant:
+0:24                0 (const uint)
+0:24            direct index ( temp uint)
+0:24              'dti' ( in 3-component vector of uint)
+0:24              Constant:
+0:24                0 (const int)
+0:24          Constant:
+0:24            2 (const int)
+0:24        subgroupInclusiveAdd ( temp 4-component vector of float)
+0:24          f: direct index for structure ( temp 4-component vector of float)
+0:24            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:24                Constant:
+0:24                  0 (const uint)
+0:24              direct index ( temp uint)
+0:24                'dti' ( in 3-component vector of uint)
+0:24                Constant:
+0:24                  0 (const int)
+0:24            Constant:
+0:24              2 (const int)
+0:25      move second child to first child ( temp float)
+0:25        direct index ( temp float)
+0:25          f: direct index for structure ( temp 4-component vector of float)
+0:25            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:25                Constant:
+0:25                  0 (const uint)
+0:25              direct index ( temp uint)
+0:25                'dti' ( in 3-component vector of uint)
+0:25                Constant:
+0:25                  0 (const int)
+0:25            Constant:
+0:25              2 (const int)
+0:25          Constant:
+0:25            0 (const int)
+0:25        subgroupInclusiveAdd ( temp float)
+0:25          direct index ( temp float)
+0:25            f: direct index for structure ( temp 4-component vector of float)
+0:25              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:25                  Constant:
+0:25                    0 (const uint)
+0:25                direct index ( temp uint)
+0:25                  'dti' ( in 3-component vector of uint)
+0:25                  Constant:
+0:25                    0 (const int)
+0:25              Constant:
+0:25                2 (const int)
+0:25            Constant:
+0:25              0 (const int)
+0:26      move second child to first child ( temp 2-component vector of float)
+0:26        vector swizzle ( temp 2-component vector of float)
+0:26          f: direct index for structure ( temp 4-component vector of float)
+0:26            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:26                Constant:
+0:26                  0 (const uint)
+0:26              direct index ( temp uint)
+0:26                'dti' ( in 3-component vector of uint)
+0:26                Constant:
+0:26                  0 (const int)
+0:26            Constant:
+0:26              2 (const int)
+0:26          Sequence
+0:26            Constant:
+0:26              0 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26        subgroupInclusiveAdd ( temp 2-component vector of float)
+0:26          vector swizzle ( temp 2-component vector of float)
+0:26            f: direct index for structure ( temp 4-component vector of float)
+0:26              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:26                  Constant:
+0:26                    0 (const uint)
+0:26                direct index ( temp uint)
+0:26                  'dti' ( in 3-component vector of uint)
+0:26                  Constant:
+0:26                    0 (const int)
+0:26              Constant:
+0:26                2 (const int)
+0:26            Sequence
+0:26              Constant:
+0:26                0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:27      move second child to first child ( temp 3-component vector of float)
+0:27        vector swizzle ( temp 3-component vector of float)
+0:27          f: direct index for structure ( temp 4-component vector of float)
+0:27            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:27                Constant:
+0:27                  0 (const uint)
+0:27              direct index ( temp uint)
+0:27                'dti' ( in 3-component vector of uint)
+0:27                Constant:
+0:27                  0 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27          Sequence
+0:27            Constant:
+0:27              0 (const int)
+0:27            Constant:
+0:27              1 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27        subgroupInclusiveAdd ( temp 3-component vector of float)
+0:27          vector swizzle ( temp 3-component vector of float)
+0:27            f: direct index for structure ( temp 4-component vector of float)
+0:27              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:27                  Constant:
+0:27                    0 (const uint)
+0:27                direct index ( temp uint)
+0:27                  'dti' ( in 3-component vector of uint)
+0:27                  Constant:
+0:27                    0 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:27            Sequence
+0:27              Constant:
+0:27                0 (const int)
+0:27              Constant:
+0:27                1 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:29      move second child to first child ( temp 4-component vector of double)
+0:29        d: direct index for structure ( temp 4-component vector of double)
+0:29          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:29              Constant:
+0:29                0 (const uint)
+0:29            direct index ( temp uint)
+0:29              'dti' ( in 3-component vector of uint)
+0:29              Constant:
+0:29                0 (const int)
+0:29          Constant:
+0:29            3 (const int)
+0:29        subgroupInclusiveAdd ( temp 4-component vector of double)
+0:29          d: direct index for structure ( temp 4-component vector of double)
+0:29            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:29                Constant:
+0:29                  0 (const uint)
+0:29              direct index ( temp uint)
+0:29                'dti' ( in 3-component vector of uint)
+0:29                Constant:
+0:29                  0 (const int)
+0:29            Constant:
+0:29              3 (const int)
+0:30      move second child to first child ( temp double)
+0:30        direct index ( temp double)
+0:30          d: direct index for structure ( temp 4-component vector of double)
+0:30            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:30                Constant:
+0:30                  0 (const uint)
+0:30              direct index ( temp uint)
+0:30                'dti' ( in 3-component vector of uint)
+0:30                Constant:
+0:30                  0 (const int)
+0:30            Constant:
+0:30              3 (const int)
+0:30          Constant:
+0:30            0 (const int)
+0:30        subgroupInclusiveAdd ( temp double)
+0:30          direct index ( temp double)
+0:30            d: direct index for structure ( temp 4-component vector of double)
+0:30              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:30                  Constant:
+0:30                    0 (const uint)
+0:30                direct index ( temp uint)
+0:30                  'dti' ( in 3-component vector of uint)
+0:30                  Constant:
+0:30                    0 (const int)
+0:30              Constant:
+0:30                3 (const int)
+0:30            Constant:
+0:30              0 (const int)
+0:31      move second child to first child ( temp 2-component vector of double)
+0:31        vector swizzle ( temp 2-component vector of double)
+0:31          d: direct index for structure ( temp 4-component vector of double)
+0:31            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:31                Constant:
+0:31                  0 (const uint)
+0:31              direct index ( temp uint)
+0:31                'dti' ( in 3-component vector of uint)
+0:31                Constant:
+0:31                  0 (const int)
+0:31            Constant:
+0:31              3 (const int)
+0:31          Sequence
+0:31            Constant:
+0:31              0 (const int)
+0:31            Constant:
+0:31              1 (const int)
+0:31        subgroupInclusiveAdd ( temp 2-component vector of double)
+0:31          vector swizzle ( temp 2-component vector of double)
+0:31            d: direct index for structure ( temp 4-component vector of double)
+0:31              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:31                  Constant:
+0:31                    0 (const uint)
+0:31                direct index ( temp uint)
+0:31                  'dti' ( in 3-component vector of uint)
+0:31                  Constant:
+0:31                    0 (const int)
+0:31              Constant:
+0:31                3 (const int)
+0:31            Sequence
+0:31              Constant:
+0:31                0 (const int)
+0:31              Constant:
+0:31                1 (const int)
+0:32      move second child to first child ( temp 3-component vector of double)
+0:32        vector swizzle ( temp 3-component vector of double)
+0:32          d: direct index for structure ( temp 4-component vector of double)
+0:32            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:32                Constant:
+0:32                  0 (const uint)
+0:32              direct index ( temp uint)
+0:32                'dti' ( in 3-component vector of uint)
+0:32                Constant:
+0:32                  0 (const int)
+0:32            Constant:
+0:32              3 (const int)
+0:32          Sequence
+0:32            Constant:
+0:32              0 (const int)
+0:32            Constant:
+0:32              1 (const int)
+0:32            Constant:
+0:32              2 (const int)
+0:32        subgroupInclusiveAdd ( temp 3-component vector of double)
+0:32          vector swizzle ( temp 3-component vector of double)
+0:32            d: direct index for structure ( temp 4-component vector of double)
+0:32              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:32                  Constant:
+0:32                    0 (const uint)
+0:32                direct index ( temp uint)
+0:32                  'dti' ( in 3-component vector of uint)
+0:32                  Constant:
+0:32                    0 (const int)
+0:32              Constant:
+0:32                3 (const int)
+0:32            Sequence
+0:32              Constant:
+0:32                0 (const int)
+0:32              Constant:
+0:32                1 (const int)
+0:32              Constant:
+0:32                2 (const int)
+0:34      move second child to first child ( temp 4-component vector of uint)
+0:34        u: direct index for structure ( temp 4-component vector of uint)
+0:34          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:34              Constant:
+0:34                0 (const uint)
+0:34            direct index ( temp uint)
+0:34              'dti' ( in 3-component vector of uint)
+0:34              Constant:
+0:34                0 (const int)
+0:34          Constant:
+0:34            0 (const int)
+0:34        subgroupInclusiveMul ( temp 4-component vector of uint)
+0:34          u: direct index for structure ( temp 4-component vector of uint)
+0:34            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:34                Constant:
+0:34                  0 (const uint)
+0:34              direct index ( temp uint)
+0:34                'dti' ( in 3-component vector of uint)
+0:34                Constant:
+0:34                  0 (const int)
+0:34            Constant:
+0:34              0 (const int)
+0:35      move second child to first child ( temp uint)
+0:35        direct index ( temp uint)
+0:35          u: direct index for structure ( temp 4-component vector of uint)
+0:35            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:35                Constant:
+0:35                  0 (const uint)
+0:35              direct index ( temp uint)
+0:35                'dti' ( in 3-component vector of uint)
+0:35                Constant:
+0:35                  0 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:35          Constant:
+0:35            0 (const int)
+0:35        subgroupInclusiveMul ( temp uint)
+0:35          direct index ( temp uint)
+0:35            u: direct index for structure ( temp 4-component vector of uint)
+0:35              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:35                  Constant:
+0:35                    0 (const uint)
+0:35                direct index ( temp uint)
+0:35                  'dti' ( in 3-component vector of uint)
+0:35                  Constant:
+0:35                    0 (const int)
+0:35              Constant:
+0:35                0 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:36      move second child to first child ( temp 2-component vector of uint)
+0:36        vector swizzle ( temp 2-component vector of uint)
+0:36          u: direct index for structure ( temp 4-component vector of uint)
+0:36            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:36                Constant:
+0:36                  0 (const uint)
+0:36              direct index ( temp uint)
+0:36                'dti' ( in 3-component vector of uint)
+0:36                Constant:
+0:36                  0 (const int)
+0:36            Constant:
+0:36              0 (const int)
+0:36          Sequence
+0:36            Constant:
+0:36              0 (const int)
+0:36            Constant:
+0:36              1 (const int)
+0:36        subgroupInclusiveMul ( temp 2-component vector of uint)
+0:36          vector swizzle ( temp 2-component vector of uint)
+0:36            u: direct index for structure ( temp 4-component vector of uint)
+0:36              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:36                  Constant:
+0:36                    0 (const uint)
+0:36                direct index ( temp uint)
+0:36                  'dti' ( in 3-component vector of uint)
+0:36                  Constant:
+0:36                    0 (const int)
+0:36              Constant:
+0:36                0 (const int)
+0:36            Sequence
+0:36              Constant:
+0:36                0 (const int)
+0:36              Constant:
+0:36                1 (const int)
+0:37      move second child to first child ( temp 3-component vector of uint)
+0:37        vector swizzle ( temp 3-component vector of uint)
+0:37          u: direct index for structure ( temp 4-component vector of uint)
+0:37            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:37                Constant:
+0:37                  0 (const uint)
+0:37              direct index ( temp uint)
+0:37                'dti' ( in 3-component vector of uint)
+0:37                Constant:
+0:37                  0 (const int)
+0:37            Constant:
+0:37              0 (const int)
+0:37          Sequence
+0:37            Constant:
+0:37              0 (const int)
+0:37            Constant:
+0:37              1 (const int)
+0:37            Constant:
+0:37              2 (const int)
+0:37        subgroupInclusiveMul ( temp 3-component vector of uint)
+0:37          vector swizzle ( temp 3-component vector of uint)
+0:37            u: direct index for structure ( temp 4-component vector of uint)
+0:37              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:37                  Constant:
+0:37                    0 (const uint)
+0:37                direct index ( temp uint)
+0:37                  'dti' ( in 3-component vector of uint)
+0:37                  Constant:
+0:37                    0 (const int)
+0:37              Constant:
+0:37                0 (const int)
+0:37            Sequence
+0:37              Constant:
+0:37                0 (const int)
+0:37              Constant:
+0:37                1 (const int)
+0:37              Constant:
+0:37                2 (const int)
+0:39      move second child to first child ( temp 4-component vector of int)
+0:39        i: direct index for structure ( temp 4-component vector of int)
+0:39          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:39              Constant:
+0:39                0 (const uint)
+0:39            direct index ( temp uint)
+0:39              'dti' ( in 3-component vector of uint)
+0:39              Constant:
+0:39                0 (const int)
+0:39          Constant:
+0:39            1 (const int)
+0:39        subgroupInclusiveMul ( temp 4-component vector of int)
+0:39          i: direct index for structure ( temp 4-component vector of int)
+0:39            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:39                Constant:
+0:39                  0 (const uint)
+0:39              direct index ( temp uint)
+0:39                'dti' ( in 3-component vector of uint)
+0:39                Constant:
+0:39                  0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:40      move second child to first child ( temp int)
+0:40        direct index ( temp int)
+0:40          i: direct index for structure ( temp 4-component vector of int)
+0:40            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:40                Constant:
+0:40                  0 (const uint)
+0:40              direct index ( temp uint)
+0:40                'dti' ( in 3-component vector of uint)
+0:40                Constant:
+0:40                  0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40          Constant:
+0:40            0 (const int)
+0:40        subgroupInclusiveMul ( temp int)
+0:40          direct index ( temp int)
+0:40            i: direct index for structure ( temp 4-component vector of int)
+0:40              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:40                  Constant:
+0:40                    0 (const uint)
+0:40                direct index ( temp uint)
+0:40                  'dti' ( in 3-component vector of uint)
+0:40                  Constant:
+0:40                    0 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40            Constant:
+0:40              0 (const int)
+0:41      move second child to first child ( temp 2-component vector of int)
+0:41        vector swizzle ( temp 2-component vector of int)
+0:41          i: direct index for structure ( temp 4-component vector of int)
+0:41            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:41                Constant:
+0:41                  0 (const uint)
+0:41              direct index ( temp uint)
+0:41                'dti' ( in 3-component vector of uint)
+0:41                Constant:
+0:41                  0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41          Sequence
+0:41            Constant:
+0:41              0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41        subgroupInclusiveMul ( temp 2-component vector of int)
+0:41          vector swizzle ( temp 2-component vector of int)
+0:41            i: direct index for structure ( temp 4-component vector of int)
+0:41              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:41                  Constant:
+0:41                    0 (const uint)
+0:41                direct index ( temp uint)
+0:41                  'dti' ( in 3-component vector of uint)
+0:41                  Constant:
+0:41                    0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:41            Sequence
+0:41              Constant:
+0:41                0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:42      move second child to first child ( temp 3-component vector of int)
+0:42        vector swizzle ( temp 3-component vector of int)
+0:42          i: direct index for structure ( temp 4-component vector of int)
+0:42            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:42                Constant:
+0:42                  0 (const uint)
+0:42              direct index ( temp uint)
+0:42                'dti' ( in 3-component vector of uint)
+0:42                Constant:
+0:42                  0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42          Sequence
+0:42            Constant:
+0:42              0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42            Constant:
+0:42              2 (const int)
+0:42        subgroupInclusiveMul ( temp 3-component vector of int)
+0:42          vector swizzle ( temp 3-component vector of int)
+0:42            i: direct index for structure ( temp 4-component vector of int)
+0:42              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:42                  Constant:
+0:42                    0 (const uint)
+0:42                direct index ( temp uint)
+0:42                  'dti' ( in 3-component vector of uint)
+0:42                  Constant:
+0:42                    0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42            Sequence
+0:42              Constant:
+0:42                0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42              Constant:
+0:42                2 (const int)
+0:44      move second child to first child ( temp 4-component vector of float)
+0:44        f: direct index for structure ( temp 4-component vector of float)
+0:44          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:44              Constant:
+0:44                0 (const uint)
+0:44            direct index ( temp uint)
+0:44              'dti' ( in 3-component vector of uint)
+0:44              Constant:
+0:44                0 (const int)
+0:44          Constant:
+0:44            2 (const int)
+0:44        subgroupInclusiveMul ( temp 4-component vector of float)
+0:44          f: direct index for structure ( temp 4-component vector of float)
+0:44            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:44                Constant:
+0:44                  0 (const uint)
+0:44              direct index ( temp uint)
+0:44                'dti' ( in 3-component vector of uint)
+0:44                Constant:
+0:44                  0 (const int)
+0:44            Constant:
+0:44              2 (const int)
+0:45      move second child to first child ( temp float)
+0:45        direct index ( temp float)
+0:45          f: direct index for structure ( temp 4-component vector of float)
+0:45            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:45                Constant:
+0:45                  0 (const uint)
+0:45              direct index ( temp uint)
+0:45                'dti' ( in 3-component vector of uint)
+0:45                Constant:
+0:45                  0 (const int)
+0:45            Constant:
+0:45              2 (const int)
+0:45          Constant:
+0:45            0 (const int)
+0:45        subgroupInclusiveMul ( temp float)
+0:45          direct index ( temp float)
+0:45            f: direct index for structure ( temp 4-component vector of float)
+0:45              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:45                  Constant:
+0:45                    0 (const uint)
+0:45                direct index ( temp uint)
+0:45                  'dti' ( in 3-component vector of uint)
+0:45                  Constant:
+0:45                    0 (const int)
+0:45              Constant:
+0:45                2 (const int)
+0:45            Constant:
+0:45              0 (const int)
+0:46      move second child to first child ( temp 2-component vector of float)
+0:46        vector swizzle ( temp 2-component vector of float)
+0:46          f: direct index for structure ( temp 4-component vector of float)
+0:46            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:46                Constant:
+0:46                  0 (const uint)
+0:46              direct index ( temp uint)
+0:46                'dti' ( in 3-component vector of uint)
+0:46                Constant:
+0:46                  0 (const int)
+0:46            Constant:
+0:46              2 (const int)
+0:46          Sequence
+0:46            Constant:
+0:46              0 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46        subgroupInclusiveMul ( temp 2-component vector of float)
+0:46          vector swizzle ( temp 2-component vector of float)
+0:46            f: direct index for structure ( temp 4-component vector of float)
+0:46              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:46                  Constant:
+0:46                    0 (const uint)
+0:46                direct index ( temp uint)
+0:46                  'dti' ( in 3-component vector of uint)
+0:46                  Constant:
+0:46                    0 (const int)
+0:46              Constant:
+0:46                2 (const int)
+0:46            Sequence
+0:46              Constant:
+0:46                0 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:47      move second child to first child ( temp 3-component vector of float)
+0:47        vector swizzle ( temp 3-component vector of float)
+0:47          f: direct index for structure ( temp 4-component vector of float)
+0:47            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:47                Constant:
+0:47                  0 (const uint)
+0:47              direct index ( temp uint)
+0:47                'dti' ( in 3-component vector of uint)
+0:47                Constant:
+0:47                  0 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47          Sequence
+0:47            Constant:
+0:47              0 (const int)
+0:47            Constant:
+0:47              1 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47        subgroupInclusiveMul ( temp 3-component vector of float)
+0:47          vector swizzle ( temp 3-component vector of float)
+0:47            f: direct index for structure ( temp 4-component vector of float)
+0:47              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:47                  Constant:
+0:47                    0 (const uint)
+0:47                direct index ( temp uint)
+0:47                  'dti' ( in 3-component vector of uint)
+0:47                  Constant:
+0:47                    0 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:47            Sequence
+0:47              Constant:
+0:47                0 (const int)
+0:47              Constant:
+0:47                1 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:49      move second child to first child ( temp 4-component vector of double)
+0:49        d: direct index for structure ( temp 4-component vector of double)
+0:49          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:49              Constant:
+0:49                0 (const uint)
+0:49            direct index ( temp uint)
+0:49              'dti' ( in 3-component vector of uint)
+0:49              Constant:
+0:49                0 (const int)
+0:49          Constant:
+0:49            3 (const int)
+0:49        subgroupInclusiveMul ( temp 4-component vector of double)
+0:49          d: direct index for structure ( temp 4-component vector of double)
+0:49            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:49                Constant:
+0:49                  0 (const uint)
+0:49              direct index ( temp uint)
+0:49                'dti' ( in 3-component vector of uint)
+0:49                Constant:
+0:49                  0 (const int)
+0:49            Constant:
+0:49              3 (const int)
+0:50      move second child to first child ( temp double)
+0:50        direct index ( temp double)
+0:50          d: direct index for structure ( temp 4-component vector of double)
+0:50            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:50                Constant:
+0:50                  0 (const uint)
+0:50              direct index ( temp uint)
+0:50                'dti' ( in 3-component vector of uint)
+0:50                Constant:
+0:50                  0 (const int)
+0:50            Constant:
+0:50              3 (const int)
+0:50          Constant:
+0:50            0 (const int)
+0:50        subgroupInclusiveMul ( temp double)
+0:50          direct index ( temp double)
+0:50            d: direct index for structure ( temp 4-component vector of double)
+0:50              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:50                  Constant:
+0:50                    0 (const uint)
+0:50                direct index ( temp uint)
+0:50                  'dti' ( in 3-component vector of uint)
+0:50                  Constant:
+0:50                    0 (const int)
+0:50              Constant:
+0:50                3 (const int)
+0:50            Constant:
+0:50              0 (const int)
+0:51      move second child to first child ( temp 2-component vector of double)
+0:51        vector swizzle ( temp 2-component vector of double)
+0:51          d: direct index for structure ( temp 4-component vector of double)
+0:51            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:51                Constant:
+0:51                  0 (const uint)
+0:51              direct index ( temp uint)
+0:51                'dti' ( in 3-component vector of uint)
+0:51                Constant:
+0:51                  0 (const int)
+0:51            Constant:
+0:51              3 (const int)
+0:51          Sequence
+0:51            Constant:
+0:51              0 (const int)
+0:51            Constant:
+0:51              1 (const int)
+0:51        subgroupInclusiveMul ( temp 2-component vector of double)
+0:51          vector swizzle ( temp 2-component vector of double)
+0:51            d: direct index for structure ( temp 4-component vector of double)
+0:51              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:51                  Constant:
+0:51                    0 (const uint)
+0:51                direct index ( temp uint)
+0:51                  'dti' ( in 3-component vector of uint)
+0:51                  Constant:
+0:51                    0 (const int)
+0:51              Constant:
+0:51                3 (const int)
+0:51            Sequence
+0:51              Constant:
+0:51                0 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:52      move second child to first child ( temp 3-component vector of double)
+0:52        vector swizzle ( temp 3-component vector of double)
+0:52          d: direct index for structure ( temp 4-component vector of double)
+0:52            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:52                Constant:
+0:52                  0 (const uint)
+0:52              direct index ( temp uint)
+0:52                'dti' ( in 3-component vector of uint)
+0:52                Constant:
+0:52                  0 (const int)
+0:52            Constant:
+0:52              3 (const int)
+0:52          Sequence
+0:52            Constant:
+0:52              0 (const int)
+0:52            Constant:
+0:52              1 (const int)
+0:52            Constant:
+0:52              2 (const int)
+0:52        subgroupInclusiveMul ( temp 3-component vector of double)
+0:52          vector swizzle ( temp 3-component vector of double)
+0:52            d: direct index for structure ( temp 4-component vector of double)
+0:52              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:52                  Constant:
+0:52                    0 (const uint)
+0:52                direct index ( temp uint)
+0:52                  'dti' ( in 3-component vector of uint)
+0:52                  Constant:
+0:52                    0 (const int)
+0:52              Constant:
+0:52                3 (const int)
+0:52            Sequence
+0:52              Constant:
+0:52                0 (const int)
+0:52              Constant:
+0:52                1 (const int)
+0:52              Constant:
+0:52                2 (const int)
+0:54      move second child to first child ( temp uint)
+0:54        direct index ( temp uint)
+0:54          u: direct index for structure ( temp 4-component vector of uint)
+0:54            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:54                Constant:
+0:54                  0 (const uint)
+0:54              direct index ( temp uint)
+0:54                'dti' ( in 3-component vector of uint)
+0:54                Constant:
+0:54                  0 (const int)
+0:54            Constant:
+0:54              0 (const int)
+0:54          Constant:
+0:54            0 (const int)
+0:54        subgroupBallotInclusiveBitCount ( temp uint)
+0:54          subgroupBallot ( temp 4-component vector of uint)
+0:54            Compare Equal ( temp bool)
+0:54              direct index ( temp uint)
+0:54                u: direct index for structure ( temp 4-component vector of uint)
+0:54                  indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54                      'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:54                      Constant:
+0:54                        0 (const uint)
+0:54                    direct index ( temp uint)
+0:54                      'dti' ( in 3-component vector of uint)
+0:54                      Constant:
+0:54                        0 (const int)
+0:54                  Constant:
+0:54                    0 (const int)
+0:54                Constant:
+0:54                  0 (const int)
+0:54              Constant:
+0:54                0 (const uint)
+0:13  Function Definition: CSMain( ( temp void)
+0:13    Function Parameters: 
+0:?     Sequence
+0:13      move second child to first child ( temp 3-component vector of uint)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?         'dti' ( in 3-component vector of uint GlobalInvocationID)
+0:13      Function Call: @CSMain(vu3; ( temp void)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?   Linker Objects
+0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
+
+// Module Version 10300
+// Generated by (magic number): 80005
+// Id's are bound by 369
+
+                              Capability Shader
+                              Capability Float64
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformArithmetic
+                              Capability GroupNonUniformBallot
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "CSMain" 364
+                              ExecutionMode 4 LocalSize 32 16 1
+                              Source HLSL 500
+                              Name 4  "CSMain"
+                              Name 11  "@CSMain(vu3;"
+                              Name 10  "dti"
+                              Name 20  "Types"
+                              MemberName 20(Types) 0  "u"
+                              MemberName 20(Types) 1  "i"
+                              MemberName 20(Types) 2  "f"
+                              MemberName 20(Types) 3  "d"
+                              Name 22  "data"
+                              MemberName 22(data) 0  "@data"
+                              Name 24  "data"
+                              Name 362  "dti"
+                              Name 364  "dti"
+                              Name 366  "param"
+                              MemberDecorate 20(Types) 0 Offset 0
+                              MemberDecorate 20(Types) 1 Offset 16
+                              MemberDecorate 20(Types) 2 Offset 32
+                              MemberDecorate 20(Types) 3 Offset 64
+                              Decorate 21 ArrayStride 96
+                              MemberDecorate 22(data) 0 Offset 0
+                              Decorate 22(data) BufferBlock
+                              Decorate 24(data) DescriptorSet 0
+                              Decorate 364(dti) BuiltIn GlobalInvocationId
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 3
+               8:             TypePointer Function 7(ivec3)
+               9:             TypeFunction 2 8(ptr)
+              13:             TypeVector 6(int) 4
+              14:             TypeInt 32 1
+              15:             TypeVector 14(int) 4
+              16:             TypeFloat 32
+              17:             TypeVector 16(float) 4
+              18:             TypeFloat 64
+              19:             TypeVector 18(float) 4
+       20(Types):             TypeStruct 13(ivec4) 15(ivec4) 17(fvec4) 19(fvec4)
+              21:             TypeRuntimeArray 20(Types)
+        22(data):             TypeStruct 21
+              23:             TypePointer Uniform 22(data)
+        24(data):     23(ptr) Variable Uniform
+              25:     14(int) Constant 0
+              26:      6(int) Constant 0
+              27:             TypePointer Function 6(int)
+              32:             TypePointer Uniform 13(ivec4)
+              35:      6(int) Constant 3
+              42:             TypePointer Uniform 6(int)
+              51:             TypeVector 6(int) 2
+              72:     14(int) Constant 1
+              75:             TypePointer Uniform 15(ivec4)
+              84:             TypePointer Uniform 14(int)
+              93:             TypeVector 14(int) 2
+             105:             TypeVector 14(int) 3
+             115:     14(int) Constant 2
+             118:             TypePointer Uniform 17(fvec4)
+             127:             TypePointer Uniform 16(float)
+             136:             TypeVector 16(float) 2
+             148:             TypeVector 16(float) 3
+             158:     14(int) Constant 3
+             161:             TypePointer Uniform 19(fvec4)
+             170:             TypePointer Uniform 18(float)
+             179:             TypeVector 18(float) 2
+             191:             TypeVector 18(float) 3
+             357:             TypeBool
+             363:             TypePointer Input 7(ivec3)
+        364(dti):    363(ptr) Variable Input
+       4(CSMain):           2 Function None 3
+               5:             Label
+        362(dti):      8(ptr) Variable Function
+      366(param):      8(ptr) Variable Function
+             365:    7(ivec3) Load 364(dti)
+                              Store 362(dti) 365
+             367:    7(ivec3) Load 362(dti)
+                              Store 366(param) 367
+             368:           2 FunctionCall 11(@CSMain(vu3;) 366(param)
+                              Return
+                              FunctionEnd
+11(@CSMain(vu3;):           2 Function None 9
+         10(dti):      8(ptr) FunctionParameter
+              12:             Label
+              28:     27(ptr) AccessChain 10(dti) 26
+              29:      6(int) Load 28
+              30:     27(ptr) AccessChain 10(dti) 26
+              31:      6(int) Load 30
+              33:     32(ptr) AccessChain 24(data) 25 31 25
+              34:   13(ivec4) Load 33
+              36:   13(ivec4) GroupNonUniformIAdd 35 InclusiveScan 34
+              37:     32(ptr) AccessChain 24(data) 25 29 25
+                              Store 37 36
+              38:     27(ptr) AccessChain 10(dti) 26
+              39:      6(int) Load 38
+              40:     27(ptr) AccessChain 10(dti) 26
+              41:      6(int) Load 40
+              43:     42(ptr) AccessChain 24(data) 25 41 25 26
+              44:      6(int) Load 43
+              45:      6(int) GroupNonUniformIAdd 35 InclusiveScan 44
+              46:     42(ptr) AccessChain 24(data) 25 39 25 26
+                              Store 46 45
+              47:     27(ptr) AccessChain 10(dti) 26
+              48:      6(int) Load 47
+              49:     27(ptr) AccessChain 10(dti) 26
+              50:      6(int) Load 49
+              52:     32(ptr) AccessChain 24(data) 25 50 25
+              53:   13(ivec4) Load 52
+              54:   51(ivec2) VectorShuffle 53 53 0 1
+              55:   51(ivec2) GroupNonUniformIAdd 35 InclusiveScan 54
+              56:     32(ptr) AccessChain 24(data) 25 48 25
+              57:   13(ivec4) Load 56
+              58:   13(ivec4) VectorShuffle 57 55 4 5 2 3
+                              Store 56 58
+              59:     27(ptr) AccessChain 10(dti) 26
+              60:      6(int) Load 59
+              61:     27(ptr) AccessChain 10(dti) 26
+              62:      6(int) Load 61
+              63:     32(ptr) AccessChain 24(data) 25 62 25
+              64:   13(ivec4) Load 63
+              65:    7(ivec3) VectorShuffle 64 64 0 1 2
+              66:    7(ivec3) GroupNonUniformIAdd 35 InclusiveScan 65
+              67:     32(ptr) AccessChain 24(data) 25 60 25
+              68:   13(ivec4) Load 67
+              69:   13(ivec4) VectorShuffle 68 66 4 5 6 3
+                              Store 67 69
+              70:     27(ptr) AccessChain 10(dti) 26
+              71:      6(int) Load 70
+              73:     27(ptr) AccessChain 10(dti) 26
+              74:      6(int) Load 73
+              76:     75(ptr) AccessChain 24(data) 25 74 72
+              77:   15(ivec4) Load 76
+              78:   15(ivec4) GroupNonUniformIAdd 35 InclusiveScan 77
+              79:     75(ptr) AccessChain 24(data) 25 71 72
+                              Store 79 78
+              80:     27(ptr) AccessChain 10(dti) 26
+              81:      6(int) Load 80
+              82:     27(ptr) AccessChain 10(dti) 26
+              83:      6(int) Load 82
+              85:     84(ptr) AccessChain 24(data) 25 83 72 26
+              86:     14(int) Load 85
+              87:     14(int) GroupNonUniformIAdd 35 InclusiveScan 86
+              88:     84(ptr) AccessChain 24(data) 25 81 72 26
+                              Store 88 87
+              89:     27(ptr) AccessChain 10(dti) 26
+              90:      6(int) Load 89
+              91:     27(ptr) AccessChain 10(dti) 26
+              92:      6(int) Load 91
+              94:     75(ptr) AccessChain 24(data) 25 92 72
+              95:   15(ivec4) Load 94
+              96:   93(ivec2) VectorShuffle 95 95 0 1
+              97:   93(ivec2) GroupNonUniformIAdd 35 InclusiveScan 96
+              98:     75(ptr) AccessChain 24(data) 25 90 72
+              99:   15(ivec4) Load 98
+             100:   15(ivec4) VectorShuffle 99 97 4 5 2 3
+                              Store 98 100
+             101:     27(ptr) AccessChain 10(dti) 26
+             102:      6(int) Load 101
+             103:     27(ptr) AccessChain 10(dti) 26
+             104:      6(int) Load 103
+             106:     75(ptr) AccessChain 24(data) 25 104 72
+             107:   15(ivec4) Load 106
+             108:  105(ivec3) VectorShuffle 107 107 0 1 2
+             109:  105(ivec3) GroupNonUniformIAdd 35 InclusiveScan 108
+             110:     75(ptr) AccessChain 24(data) 25 102 72
+             111:   15(ivec4) Load 110
+             112:   15(ivec4) VectorShuffle 111 109 4 5 6 3
+                              Store 110 112
+             113:     27(ptr) AccessChain 10(dti) 26
+             114:      6(int) Load 113
+             116:     27(ptr) AccessChain 10(dti) 26
+             117:      6(int) Load 116
+             119:    118(ptr) AccessChain 24(data) 25 117 115
+             120:   17(fvec4) Load 119
+             121:   17(fvec4) GroupNonUniformFAdd 35 InclusiveScan 120
+             122:    118(ptr) AccessChain 24(data) 25 114 115
+                              Store 122 121
+             123:     27(ptr) AccessChain 10(dti) 26
+             124:      6(int) Load 123
+             125:     27(ptr) AccessChain 10(dti) 26
+             126:      6(int) Load 125
+             128:    127(ptr) AccessChain 24(data) 25 126 115 26
+             129:   16(float) Load 128
+             130:   16(float) GroupNonUniformFAdd 35 InclusiveScan 129
+             131:    127(ptr) AccessChain 24(data) 25 124 115 26
+                              Store 131 130
+             132:     27(ptr) AccessChain 10(dti) 26
+             133:      6(int) Load 132
+             134:     27(ptr) AccessChain 10(dti) 26
+             135:      6(int) Load 134
+             137:    118(ptr) AccessChain 24(data) 25 135 115
+             138:   17(fvec4) Load 137
+             139:  136(fvec2) VectorShuffle 138 138 0 1
+             140:  136(fvec2) GroupNonUniformFAdd 35 InclusiveScan 139
+             141:    118(ptr) AccessChain 24(data) 25 133 115
+             142:   17(fvec4) Load 141
+             143:   17(fvec4) VectorShuffle 142 140 4 5 2 3
+                              Store 141 143
+             144:     27(ptr) AccessChain 10(dti) 26
+             145:      6(int) Load 144
+             146:     27(ptr) AccessChain 10(dti) 26
+             147:      6(int) Load 146
+             149:    118(ptr) AccessChain 24(data) 25 147 115
+             150:   17(fvec4) Load 149
+             151:  148(fvec3) VectorShuffle 150 150 0 1 2
+             152:  148(fvec3) GroupNonUniformFAdd 35 InclusiveScan 151
+             153:    118(ptr) AccessChain 24(data) 25 145 115
+             154:   17(fvec4) Load 153
+             155:   17(fvec4) VectorShuffle 154 152 4 5 6 3
+                              Store 153 155
+             156:     27(ptr) AccessChain 10(dti) 26
+             157:      6(int) Load 156
+             159:     27(ptr) AccessChain 10(dti) 26
+             160:      6(int) Load 159
+             162:    161(ptr) AccessChain 24(data) 25 160 158
+             163:   19(fvec4) Load 162
+             164:   19(fvec4) GroupNonUniformFAdd 35 InclusiveScan 163
+             165:    161(ptr) AccessChain 24(data) 25 157 158
+                              Store 165 164
+             166:     27(ptr) AccessChain 10(dti) 26
+             167:      6(int) Load 166
+             168:     27(ptr) AccessChain 10(dti) 26
+             169:      6(int) Load 168
+             171:    170(ptr) AccessChain 24(data) 25 169 158 26
+             172:   18(float) Load 171
+             173:   18(float) GroupNonUniformFAdd 35 InclusiveScan 172
+             174:    170(ptr) AccessChain 24(data) 25 167 158 26
+                              Store 174 173
+             175:     27(ptr) AccessChain 10(dti) 26
+             176:      6(int) Load 175
+             177:     27(ptr) AccessChain 10(dti) 26
+             178:      6(int) Load 177
+             180:    161(ptr) AccessChain 24(data) 25 178 158
+             181:   19(fvec4) Load 180
+             182:  179(fvec2) VectorShuffle 181 181 0 1
+             183:  179(fvec2) GroupNonUniformFAdd 35 InclusiveScan 182
+             184:    161(ptr) AccessChain 24(data) 25 176 158
+             185:   19(fvec4) Load 184
+             186:   19(fvec4) VectorShuffle 185 183 4 5 2 3
+                              Store 184 186
+             187:     27(ptr) AccessChain 10(dti) 26
+             188:      6(int) Load 187
+             189:     27(ptr) AccessChain 10(dti) 26
+             190:      6(int) Load 189
+             192:    161(ptr) AccessChain 24(data) 25 190 158
+             193:   19(fvec4) Load 192
+             194:  191(fvec3) VectorShuffle 193 193 0 1 2
+             195:  191(fvec3) GroupNonUniformFAdd 35 InclusiveScan 194
+             196:    161(ptr) AccessChain 24(data) 25 188 158
+             197:   19(fvec4) Load 196
+             198:   19(fvec4) VectorShuffle 197 195 4 5 6 3
+                              Store 196 198
+             199:     27(ptr) AccessChain 10(dti) 26
+             200:      6(int) Load 199
+             201:     27(ptr) AccessChain 10(dti) 26
+             202:      6(int) Load 201
+             203:     32(ptr) AccessChain 24(data) 25 202 25
+             204:   13(ivec4) Load 203
+             205:   13(ivec4) GroupNonUniformIMul 35 InclusiveScan 204
+             206:     32(ptr) AccessChain 24(data) 25 200 25
+                              Store 206 205
+             207:     27(ptr) AccessChain 10(dti) 26
+             208:      6(int) Load 207
+             209:     27(ptr) AccessChain 10(dti) 26
+             210:      6(int) Load 209
+             211:     42(ptr) AccessChain 24(data) 25 210 25 26
+             212:      6(int) Load 211
+             213:      6(int) GroupNonUniformIMul 35 InclusiveScan 212
+             214:     42(ptr) AccessChain 24(data) 25 208 25 26
+                              Store 214 213
+             215:     27(ptr) AccessChain 10(dti) 26
+             216:      6(int) Load 215
+             217:     27(ptr) AccessChain 10(dti) 26
+             218:      6(int) Load 217
+             219:     32(ptr) AccessChain 24(data) 25 218 25
+             220:   13(ivec4) Load 219
+             221:   51(ivec2) VectorShuffle 220 220 0 1
+             222:   51(ivec2) GroupNonUniformIMul 35 InclusiveScan 221
+             223:     32(ptr) AccessChain 24(data) 25 216 25
+             224:   13(ivec4) Load 223
+             225:   13(ivec4) VectorShuffle 224 222 4 5 2 3
+                              Store 223 225
+             226:     27(ptr) AccessChain 10(dti) 26
+             227:      6(int) Load 226
+             228:     27(ptr) AccessChain 10(dti) 26
+             229:      6(int) Load 228
+             230:     32(ptr) AccessChain 24(data) 25 229 25
+             231:   13(ivec4) Load 230
+             232:    7(ivec3) VectorShuffle 231 231 0 1 2
+             233:    7(ivec3) GroupNonUniformIMul 35 InclusiveScan 232
+             234:     32(ptr) AccessChain 24(data) 25 227 25
+             235:   13(ivec4) Load 234
+             236:   13(ivec4) VectorShuffle 235 233 4 5 6 3
+                              Store 234 236
+             237:     27(ptr) AccessChain 10(dti) 26
+             238:      6(int) Load 237
+             239:     27(ptr) AccessChain 10(dti) 26
+             240:      6(int) Load 239
+             241:     75(ptr) AccessChain 24(data) 25 240 72
+             242:   15(ivec4) Load 241
+             243:   15(ivec4) GroupNonUniformIMul 35 InclusiveScan 242
+             244:     75(ptr) AccessChain 24(data) 25 238 72
+                              Store 244 243
+             245:     27(ptr) AccessChain 10(dti) 26
+             246:      6(int) Load 245
+             247:     27(ptr) AccessChain 10(dti) 26
+             248:      6(int) Load 247
+             249:     84(ptr) AccessChain 24(data) 25 248 72 26
+             250:     14(int) Load 249
+             251:     14(int) GroupNonUniformIMul 35 InclusiveScan 250
+             252:     84(ptr) AccessChain 24(data) 25 246 72 26
+                              Store 252 251
+             253:     27(ptr) AccessChain 10(dti) 26
+             254:      6(int) Load 253
+             255:     27(ptr) AccessChain 10(dti) 26
+             256:      6(int) Load 255
+             257:     75(ptr) AccessChain 24(data) 25 256 72
+             258:   15(ivec4) Load 257
+             259:   93(ivec2) VectorShuffle 258 258 0 1
+             260:   93(ivec2) GroupNonUniformIMul 35 InclusiveScan 259
+             261:     75(ptr) AccessChain 24(data) 25 254 72
+             262:   15(ivec4) Load 261
+             263:   15(ivec4) VectorShuffle 262 260 4 5 2 3
+                              Store 261 263
+             264:     27(ptr) AccessChain 10(dti) 26
+             265:      6(int) Load 264
+             266:     27(ptr) AccessChain 10(dti) 26
+             267:      6(int) Load 266
+             268:     75(ptr) AccessChain 24(data) 25 267 72
+             269:   15(ivec4) Load 268
+             270:  105(ivec3) VectorShuffle 269 269 0 1 2
+             271:  105(ivec3) GroupNonUniformIMul 35 InclusiveScan 270
+             272:     75(ptr) AccessChain 24(data) 25 265 72
+             273:   15(ivec4) Load 272
+             274:   15(ivec4) VectorShuffle 273 271 4 5 6 3
+                              Store 272 274
+             275:     27(ptr) AccessChain 10(dti) 26
+             276:      6(int) Load 275
+             277:     27(ptr) AccessChain 10(dti) 26
+             278:      6(int) Load 277
+             279:    118(ptr) AccessChain 24(data) 25 278 115
+             280:   17(fvec4) Load 279
+             281:   17(fvec4) GroupNonUniformFMul 35 InclusiveScan 280
+             282:    118(ptr) AccessChain 24(data) 25 276 115
+                              Store 282 281
+             283:     27(ptr) AccessChain 10(dti) 26
+             284:      6(int) Load 283
+             285:     27(ptr) AccessChain 10(dti) 26
+             286:      6(int) Load 285
+             287:    127(ptr) AccessChain 24(data) 25 286 115 26
+             288:   16(float) Load 287
+             289:   16(float) GroupNonUniformFMul 35 InclusiveScan 288
+             290:    127(ptr) AccessChain 24(data) 25 284 115 26
+                              Store 290 289
+             291:     27(ptr) AccessChain 10(dti) 26
+             292:      6(int) Load 291
+             293:     27(ptr) AccessChain 10(dti) 26
+             294:      6(int) Load 293
+             295:    118(ptr) AccessChain 24(data) 25 294 115
+             296:   17(fvec4) Load 295
+             297:  136(fvec2) VectorShuffle 296 296 0 1
+             298:  136(fvec2) GroupNonUniformFMul 35 InclusiveScan 297
+             299:    118(ptr) AccessChain 24(data) 25 292 115
+             300:   17(fvec4) Load 299
+             301:   17(fvec4) VectorShuffle 300 298 4 5 2 3
+                              Store 299 301
+             302:     27(ptr) AccessChain 10(dti) 26
+             303:      6(int) Load 302
+             304:     27(ptr) AccessChain 10(dti) 26
+             305:      6(int) Load 304
+             306:    118(ptr) AccessChain 24(data) 25 305 115
+             307:   17(fvec4) Load 306
+             308:  148(fvec3) VectorShuffle 307 307 0 1 2
+             309:  148(fvec3) GroupNonUniformFMul 35 InclusiveScan 308
+             310:    118(ptr) AccessChain 24(data) 25 303 115
+             311:   17(fvec4) Load 310
+             312:   17(fvec4) VectorShuffle 311 309 4 5 6 3
+                              Store 310 312
+             313:     27(ptr) AccessChain 10(dti) 26
+             314:      6(int) Load 313
+             315:     27(ptr) AccessChain 10(dti) 26
+             316:      6(int) Load 315
+             317:    161(ptr) AccessChain 24(data) 25 316 158
+             318:   19(fvec4) Load 317
+             319:   19(fvec4) GroupNonUniformFMul 35 InclusiveScan 318
+             320:    161(ptr) AccessChain 24(data) 25 314 158
+                              Store 320 319
+             321:     27(ptr) AccessChain 10(dti) 26
+             322:      6(int) Load 321
+             323:     27(ptr) AccessChain 10(dti) 26
+             324:      6(int) Load 323
+             325:    170(ptr) AccessChain 24(data) 25 324 158 26
+             326:   18(float) Load 325
+             327:   18(float) GroupNonUniformFMul 35 InclusiveScan 326
+             328:    170(ptr) AccessChain 24(data) 25 322 158 26
+                              Store 328 327
+             329:     27(ptr) AccessChain 10(dti) 26
+             330:      6(int) Load 329
+             331:     27(ptr) AccessChain 10(dti) 26
+             332:      6(int) Load 331
+             333:    161(ptr) AccessChain 24(data) 25 332 158
+             334:   19(fvec4) Load 333
+             335:  179(fvec2) VectorShuffle 334 334 0 1
+             336:  179(fvec2) GroupNonUniformFMul 35 InclusiveScan 335
+             337:    161(ptr) AccessChain 24(data) 25 330 158
+             338:   19(fvec4) Load 337
+             339:   19(fvec4) VectorShuffle 338 336 4 5 2 3
+                              Store 337 339
+             340:     27(ptr) AccessChain 10(dti) 26
+             341:      6(int) Load 340
+             342:     27(ptr) AccessChain 10(dti) 26
+             343:      6(int) Load 342
+             344:    161(ptr) AccessChain 24(data) 25 343 158
+             345:   19(fvec4) Load 344
+             346:  191(fvec3) VectorShuffle 345 345 0 1 2
+             347:  191(fvec3) GroupNonUniformFMul 35 InclusiveScan 346
+             348:    161(ptr) AccessChain 24(data) 25 341 158
+             349:   19(fvec4) Load 348
+             350:   19(fvec4) VectorShuffle 349 347 4 5 6 3
+                              Store 348 350
+             351:     27(ptr) AccessChain 10(dti) 26
+             352:      6(int) Load 351
+             353:     27(ptr) AccessChain 10(dti) 26
+             354:      6(int) Load 353
+             355:     42(ptr) AccessChain 24(data) 25 354 25 26
+             356:      6(int) Load 355
+             358:   357(bool) IEqual 356 26
+             359:   13(ivec4) GroupNonUniformBallot 35 358
+             360:      6(int) GroupNonUniformBallotBitCount 35 InclusiveScan 359
+             361:     42(ptr) AccessChain 24(data) 25 352 25 26
+                              Store 361 360
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.wavequad.comp.out b/Test/baseResults/hlsl.wavequad.comp.out
new file mode 100644
index 0000000..125a2c4
--- /dev/null
+++ b/Test/baseResults/hlsl.wavequad.comp.out
@@ -0,0 +1,9299 @@
+hlsl.wavequad.comp
+Shader version: 500
+local_size = (32, 16, 1)
+0:? Sequence
+0:13  Function Definition: @CSMain(vu3; ( temp void)
+0:13    Function Parameters: 
+0:13      'dti' ( in 3-component vector of uint)
+0:?     Sequence
+0:14      move second child to first child ( temp 4-component vector of uint)
+0:14        u: direct index for structure ( temp 4-component vector of uint)
+0:14          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:14              Constant:
+0:14                0 (const uint)
+0:14            direct index ( temp uint)
+0:14              'dti' ( in 3-component vector of uint)
+0:14              Constant:
+0:14                0 (const int)
+0:14          Constant:
+0:14            0 (const int)
+0:14        subgroupQuadBroadcast ( temp 4-component vector of uint)
+0:14          u: direct index for structure ( temp 4-component vector of uint)
+0:14            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:14                Constant:
+0:14                  0 (const uint)
+0:14              direct index ( temp uint)
+0:14                'dti' ( in 3-component vector of uint)
+0:14                Constant:
+0:14                  0 (const int)
+0:14            Constant:
+0:14              0 (const int)
+0:14          Constant:
+0:14            0 (const uint)
+0:15      move second child to first child ( temp uint)
+0:15        direct index ( temp uint)
+0:15          u: direct index for structure ( temp 4-component vector of uint)
+0:15            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:15                Constant:
+0:15                  0 (const uint)
+0:15              direct index ( temp uint)
+0:15                'dti' ( in 3-component vector of uint)
+0:15                Constant:
+0:15                  0 (const int)
+0:15            Constant:
+0:15              0 (const int)
+0:15          Constant:
+0:15            0 (const int)
+0:15        subgroupQuadBroadcast ( temp uint)
+0:15          direct index ( temp uint)
+0:15            u: direct index for structure ( temp 4-component vector of uint)
+0:15              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:15                  Constant:
+0:15                    0 (const uint)
+0:15                direct index ( temp uint)
+0:15                  'dti' ( in 3-component vector of uint)
+0:15                  Constant:
+0:15                    0 (const int)
+0:15              Constant:
+0:15                0 (const int)
+0:15            Constant:
+0:15              0 (const int)
+0:15          Constant:
+0:15            0 (const uint)
+0:16      move second child to first child ( temp 2-component vector of uint)
+0:16        vector swizzle ( temp 2-component vector of uint)
+0:16          u: direct index for structure ( temp 4-component vector of uint)
+0:16            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:16                Constant:
+0:16                  0 (const uint)
+0:16              direct index ( temp uint)
+0:16                'dti' ( in 3-component vector of uint)
+0:16                Constant:
+0:16                  0 (const int)
+0:16            Constant:
+0:16              0 (const int)
+0:16          Sequence
+0:16            Constant:
+0:16              0 (const int)
+0:16            Constant:
+0:16              1 (const int)
+0:16        subgroupQuadBroadcast ( temp 2-component vector of uint)
+0:16          vector swizzle ( temp 2-component vector of uint)
+0:16            u: direct index for structure ( temp 4-component vector of uint)
+0:16              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:16                  Constant:
+0:16                    0 (const uint)
+0:16                direct index ( temp uint)
+0:16                  'dti' ( in 3-component vector of uint)
+0:16                  Constant:
+0:16                    0 (const int)
+0:16              Constant:
+0:16                0 (const int)
+0:16            Sequence
+0:16              Constant:
+0:16                0 (const int)
+0:16              Constant:
+0:16                1 (const int)
+0:16          Constant:
+0:16            0 (const uint)
+0:17      move second child to first child ( temp 3-component vector of uint)
+0:17        vector swizzle ( temp 3-component vector of uint)
+0:17          u: direct index for structure ( temp 4-component vector of uint)
+0:17            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:17                Constant:
+0:17                  0 (const uint)
+0:17              direct index ( temp uint)
+0:17                'dti' ( in 3-component vector of uint)
+0:17                Constant:
+0:17                  0 (const int)
+0:17            Constant:
+0:17              0 (const int)
+0:17          Sequence
+0:17            Constant:
+0:17              0 (const int)
+0:17            Constant:
+0:17              1 (const int)
+0:17            Constant:
+0:17              2 (const int)
+0:17        subgroupQuadBroadcast ( temp 3-component vector of uint)
+0:17          vector swizzle ( temp 3-component vector of uint)
+0:17            u: direct index for structure ( temp 4-component vector of uint)
+0:17              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:17                  Constant:
+0:17                    0 (const uint)
+0:17                direct index ( temp uint)
+0:17                  'dti' ( in 3-component vector of uint)
+0:17                  Constant:
+0:17                    0 (const int)
+0:17              Constant:
+0:17                0 (const int)
+0:17            Sequence
+0:17              Constant:
+0:17                0 (const int)
+0:17              Constant:
+0:17                1 (const int)
+0:17              Constant:
+0:17                2 (const int)
+0:17          Constant:
+0:17            0 (const uint)
+0:19      move second child to first child ( temp 4-component vector of int)
+0:19        i: direct index for structure ( temp 4-component vector of int)
+0:19          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:19              Constant:
+0:19                0 (const uint)
+0:19            direct index ( temp uint)
+0:19              'dti' ( in 3-component vector of uint)
+0:19              Constant:
+0:19                0 (const int)
+0:19          Constant:
+0:19            1 (const int)
+0:19        subgroupQuadBroadcast ( temp 4-component vector of int)
+0:19          i: direct index for structure ( temp 4-component vector of int)
+0:19            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:19                Constant:
+0:19                  0 (const uint)
+0:19              direct index ( temp uint)
+0:19                'dti' ( in 3-component vector of uint)
+0:19                Constant:
+0:19                  0 (const int)
+0:19            Constant:
+0:19              1 (const int)
+0:19          Constant:
+0:19            0 (const uint)
+0:20      move second child to first child ( temp int)
+0:20        direct index ( temp int)
+0:20          i: direct index for structure ( temp 4-component vector of int)
+0:20            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:20                Constant:
+0:20                  0 (const uint)
+0:20              direct index ( temp uint)
+0:20                'dti' ( in 3-component vector of uint)
+0:20                Constant:
+0:20                  0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20          Constant:
+0:20            0 (const int)
+0:20        subgroupQuadBroadcast ( temp int)
+0:20          direct index ( temp int)
+0:20            i: direct index for structure ( temp 4-component vector of int)
+0:20              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:20                  Constant:
+0:20                    0 (const uint)
+0:20                direct index ( temp uint)
+0:20                  'dti' ( in 3-component vector of uint)
+0:20                  Constant:
+0:20                    0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20            Constant:
+0:20              0 (const int)
+0:20          Constant:
+0:20            0 (const uint)
+0:21      move second child to first child ( temp 2-component vector of int)
+0:21        vector swizzle ( temp 2-component vector of int)
+0:21          i: direct index for structure ( temp 4-component vector of int)
+0:21            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:21                Constant:
+0:21                  0 (const uint)
+0:21              direct index ( temp uint)
+0:21                'dti' ( in 3-component vector of uint)
+0:21                Constant:
+0:21                  0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21          Sequence
+0:21            Constant:
+0:21              0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21        subgroupQuadBroadcast ( temp 2-component vector of int)
+0:21          vector swizzle ( temp 2-component vector of int)
+0:21            i: direct index for structure ( temp 4-component vector of int)
+0:21              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:21                  Constant:
+0:21                    0 (const uint)
+0:21                direct index ( temp uint)
+0:21                  'dti' ( in 3-component vector of uint)
+0:21                  Constant:
+0:21                    0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21            Sequence
+0:21              Constant:
+0:21                0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21          Constant:
+0:21            0 (const uint)
+0:22      move second child to first child ( temp 3-component vector of int)
+0:22        vector swizzle ( temp 3-component vector of int)
+0:22          i: direct index for structure ( temp 4-component vector of int)
+0:22            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:22                Constant:
+0:22                  0 (const uint)
+0:22              direct index ( temp uint)
+0:22                'dti' ( in 3-component vector of uint)
+0:22                Constant:
+0:22                  0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22          Sequence
+0:22            Constant:
+0:22              0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22            Constant:
+0:22              2 (const int)
+0:22        subgroupQuadBroadcast ( temp 3-component vector of int)
+0:22          vector swizzle ( temp 3-component vector of int)
+0:22            i: direct index for structure ( temp 4-component vector of int)
+0:22              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:22                  Constant:
+0:22                    0 (const uint)
+0:22                direct index ( temp uint)
+0:22                  'dti' ( in 3-component vector of uint)
+0:22                  Constant:
+0:22                    0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22            Sequence
+0:22              Constant:
+0:22                0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22              Constant:
+0:22                2 (const int)
+0:22          Constant:
+0:22            0 (const uint)
+0:24      move second child to first child ( temp 4-component vector of float)
+0:24        f: direct index for structure ( temp 4-component vector of float)
+0:24          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:24              Constant:
+0:24                0 (const uint)
+0:24            direct index ( temp uint)
+0:24              'dti' ( in 3-component vector of uint)
+0:24              Constant:
+0:24                0 (const int)
+0:24          Constant:
+0:24            2 (const int)
+0:24        subgroupQuadBroadcast ( temp 4-component vector of float)
+0:24          f: direct index for structure ( temp 4-component vector of float)
+0:24            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:24                Constant:
+0:24                  0 (const uint)
+0:24              direct index ( temp uint)
+0:24                'dti' ( in 3-component vector of uint)
+0:24                Constant:
+0:24                  0 (const int)
+0:24            Constant:
+0:24              2 (const int)
+0:24          Constant:
+0:24            0 (const uint)
+0:25      move second child to first child ( temp float)
+0:25        direct index ( temp float)
+0:25          f: direct index for structure ( temp 4-component vector of float)
+0:25            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:25                Constant:
+0:25                  0 (const uint)
+0:25              direct index ( temp uint)
+0:25                'dti' ( in 3-component vector of uint)
+0:25                Constant:
+0:25                  0 (const int)
+0:25            Constant:
+0:25              2 (const int)
+0:25          Constant:
+0:25            0 (const int)
+0:25        subgroupQuadBroadcast ( temp float)
+0:25          direct index ( temp float)
+0:25            f: direct index for structure ( temp 4-component vector of float)
+0:25              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:25                  Constant:
+0:25                    0 (const uint)
+0:25                direct index ( temp uint)
+0:25                  'dti' ( in 3-component vector of uint)
+0:25                  Constant:
+0:25                    0 (const int)
+0:25              Constant:
+0:25                2 (const int)
+0:25            Constant:
+0:25              0 (const int)
+0:25          Constant:
+0:25            0 (const uint)
+0:26      move second child to first child ( temp 2-component vector of float)
+0:26        vector swizzle ( temp 2-component vector of float)
+0:26          f: direct index for structure ( temp 4-component vector of float)
+0:26            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:26                Constant:
+0:26                  0 (const uint)
+0:26              direct index ( temp uint)
+0:26                'dti' ( in 3-component vector of uint)
+0:26                Constant:
+0:26                  0 (const int)
+0:26            Constant:
+0:26              2 (const int)
+0:26          Sequence
+0:26            Constant:
+0:26              0 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26        subgroupQuadBroadcast ( temp 2-component vector of float)
+0:26          vector swizzle ( temp 2-component vector of float)
+0:26            f: direct index for structure ( temp 4-component vector of float)
+0:26              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:26                  Constant:
+0:26                    0 (const uint)
+0:26                direct index ( temp uint)
+0:26                  'dti' ( in 3-component vector of uint)
+0:26                  Constant:
+0:26                    0 (const int)
+0:26              Constant:
+0:26                2 (const int)
+0:26            Sequence
+0:26              Constant:
+0:26                0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26          Constant:
+0:26            0 (const uint)
+0:27      move second child to first child ( temp 3-component vector of float)
+0:27        vector swizzle ( temp 3-component vector of float)
+0:27          f: direct index for structure ( temp 4-component vector of float)
+0:27            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:27                Constant:
+0:27                  0 (const uint)
+0:27              direct index ( temp uint)
+0:27                'dti' ( in 3-component vector of uint)
+0:27                Constant:
+0:27                  0 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27          Sequence
+0:27            Constant:
+0:27              0 (const int)
+0:27            Constant:
+0:27              1 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27        subgroupQuadBroadcast ( temp 3-component vector of float)
+0:27          vector swizzle ( temp 3-component vector of float)
+0:27            f: direct index for structure ( temp 4-component vector of float)
+0:27              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:27                  Constant:
+0:27                    0 (const uint)
+0:27                direct index ( temp uint)
+0:27                  'dti' ( in 3-component vector of uint)
+0:27                  Constant:
+0:27                    0 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:27            Sequence
+0:27              Constant:
+0:27                0 (const int)
+0:27              Constant:
+0:27                1 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:27          Constant:
+0:27            0 (const uint)
+0:29      move second child to first child ( temp 4-component vector of double)
+0:29        d: direct index for structure ( temp 4-component vector of double)
+0:29          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:29              Constant:
+0:29                0 (const uint)
+0:29            direct index ( temp uint)
+0:29              'dti' ( in 3-component vector of uint)
+0:29              Constant:
+0:29                0 (const int)
+0:29          Constant:
+0:29            3 (const int)
+0:29        subgroupQuadBroadcast ( temp 4-component vector of double)
+0:29          d: direct index for structure ( temp 4-component vector of double)
+0:29            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:29                Constant:
+0:29                  0 (const uint)
+0:29              direct index ( temp uint)
+0:29                'dti' ( in 3-component vector of uint)
+0:29                Constant:
+0:29                  0 (const int)
+0:29            Constant:
+0:29              3 (const int)
+0:29          Constant:
+0:29            0 (const uint)
+0:30      move second child to first child ( temp double)
+0:30        direct index ( temp double)
+0:30          d: direct index for structure ( temp 4-component vector of double)
+0:30            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:30                Constant:
+0:30                  0 (const uint)
+0:30              direct index ( temp uint)
+0:30                'dti' ( in 3-component vector of uint)
+0:30                Constant:
+0:30                  0 (const int)
+0:30            Constant:
+0:30              3 (const int)
+0:30          Constant:
+0:30            0 (const int)
+0:30        subgroupQuadBroadcast ( temp double)
+0:30          direct index ( temp double)
+0:30            d: direct index for structure ( temp 4-component vector of double)
+0:30              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:30                  Constant:
+0:30                    0 (const uint)
+0:30                direct index ( temp uint)
+0:30                  'dti' ( in 3-component vector of uint)
+0:30                  Constant:
+0:30                    0 (const int)
+0:30              Constant:
+0:30                3 (const int)
+0:30            Constant:
+0:30              0 (const int)
+0:30          Constant:
+0:30            0 (const uint)
+0:31      move second child to first child ( temp 2-component vector of double)
+0:31        vector swizzle ( temp 2-component vector of double)
+0:31          d: direct index for structure ( temp 4-component vector of double)
+0:31            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:31                Constant:
+0:31                  0 (const uint)
+0:31              direct index ( temp uint)
+0:31                'dti' ( in 3-component vector of uint)
+0:31                Constant:
+0:31                  0 (const int)
+0:31            Constant:
+0:31              3 (const int)
+0:31          Sequence
+0:31            Constant:
+0:31              0 (const int)
+0:31            Constant:
+0:31              1 (const int)
+0:31        subgroupQuadBroadcast ( temp 2-component vector of double)
+0:31          vector swizzle ( temp 2-component vector of double)
+0:31            d: direct index for structure ( temp 4-component vector of double)
+0:31              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:31                  Constant:
+0:31                    0 (const uint)
+0:31                direct index ( temp uint)
+0:31                  'dti' ( in 3-component vector of uint)
+0:31                  Constant:
+0:31                    0 (const int)
+0:31              Constant:
+0:31                3 (const int)
+0:31            Sequence
+0:31              Constant:
+0:31                0 (const int)
+0:31              Constant:
+0:31                1 (const int)
+0:31          Constant:
+0:31            0 (const uint)
+0:32      move second child to first child ( temp 3-component vector of double)
+0:32        vector swizzle ( temp 3-component vector of double)
+0:32          d: direct index for structure ( temp 4-component vector of double)
+0:32            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:32                Constant:
+0:32                  0 (const uint)
+0:32              direct index ( temp uint)
+0:32                'dti' ( in 3-component vector of uint)
+0:32                Constant:
+0:32                  0 (const int)
+0:32            Constant:
+0:32              3 (const int)
+0:32          Sequence
+0:32            Constant:
+0:32              0 (const int)
+0:32            Constant:
+0:32              1 (const int)
+0:32            Constant:
+0:32              2 (const int)
+0:32        subgroupQuadBroadcast ( temp 3-component vector of double)
+0:32          vector swizzle ( temp 3-component vector of double)
+0:32            d: direct index for structure ( temp 4-component vector of double)
+0:32              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:32                  Constant:
+0:32                    0 (const uint)
+0:32                direct index ( temp uint)
+0:32                  'dti' ( in 3-component vector of uint)
+0:32                  Constant:
+0:32                    0 (const int)
+0:32              Constant:
+0:32                3 (const int)
+0:32            Sequence
+0:32              Constant:
+0:32                0 (const int)
+0:32              Constant:
+0:32                1 (const int)
+0:32              Constant:
+0:32                2 (const int)
+0:32          Constant:
+0:32            0 (const uint)
+0:34      move second child to first child ( temp 4-component vector of uint)
+0:34        u: direct index for structure ( temp 4-component vector of uint)
+0:34          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:34              Constant:
+0:34                0 (const uint)
+0:34            direct index ( temp uint)
+0:34              'dti' ( in 3-component vector of uint)
+0:34              Constant:
+0:34                0 (const int)
+0:34          Constant:
+0:34            0 (const int)
+0:34        subgroupQuadBroadcast ( temp 4-component vector of uint)
+0:34          u: direct index for structure ( temp 4-component vector of uint)
+0:34            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:34                Constant:
+0:34                  0 (const uint)
+0:34              direct index ( temp uint)
+0:34                'dti' ( in 3-component vector of uint)
+0:34                Constant:
+0:34                  0 (const int)
+0:34            Constant:
+0:34              0 (const int)
+0:34          Constant:
+0:34            1 (const uint)
+0:35      move second child to first child ( temp uint)
+0:35        direct index ( temp uint)
+0:35          u: direct index for structure ( temp 4-component vector of uint)
+0:35            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:35                Constant:
+0:35                  0 (const uint)
+0:35              direct index ( temp uint)
+0:35                'dti' ( in 3-component vector of uint)
+0:35                Constant:
+0:35                  0 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:35          Constant:
+0:35            0 (const int)
+0:35        subgroupQuadBroadcast ( temp uint)
+0:35          direct index ( temp uint)
+0:35            u: direct index for structure ( temp 4-component vector of uint)
+0:35              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:35                  Constant:
+0:35                    0 (const uint)
+0:35                direct index ( temp uint)
+0:35                  'dti' ( in 3-component vector of uint)
+0:35                  Constant:
+0:35                    0 (const int)
+0:35              Constant:
+0:35                0 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:35          Constant:
+0:35            1 (const uint)
+0:36      move second child to first child ( temp 2-component vector of uint)
+0:36        vector swizzle ( temp 2-component vector of uint)
+0:36          u: direct index for structure ( temp 4-component vector of uint)
+0:36            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:36                Constant:
+0:36                  0 (const uint)
+0:36              direct index ( temp uint)
+0:36                'dti' ( in 3-component vector of uint)
+0:36                Constant:
+0:36                  0 (const int)
+0:36            Constant:
+0:36              0 (const int)
+0:36          Sequence
+0:36            Constant:
+0:36              0 (const int)
+0:36            Constant:
+0:36              1 (const int)
+0:36        subgroupQuadBroadcast ( temp 2-component vector of uint)
+0:36          vector swizzle ( temp 2-component vector of uint)
+0:36            u: direct index for structure ( temp 4-component vector of uint)
+0:36              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:36                  Constant:
+0:36                    0 (const uint)
+0:36                direct index ( temp uint)
+0:36                  'dti' ( in 3-component vector of uint)
+0:36                  Constant:
+0:36                    0 (const int)
+0:36              Constant:
+0:36                0 (const int)
+0:36            Sequence
+0:36              Constant:
+0:36                0 (const int)
+0:36              Constant:
+0:36                1 (const int)
+0:36          Constant:
+0:36            1 (const uint)
+0:37      move second child to first child ( temp 3-component vector of uint)
+0:37        vector swizzle ( temp 3-component vector of uint)
+0:37          u: direct index for structure ( temp 4-component vector of uint)
+0:37            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:37                Constant:
+0:37                  0 (const uint)
+0:37              direct index ( temp uint)
+0:37                'dti' ( in 3-component vector of uint)
+0:37                Constant:
+0:37                  0 (const int)
+0:37            Constant:
+0:37              0 (const int)
+0:37          Sequence
+0:37            Constant:
+0:37              0 (const int)
+0:37            Constant:
+0:37              1 (const int)
+0:37            Constant:
+0:37              2 (const int)
+0:37        subgroupQuadBroadcast ( temp 3-component vector of uint)
+0:37          vector swizzle ( temp 3-component vector of uint)
+0:37            u: direct index for structure ( temp 4-component vector of uint)
+0:37              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:37                  Constant:
+0:37                    0 (const uint)
+0:37                direct index ( temp uint)
+0:37                  'dti' ( in 3-component vector of uint)
+0:37                  Constant:
+0:37                    0 (const int)
+0:37              Constant:
+0:37                0 (const int)
+0:37            Sequence
+0:37              Constant:
+0:37                0 (const int)
+0:37              Constant:
+0:37                1 (const int)
+0:37              Constant:
+0:37                2 (const int)
+0:37          Constant:
+0:37            1 (const uint)
+0:39      move second child to first child ( temp 4-component vector of int)
+0:39        i: direct index for structure ( temp 4-component vector of int)
+0:39          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:39              Constant:
+0:39                0 (const uint)
+0:39            direct index ( temp uint)
+0:39              'dti' ( in 3-component vector of uint)
+0:39              Constant:
+0:39                0 (const int)
+0:39          Constant:
+0:39            1 (const int)
+0:39        subgroupQuadBroadcast ( temp 4-component vector of int)
+0:39          i: direct index for structure ( temp 4-component vector of int)
+0:39            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:39                Constant:
+0:39                  0 (const uint)
+0:39              direct index ( temp uint)
+0:39                'dti' ( in 3-component vector of uint)
+0:39                Constant:
+0:39                  0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:39          Constant:
+0:39            1 (const uint)
+0:40      move second child to first child ( temp int)
+0:40        direct index ( temp int)
+0:40          i: direct index for structure ( temp 4-component vector of int)
+0:40            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:40                Constant:
+0:40                  0 (const uint)
+0:40              direct index ( temp uint)
+0:40                'dti' ( in 3-component vector of uint)
+0:40                Constant:
+0:40                  0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40          Constant:
+0:40            0 (const int)
+0:40        subgroupQuadBroadcast ( temp int)
+0:40          direct index ( temp int)
+0:40            i: direct index for structure ( temp 4-component vector of int)
+0:40              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:40                  Constant:
+0:40                    0 (const uint)
+0:40                direct index ( temp uint)
+0:40                  'dti' ( in 3-component vector of uint)
+0:40                  Constant:
+0:40                    0 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40            Constant:
+0:40              0 (const int)
+0:40          Constant:
+0:40            1 (const uint)
+0:41      move second child to first child ( temp 2-component vector of int)
+0:41        vector swizzle ( temp 2-component vector of int)
+0:41          i: direct index for structure ( temp 4-component vector of int)
+0:41            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:41                Constant:
+0:41                  0 (const uint)
+0:41              direct index ( temp uint)
+0:41                'dti' ( in 3-component vector of uint)
+0:41                Constant:
+0:41                  0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41          Sequence
+0:41            Constant:
+0:41              0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41        subgroupQuadBroadcast ( temp 2-component vector of int)
+0:41          vector swizzle ( temp 2-component vector of int)
+0:41            i: direct index for structure ( temp 4-component vector of int)
+0:41              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:41                  Constant:
+0:41                    0 (const uint)
+0:41                direct index ( temp uint)
+0:41                  'dti' ( in 3-component vector of uint)
+0:41                  Constant:
+0:41                    0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:41            Sequence
+0:41              Constant:
+0:41                0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:41          Constant:
+0:41            1 (const uint)
+0:42      move second child to first child ( temp 3-component vector of int)
+0:42        vector swizzle ( temp 3-component vector of int)
+0:42          i: direct index for structure ( temp 4-component vector of int)
+0:42            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:42                Constant:
+0:42                  0 (const uint)
+0:42              direct index ( temp uint)
+0:42                'dti' ( in 3-component vector of uint)
+0:42                Constant:
+0:42                  0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42          Sequence
+0:42            Constant:
+0:42              0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42            Constant:
+0:42              2 (const int)
+0:42        subgroupQuadBroadcast ( temp 3-component vector of int)
+0:42          vector swizzle ( temp 3-component vector of int)
+0:42            i: direct index for structure ( temp 4-component vector of int)
+0:42              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:42                  Constant:
+0:42                    0 (const uint)
+0:42                direct index ( temp uint)
+0:42                  'dti' ( in 3-component vector of uint)
+0:42                  Constant:
+0:42                    0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42            Sequence
+0:42              Constant:
+0:42                0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42              Constant:
+0:42                2 (const int)
+0:42          Constant:
+0:42            1 (const uint)
+0:44      move second child to first child ( temp 4-component vector of float)
+0:44        f: direct index for structure ( temp 4-component vector of float)
+0:44          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:44              Constant:
+0:44                0 (const uint)
+0:44            direct index ( temp uint)
+0:44              'dti' ( in 3-component vector of uint)
+0:44              Constant:
+0:44                0 (const int)
+0:44          Constant:
+0:44            2 (const int)
+0:44        subgroupQuadBroadcast ( temp 4-component vector of float)
+0:44          f: direct index for structure ( temp 4-component vector of float)
+0:44            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:44                Constant:
+0:44                  0 (const uint)
+0:44              direct index ( temp uint)
+0:44                'dti' ( in 3-component vector of uint)
+0:44                Constant:
+0:44                  0 (const int)
+0:44            Constant:
+0:44              2 (const int)
+0:44          Constant:
+0:44            1 (const uint)
+0:45      move second child to first child ( temp float)
+0:45        direct index ( temp float)
+0:45          f: direct index for structure ( temp 4-component vector of float)
+0:45            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:45                Constant:
+0:45                  0 (const uint)
+0:45              direct index ( temp uint)
+0:45                'dti' ( in 3-component vector of uint)
+0:45                Constant:
+0:45                  0 (const int)
+0:45            Constant:
+0:45              2 (const int)
+0:45          Constant:
+0:45            0 (const int)
+0:45        subgroupQuadBroadcast ( temp float)
+0:45          direct index ( temp float)
+0:45            f: direct index for structure ( temp 4-component vector of float)
+0:45              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:45                  Constant:
+0:45                    0 (const uint)
+0:45                direct index ( temp uint)
+0:45                  'dti' ( in 3-component vector of uint)
+0:45                  Constant:
+0:45                    0 (const int)
+0:45              Constant:
+0:45                2 (const int)
+0:45            Constant:
+0:45              0 (const int)
+0:45          Constant:
+0:45            1 (const uint)
+0:46      move second child to first child ( temp 2-component vector of float)
+0:46        vector swizzle ( temp 2-component vector of float)
+0:46          f: direct index for structure ( temp 4-component vector of float)
+0:46            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:46                Constant:
+0:46                  0 (const uint)
+0:46              direct index ( temp uint)
+0:46                'dti' ( in 3-component vector of uint)
+0:46                Constant:
+0:46                  0 (const int)
+0:46            Constant:
+0:46              2 (const int)
+0:46          Sequence
+0:46            Constant:
+0:46              0 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46        subgroupQuadBroadcast ( temp 2-component vector of float)
+0:46          vector swizzle ( temp 2-component vector of float)
+0:46            f: direct index for structure ( temp 4-component vector of float)
+0:46              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:46                  Constant:
+0:46                    0 (const uint)
+0:46                direct index ( temp uint)
+0:46                  'dti' ( in 3-component vector of uint)
+0:46                  Constant:
+0:46                    0 (const int)
+0:46              Constant:
+0:46                2 (const int)
+0:46            Sequence
+0:46              Constant:
+0:46                0 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:46          Constant:
+0:46            1 (const uint)
+0:47      move second child to first child ( temp 3-component vector of float)
+0:47        vector swizzle ( temp 3-component vector of float)
+0:47          f: direct index for structure ( temp 4-component vector of float)
+0:47            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:47                Constant:
+0:47                  0 (const uint)
+0:47              direct index ( temp uint)
+0:47                'dti' ( in 3-component vector of uint)
+0:47                Constant:
+0:47                  0 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47          Sequence
+0:47            Constant:
+0:47              0 (const int)
+0:47            Constant:
+0:47              1 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47        subgroupQuadBroadcast ( temp 3-component vector of float)
+0:47          vector swizzle ( temp 3-component vector of float)
+0:47            f: direct index for structure ( temp 4-component vector of float)
+0:47              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:47                  Constant:
+0:47                    0 (const uint)
+0:47                direct index ( temp uint)
+0:47                  'dti' ( in 3-component vector of uint)
+0:47                  Constant:
+0:47                    0 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:47            Sequence
+0:47              Constant:
+0:47                0 (const int)
+0:47              Constant:
+0:47                1 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:47          Constant:
+0:47            1 (const uint)
+0:49      move second child to first child ( temp 4-component vector of double)
+0:49        d: direct index for structure ( temp 4-component vector of double)
+0:49          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:49              Constant:
+0:49                0 (const uint)
+0:49            direct index ( temp uint)
+0:49              'dti' ( in 3-component vector of uint)
+0:49              Constant:
+0:49                0 (const int)
+0:49          Constant:
+0:49            3 (const int)
+0:49        subgroupQuadBroadcast ( temp 4-component vector of double)
+0:49          d: direct index for structure ( temp 4-component vector of double)
+0:49            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:49                Constant:
+0:49                  0 (const uint)
+0:49              direct index ( temp uint)
+0:49                'dti' ( in 3-component vector of uint)
+0:49                Constant:
+0:49                  0 (const int)
+0:49            Constant:
+0:49              3 (const int)
+0:49          Constant:
+0:49            1 (const uint)
+0:50      move second child to first child ( temp double)
+0:50        direct index ( temp double)
+0:50          d: direct index for structure ( temp 4-component vector of double)
+0:50            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:50                Constant:
+0:50                  0 (const uint)
+0:50              direct index ( temp uint)
+0:50                'dti' ( in 3-component vector of uint)
+0:50                Constant:
+0:50                  0 (const int)
+0:50            Constant:
+0:50              3 (const int)
+0:50          Constant:
+0:50            0 (const int)
+0:50        subgroupQuadBroadcast ( temp double)
+0:50          direct index ( temp double)
+0:50            d: direct index for structure ( temp 4-component vector of double)
+0:50              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:50                  Constant:
+0:50                    0 (const uint)
+0:50                direct index ( temp uint)
+0:50                  'dti' ( in 3-component vector of uint)
+0:50                  Constant:
+0:50                    0 (const int)
+0:50              Constant:
+0:50                3 (const int)
+0:50            Constant:
+0:50              0 (const int)
+0:50          Constant:
+0:50            1 (const uint)
+0:51      move second child to first child ( temp 2-component vector of double)
+0:51        vector swizzle ( temp 2-component vector of double)
+0:51          d: direct index for structure ( temp 4-component vector of double)
+0:51            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:51                Constant:
+0:51                  0 (const uint)
+0:51              direct index ( temp uint)
+0:51                'dti' ( in 3-component vector of uint)
+0:51                Constant:
+0:51                  0 (const int)
+0:51            Constant:
+0:51              3 (const int)
+0:51          Sequence
+0:51            Constant:
+0:51              0 (const int)
+0:51            Constant:
+0:51              1 (const int)
+0:51        subgroupQuadBroadcast ( temp 2-component vector of double)
+0:51          vector swizzle ( temp 2-component vector of double)
+0:51            d: direct index for structure ( temp 4-component vector of double)
+0:51              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:51                  Constant:
+0:51                    0 (const uint)
+0:51                direct index ( temp uint)
+0:51                  'dti' ( in 3-component vector of uint)
+0:51                  Constant:
+0:51                    0 (const int)
+0:51              Constant:
+0:51                3 (const int)
+0:51            Sequence
+0:51              Constant:
+0:51                0 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:51          Constant:
+0:51            1 (const uint)
+0:52      move second child to first child ( temp 3-component vector of double)
+0:52        vector swizzle ( temp 3-component vector of double)
+0:52          d: direct index for structure ( temp 4-component vector of double)
+0:52            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:52                Constant:
+0:52                  0 (const uint)
+0:52              direct index ( temp uint)
+0:52                'dti' ( in 3-component vector of uint)
+0:52                Constant:
+0:52                  0 (const int)
+0:52            Constant:
+0:52              3 (const int)
+0:52          Sequence
+0:52            Constant:
+0:52              0 (const int)
+0:52            Constant:
+0:52              1 (const int)
+0:52            Constant:
+0:52              2 (const int)
+0:52        subgroupQuadBroadcast ( temp 3-component vector of double)
+0:52          vector swizzle ( temp 3-component vector of double)
+0:52            d: direct index for structure ( temp 4-component vector of double)
+0:52              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:52                  Constant:
+0:52                    0 (const uint)
+0:52                direct index ( temp uint)
+0:52                  'dti' ( in 3-component vector of uint)
+0:52                  Constant:
+0:52                    0 (const int)
+0:52              Constant:
+0:52                3 (const int)
+0:52            Sequence
+0:52              Constant:
+0:52                0 (const int)
+0:52              Constant:
+0:52                1 (const int)
+0:52              Constant:
+0:52                2 (const int)
+0:52          Constant:
+0:52            1 (const uint)
+0:54      move second child to first child ( temp 4-component vector of uint)
+0:54        u: direct index for structure ( temp 4-component vector of uint)
+0:54          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:54              Constant:
+0:54                0 (const uint)
+0:54            direct index ( temp uint)
+0:54              'dti' ( in 3-component vector of uint)
+0:54              Constant:
+0:54                0 (const int)
+0:54          Constant:
+0:54            0 (const int)
+0:54        subgroupQuadBroadcast ( temp 4-component vector of uint)
+0:54          u: direct index for structure ( temp 4-component vector of uint)
+0:54            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:54                Constant:
+0:54                  0 (const uint)
+0:54              direct index ( temp uint)
+0:54                'dti' ( in 3-component vector of uint)
+0:54                Constant:
+0:54                  0 (const int)
+0:54            Constant:
+0:54              0 (const int)
+0:54          Constant:
+0:54            2 (const uint)
+0:55      move second child to first child ( temp uint)
+0:55        direct index ( temp uint)
+0:55          u: direct index for structure ( temp 4-component vector of uint)
+0:55            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:55              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:55                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:55                Constant:
+0:55                  0 (const uint)
+0:55              direct index ( temp uint)
+0:55                'dti' ( in 3-component vector of uint)
+0:55                Constant:
+0:55                  0 (const int)
+0:55            Constant:
+0:55              0 (const int)
+0:55          Constant:
+0:55            0 (const int)
+0:55        subgroupQuadBroadcast ( temp uint)
+0:55          direct index ( temp uint)
+0:55            u: direct index for structure ( temp 4-component vector of uint)
+0:55              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:55                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:55                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:55                  Constant:
+0:55                    0 (const uint)
+0:55                direct index ( temp uint)
+0:55                  'dti' ( in 3-component vector of uint)
+0:55                  Constant:
+0:55                    0 (const int)
+0:55              Constant:
+0:55                0 (const int)
+0:55            Constant:
+0:55              0 (const int)
+0:55          Constant:
+0:55            2 (const uint)
+0:56      move second child to first child ( temp 2-component vector of uint)
+0:56        vector swizzle ( temp 2-component vector of uint)
+0:56          u: direct index for structure ( temp 4-component vector of uint)
+0:56            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:56              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:56                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:56                Constant:
+0:56                  0 (const uint)
+0:56              direct index ( temp uint)
+0:56                'dti' ( in 3-component vector of uint)
+0:56                Constant:
+0:56                  0 (const int)
+0:56            Constant:
+0:56              0 (const int)
+0:56          Sequence
+0:56            Constant:
+0:56              0 (const int)
+0:56            Constant:
+0:56              1 (const int)
+0:56        subgroupQuadBroadcast ( temp 2-component vector of uint)
+0:56          vector swizzle ( temp 2-component vector of uint)
+0:56            u: direct index for structure ( temp 4-component vector of uint)
+0:56              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:56                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:56                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:56                  Constant:
+0:56                    0 (const uint)
+0:56                direct index ( temp uint)
+0:56                  'dti' ( in 3-component vector of uint)
+0:56                  Constant:
+0:56                    0 (const int)
+0:56              Constant:
+0:56                0 (const int)
+0:56            Sequence
+0:56              Constant:
+0:56                0 (const int)
+0:56              Constant:
+0:56                1 (const int)
+0:56          Constant:
+0:56            2 (const uint)
+0:57      move second child to first child ( temp 3-component vector of uint)
+0:57        vector swizzle ( temp 3-component vector of uint)
+0:57          u: direct index for structure ( temp 4-component vector of uint)
+0:57            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:57              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:57                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:57                Constant:
+0:57                  0 (const uint)
+0:57              direct index ( temp uint)
+0:57                'dti' ( in 3-component vector of uint)
+0:57                Constant:
+0:57                  0 (const int)
+0:57            Constant:
+0:57              0 (const int)
+0:57          Sequence
+0:57            Constant:
+0:57              0 (const int)
+0:57            Constant:
+0:57              1 (const int)
+0:57            Constant:
+0:57              2 (const int)
+0:57        subgroupQuadBroadcast ( temp 3-component vector of uint)
+0:57          vector swizzle ( temp 3-component vector of uint)
+0:57            u: direct index for structure ( temp 4-component vector of uint)
+0:57              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:57                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:57                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:57                  Constant:
+0:57                    0 (const uint)
+0:57                direct index ( temp uint)
+0:57                  'dti' ( in 3-component vector of uint)
+0:57                  Constant:
+0:57                    0 (const int)
+0:57              Constant:
+0:57                0 (const int)
+0:57            Sequence
+0:57              Constant:
+0:57                0 (const int)
+0:57              Constant:
+0:57                1 (const int)
+0:57              Constant:
+0:57                2 (const int)
+0:57          Constant:
+0:57            2 (const uint)
+0:59      move second child to first child ( temp 4-component vector of int)
+0:59        i: direct index for structure ( temp 4-component vector of int)
+0:59          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:59            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:59              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:59              Constant:
+0:59                0 (const uint)
+0:59            direct index ( temp uint)
+0:59              'dti' ( in 3-component vector of uint)
+0:59              Constant:
+0:59                0 (const int)
+0:59          Constant:
+0:59            1 (const int)
+0:59        subgroupQuadBroadcast ( temp 4-component vector of int)
+0:59          i: direct index for structure ( temp 4-component vector of int)
+0:59            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:59              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:59                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:59                Constant:
+0:59                  0 (const uint)
+0:59              direct index ( temp uint)
+0:59                'dti' ( in 3-component vector of uint)
+0:59                Constant:
+0:59                  0 (const int)
+0:59            Constant:
+0:59              1 (const int)
+0:59          Constant:
+0:59            2 (const uint)
+0:60      move second child to first child ( temp int)
+0:60        direct index ( temp int)
+0:60          i: direct index for structure ( temp 4-component vector of int)
+0:60            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:60              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:60                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:60                Constant:
+0:60                  0 (const uint)
+0:60              direct index ( temp uint)
+0:60                'dti' ( in 3-component vector of uint)
+0:60                Constant:
+0:60                  0 (const int)
+0:60            Constant:
+0:60              1 (const int)
+0:60          Constant:
+0:60            0 (const int)
+0:60        subgroupQuadBroadcast ( temp int)
+0:60          direct index ( temp int)
+0:60            i: direct index for structure ( temp 4-component vector of int)
+0:60              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:60                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:60                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:60                  Constant:
+0:60                    0 (const uint)
+0:60                direct index ( temp uint)
+0:60                  'dti' ( in 3-component vector of uint)
+0:60                  Constant:
+0:60                    0 (const int)
+0:60              Constant:
+0:60                1 (const int)
+0:60            Constant:
+0:60              0 (const int)
+0:60          Constant:
+0:60            2 (const uint)
+0:61      move second child to first child ( temp 2-component vector of int)
+0:61        vector swizzle ( temp 2-component vector of int)
+0:61          i: direct index for structure ( temp 4-component vector of int)
+0:61            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:61              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:61                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:61                Constant:
+0:61                  0 (const uint)
+0:61              direct index ( temp uint)
+0:61                'dti' ( in 3-component vector of uint)
+0:61                Constant:
+0:61                  0 (const int)
+0:61            Constant:
+0:61              1 (const int)
+0:61          Sequence
+0:61            Constant:
+0:61              0 (const int)
+0:61            Constant:
+0:61              1 (const int)
+0:61        subgroupQuadBroadcast ( temp 2-component vector of int)
+0:61          vector swizzle ( temp 2-component vector of int)
+0:61            i: direct index for structure ( temp 4-component vector of int)
+0:61              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:61                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:61                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:61                  Constant:
+0:61                    0 (const uint)
+0:61                direct index ( temp uint)
+0:61                  'dti' ( in 3-component vector of uint)
+0:61                  Constant:
+0:61                    0 (const int)
+0:61              Constant:
+0:61                1 (const int)
+0:61            Sequence
+0:61              Constant:
+0:61                0 (const int)
+0:61              Constant:
+0:61                1 (const int)
+0:61          Constant:
+0:61            2 (const uint)
+0:62      move second child to first child ( temp 3-component vector of int)
+0:62        vector swizzle ( temp 3-component vector of int)
+0:62          i: direct index for structure ( temp 4-component vector of int)
+0:62            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:62              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:62                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:62                Constant:
+0:62                  0 (const uint)
+0:62              direct index ( temp uint)
+0:62                'dti' ( in 3-component vector of uint)
+0:62                Constant:
+0:62                  0 (const int)
+0:62            Constant:
+0:62              1 (const int)
+0:62          Sequence
+0:62            Constant:
+0:62              0 (const int)
+0:62            Constant:
+0:62              1 (const int)
+0:62            Constant:
+0:62              2 (const int)
+0:62        subgroupQuadBroadcast ( temp 3-component vector of int)
+0:62          vector swizzle ( temp 3-component vector of int)
+0:62            i: direct index for structure ( temp 4-component vector of int)
+0:62              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:62                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:62                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:62                  Constant:
+0:62                    0 (const uint)
+0:62                direct index ( temp uint)
+0:62                  'dti' ( in 3-component vector of uint)
+0:62                  Constant:
+0:62                    0 (const int)
+0:62              Constant:
+0:62                1 (const int)
+0:62            Sequence
+0:62              Constant:
+0:62                0 (const int)
+0:62              Constant:
+0:62                1 (const int)
+0:62              Constant:
+0:62                2 (const int)
+0:62          Constant:
+0:62            2 (const uint)
+0:64      move second child to first child ( temp 4-component vector of float)
+0:64        f: direct index for structure ( temp 4-component vector of float)
+0:64          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:64            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:64              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:64              Constant:
+0:64                0 (const uint)
+0:64            direct index ( temp uint)
+0:64              'dti' ( in 3-component vector of uint)
+0:64              Constant:
+0:64                0 (const int)
+0:64          Constant:
+0:64            2 (const int)
+0:64        subgroupQuadBroadcast ( temp 4-component vector of float)
+0:64          f: direct index for structure ( temp 4-component vector of float)
+0:64            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:64              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:64                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:64                Constant:
+0:64                  0 (const uint)
+0:64              direct index ( temp uint)
+0:64                'dti' ( in 3-component vector of uint)
+0:64                Constant:
+0:64                  0 (const int)
+0:64            Constant:
+0:64              2 (const int)
+0:64          Constant:
+0:64            2 (const uint)
+0:65      move second child to first child ( temp float)
+0:65        direct index ( temp float)
+0:65          f: direct index for structure ( temp 4-component vector of float)
+0:65            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:65              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:65                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:65                Constant:
+0:65                  0 (const uint)
+0:65              direct index ( temp uint)
+0:65                'dti' ( in 3-component vector of uint)
+0:65                Constant:
+0:65                  0 (const int)
+0:65            Constant:
+0:65              2 (const int)
+0:65          Constant:
+0:65            0 (const int)
+0:65        subgroupQuadBroadcast ( temp float)
+0:65          direct index ( temp float)
+0:65            f: direct index for structure ( temp 4-component vector of float)
+0:65              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:65                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:65                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:65                  Constant:
+0:65                    0 (const uint)
+0:65                direct index ( temp uint)
+0:65                  'dti' ( in 3-component vector of uint)
+0:65                  Constant:
+0:65                    0 (const int)
+0:65              Constant:
+0:65                2 (const int)
+0:65            Constant:
+0:65              0 (const int)
+0:65          Constant:
+0:65            2 (const uint)
+0:66      move second child to first child ( temp 2-component vector of float)
+0:66        vector swizzle ( temp 2-component vector of float)
+0:66          f: direct index for structure ( temp 4-component vector of float)
+0:66            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:66              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:66                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:66                Constant:
+0:66                  0 (const uint)
+0:66              direct index ( temp uint)
+0:66                'dti' ( in 3-component vector of uint)
+0:66                Constant:
+0:66                  0 (const int)
+0:66            Constant:
+0:66              2 (const int)
+0:66          Sequence
+0:66            Constant:
+0:66              0 (const int)
+0:66            Constant:
+0:66              1 (const int)
+0:66        subgroupQuadBroadcast ( temp 2-component vector of float)
+0:66          vector swizzle ( temp 2-component vector of float)
+0:66            f: direct index for structure ( temp 4-component vector of float)
+0:66              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:66                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:66                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:66                  Constant:
+0:66                    0 (const uint)
+0:66                direct index ( temp uint)
+0:66                  'dti' ( in 3-component vector of uint)
+0:66                  Constant:
+0:66                    0 (const int)
+0:66              Constant:
+0:66                2 (const int)
+0:66            Sequence
+0:66              Constant:
+0:66                0 (const int)
+0:66              Constant:
+0:66                1 (const int)
+0:66          Constant:
+0:66            2 (const uint)
+0:67      move second child to first child ( temp 3-component vector of float)
+0:67        vector swizzle ( temp 3-component vector of float)
+0:67          f: direct index for structure ( temp 4-component vector of float)
+0:67            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:67              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:67                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:67                Constant:
+0:67                  0 (const uint)
+0:67              direct index ( temp uint)
+0:67                'dti' ( in 3-component vector of uint)
+0:67                Constant:
+0:67                  0 (const int)
+0:67            Constant:
+0:67              2 (const int)
+0:67          Sequence
+0:67            Constant:
+0:67              0 (const int)
+0:67            Constant:
+0:67              1 (const int)
+0:67            Constant:
+0:67              2 (const int)
+0:67        subgroupQuadBroadcast ( temp 3-component vector of float)
+0:67          vector swizzle ( temp 3-component vector of float)
+0:67            f: direct index for structure ( temp 4-component vector of float)
+0:67              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:67                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:67                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:67                  Constant:
+0:67                    0 (const uint)
+0:67                direct index ( temp uint)
+0:67                  'dti' ( in 3-component vector of uint)
+0:67                  Constant:
+0:67                    0 (const int)
+0:67              Constant:
+0:67                2 (const int)
+0:67            Sequence
+0:67              Constant:
+0:67                0 (const int)
+0:67              Constant:
+0:67                1 (const int)
+0:67              Constant:
+0:67                2 (const int)
+0:67          Constant:
+0:67            2 (const uint)
+0:69      move second child to first child ( temp 4-component vector of double)
+0:69        d: direct index for structure ( temp 4-component vector of double)
+0:69          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:69            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:69              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:69              Constant:
+0:69                0 (const uint)
+0:69            direct index ( temp uint)
+0:69              'dti' ( in 3-component vector of uint)
+0:69              Constant:
+0:69                0 (const int)
+0:69          Constant:
+0:69            3 (const int)
+0:69        subgroupQuadBroadcast ( temp 4-component vector of double)
+0:69          d: direct index for structure ( temp 4-component vector of double)
+0:69            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:69              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:69                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:69                Constant:
+0:69                  0 (const uint)
+0:69              direct index ( temp uint)
+0:69                'dti' ( in 3-component vector of uint)
+0:69                Constant:
+0:69                  0 (const int)
+0:69            Constant:
+0:69              3 (const int)
+0:69          Constant:
+0:69            2 (const uint)
+0:70      move second child to first child ( temp double)
+0:70        direct index ( temp double)
+0:70          d: direct index for structure ( temp 4-component vector of double)
+0:70            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:70              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:70                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:70                Constant:
+0:70                  0 (const uint)
+0:70              direct index ( temp uint)
+0:70                'dti' ( in 3-component vector of uint)
+0:70                Constant:
+0:70                  0 (const int)
+0:70            Constant:
+0:70              3 (const int)
+0:70          Constant:
+0:70            0 (const int)
+0:70        subgroupQuadBroadcast ( temp double)
+0:70          direct index ( temp double)
+0:70            d: direct index for structure ( temp 4-component vector of double)
+0:70              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:70                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:70                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:70                  Constant:
+0:70                    0 (const uint)
+0:70                direct index ( temp uint)
+0:70                  'dti' ( in 3-component vector of uint)
+0:70                  Constant:
+0:70                    0 (const int)
+0:70              Constant:
+0:70                3 (const int)
+0:70            Constant:
+0:70              0 (const int)
+0:70          Constant:
+0:70            2 (const uint)
+0:71      move second child to first child ( temp 2-component vector of double)
+0:71        vector swizzle ( temp 2-component vector of double)
+0:71          d: direct index for structure ( temp 4-component vector of double)
+0:71            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:71              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:71                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:71                Constant:
+0:71                  0 (const uint)
+0:71              direct index ( temp uint)
+0:71                'dti' ( in 3-component vector of uint)
+0:71                Constant:
+0:71                  0 (const int)
+0:71            Constant:
+0:71              3 (const int)
+0:71          Sequence
+0:71            Constant:
+0:71              0 (const int)
+0:71            Constant:
+0:71              1 (const int)
+0:71        subgroupQuadBroadcast ( temp 2-component vector of double)
+0:71          vector swizzle ( temp 2-component vector of double)
+0:71            d: direct index for structure ( temp 4-component vector of double)
+0:71              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:71                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:71                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:71                  Constant:
+0:71                    0 (const uint)
+0:71                direct index ( temp uint)
+0:71                  'dti' ( in 3-component vector of uint)
+0:71                  Constant:
+0:71                    0 (const int)
+0:71              Constant:
+0:71                3 (const int)
+0:71            Sequence
+0:71              Constant:
+0:71                0 (const int)
+0:71              Constant:
+0:71                1 (const int)
+0:71          Constant:
+0:71            2 (const uint)
+0:72      move second child to first child ( temp 3-component vector of double)
+0:72        vector swizzle ( temp 3-component vector of double)
+0:72          d: direct index for structure ( temp 4-component vector of double)
+0:72            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:72              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:72                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:72                Constant:
+0:72                  0 (const uint)
+0:72              direct index ( temp uint)
+0:72                'dti' ( in 3-component vector of uint)
+0:72                Constant:
+0:72                  0 (const int)
+0:72            Constant:
+0:72              3 (const int)
+0:72          Sequence
+0:72            Constant:
+0:72              0 (const int)
+0:72            Constant:
+0:72              1 (const int)
+0:72            Constant:
+0:72              2 (const int)
+0:72        subgroupQuadBroadcast ( temp 3-component vector of double)
+0:72          vector swizzle ( temp 3-component vector of double)
+0:72            d: direct index for structure ( temp 4-component vector of double)
+0:72              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:72                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:72                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:72                  Constant:
+0:72                    0 (const uint)
+0:72                direct index ( temp uint)
+0:72                  'dti' ( in 3-component vector of uint)
+0:72                  Constant:
+0:72                    0 (const int)
+0:72              Constant:
+0:72                3 (const int)
+0:72            Sequence
+0:72              Constant:
+0:72                0 (const int)
+0:72              Constant:
+0:72                1 (const int)
+0:72              Constant:
+0:72                2 (const int)
+0:72          Constant:
+0:72            2 (const uint)
+0:74      move second child to first child ( temp 4-component vector of uint)
+0:74        u: direct index for structure ( temp 4-component vector of uint)
+0:74          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:74            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:74              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:74              Constant:
+0:74                0 (const uint)
+0:74            direct index ( temp uint)
+0:74              'dti' ( in 3-component vector of uint)
+0:74              Constant:
+0:74                0 (const int)
+0:74          Constant:
+0:74            0 (const int)
+0:74        subgroupQuadBroadcast ( temp 4-component vector of uint)
+0:74          u: direct index for structure ( temp 4-component vector of uint)
+0:74            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:74              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:74                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:74                Constant:
+0:74                  0 (const uint)
+0:74              direct index ( temp uint)
+0:74                'dti' ( in 3-component vector of uint)
+0:74                Constant:
+0:74                  0 (const int)
+0:74            Constant:
+0:74              0 (const int)
+0:74          Constant:
+0:74            3 (const uint)
+0:75      move second child to first child ( temp uint)
+0:75        direct index ( temp uint)
+0:75          u: direct index for structure ( temp 4-component vector of uint)
+0:75            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:75              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:75                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:75                Constant:
+0:75                  0 (const uint)
+0:75              direct index ( temp uint)
+0:75                'dti' ( in 3-component vector of uint)
+0:75                Constant:
+0:75                  0 (const int)
+0:75            Constant:
+0:75              0 (const int)
+0:75          Constant:
+0:75            0 (const int)
+0:75        subgroupQuadBroadcast ( temp uint)
+0:75          direct index ( temp uint)
+0:75            u: direct index for structure ( temp 4-component vector of uint)
+0:75              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:75                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:75                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:75                  Constant:
+0:75                    0 (const uint)
+0:75                direct index ( temp uint)
+0:75                  'dti' ( in 3-component vector of uint)
+0:75                  Constant:
+0:75                    0 (const int)
+0:75              Constant:
+0:75                0 (const int)
+0:75            Constant:
+0:75              0 (const int)
+0:75          Constant:
+0:75            3 (const uint)
+0:76      move second child to first child ( temp 2-component vector of uint)
+0:76        vector swizzle ( temp 2-component vector of uint)
+0:76          u: direct index for structure ( temp 4-component vector of uint)
+0:76            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:76              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:76                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:76                Constant:
+0:76                  0 (const uint)
+0:76              direct index ( temp uint)
+0:76                'dti' ( in 3-component vector of uint)
+0:76                Constant:
+0:76                  0 (const int)
+0:76            Constant:
+0:76              0 (const int)
+0:76          Sequence
+0:76            Constant:
+0:76              0 (const int)
+0:76            Constant:
+0:76              1 (const int)
+0:76        subgroupQuadBroadcast ( temp 2-component vector of uint)
+0:76          vector swizzle ( temp 2-component vector of uint)
+0:76            u: direct index for structure ( temp 4-component vector of uint)
+0:76              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:76                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:76                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:76                  Constant:
+0:76                    0 (const uint)
+0:76                direct index ( temp uint)
+0:76                  'dti' ( in 3-component vector of uint)
+0:76                  Constant:
+0:76                    0 (const int)
+0:76              Constant:
+0:76                0 (const int)
+0:76            Sequence
+0:76              Constant:
+0:76                0 (const int)
+0:76              Constant:
+0:76                1 (const int)
+0:76          Constant:
+0:76            3 (const uint)
+0:77      move second child to first child ( temp 3-component vector of uint)
+0:77        vector swizzle ( temp 3-component vector of uint)
+0:77          u: direct index for structure ( temp 4-component vector of uint)
+0:77            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:77              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:77                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:77                Constant:
+0:77                  0 (const uint)
+0:77              direct index ( temp uint)
+0:77                'dti' ( in 3-component vector of uint)
+0:77                Constant:
+0:77                  0 (const int)
+0:77            Constant:
+0:77              0 (const int)
+0:77          Sequence
+0:77            Constant:
+0:77              0 (const int)
+0:77            Constant:
+0:77              1 (const int)
+0:77            Constant:
+0:77              2 (const int)
+0:77        subgroupQuadBroadcast ( temp 3-component vector of uint)
+0:77          vector swizzle ( temp 3-component vector of uint)
+0:77            u: direct index for structure ( temp 4-component vector of uint)
+0:77              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:77                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:77                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:77                  Constant:
+0:77                    0 (const uint)
+0:77                direct index ( temp uint)
+0:77                  'dti' ( in 3-component vector of uint)
+0:77                  Constant:
+0:77                    0 (const int)
+0:77              Constant:
+0:77                0 (const int)
+0:77            Sequence
+0:77              Constant:
+0:77                0 (const int)
+0:77              Constant:
+0:77                1 (const int)
+0:77              Constant:
+0:77                2 (const int)
+0:77          Constant:
+0:77            3 (const uint)
+0:79      move second child to first child ( temp 4-component vector of int)
+0:79        i: direct index for structure ( temp 4-component vector of int)
+0:79          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:79            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:79              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:79              Constant:
+0:79                0 (const uint)
+0:79            direct index ( temp uint)
+0:79              'dti' ( in 3-component vector of uint)
+0:79              Constant:
+0:79                0 (const int)
+0:79          Constant:
+0:79            1 (const int)
+0:79        subgroupQuadBroadcast ( temp 4-component vector of int)
+0:79          i: direct index for structure ( temp 4-component vector of int)
+0:79            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:79              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:79                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:79                Constant:
+0:79                  0 (const uint)
+0:79              direct index ( temp uint)
+0:79                'dti' ( in 3-component vector of uint)
+0:79                Constant:
+0:79                  0 (const int)
+0:79            Constant:
+0:79              1 (const int)
+0:79          Constant:
+0:79            3 (const uint)
+0:80      move second child to first child ( temp int)
+0:80        direct index ( temp int)
+0:80          i: direct index for structure ( temp 4-component vector of int)
+0:80            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:80              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:80                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:80                Constant:
+0:80                  0 (const uint)
+0:80              direct index ( temp uint)
+0:80                'dti' ( in 3-component vector of uint)
+0:80                Constant:
+0:80                  0 (const int)
+0:80            Constant:
+0:80              1 (const int)
+0:80          Constant:
+0:80            0 (const int)
+0:80        subgroupQuadBroadcast ( temp int)
+0:80          direct index ( temp int)
+0:80            i: direct index for structure ( temp 4-component vector of int)
+0:80              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:80                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:80                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:80                  Constant:
+0:80                    0 (const uint)
+0:80                direct index ( temp uint)
+0:80                  'dti' ( in 3-component vector of uint)
+0:80                  Constant:
+0:80                    0 (const int)
+0:80              Constant:
+0:80                1 (const int)
+0:80            Constant:
+0:80              0 (const int)
+0:80          Constant:
+0:80            3 (const uint)
+0:81      move second child to first child ( temp 2-component vector of int)
+0:81        vector swizzle ( temp 2-component vector of int)
+0:81          i: direct index for structure ( temp 4-component vector of int)
+0:81            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:81              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:81                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:81                Constant:
+0:81                  0 (const uint)
+0:81              direct index ( temp uint)
+0:81                'dti' ( in 3-component vector of uint)
+0:81                Constant:
+0:81                  0 (const int)
+0:81            Constant:
+0:81              1 (const int)
+0:81          Sequence
+0:81            Constant:
+0:81              0 (const int)
+0:81            Constant:
+0:81              1 (const int)
+0:81        subgroupQuadBroadcast ( temp 2-component vector of int)
+0:81          vector swizzle ( temp 2-component vector of int)
+0:81            i: direct index for structure ( temp 4-component vector of int)
+0:81              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:81                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:81                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:81                  Constant:
+0:81                    0 (const uint)
+0:81                direct index ( temp uint)
+0:81                  'dti' ( in 3-component vector of uint)
+0:81                  Constant:
+0:81                    0 (const int)
+0:81              Constant:
+0:81                1 (const int)
+0:81            Sequence
+0:81              Constant:
+0:81                0 (const int)
+0:81              Constant:
+0:81                1 (const int)
+0:81          Constant:
+0:81            3 (const uint)
+0:82      move second child to first child ( temp 3-component vector of int)
+0:82        vector swizzle ( temp 3-component vector of int)
+0:82          i: direct index for structure ( temp 4-component vector of int)
+0:82            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:82              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:82                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:82                Constant:
+0:82                  0 (const uint)
+0:82              direct index ( temp uint)
+0:82                'dti' ( in 3-component vector of uint)
+0:82                Constant:
+0:82                  0 (const int)
+0:82            Constant:
+0:82              1 (const int)
+0:82          Sequence
+0:82            Constant:
+0:82              0 (const int)
+0:82            Constant:
+0:82              1 (const int)
+0:82            Constant:
+0:82              2 (const int)
+0:82        subgroupQuadBroadcast ( temp 3-component vector of int)
+0:82          vector swizzle ( temp 3-component vector of int)
+0:82            i: direct index for structure ( temp 4-component vector of int)
+0:82              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:82                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:82                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:82                  Constant:
+0:82                    0 (const uint)
+0:82                direct index ( temp uint)
+0:82                  'dti' ( in 3-component vector of uint)
+0:82                  Constant:
+0:82                    0 (const int)
+0:82              Constant:
+0:82                1 (const int)
+0:82            Sequence
+0:82              Constant:
+0:82                0 (const int)
+0:82              Constant:
+0:82                1 (const int)
+0:82              Constant:
+0:82                2 (const int)
+0:82          Constant:
+0:82            3 (const uint)
+0:84      move second child to first child ( temp 4-component vector of float)
+0:84        f: direct index for structure ( temp 4-component vector of float)
+0:84          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:84            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:84              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:84              Constant:
+0:84                0 (const uint)
+0:84            direct index ( temp uint)
+0:84              'dti' ( in 3-component vector of uint)
+0:84              Constant:
+0:84                0 (const int)
+0:84          Constant:
+0:84            2 (const int)
+0:84        subgroupQuadBroadcast ( temp 4-component vector of float)
+0:84          f: direct index for structure ( temp 4-component vector of float)
+0:84            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:84              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:84                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:84                Constant:
+0:84                  0 (const uint)
+0:84              direct index ( temp uint)
+0:84                'dti' ( in 3-component vector of uint)
+0:84                Constant:
+0:84                  0 (const int)
+0:84            Constant:
+0:84              2 (const int)
+0:84          Constant:
+0:84            3 (const uint)
+0:85      move second child to first child ( temp float)
+0:85        direct index ( temp float)
+0:85          f: direct index for structure ( temp 4-component vector of float)
+0:85            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:85              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:85                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:85                Constant:
+0:85                  0 (const uint)
+0:85              direct index ( temp uint)
+0:85                'dti' ( in 3-component vector of uint)
+0:85                Constant:
+0:85                  0 (const int)
+0:85            Constant:
+0:85              2 (const int)
+0:85          Constant:
+0:85            0 (const int)
+0:85        subgroupQuadBroadcast ( temp float)
+0:85          direct index ( temp float)
+0:85            f: direct index for structure ( temp 4-component vector of float)
+0:85              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:85                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:85                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:85                  Constant:
+0:85                    0 (const uint)
+0:85                direct index ( temp uint)
+0:85                  'dti' ( in 3-component vector of uint)
+0:85                  Constant:
+0:85                    0 (const int)
+0:85              Constant:
+0:85                2 (const int)
+0:85            Constant:
+0:85              0 (const int)
+0:85          Constant:
+0:85            3 (const uint)
+0:86      move second child to first child ( temp 2-component vector of float)
+0:86        vector swizzle ( temp 2-component vector of float)
+0:86          f: direct index for structure ( temp 4-component vector of float)
+0:86            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:86              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:86                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:86                Constant:
+0:86                  0 (const uint)
+0:86              direct index ( temp uint)
+0:86                'dti' ( in 3-component vector of uint)
+0:86                Constant:
+0:86                  0 (const int)
+0:86            Constant:
+0:86              2 (const int)
+0:86          Sequence
+0:86            Constant:
+0:86              0 (const int)
+0:86            Constant:
+0:86              1 (const int)
+0:86        subgroupQuadBroadcast ( temp 2-component vector of float)
+0:86          vector swizzle ( temp 2-component vector of float)
+0:86            f: direct index for structure ( temp 4-component vector of float)
+0:86              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:86                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:86                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:86                  Constant:
+0:86                    0 (const uint)
+0:86                direct index ( temp uint)
+0:86                  'dti' ( in 3-component vector of uint)
+0:86                  Constant:
+0:86                    0 (const int)
+0:86              Constant:
+0:86                2 (const int)
+0:86            Sequence
+0:86              Constant:
+0:86                0 (const int)
+0:86              Constant:
+0:86                1 (const int)
+0:86          Constant:
+0:86            3 (const uint)
+0:87      move second child to first child ( temp 3-component vector of float)
+0:87        vector swizzle ( temp 3-component vector of float)
+0:87          f: direct index for structure ( temp 4-component vector of float)
+0:87            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:87              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:87                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:87                Constant:
+0:87                  0 (const uint)
+0:87              direct index ( temp uint)
+0:87                'dti' ( in 3-component vector of uint)
+0:87                Constant:
+0:87                  0 (const int)
+0:87            Constant:
+0:87              2 (const int)
+0:87          Sequence
+0:87            Constant:
+0:87              0 (const int)
+0:87            Constant:
+0:87              1 (const int)
+0:87            Constant:
+0:87              2 (const int)
+0:87        subgroupQuadBroadcast ( temp 3-component vector of float)
+0:87          vector swizzle ( temp 3-component vector of float)
+0:87            f: direct index for structure ( temp 4-component vector of float)
+0:87              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:87                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:87                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:87                  Constant:
+0:87                    0 (const uint)
+0:87                direct index ( temp uint)
+0:87                  'dti' ( in 3-component vector of uint)
+0:87                  Constant:
+0:87                    0 (const int)
+0:87              Constant:
+0:87                2 (const int)
+0:87            Sequence
+0:87              Constant:
+0:87                0 (const int)
+0:87              Constant:
+0:87                1 (const int)
+0:87              Constant:
+0:87                2 (const int)
+0:87          Constant:
+0:87            3 (const uint)
+0:89      move second child to first child ( temp 4-component vector of double)
+0:89        d: direct index for structure ( temp 4-component vector of double)
+0:89          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:89            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:89              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:89              Constant:
+0:89                0 (const uint)
+0:89            direct index ( temp uint)
+0:89              'dti' ( in 3-component vector of uint)
+0:89              Constant:
+0:89                0 (const int)
+0:89          Constant:
+0:89            3 (const int)
+0:89        subgroupQuadBroadcast ( temp 4-component vector of double)
+0:89          d: direct index for structure ( temp 4-component vector of double)
+0:89            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:89              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:89                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:89                Constant:
+0:89                  0 (const uint)
+0:89              direct index ( temp uint)
+0:89                'dti' ( in 3-component vector of uint)
+0:89                Constant:
+0:89                  0 (const int)
+0:89            Constant:
+0:89              3 (const int)
+0:89          Constant:
+0:89            3 (const uint)
+0:90      move second child to first child ( temp double)
+0:90        direct index ( temp double)
+0:90          d: direct index for structure ( temp 4-component vector of double)
+0:90            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:90              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:90                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:90                Constant:
+0:90                  0 (const uint)
+0:90              direct index ( temp uint)
+0:90                'dti' ( in 3-component vector of uint)
+0:90                Constant:
+0:90                  0 (const int)
+0:90            Constant:
+0:90              3 (const int)
+0:90          Constant:
+0:90            0 (const int)
+0:90        subgroupQuadBroadcast ( temp double)
+0:90          direct index ( temp double)
+0:90            d: direct index for structure ( temp 4-component vector of double)
+0:90              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:90                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:90                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:90                  Constant:
+0:90                    0 (const uint)
+0:90                direct index ( temp uint)
+0:90                  'dti' ( in 3-component vector of uint)
+0:90                  Constant:
+0:90                    0 (const int)
+0:90              Constant:
+0:90                3 (const int)
+0:90            Constant:
+0:90              0 (const int)
+0:90          Constant:
+0:90            3 (const uint)
+0:91      move second child to first child ( temp 2-component vector of double)
+0:91        vector swizzle ( temp 2-component vector of double)
+0:91          d: direct index for structure ( temp 4-component vector of double)
+0:91            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:91              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:91                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:91                Constant:
+0:91                  0 (const uint)
+0:91              direct index ( temp uint)
+0:91                'dti' ( in 3-component vector of uint)
+0:91                Constant:
+0:91                  0 (const int)
+0:91            Constant:
+0:91              3 (const int)
+0:91          Sequence
+0:91            Constant:
+0:91              0 (const int)
+0:91            Constant:
+0:91              1 (const int)
+0:91        subgroupQuadBroadcast ( temp 2-component vector of double)
+0:91          vector swizzle ( temp 2-component vector of double)
+0:91            d: direct index for structure ( temp 4-component vector of double)
+0:91              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:91                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:91                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:91                  Constant:
+0:91                    0 (const uint)
+0:91                direct index ( temp uint)
+0:91                  'dti' ( in 3-component vector of uint)
+0:91                  Constant:
+0:91                    0 (const int)
+0:91              Constant:
+0:91                3 (const int)
+0:91            Sequence
+0:91              Constant:
+0:91                0 (const int)
+0:91              Constant:
+0:91                1 (const int)
+0:91          Constant:
+0:91            3 (const uint)
+0:92      move second child to first child ( temp 3-component vector of double)
+0:92        vector swizzle ( temp 3-component vector of double)
+0:92          d: direct index for structure ( temp 4-component vector of double)
+0:92            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:92              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:92                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:92                Constant:
+0:92                  0 (const uint)
+0:92              direct index ( temp uint)
+0:92                'dti' ( in 3-component vector of uint)
+0:92                Constant:
+0:92                  0 (const int)
+0:92            Constant:
+0:92              3 (const int)
+0:92          Sequence
+0:92            Constant:
+0:92              0 (const int)
+0:92            Constant:
+0:92              1 (const int)
+0:92            Constant:
+0:92              2 (const int)
+0:92        subgroupQuadBroadcast ( temp 3-component vector of double)
+0:92          vector swizzle ( temp 3-component vector of double)
+0:92            d: direct index for structure ( temp 4-component vector of double)
+0:92              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:92                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:92                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:92                  Constant:
+0:92                    0 (const uint)
+0:92                direct index ( temp uint)
+0:92                  'dti' ( in 3-component vector of uint)
+0:92                  Constant:
+0:92                    0 (const int)
+0:92              Constant:
+0:92                3 (const int)
+0:92            Sequence
+0:92              Constant:
+0:92                0 (const int)
+0:92              Constant:
+0:92                1 (const int)
+0:92              Constant:
+0:92                2 (const int)
+0:92          Constant:
+0:92            3 (const uint)
+0:94      move second child to first child ( temp 4-component vector of uint)
+0:94        u: direct index for structure ( temp 4-component vector of uint)
+0:94          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:94            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:94              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:94              Constant:
+0:94                0 (const uint)
+0:94            direct index ( temp uint)
+0:94              'dti' ( in 3-component vector of uint)
+0:94              Constant:
+0:94                0 (const int)
+0:94          Constant:
+0:94            0 (const int)
+0:94        subgroupQuadSwapHorizontal ( temp 4-component vector of uint)
+0:94          u: direct index for structure ( temp 4-component vector of uint)
+0:94            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:94              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:94                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:94                Constant:
+0:94                  0 (const uint)
+0:94              direct index ( temp uint)
+0:94                'dti' ( in 3-component vector of uint)
+0:94                Constant:
+0:94                  0 (const int)
+0:94            Constant:
+0:94              0 (const int)
+0:95      move second child to first child ( temp uint)
+0:95        direct index ( temp uint)
+0:95          u: direct index for structure ( temp 4-component vector of uint)
+0:95            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:95              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:95                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:95                Constant:
+0:95                  0 (const uint)
+0:95              direct index ( temp uint)
+0:95                'dti' ( in 3-component vector of uint)
+0:95                Constant:
+0:95                  0 (const int)
+0:95            Constant:
+0:95              0 (const int)
+0:95          Constant:
+0:95            0 (const int)
+0:95        subgroupQuadSwapHorizontal ( temp uint)
+0:95          direct index ( temp uint)
+0:95            u: direct index for structure ( temp 4-component vector of uint)
+0:95              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:95                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:95                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:95                  Constant:
+0:95                    0 (const uint)
+0:95                direct index ( temp uint)
+0:95                  'dti' ( in 3-component vector of uint)
+0:95                  Constant:
+0:95                    0 (const int)
+0:95              Constant:
+0:95                0 (const int)
+0:95            Constant:
+0:95              0 (const int)
+0:96      move second child to first child ( temp 2-component vector of uint)
+0:96        vector swizzle ( temp 2-component vector of uint)
+0:96          u: direct index for structure ( temp 4-component vector of uint)
+0:96            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:96              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:96                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:96                Constant:
+0:96                  0 (const uint)
+0:96              direct index ( temp uint)
+0:96                'dti' ( in 3-component vector of uint)
+0:96                Constant:
+0:96                  0 (const int)
+0:96            Constant:
+0:96              0 (const int)
+0:96          Sequence
+0:96            Constant:
+0:96              0 (const int)
+0:96            Constant:
+0:96              1 (const int)
+0:96        subgroupQuadSwapHorizontal ( temp 2-component vector of uint)
+0:96          vector swizzle ( temp 2-component vector of uint)
+0:96            u: direct index for structure ( temp 4-component vector of uint)
+0:96              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:96                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:96                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:96                  Constant:
+0:96                    0 (const uint)
+0:96                direct index ( temp uint)
+0:96                  'dti' ( in 3-component vector of uint)
+0:96                  Constant:
+0:96                    0 (const int)
+0:96              Constant:
+0:96                0 (const int)
+0:96            Sequence
+0:96              Constant:
+0:96                0 (const int)
+0:96              Constant:
+0:96                1 (const int)
+0:97      move second child to first child ( temp 3-component vector of uint)
+0:97        vector swizzle ( temp 3-component vector of uint)
+0:97          u: direct index for structure ( temp 4-component vector of uint)
+0:97            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:97              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:97                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:97                Constant:
+0:97                  0 (const uint)
+0:97              direct index ( temp uint)
+0:97                'dti' ( in 3-component vector of uint)
+0:97                Constant:
+0:97                  0 (const int)
+0:97            Constant:
+0:97              0 (const int)
+0:97          Sequence
+0:97            Constant:
+0:97              0 (const int)
+0:97            Constant:
+0:97              1 (const int)
+0:97            Constant:
+0:97              2 (const int)
+0:97        subgroupQuadSwapHorizontal ( temp 3-component vector of uint)
+0:97          vector swizzle ( temp 3-component vector of uint)
+0:97            u: direct index for structure ( temp 4-component vector of uint)
+0:97              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:97                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:97                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:97                  Constant:
+0:97                    0 (const uint)
+0:97                direct index ( temp uint)
+0:97                  'dti' ( in 3-component vector of uint)
+0:97                  Constant:
+0:97                    0 (const int)
+0:97              Constant:
+0:97                0 (const int)
+0:97            Sequence
+0:97              Constant:
+0:97                0 (const int)
+0:97              Constant:
+0:97                1 (const int)
+0:97              Constant:
+0:97                2 (const int)
+0:99      move second child to first child ( temp 4-component vector of int)
+0:99        i: direct index for structure ( temp 4-component vector of int)
+0:99          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:99            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:99              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:99              Constant:
+0:99                0 (const uint)
+0:99            direct index ( temp uint)
+0:99              'dti' ( in 3-component vector of uint)
+0:99              Constant:
+0:99                0 (const int)
+0:99          Constant:
+0:99            1 (const int)
+0:99        subgroupQuadSwapHorizontal ( temp 4-component vector of int)
+0:99          i: direct index for structure ( temp 4-component vector of int)
+0:99            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:99              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:99                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:99                Constant:
+0:99                  0 (const uint)
+0:99              direct index ( temp uint)
+0:99                'dti' ( in 3-component vector of uint)
+0:99                Constant:
+0:99                  0 (const int)
+0:99            Constant:
+0:99              1 (const int)
+0:100      move second child to first child ( temp int)
+0:100        direct index ( temp int)
+0:100          i: direct index for structure ( temp 4-component vector of int)
+0:100            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:100              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:100                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:100                Constant:
+0:100                  0 (const uint)
+0:100              direct index ( temp uint)
+0:100                'dti' ( in 3-component vector of uint)
+0:100                Constant:
+0:100                  0 (const int)
+0:100            Constant:
+0:100              1 (const int)
+0:100          Constant:
+0:100            0 (const int)
+0:100        subgroupQuadSwapHorizontal ( temp int)
+0:100          direct index ( temp int)
+0:100            i: direct index for structure ( temp 4-component vector of int)
+0:100              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:100                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:100                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:100                  Constant:
+0:100                    0 (const uint)
+0:100                direct index ( temp uint)
+0:100                  'dti' ( in 3-component vector of uint)
+0:100                  Constant:
+0:100                    0 (const int)
+0:100              Constant:
+0:100                1 (const int)
+0:100            Constant:
+0:100              0 (const int)
+0:101      move second child to first child ( temp 2-component vector of int)
+0:101        vector swizzle ( temp 2-component vector of int)
+0:101          i: direct index for structure ( temp 4-component vector of int)
+0:101            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:101              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:101                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:101                Constant:
+0:101                  0 (const uint)
+0:101              direct index ( temp uint)
+0:101                'dti' ( in 3-component vector of uint)
+0:101                Constant:
+0:101                  0 (const int)
+0:101            Constant:
+0:101              1 (const int)
+0:101          Sequence
+0:101            Constant:
+0:101              0 (const int)
+0:101            Constant:
+0:101              1 (const int)
+0:101        subgroupQuadSwapHorizontal ( temp 2-component vector of int)
+0:101          vector swizzle ( temp 2-component vector of int)
+0:101            i: direct index for structure ( temp 4-component vector of int)
+0:101              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:101                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:101                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:101                  Constant:
+0:101                    0 (const uint)
+0:101                direct index ( temp uint)
+0:101                  'dti' ( in 3-component vector of uint)
+0:101                  Constant:
+0:101                    0 (const int)
+0:101              Constant:
+0:101                1 (const int)
+0:101            Sequence
+0:101              Constant:
+0:101                0 (const int)
+0:101              Constant:
+0:101                1 (const int)
+0:102      move second child to first child ( temp 3-component vector of int)
+0:102        vector swizzle ( temp 3-component vector of int)
+0:102          i: direct index for structure ( temp 4-component vector of int)
+0:102            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:102              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:102                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:102                Constant:
+0:102                  0 (const uint)
+0:102              direct index ( temp uint)
+0:102                'dti' ( in 3-component vector of uint)
+0:102                Constant:
+0:102                  0 (const int)
+0:102            Constant:
+0:102              1 (const int)
+0:102          Sequence
+0:102            Constant:
+0:102              0 (const int)
+0:102            Constant:
+0:102              1 (const int)
+0:102            Constant:
+0:102              2 (const int)
+0:102        subgroupQuadSwapHorizontal ( temp 3-component vector of int)
+0:102          vector swizzle ( temp 3-component vector of int)
+0:102            i: direct index for structure ( temp 4-component vector of int)
+0:102              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:102                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:102                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:102                  Constant:
+0:102                    0 (const uint)
+0:102                direct index ( temp uint)
+0:102                  'dti' ( in 3-component vector of uint)
+0:102                  Constant:
+0:102                    0 (const int)
+0:102              Constant:
+0:102                1 (const int)
+0:102            Sequence
+0:102              Constant:
+0:102                0 (const int)
+0:102              Constant:
+0:102                1 (const int)
+0:102              Constant:
+0:102                2 (const int)
+0:104      move second child to first child ( temp 4-component vector of float)
+0:104        f: direct index for structure ( temp 4-component vector of float)
+0:104          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:104            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:104              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:104              Constant:
+0:104                0 (const uint)
+0:104            direct index ( temp uint)
+0:104              'dti' ( in 3-component vector of uint)
+0:104              Constant:
+0:104                0 (const int)
+0:104          Constant:
+0:104            2 (const int)
+0:104        subgroupQuadSwapHorizontal ( temp 4-component vector of float)
+0:104          f: direct index for structure ( temp 4-component vector of float)
+0:104            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:104              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:104                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:104                Constant:
+0:104                  0 (const uint)
+0:104              direct index ( temp uint)
+0:104                'dti' ( in 3-component vector of uint)
+0:104                Constant:
+0:104                  0 (const int)
+0:104            Constant:
+0:104              2 (const int)
+0:105      move second child to first child ( temp float)
+0:105        direct index ( temp float)
+0:105          f: direct index for structure ( temp 4-component vector of float)
+0:105            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:105              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:105                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:105                Constant:
+0:105                  0 (const uint)
+0:105              direct index ( temp uint)
+0:105                'dti' ( in 3-component vector of uint)
+0:105                Constant:
+0:105                  0 (const int)
+0:105            Constant:
+0:105              2 (const int)
+0:105          Constant:
+0:105            0 (const int)
+0:105        subgroupQuadSwapHorizontal ( temp float)
+0:105          direct index ( temp float)
+0:105            f: direct index for structure ( temp 4-component vector of float)
+0:105              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:105                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:105                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:105                  Constant:
+0:105                    0 (const uint)
+0:105                direct index ( temp uint)
+0:105                  'dti' ( in 3-component vector of uint)
+0:105                  Constant:
+0:105                    0 (const int)
+0:105              Constant:
+0:105                2 (const int)
+0:105            Constant:
+0:105              0 (const int)
+0:106      move second child to first child ( temp 2-component vector of float)
+0:106        vector swizzle ( temp 2-component vector of float)
+0:106          f: direct index for structure ( temp 4-component vector of float)
+0:106            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:106              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:106                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:106                Constant:
+0:106                  0 (const uint)
+0:106              direct index ( temp uint)
+0:106                'dti' ( in 3-component vector of uint)
+0:106                Constant:
+0:106                  0 (const int)
+0:106            Constant:
+0:106              2 (const int)
+0:106          Sequence
+0:106            Constant:
+0:106              0 (const int)
+0:106            Constant:
+0:106              1 (const int)
+0:106        subgroupQuadSwapHorizontal ( temp 2-component vector of float)
+0:106          vector swizzle ( temp 2-component vector of float)
+0:106            f: direct index for structure ( temp 4-component vector of float)
+0:106              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:106                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:106                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:106                  Constant:
+0:106                    0 (const uint)
+0:106                direct index ( temp uint)
+0:106                  'dti' ( in 3-component vector of uint)
+0:106                  Constant:
+0:106                    0 (const int)
+0:106              Constant:
+0:106                2 (const int)
+0:106            Sequence
+0:106              Constant:
+0:106                0 (const int)
+0:106              Constant:
+0:106                1 (const int)
+0:107      move second child to first child ( temp 3-component vector of float)
+0:107        vector swizzle ( temp 3-component vector of float)
+0:107          f: direct index for structure ( temp 4-component vector of float)
+0:107            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:107              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:107                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:107                Constant:
+0:107                  0 (const uint)
+0:107              direct index ( temp uint)
+0:107                'dti' ( in 3-component vector of uint)
+0:107                Constant:
+0:107                  0 (const int)
+0:107            Constant:
+0:107              2 (const int)
+0:107          Sequence
+0:107            Constant:
+0:107              0 (const int)
+0:107            Constant:
+0:107              1 (const int)
+0:107            Constant:
+0:107              2 (const int)
+0:107        subgroupQuadSwapHorizontal ( temp 3-component vector of float)
+0:107          vector swizzle ( temp 3-component vector of float)
+0:107            f: direct index for structure ( temp 4-component vector of float)
+0:107              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:107                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:107                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:107                  Constant:
+0:107                    0 (const uint)
+0:107                direct index ( temp uint)
+0:107                  'dti' ( in 3-component vector of uint)
+0:107                  Constant:
+0:107                    0 (const int)
+0:107              Constant:
+0:107                2 (const int)
+0:107            Sequence
+0:107              Constant:
+0:107                0 (const int)
+0:107              Constant:
+0:107                1 (const int)
+0:107              Constant:
+0:107                2 (const int)
+0:109      move second child to first child ( temp 4-component vector of double)
+0:109        d: direct index for structure ( temp 4-component vector of double)
+0:109          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:109            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:109              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:109              Constant:
+0:109                0 (const uint)
+0:109            direct index ( temp uint)
+0:109              'dti' ( in 3-component vector of uint)
+0:109              Constant:
+0:109                0 (const int)
+0:109          Constant:
+0:109            3 (const int)
+0:109        subgroupQuadSwapHorizontal ( temp 4-component vector of double)
+0:109          d: direct index for structure ( temp 4-component vector of double)
+0:109            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:109              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:109                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:109                Constant:
+0:109                  0 (const uint)
+0:109              direct index ( temp uint)
+0:109                'dti' ( in 3-component vector of uint)
+0:109                Constant:
+0:109                  0 (const int)
+0:109            Constant:
+0:109              3 (const int)
+0:110      move second child to first child ( temp double)
+0:110        direct index ( temp double)
+0:110          d: direct index for structure ( temp 4-component vector of double)
+0:110            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:110              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:110                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:110                Constant:
+0:110                  0 (const uint)
+0:110              direct index ( temp uint)
+0:110                'dti' ( in 3-component vector of uint)
+0:110                Constant:
+0:110                  0 (const int)
+0:110            Constant:
+0:110              3 (const int)
+0:110          Constant:
+0:110            0 (const int)
+0:110        subgroupQuadSwapHorizontal ( temp double)
+0:110          direct index ( temp double)
+0:110            d: direct index for structure ( temp 4-component vector of double)
+0:110              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:110                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:110                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:110                  Constant:
+0:110                    0 (const uint)
+0:110                direct index ( temp uint)
+0:110                  'dti' ( in 3-component vector of uint)
+0:110                  Constant:
+0:110                    0 (const int)
+0:110              Constant:
+0:110                3 (const int)
+0:110            Constant:
+0:110              0 (const int)
+0:111      move second child to first child ( temp 2-component vector of double)
+0:111        vector swizzle ( temp 2-component vector of double)
+0:111          d: direct index for structure ( temp 4-component vector of double)
+0:111            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:111              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:111                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:111                Constant:
+0:111                  0 (const uint)
+0:111              direct index ( temp uint)
+0:111                'dti' ( in 3-component vector of uint)
+0:111                Constant:
+0:111                  0 (const int)
+0:111            Constant:
+0:111              3 (const int)
+0:111          Sequence
+0:111            Constant:
+0:111              0 (const int)
+0:111            Constant:
+0:111              1 (const int)
+0:111        subgroupQuadSwapHorizontal ( temp 2-component vector of double)
+0:111          vector swizzle ( temp 2-component vector of double)
+0:111            d: direct index for structure ( temp 4-component vector of double)
+0:111              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:111                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:111                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:111                  Constant:
+0:111                    0 (const uint)
+0:111                direct index ( temp uint)
+0:111                  'dti' ( in 3-component vector of uint)
+0:111                  Constant:
+0:111                    0 (const int)
+0:111              Constant:
+0:111                3 (const int)
+0:111            Sequence
+0:111              Constant:
+0:111                0 (const int)
+0:111              Constant:
+0:111                1 (const int)
+0:112      move second child to first child ( temp 3-component vector of double)
+0:112        vector swizzle ( temp 3-component vector of double)
+0:112          d: direct index for structure ( temp 4-component vector of double)
+0:112            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:112              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:112                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:112                Constant:
+0:112                  0 (const uint)
+0:112              direct index ( temp uint)
+0:112                'dti' ( in 3-component vector of uint)
+0:112                Constant:
+0:112                  0 (const int)
+0:112            Constant:
+0:112              3 (const int)
+0:112          Sequence
+0:112            Constant:
+0:112              0 (const int)
+0:112            Constant:
+0:112              1 (const int)
+0:112            Constant:
+0:112              2 (const int)
+0:112        subgroupQuadSwapHorizontal ( temp 3-component vector of double)
+0:112          vector swizzle ( temp 3-component vector of double)
+0:112            d: direct index for structure ( temp 4-component vector of double)
+0:112              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:112                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:112                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:112                  Constant:
+0:112                    0 (const uint)
+0:112                direct index ( temp uint)
+0:112                  'dti' ( in 3-component vector of uint)
+0:112                  Constant:
+0:112                    0 (const int)
+0:112              Constant:
+0:112                3 (const int)
+0:112            Sequence
+0:112              Constant:
+0:112                0 (const int)
+0:112              Constant:
+0:112                1 (const int)
+0:112              Constant:
+0:112                2 (const int)
+0:114      move second child to first child ( temp 4-component vector of uint)
+0:114        u: direct index for structure ( temp 4-component vector of uint)
+0:114          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:114            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:114              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:114              Constant:
+0:114                0 (const uint)
+0:114            direct index ( temp uint)
+0:114              'dti' ( in 3-component vector of uint)
+0:114              Constant:
+0:114                0 (const int)
+0:114          Constant:
+0:114            0 (const int)
+0:114        subgroupQuadSwapVertical ( temp 4-component vector of uint)
+0:114          u: direct index for structure ( temp 4-component vector of uint)
+0:114            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:114              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:114                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:114                Constant:
+0:114                  0 (const uint)
+0:114              direct index ( temp uint)
+0:114                'dti' ( in 3-component vector of uint)
+0:114                Constant:
+0:114                  0 (const int)
+0:114            Constant:
+0:114              0 (const int)
+0:115      move second child to first child ( temp uint)
+0:115        direct index ( temp uint)
+0:115          u: direct index for structure ( temp 4-component vector of uint)
+0:115            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:115              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:115                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:115                Constant:
+0:115                  0 (const uint)
+0:115              direct index ( temp uint)
+0:115                'dti' ( in 3-component vector of uint)
+0:115                Constant:
+0:115                  0 (const int)
+0:115            Constant:
+0:115              0 (const int)
+0:115          Constant:
+0:115            0 (const int)
+0:115        subgroupQuadSwapVertical ( temp uint)
+0:115          direct index ( temp uint)
+0:115            u: direct index for structure ( temp 4-component vector of uint)
+0:115              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:115                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:115                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:115                  Constant:
+0:115                    0 (const uint)
+0:115                direct index ( temp uint)
+0:115                  'dti' ( in 3-component vector of uint)
+0:115                  Constant:
+0:115                    0 (const int)
+0:115              Constant:
+0:115                0 (const int)
+0:115            Constant:
+0:115              0 (const int)
+0:116      move second child to first child ( temp 2-component vector of uint)
+0:116        vector swizzle ( temp 2-component vector of uint)
+0:116          u: direct index for structure ( temp 4-component vector of uint)
+0:116            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:116              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:116                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:116                Constant:
+0:116                  0 (const uint)
+0:116              direct index ( temp uint)
+0:116                'dti' ( in 3-component vector of uint)
+0:116                Constant:
+0:116                  0 (const int)
+0:116            Constant:
+0:116              0 (const int)
+0:116          Sequence
+0:116            Constant:
+0:116              0 (const int)
+0:116            Constant:
+0:116              1 (const int)
+0:116        subgroupQuadSwapVertical ( temp 2-component vector of uint)
+0:116          vector swizzle ( temp 2-component vector of uint)
+0:116            u: direct index for structure ( temp 4-component vector of uint)
+0:116              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:116                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:116                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:116                  Constant:
+0:116                    0 (const uint)
+0:116                direct index ( temp uint)
+0:116                  'dti' ( in 3-component vector of uint)
+0:116                  Constant:
+0:116                    0 (const int)
+0:116              Constant:
+0:116                0 (const int)
+0:116            Sequence
+0:116              Constant:
+0:116                0 (const int)
+0:116              Constant:
+0:116                1 (const int)
+0:117      move second child to first child ( temp 3-component vector of uint)
+0:117        vector swizzle ( temp 3-component vector of uint)
+0:117          u: direct index for structure ( temp 4-component vector of uint)
+0:117            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:117              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:117                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:117                Constant:
+0:117                  0 (const uint)
+0:117              direct index ( temp uint)
+0:117                'dti' ( in 3-component vector of uint)
+0:117                Constant:
+0:117                  0 (const int)
+0:117            Constant:
+0:117              0 (const int)
+0:117          Sequence
+0:117            Constant:
+0:117              0 (const int)
+0:117            Constant:
+0:117              1 (const int)
+0:117            Constant:
+0:117              2 (const int)
+0:117        subgroupQuadSwapVertical ( temp 3-component vector of uint)
+0:117          vector swizzle ( temp 3-component vector of uint)
+0:117            u: direct index for structure ( temp 4-component vector of uint)
+0:117              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:117                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:117                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:117                  Constant:
+0:117                    0 (const uint)
+0:117                direct index ( temp uint)
+0:117                  'dti' ( in 3-component vector of uint)
+0:117                  Constant:
+0:117                    0 (const int)
+0:117              Constant:
+0:117                0 (const int)
+0:117            Sequence
+0:117              Constant:
+0:117                0 (const int)
+0:117              Constant:
+0:117                1 (const int)
+0:117              Constant:
+0:117                2 (const int)
+0:119      move second child to first child ( temp 4-component vector of int)
+0:119        i: direct index for structure ( temp 4-component vector of int)
+0:119          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:119            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:119              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:119              Constant:
+0:119                0 (const uint)
+0:119            direct index ( temp uint)
+0:119              'dti' ( in 3-component vector of uint)
+0:119              Constant:
+0:119                0 (const int)
+0:119          Constant:
+0:119            1 (const int)
+0:119        subgroupQuadSwapVertical ( temp 4-component vector of int)
+0:119          i: direct index for structure ( temp 4-component vector of int)
+0:119            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:119              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:119                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:119                Constant:
+0:119                  0 (const uint)
+0:119              direct index ( temp uint)
+0:119                'dti' ( in 3-component vector of uint)
+0:119                Constant:
+0:119                  0 (const int)
+0:119            Constant:
+0:119              1 (const int)
+0:120      move second child to first child ( temp int)
+0:120        direct index ( temp int)
+0:120          i: direct index for structure ( temp 4-component vector of int)
+0:120            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:120              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:120                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:120                Constant:
+0:120                  0 (const uint)
+0:120              direct index ( temp uint)
+0:120                'dti' ( in 3-component vector of uint)
+0:120                Constant:
+0:120                  0 (const int)
+0:120            Constant:
+0:120              1 (const int)
+0:120          Constant:
+0:120            0 (const int)
+0:120        subgroupQuadSwapVertical ( temp int)
+0:120          direct index ( temp int)
+0:120            i: direct index for structure ( temp 4-component vector of int)
+0:120              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:120                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:120                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:120                  Constant:
+0:120                    0 (const uint)
+0:120                direct index ( temp uint)
+0:120                  'dti' ( in 3-component vector of uint)
+0:120                  Constant:
+0:120                    0 (const int)
+0:120              Constant:
+0:120                1 (const int)
+0:120            Constant:
+0:120              0 (const int)
+0:121      move second child to first child ( temp 2-component vector of int)
+0:121        vector swizzle ( temp 2-component vector of int)
+0:121          i: direct index for structure ( temp 4-component vector of int)
+0:121            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:121              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:121                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:121                Constant:
+0:121                  0 (const uint)
+0:121              direct index ( temp uint)
+0:121                'dti' ( in 3-component vector of uint)
+0:121                Constant:
+0:121                  0 (const int)
+0:121            Constant:
+0:121              1 (const int)
+0:121          Sequence
+0:121            Constant:
+0:121              0 (const int)
+0:121            Constant:
+0:121              1 (const int)
+0:121        subgroupQuadSwapVertical ( temp 2-component vector of int)
+0:121          vector swizzle ( temp 2-component vector of int)
+0:121            i: direct index for structure ( temp 4-component vector of int)
+0:121              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:121                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:121                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:121                  Constant:
+0:121                    0 (const uint)
+0:121                direct index ( temp uint)
+0:121                  'dti' ( in 3-component vector of uint)
+0:121                  Constant:
+0:121                    0 (const int)
+0:121              Constant:
+0:121                1 (const int)
+0:121            Sequence
+0:121              Constant:
+0:121                0 (const int)
+0:121              Constant:
+0:121                1 (const int)
+0:122      move second child to first child ( temp 3-component vector of int)
+0:122        vector swizzle ( temp 3-component vector of int)
+0:122          i: direct index for structure ( temp 4-component vector of int)
+0:122            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:122              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:122                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:122                Constant:
+0:122                  0 (const uint)
+0:122              direct index ( temp uint)
+0:122                'dti' ( in 3-component vector of uint)
+0:122                Constant:
+0:122                  0 (const int)
+0:122            Constant:
+0:122              1 (const int)
+0:122          Sequence
+0:122            Constant:
+0:122              0 (const int)
+0:122            Constant:
+0:122              1 (const int)
+0:122            Constant:
+0:122              2 (const int)
+0:122        subgroupQuadSwapVertical ( temp 3-component vector of int)
+0:122          vector swizzle ( temp 3-component vector of int)
+0:122            i: direct index for structure ( temp 4-component vector of int)
+0:122              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:122                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:122                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:122                  Constant:
+0:122                    0 (const uint)
+0:122                direct index ( temp uint)
+0:122                  'dti' ( in 3-component vector of uint)
+0:122                  Constant:
+0:122                    0 (const int)
+0:122              Constant:
+0:122                1 (const int)
+0:122            Sequence
+0:122              Constant:
+0:122                0 (const int)
+0:122              Constant:
+0:122                1 (const int)
+0:122              Constant:
+0:122                2 (const int)
+0:124      move second child to first child ( temp 4-component vector of float)
+0:124        f: direct index for structure ( temp 4-component vector of float)
+0:124          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:124            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:124              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:124              Constant:
+0:124                0 (const uint)
+0:124            direct index ( temp uint)
+0:124              'dti' ( in 3-component vector of uint)
+0:124              Constant:
+0:124                0 (const int)
+0:124          Constant:
+0:124            2 (const int)
+0:124        subgroupQuadSwapVertical ( temp 4-component vector of float)
+0:124          f: direct index for structure ( temp 4-component vector of float)
+0:124            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:124              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:124                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:124                Constant:
+0:124                  0 (const uint)
+0:124              direct index ( temp uint)
+0:124                'dti' ( in 3-component vector of uint)
+0:124                Constant:
+0:124                  0 (const int)
+0:124            Constant:
+0:124              2 (const int)
+0:125      move second child to first child ( temp float)
+0:125        direct index ( temp float)
+0:125          f: direct index for structure ( temp 4-component vector of float)
+0:125            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:125              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:125                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:125                Constant:
+0:125                  0 (const uint)
+0:125              direct index ( temp uint)
+0:125                'dti' ( in 3-component vector of uint)
+0:125                Constant:
+0:125                  0 (const int)
+0:125            Constant:
+0:125              2 (const int)
+0:125          Constant:
+0:125            0 (const int)
+0:125        subgroupQuadSwapVertical ( temp float)
+0:125          direct index ( temp float)
+0:125            f: direct index for structure ( temp 4-component vector of float)
+0:125              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:125                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:125                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:125                  Constant:
+0:125                    0 (const uint)
+0:125                direct index ( temp uint)
+0:125                  'dti' ( in 3-component vector of uint)
+0:125                  Constant:
+0:125                    0 (const int)
+0:125              Constant:
+0:125                2 (const int)
+0:125            Constant:
+0:125              0 (const int)
+0:126      move second child to first child ( temp 2-component vector of float)
+0:126        vector swizzle ( temp 2-component vector of float)
+0:126          f: direct index for structure ( temp 4-component vector of float)
+0:126            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:126              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:126                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:126                Constant:
+0:126                  0 (const uint)
+0:126              direct index ( temp uint)
+0:126                'dti' ( in 3-component vector of uint)
+0:126                Constant:
+0:126                  0 (const int)
+0:126            Constant:
+0:126              2 (const int)
+0:126          Sequence
+0:126            Constant:
+0:126              0 (const int)
+0:126            Constant:
+0:126              1 (const int)
+0:126        subgroupQuadSwapVertical ( temp 2-component vector of float)
+0:126          vector swizzle ( temp 2-component vector of float)
+0:126            f: direct index for structure ( temp 4-component vector of float)
+0:126              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:126                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:126                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:126                  Constant:
+0:126                    0 (const uint)
+0:126                direct index ( temp uint)
+0:126                  'dti' ( in 3-component vector of uint)
+0:126                  Constant:
+0:126                    0 (const int)
+0:126              Constant:
+0:126                2 (const int)
+0:126            Sequence
+0:126              Constant:
+0:126                0 (const int)
+0:126              Constant:
+0:126                1 (const int)
+0:127      move second child to first child ( temp 3-component vector of float)
+0:127        vector swizzle ( temp 3-component vector of float)
+0:127          f: direct index for structure ( temp 4-component vector of float)
+0:127            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:127              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:127                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:127                Constant:
+0:127                  0 (const uint)
+0:127              direct index ( temp uint)
+0:127                'dti' ( in 3-component vector of uint)
+0:127                Constant:
+0:127                  0 (const int)
+0:127            Constant:
+0:127              2 (const int)
+0:127          Sequence
+0:127            Constant:
+0:127              0 (const int)
+0:127            Constant:
+0:127              1 (const int)
+0:127            Constant:
+0:127              2 (const int)
+0:127        subgroupQuadSwapVertical ( temp 3-component vector of float)
+0:127          vector swizzle ( temp 3-component vector of float)
+0:127            f: direct index for structure ( temp 4-component vector of float)
+0:127              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:127                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:127                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:127                  Constant:
+0:127                    0 (const uint)
+0:127                direct index ( temp uint)
+0:127                  'dti' ( in 3-component vector of uint)
+0:127                  Constant:
+0:127                    0 (const int)
+0:127              Constant:
+0:127                2 (const int)
+0:127            Sequence
+0:127              Constant:
+0:127                0 (const int)
+0:127              Constant:
+0:127                1 (const int)
+0:127              Constant:
+0:127                2 (const int)
+0:129      move second child to first child ( temp 4-component vector of double)
+0:129        d: direct index for structure ( temp 4-component vector of double)
+0:129          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:129            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:129              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:129              Constant:
+0:129                0 (const uint)
+0:129            direct index ( temp uint)
+0:129              'dti' ( in 3-component vector of uint)
+0:129              Constant:
+0:129                0 (const int)
+0:129          Constant:
+0:129            3 (const int)
+0:129        subgroupQuadSwapVertical ( temp 4-component vector of double)
+0:129          d: direct index for structure ( temp 4-component vector of double)
+0:129            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:129              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:129                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:129                Constant:
+0:129                  0 (const uint)
+0:129              direct index ( temp uint)
+0:129                'dti' ( in 3-component vector of uint)
+0:129                Constant:
+0:129                  0 (const int)
+0:129            Constant:
+0:129              3 (const int)
+0:130      move second child to first child ( temp double)
+0:130        direct index ( temp double)
+0:130          d: direct index for structure ( temp 4-component vector of double)
+0:130            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:130              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:130                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:130                Constant:
+0:130                  0 (const uint)
+0:130              direct index ( temp uint)
+0:130                'dti' ( in 3-component vector of uint)
+0:130                Constant:
+0:130                  0 (const int)
+0:130            Constant:
+0:130              3 (const int)
+0:130          Constant:
+0:130            0 (const int)
+0:130        subgroupQuadSwapVertical ( temp double)
+0:130          direct index ( temp double)
+0:130            d: direct index for structure ( temp 4-component vector of double)
+0:130              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:130                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:130                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:130                  Constant:
+0:130                    0 (const uint)
+0:130                direct index ( temp uint)
+0:130                  'dti' ( in 3-component vector of uint)
+0:130                  Constant:
+0:130                    0 (const int)
+0:130              Constant:
+0:130                3 (const int)
+0:130            Constant:
+0:130              0 (const int)
+0:131      move second child to first child ( temp 2-component vector of double)
+0:131        vector swizzle ( temp 2-component vector of double)
+0:131          d: direct index for structure ( temp 4-component vector of double)
+0:131            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:131              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:131                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:131                Constant:
+0:131                  0 (const uint)
+0:131              direct index ( temp uint)
+0:131                'dti' ( in 3-component vector of uint)
+0:131                Constant:
+0:131                  0 (const int)
+0:131            Constant:
+0:131              3 (const int)
+0:131          Sequence
+0:131            Constant:
+0:131              0 (const int)
+0:131            Constant:
+0:131              1 (const int)
+0:131        subgroupQuadSwapVertical ( temp 2-component vector of double)
+0:131          vector swizzle ( temp 2-component vector of double)
+0:131            d: direct index for structure ( temp 4-component vector of double)
+0:131              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:131                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:131                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:131                  Constant:
+0:131                    0 (const uint)
+0:131                direct index ( temp uint)
+0:131                  'dti' ( in 3-component vector of uint)
+0:131                  Constant:
+0:131                    0 (const int)
+0:131              Constant:
+0:131                3 (const int)
+0:131            Sequence
+0:131              Constant:
+0:131                0 (const int)
+0:131              Constant:
+0:131                1 (const int)
+0:132      move second child to first child ( temp 3-component vector of double)
+0:132        vector swizzle ( temp 3-component vector of double)
+0:132          d: direct index for structure ( temp 4-component vector of double)
+0:132            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:132              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:132                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:132                Constant:
+0:132                  0 (const uint)
+0:132              direct index ( temp uint)
+0:132                'dti' ( in 3-component vector of uint)
+0:132                Constant:
+0:132                  0 (const int)
+0:132            Constant:
+0:132              3 (const int)
+0:132          Sequence
+0:132            Constant:
+0:132              0 (const int)
+0:132            Constant:
+0:132              1 (const int)
+0:132            Constant:
+0:132              2 (const int)
+0:132        subgroupQuadSwapVertical ( temp 3-component vector of double)
+0:132          vector swizzle ( temp 3-component vector of double)
+0:132            d: direct index for structure ( temp 4-component vector of double)
+0:132              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:132                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:132                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:132                  Constant:
+0:132                    0 (const uint)
+0:132                direct index ( temp uint)
+0:132                  'dti' ( in 3-component vector of uint)
+0:132                  Constant:
+0:132                    0 (const int)
+0:132              Constant:
+0:132                3 (const int)
+0:132            Sequence
+0:132              Constant:
+0:132                0 (const int)
+0:132              Constant:
+0:132                1 (const int)
+0:132              Constant:
+0:132                2 (const int)
+0:134      move second child to first child ( temp 4-component vector of uint)
+0:134        u: direct index for structure ( temp 4-component vector of uint)
+0:134          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:134            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:134              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:134              Constant:
+0:134                0 (const uint)
+0:134            direct index ( temp uint)
+0:134              'dti' ( in 3-component vector of uint)
+0:134              Constant:
+0:134                0 (const int)
+0:134          Constant:
+0:134            0 (const int)
+0:134        subgroupQuadSwapDiagonal ( temp 4-component vector of uint)
+0:134          u: direct index for structure ( temp 4-component vector of uint)
+0:134            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:134              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:134                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:134                Constant:
+0:134                  0 (const uint)
+0:134              direct index ( temp uint)
+0:134                'dti' ( in 3-component vector of uint)
+0:134                Constant:
+0:134                  0 (const int)
+0:134            Constant:
+0:134              0 (const int)
+0:135      move second child to first child ( temp uint)
+0:135        direct index ( temp uint)
+0:135          u: direct index for structure ( temp 4-component vector of uint)
+0:135            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:135              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:135                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:135                Constant:
+0:135                  0 (const uint)
+0:135              direct index ( temp uint)
+0:135                'dti' ( in 3-component vector of uint)
+0:135                Constant:
+0:135                  0 (const int)
+0:135            Constant:
+0:135              0 (const int)
+0:135          Constant:
+0:135            0 (const int)
+0:135        subgroupQuadSwapDiagonal ( temp uint)
+0:135          direct index ( temp uint)
+0:135            u: direct index for structure ( temp 4-component vector of uint)
+0:135              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:135                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:135                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:135                  Constant:
+0:135                    0 (const uint)
+0:135                direct index ( temp uint)
+0:135                  'dti' ( in 3-component vector of uint)
+0:135                  Constant:
+0:135                    0 (const int)
+0:135              Constant:
+0:135                0 (const int)
+0:135            Constant:
+0:135              0 (const int)
+0:136      move second child to first child ( temp 2-component vector of uint)
+0:136        vector swizzle ( temp 2-component vector of uint)
+0:136          u: direct index for structure ( temp 4-component vector of uint)
+0:136            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:136              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:136                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:136                Constant:
+0:136                  0 (const uint)
+0:136              direct index ( temp uint)
+0:136                'dti' ( in 3-component vector of uint)
+0:136                Constant:
+0:136                  0 (const int)
+0:136            Constant:
+0:136              0 (const int)
+0:136          Sequence
+0:136            Constant:
+0:136              0 (const int)
+0:136            Constant:
+0:136              1 (const int)
+0:136        subgroupQuadSwapDiagonal ( temp 2-component vector of uint)
+0:136          vector swizzle ( temp 2-component vector of uint)
+0:136            u: direct index for structure ( temp 4-component vector of uint)
+0:136              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:136                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:136                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:136                  Constant:
+0:136                    0 (const uint)
+0:136                direct index ( temp uint)
+0:136                  'dti' ( in 3-component vector of uint)
+0:136                  Constant:
+0:136                    0 (const int)
+0:136              Constant:
+0:136                0 (const int)
+0:136            Sequence
+0:136              Constant:
+0:136                0 (const int)
+0:136              Constant:
+0:136                1 (const int)
+0:137      move second child to first child ( temp 3-component vector of uint)
+0:137        vector swizzle ( temp 3-component vector of uint)
+0:137          u: direct index for structure ( temp 4-component vector of uint)
+0:137            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:137              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:137                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:137                Constant:
+0:137                  0 (const uint)
+0:137              direct index ( temp uint)
+0:137                'dti' ( in 3-component vector of uint)
+0:137                Constant:
+0:137                  0 (const int)
+0:137            Constant:
+0:137              0 (const int)
+0:137          Sequence
+0:137            Constant:
+0:137              0 (const int)
+0:137            Constant:
+0:137              1 (const int)
+0:137            Constant:
+0:137              2 (const int)
+0:137        subgroupQuadSwapDiagonal ( temp 3-component vector of uint)
+0:137          vector swizzle ( temp 3-component vector of uint)
+0:137            u: direct index for structure ( temp 4-component vector of uint)
+0:137              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:137                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:137                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:137                  Constant:
+0:137                    0 (const uint)
+0:137                direct index ( temp uint)
+0:137                  'dti' ( in 3-component vector of uint)
+0:137                  Constant:
+0:137                    0 (const int)
+0:137              Constant:
+0:137                0 (const int)
+0:137            Sequence
+0:137              Constant:
+0:137                0 (const int)
+0:137              Constant:
+0:137                1 (const int)
+0:137              Constant:
+0:137                2 (const int)
+0:139      move second child to first child ( temp 4-component vector of int)
+0:139        i: direct index for structure ( temp 4-component vector of int)
+0:139          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:139            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:139              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:139              Constant:
+0:139                0 (const uint)
+0:139            direct index ( temp uint)
+0:139              'dti' ( in 3-component vector of uint)
+0:139              Constant:
+0:139                0 (const int)
+0:139          Constant:
+0:139            1 (const int)
+0:139        subgroupQuadSwapDiagonal ( temp 4-component vector of int)
+0:139          i: direct index for structure ( temp 4-component vector of int)
+0:139            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:139              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:139                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:139                Constant:
+0:139                  0 (const uint)
+0:139              direct index ( temp uint)
+0:139                'dti' ( in 3-component vector of uint)
+0:139                Constant:
+0:139                  0 (const int)
+0:139            Constant:
+0:139              1 (const int)
+0:140      move second child to first child ( temp int)
+0:140        direct index ( temp int)
+0:140          i: direct index for structure ( temp 4-component vector of int)
+0:140            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:140              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:140                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:140                Constant:
+0:140                  0 (const uint)
+0:140              direct index ( temp uint)
+0:140                'dti' ( in 3-component vector of uint)
+0:140                Constant:
+0:140                  0 (const int)
+0:140            Constant:
+0:140              1 (const int)
+0:140          Constant:
+0:140            0 (const int)
+0:140        subgroupQuadSwapDiagonal ( temp int)
+0:140          direct index ( temp int)
+0:140            i: direct index for structure ( temp 4-component vector of int)
+0:140              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:140                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:140                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:140                  Constant:
+0:140                    0 (const uint)
+0:140                direct index ( temp uint)
+0:140                  'dti' ( in 3-component vector of uint)
+0:140                  Constant:
+0:140                    0 (const int)
+0:140              Constant:
+0:140                1 (const int)
+0:140            Constant:
+0:140              0 (const int)
+0:141      move second child to first child ( temp 2-component vector of int)
+0:141        vector swizzle ( temp 2-component vector of int)
+0:141          i: direct index for structure ( temp 4-component vector of int)
+0:141            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:141              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:141                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:141                Constant:
+0:141                  0 (const uint)
+0:141              direct index ( temp uint)
+0:141                'dti' ( in 3-component vector of uint)
+0:141                Constant:
+0:141                  0 (const int)
+0:141            Constant:
+0:141              1 (const int)
+0:141          Sequence
+0:141            Constant:
+0:141              0 (const int)
+0:141            Constant:
+0:141              1 (const int)
+0:141        subgroupQuadSwapDiagonal ( temp 2-component vector of int)
+0:141          vector swizzle ( temp 2-component vector of int)
+0:141            i: direct index for structure ( temp 4-component vector of int)
+0:141              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:141                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:141                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:141                  Constant:
+0:141                    0 (const uint)
+0:141                direct index ( temp uint)
+0:141                  'dti' ( in 3-component vector of uint)
+0:141                  Constant:
+0:141                    0 (const int)
+0:141              Constant:
+0:141                1 (const int)
+0:141            Sequence
+0:141              Constant:
+0:141                0 (const int)
+0:141              Constant:
+0:141                1 (const int)
+0:142      move second child to first child ( temp 3-component vector of int)
+0:142        vector swizzle ( temp 3-component vector of int)
+0:142          i: direct index for structure ( temp 4-component vector of int)
+0:142            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:142              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:142                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:142                Constant:
+0:142                  0 (const uint)
+0:142              direct index ( temp uint)
+0:142                'dti' ( in 3-component vector of uint)
+0:142                Constant:
+0:142                  0 (const int)
+0:142            Constant:
+0:142              1 (const int)
+0:142          Sequence
+0:142            Constant:
+0:142              0 (const int)
+0:142            Constant:
+0:142              1 (const int)
+0:142            Constant:
+0:142              2 (const int)
+0:142        subgroupQuadSwapDiagonal ( temp 3-component vector of int)
+0:142          vector swizzle ( temp 3-component vector of int)
+0:142            i: direct index for structure ( temp 4-component vector of int)
+0:142              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:142                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:142                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:142                  Constant:
+0:142                    0 (const uint)
+0:142                direct index ( temp uint)
+0:142                  'dti' ( in 3-component vector of uint)
+0:142                  Constant:
+0:142                    0 (const int)
+0:142              Constant:
+0:142                1 (const int)
+0:142            Sequence
+0:142              Constant:
+0:142                0 (const int)
+0:142              Constant:
+0:142                1 (const int)
+0:142              Constant:
+0:142                2 (const int)
+0:144      move second child to first child ( temp 4-component vector of float)
+0:144        f: direct index for structure ( temp 4-component vector of float)
+0:144          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:144            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:144              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:144              Constant:
+0:144                0 (const uint)
+0:144            direct index ( temp uint)
+0:144              'dti' ( in 3-component vector of uint)
+0:144              Constant:
+0:144                0 (const int)
+0:144          Constant:
+0:144            2 (const int)
+0:144        subgroupQuadSwapDiagonal ( temp 4-component vector of float)
+0:144          f: direct index for structure ( temp 4-component vector of float)
+0:144            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:144              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:144                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:144                Constant:
+0:144                  0 (const uint)
+0:144              direct index ( temp uint)
+0:144                'dti' ( in 3-component vector of uint)
+0:144                Constant:
+0:144                  0 (const int)
+0:144            Constant:
+0:144              2 (const int)
+0:145      move second child to first child ( temp float)
+0:145        direct index ( temp float)
+0:145          f: direct index for structure ( temp 4-component vector of float)
+0:145            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:145              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:145                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:145                Constant:
+0:145                  0 (const uint)
+0:145              direct index ( temp uint)
+0:145                'dti' ( in 3-component vector of uint)
+0:145                Constant:
+0:145                  0 (const int)
+0:145            Constant:
+0:145              2 (const int)
+0:145          Constant:
+0:145            0 (const int)
+0:145        subgroupQuadSwapDiagonal ( temp float)
+0:145          direct index ( temp float)
+0:145            f: direct index for structure ( temp 4-component vector of float)
+0:145              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:145                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:145                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:145                  Constant:
+0:145                    0 (const uint)
+0:145                direct index ( temp uint)
+0:145                  'dti' ( in 3-component vector of uint)
+0:145                  Constant:
+0:145                    0 (const int)
+0:145              Constant:
+0:145                2 (const int)
+0:145            Constant:
+0:145              0 (const int)
+0:146      move second child to first child ( temp 2-component vector of float)
+0:146        vector swizzle ( temp 2-component vector of float)
+0:146          f: direct index for structure ( temp 4-component vector of float)
+0:146            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:146              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:146                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:146                Constant:
+0:146                  0 (const uint)
+0:146              direct index ( temp uint)
+0:146                'dti' ( in 3-component vector of uint)
+0:146                Constant:
+0:146                  0 (const int)
+0:146            Constant:
+0:146              2 (const int)
+0:146          Sequence
+0:146            Constant:
+0:146              0 (const int)
+0:146            Constant:
+0:146              1 (const int)
+0:146        subgroupQuadSwapDiagonal ( temp 2-component vector of float)
+0:146          vector swizzle ( temp 2-component vector of float)
+0:146            f: direct index for structure ( temp 4-component vector of float)
+0:146              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:146                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:146                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:146                  Constant:
+0:146                    0 (const uint)
+0:146                direct index ( temp uint)
+0:146                  'dti' ( in 3-component vector of uint)
+0:146                  Constant:
+0:146                    0 (const int)
+0:146              Constant:
+0:146                2 (const int)
+0:146            Sequence
+0:146              Constant:
+0:146                0 (const int)
+0:146              Constant:
+0:146                1 (const int)
+0:147      move second child to first child ( temp 3-component vector of float)
+0:147        vector swizzle ( temp 3-component vector of float)
+0:147          f: direct index for structure ( temp 4-component vector of float)
+0:147            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:147              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:147                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:147                Constant:
+0:147                  0 (const uint)
+0:147              direct index ( temp uint)
+0:147                'dti' ( in 3-component vector of uint)
+0:147                Constant:
+0:147                  0 (const int)
+0:147            Constant:
+0:147              2 (const int)
+0:147          Sequence
+0:147            Constant:
+0:147              0 (const int)
+0:147            Constant:
+0:147              1 (const int)
+0:147            Constant:
+0:147              2 (const int)
+0:147        subgroupQuadSwapDiagonal ( temp 3-component vector of float)
+0:147          vector swizzle ( temp 3-component vector of float)
+0:147            f: direct index for structure ( temp 4-component vector of float)
+0:147              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:147                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:147                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:147                  Constant:
+0:147                    0 (const uint)
+0:147                direct index ( temp uint)
+0:147                  'dti' ( in 3-component vector of uint)
+0:147                  Constant:
+0:147                    0 (const int)
+0:147              Constant:
+0:147                2 (const int)
+0:147            Sequence
+0:147              Constant:
+0:147                0 (const int)
+0:147              Constant:
+0:147                1 (const int)
+0:147              Constant:
+0:147                2 (const int)
+0:149      move second child to first child ( temp 4-component vector of double)
+0:149        d: direct index for structure ( temp 4-component vector of double)
+0:149          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:149            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:149              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:149              Constant:
+0:149                0 (const uint)
+0:149            direct index ( temp uint)
+0:149              'dti' ( in 3-component vector of uint)
+0:149              Constant:
+0:149                0 (const int)
+0:149          Constant:
+0:149            3 (const int)
+0:149        subgroupQuadSwapDiagonal ( temp 4-component vector of double)
+0:149          d: direct index for structure ( temp 4-component vector of double)
+0:149            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:149              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:149                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:149                Constant:
+0:149                  0 (const uint)
+0:149              direct index ( temp uint)
+0:149                'dti' ( in 3-component vector of uint)
+0:149                Constant:
+0:149                  0 (const int)
+0:149            Constant:
+0:149              3 (const int)
+0:150      move second child to first child ( temp double)
+0:150        direct index ( temp double)
+0:150          d: direct index for structure ( temp 4-component vector of double)
+0:150            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:150              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:150                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:150                Constant:
+0:150                  0 (const uint)
+0:150              direct index ( temp uint)
+0:150                'dti' ( in 3-component vector of uint)
+0:150                Constant:
+0:150                  0 (const int)
+0:150            Constant:
+0:150              3 (const int)
+0:150          Constant:
+0:150            0 (const int)
+0:150        subgroupQuadSwapDiagonal ( temp double)
+0:150          direct index ( temp double)
+0:150            d: direct index for structure ( temp 4-component vector of double)
+0:150              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:150                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:150                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:150                  Constant:
+0:150                    0 (const uint)
+0:150                direct index ( temp uint)
+0:150                  'dti' ( in 3-component vector of uint)
+0:150                  Constant:
+0:150                    0 (const int)
+0:150              Constant:
+0:150                3 (const int)
+0:150            Constant:
+0:150              0 (const int)
+0:151      move second child to first child ( temp 2-component vector of double)
+0:151        vector swizzle ( temp 2-component vector of double)
+0:151          d: direct index for structure ( temp 4-component vector of double)
+0:151            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:151              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:151                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:151                Constant:
+0:151                  0 (const uint)
+0:151              direct index ( temp uint)
+0:151                'dti' ( in 3-component vector of uint)
+0:151                Constant:
+0:151                  0 (const int)
+0:151            Constant:
+0:151              3 (const int)
+0:151          Sequence
+0:151            Constant:
+0:151              0 (const int)
+0:151            Constant:
+0:151              1 (const int)
+0:151        subgroupQuadSwapDiagonal ( temp 2-component vector of double)
+0:151          vector swizzle ( temp 2-component vector of double)
+0:151            d: direct index for structure ( temp 4-component vector of double)
+0:151              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:151                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:151                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:151                  Constant:
+0:151                    0 (const uint)
+0:151                direct index ( temp uint)
+0:151                  'dti' ( in 3-component vector of uint)
+0:151                  Constant:
+0:151                    0 (const int)
+0:151              Constant:
+0:151                3 (const int)
+0:151            Sequence
+0:151              Constant:
+0:151                0 (const int)
+0:151              Constant:
+0:151                1 (const int)
+0:152      move second child to first child ( temp 3-component vector of double)
+0:152        vector swizzle ( temp 3-component vector of double)
+0:152          d: direct index for structure ( temp 4-component vector of double)
+0:152            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:152              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:152                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:152                Constant:
+0:152                  0 (const uint)
+0:152              direct index ( temp uint)
+0:152                'dti' ( in 3-component vector of uint)
+0:152                Constant:
+0:152                  0 (const int)
+0:152            Constant:
+0:152              3 (const int)
+0:152          Sequence
+0:152            Constant:
+0:152              0 (const int)
+0:152            Constant:
+0:152              1 (const int)
+0:152            Constant:
+0:152              2 (const int)
+0:152        subgroupQuadSwapDiagonal ( temp 3-component vector of double)
+0:152          vector swizzle ( temp 3-component vector of double)
+0:152            d: direct index for structure ( temp 4-component vector of double)
+0:152              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:152                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:152                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:152                  Constant:
+0:152                    0 (const uint)
+0:152                direct index ( temp uint)
+0:152                  'dti' ( in 3-component vector of uint)
+0:152                  Constant:
+0:152                    0 (const int)
+0:152              Constant:
+0:152                3 (const int)
+0:152            Sequence
+0:152              Constant:
+0:152                0 (const int)
+0:152              Constant:
+0:152                1 (const int)
+0:152              Constant:
+0:152                2 (const int)
+0:13  Function Definition: CSMain( ( temp void)
+0:13    Function Parameters: 
+0:?     Sequence
+0:13      move second child to first child ( temp 3-component vector of uint)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?         'dti' ( in 3-component vector of uint GlobalInvocationID)
+0:13      Function Call: @CSMain(vu3; ( temp void)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?   Linker Objects
+0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
+
+
+Linked compute stage:
+
+
+Shader version: 500
+local_size = (32, 16, 1)
+0:? Sequence
+0:13  Function Definition: @CSMain(vu3; ( temp void)
+0:13    Function Parameters: 
+0:13      'dti' ( in 3-component vector of uint)
+0:?     Sequence
+0:14      move second child to first child ( temp 4-component vector of uint)
+0:14        u: direct index for structure ( temp 4-component vector of uint)
+0:14          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:14              Constant:
+0:14                0 (const uint)
+0:14            direct index ( temp uint)
+0:14              'dti' ( in 3-component vector of uint)
+0:14              Constant:
+0:14                0 (const int)
+0:14          Constant:
+0:14            0 (const int)
+0:14        subgroupQuadBroadcast ( temp 4-component vector of uint)
+0:14          u: direct index for structure ( temp 4-component vector of uint)
+0:14            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:14                Constant:
+0:14                  0 (const uint)
+0:14              direct index ( temp uint)
+0:14                'dti' ( in 3-component vector of uint)
+0:14                Constant:
+0:14                  0 (const int)
+0:14            Constant:
+0:14              0 (const int)
+0:14          Constant:
+0:14            0 (const uint)
+0:15      move second child to first child ( temp uint)
+0:15        direct index ( temp uint)
+0:15          u: direct index for structure ( temp 4-component vector of uint)
+0:15            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:15                Constant:
+0:15                  0 (const uint)
+0:15              direct index ( temp uint)
+0:15                'dti' ( in 3-component vector of uint)
+0:15                Constant:
+0:15                  0 (const int)
+0:15            Constant:
+0:15              0 (const int)
+0:15          Constant:
+0:15            0 (const int)
+0:15        subgroupQuadBroadcast ( temp uint)
+0:15          direct index ( temp uint)
+0:15            u: direct index for structure ( temp 4-component vector of uint)
+0:15              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:15                  Constant:
+0:15                    0 (const uint)
+0:15                direct index ( temp uint)
+0:15                  'dti' ( in 3-component vector of uint)
+0:15                  Constant:
+0:15                    0 (const int)
+0:15              Constant:
+0:15                0 (const int)
+0:15            Constant:
+0:15              0 (const int)
+0:15          Constant:
+0:15            0 (const uint)
+0:16      move second child to first child ( temp 2-component vector of uint)
+0:16        vector swizzle ( temp 2-component vector of uint)
+0:16          u: direct index for structure ( temp 4-component vector of uint)
+0:16            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:16                Constant:
+0:16                  0 (const uint)
+0:16              direct index ( temp uint)
+0:16                'dti' ( in 3-component vector of uint)
+0:16                Constant:
+0:16                  0 (const int)
+0:16            Constant:
+0:16              0 (const int)
+0:16          Sequence
+0:16            Constant:
+0:16              0 (const int)
+0:16            Constant:
+0:16              1 (const int)
+0:16        subgroupQuadBroadcast ( temp 2-component vector of uint)
+0:16          vector swizzle ( temp 2-component vector of uint)
+0:16            u: direct index for structure ( temp 4-component vector of uint)
+0:16              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:16                  Constant:
+0:16                    0 (const uint)
+0:16                direct index ( temp uint)
+0:16                  'dti' ( in 3-component vector of uint)
+0:16                  Constant:
+0:16                    0 (const int)
+0:16              Constant:
+0:16                0 (const int)
+0:16            Sequence
+0:16              Constant:
+0:16                0 (const int)
+0:16              Constant:
+0:16                1 (const int)
+0:16          Constant:
+0:16            0 (const uint)
+0:17      move second child to first child ( temp 3-component vector of uint)
+0:17        vector swizzle ( temp 3-component vector of uint)
+0:17          u: direct index for structure ( temp 4-component vector of uint)
+0:17            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:17                Constant:
+0:17                  0 (const uint)
+0:17              direct index ( temp uint)
+0:17                'dti' ( in 3-component vector of uint)
+0:17                Constant:
+0:17                  0 (const int)
+0:17            Constant:
+0:17              0 (const int)
+0:17          Sequence
+0:17            Constant:
+0:17              0 (const int)
+0:17            Constant:
+0:17              1 (const int)
+0:17            Constant:
+0:17              2 (const int)
+0:17        subgroupQuadBroadcast ( temp 3-component vector of uint)
+0:17          vector swizzle ( temp 3-component vector of uint)
+0:17            u: direct index for structure ( temp 4-component vector of uint)
+0:17              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:17                  Constant:
+0:17                    0 (const uint)
+0:17                direct index ( temp uint)
+0:17                  'dti' ( in 3-component vector of uint)
+0:17                  Constant:
+0:17                    0 (const int)
+0:17              Constant:
+0:17                0 (const int)
+0:17            Sequence
+0:17              Constant:
+0:17                0 (const int)
+0:17              Constant:
+0:17                1 (const int)
+0:17              Constant:
+0:17                2 (const int)
+0:17          Constant:
+0:17            0 (const uint)
+0:19      move second child to first child ( temp 4-component vector of int)
+0:19        i: direct index for structure ( temp 4-component vector of int)
+0:19          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:19              Constant:
+0:19                0 (const uint)
+0:19            direct index ( temp uint)
+0:19              'dti' ( in 3-component vector of uint)
+0:19              Constant:
+0:19                0 (const int)
+0:19          Constant:
+0:19            1 (const int)
+0:19        subgroupQuadBroadcast ( temp 4-component vector of int)
+0:19          i: direct index for structure ( temp 4-component vector of int)
+0:19            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:19                Constant:
+0:19                  0 (const uint)
+0:19              direct index ( temp uint)
+0:19                'dti' ( in 3-component vector of uint)
+0:19                Constant:
+0:19                  0 (const int)
+0:19            Constant:
+0:19              1 (const int)
+0:19          Constant:
+0:19            0 (const uint)
+0:20      move second child to first child ( temp int)
+0:20        direct index ( temp int)
+0:20          i: direct index for structure ( temp 4-component vector of int)
+0:20            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:20                Constant:
+0:20                  0 (const uint)
+0:20              direct index ( temp uint)
+0:20                'dti' ( in 3-component vector of uint)
+0:20                Constant:
+0:20                  0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20          Constant:
+0:20            0 (const int)
+0:20        subgroupQuadBroadcast ( temp int)
+0:20          direct index ( temp int)
+0:20            i: direct index for structure ( temp 4-component vector of int)
+0:20              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:20                  Constant:
+0:20                    0 (const uint)
+0:20                direct index ( temp uint)
+0:20                  'dti' ( in 3-component vector of uint)
+0:20                  Constant:
+0:20                    0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20            Constant:
+0:20              0 (const int)
+0:20          Constant:
+0:20            0 (const uint)
+0:21      move second child to first child ( temp 2-component vector of int)
+0:21        vector swizzle ( temp 2-component vector of int)
+0:21          i: direct index for structure ( temp 4-component vector of int)
+0:21            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:21                Constant:
+0:21                  0 (const uint)
+0:21              direct index ( temp uint)
+0:21                'dti' ( in 3-component vector of uint)
+0:21                Constant:
+0:21                  0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21          Sequence
+0:21            Constant:
+0:21              0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21        subgroupQuadBroadcast ( temp 2-component vector of int)
+0:21          vector swizzle ( temp 2-component vector of int)
+0:21            i: direct index for structure ( temp 4-component vector of int)
+0:21              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:21                  Constant:
+0:21                    0 (const uint)
+0:21                direct index ( temp uint)
+0:21                  'dti' ( in 3-component vector of uint)
+0:21                  Constant:
+0:21                    0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21            Sequence
+0:21              Constant:
+0:21                0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21          Constant:
+0:21            0 (const uint)
+0:22      move second child to first child ( temp 3-component vector of int)
+0:22        vector swizzle ( temp 3-component vector of int)
+0:22          i: direct index for structure ( temp 4-component vector of int)
+0:22            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:22                Constant:
+0:22                  0 (const uint)
+0:22              direct index ( temp uint)
+0:22                'dti' ( in 3-component vector of uint)
+0:22                Constant:
+0:22                  0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22          Sequence
+0:22            Constant:
+0:22              0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22            Constant:
+0:22              2 (const int)
+0:22        subgroupQuadBroadcast ( temp 3-component vector of int)
+0:22          vector swizzle ( temp 3-component vector of int)
+0:22            i: direct index for structure ( temp 4-component vector of int)
+0:22              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:22                  Constant:
+0:22                    0 (const uint)
+0:22                direct index ( temp uint)
+0:22                  'dti' ( in 3-component vector of uint)
+0:22                  Constant:
+0:22                    0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22            Sequence
+0:22              Constant:
+0:22                0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22              Constant:
+0:22                2 (const int)
+0:22          Constant:
+0:22            0 (const uint)
+0:24      move second child to first child ( temp 4-component vector of float)
+0:24        f: direct index for structure ( temp 4-component vector of float)
+0:24          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:24              Constant:
+0:24                0 (const uint)
+0:24            direct index ( temp uint)
+0:24              'dti' ( in 3-component vector of uint)
+0:24              Constant:
+0:24                0 (const int)
+0:24          Constant:
+0:24            2 (const int)
+0:24        subgroupQuadBroadcast ( temp 4-component vector of float)
+0:24          f: direct index for structure ( temp 4-component vector of float)
+0:24            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:24                Constant:
+0:24                  0 (const uint)
+0:24              direct index ( temp uint)
+0:24                'dti' ( in 3-component vector of uint)
+0:24                Constant:
+0:24                  0 (const int)
+0:24            Constant:
+0:24              2 (const int)
+0:24          Constant:
+0:24            0 (const uint)
+0:25      move second child to first child ( temp float)
+0:25        direct index ( temp float)
+0:25          f: direct index for structure ( temp 4-component vector of float)
+0:25            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:25                Constant:
+0:25                  0 (const uint)
+0:25              direct index ( temp uint)
+0:25                'dti' ( in 3-component vector of uint)
+0:25                Constant:
+0:25                  0 (const int)
+0:25            Constant:
+0:25              2 (const int)
+0:25          Constant:
+0:25            0 (const int)
+0:25        subgroupQuadBroadcast ( temp float)
+0:25          direct index ( temp float)
+0:25            f: direct index for structure ( temp 4-component vector of float)
+0:25              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:25                  Constant:
+0:25                    0 (const uint)
+0:25                direct index ( temp uint)
+0:25                  'dti' ( in 3-component vector of uint)
+0:25                  Constant:
+0:25                    0 (const int)
+0:25              Constant:
+0:25                2 (const int)
+0:25            Constant:
+0:25              0 (const int)
+0:25          Constant:
+0:25            0 (const uint)
+0:26      move second child to first child ( temp 2-component vector of float)
+0:26        vector swizzle ( temp 2-component vector of float)
+0:26          f: direct index for structure ( temp 4-component vector of float)
+0:26            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:26                Constant:
+0:26                  0 (const uint)
+0:26              direct index ( temp uint)
+0:26                'dti' ( in 3-component vector of uint)
+0:26                Constant:
+0:26                  0 (const int)
+0:26            Constant:
+0:26              2 (const int)
+0:26          Sequence
+0:26            Constant:
+0:26              0 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26        subgroupQuadBroadcast ( temp 2-component vector of float)
+0:26          vector swizzle ( temp 2-component vector of float)
+0:26            f: direct index for structure ( temp 4-component vector of float)
+0:26              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:26                  Constant:
+0:26                    0 (const uint)
+0:26                direct index ( temp uint)
+0:26                  'dti' ( in 3-component vector of uint)
+0:26                  Constant:
+0:26                    0 (const int)
+0:26              Constant:
+0:26                2 (const int)
+0:26            Sequence
+0:26              Constant:
+0:26                0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26          Constant:
+0:26            0 (const uint)
+0:27      move second child to first child ( temp 3-component vector of float)
+0:27        vector swizzle ( temp 3-component vector of float)
+0:27          f: direct index for structure ( temp 4-component vector of float)
+0:27            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:27                Constant:
+0:27                  0 (const uint)
+0:27              direct index ( temp uint)
+0:27                'dti' ( in 3-component vector of uint)
+0:27                Constant:
+0:27                  0 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27          Sequence
+0:27            Constant:
+0:27              0 (const int)
+0:27            Constant:
+0:27              1 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27        subgroupQuadBroadcast ( temp 3-component vector of float)
+0:27          vector swizzle ( temp 3-component vector of float)
+0:27            f: direct index for structure ( temp 4-component vector of float)
+0:27              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:27                  Constant:
+0:27                    0 (const uint)
+0:27                direct index ( temp uint)
+0:27                  'dti' ( in 3-component vector of uint)
+0:27                  Constant:
+0:27                    0 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:27            Sequence
+0:27              Constant:
+0:27                0 (const int)
+0:27              Constant:
+0:27                1 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:27          Constant:
+0:27            0 (const uint)
+0:29      move second child to first child ( temp 4-component vector of double)
+0:29        d: direct index for structure ( temp 4-component vector of double)
+0:29          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:29              Constant:
+0:29                0 (const uint)
+0:29            direct index ( temp uint)
+0:29              'dti' ( in 3-component vector of uint)
+0:29              Constant:
+0:29                0 (const int)
+0:29          Constant:
+0:29            3 (const int)
+0:29        subgroupQuadBroadcast ( temp 4-component vector of double)
+0:29          d: direct index for structure ( temp 4-component vector of double)
+0:29            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:29                Constant:
+0:29                  0 (const uint)
+0:29              direct index ( temp uint)
+0:29                'dti' ( in 3-component vector of uint)
+0:29                Constant:
+0:29                  0 (const int)
+0:29            Constant:
+0:29              3 (const int)
+0:29          Constant:
+0:29            0 (const uint)
+0:30      move second child to first child ( temp double)
+0:30        direct index ( temp double)
+0:30          d: direct index for structure ( temp 4-component vector of double)
+0:30            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:30                Constant:
+0:30                  0 (const uint)
+0:30              direct index ( temp uint)
+0:30                'dti' ( in 3-component vector of uint)
+0:30                Constant:
+0:30                  0 (const int)
+0:30            Constant:
+0:30              3 (const int)
+0:30          Constant:
+0:30            0 (const int)
+0:30        subgroupQuadBroadcast ( temp double)
+0:30          direct index ( temp double)
+0:30            d: direct index for structure ( temp 4-component vector of double)
+0:30              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:30                  Constant:
+0:30                    0 (const uint)
+0:30                direct index ( temp uint)
+0:30                  'dti' ( in 3-component vector of uint)
+0:30                  Constant:
+0:30                    0 (const int)
+0:30              Constant:
+0:30                3 (const int)
+0:30            Constant:
+0:30              0 (const int)
+0:30          Constant:
+0:30            0 (const uint)
+0:31      move second child to first child ( temp 2-component vector of double)
+0:31        vector swizzle ( temp 2-component vector of double)
+0:31          d: direct index for structure ( temp 4-component vector of double)
+0:31            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:31                Constant:
+0:31                  0 (const uint)
+0:31              direct index ( temp uint)
+0:31                'dti' ( in 3-component vector of uint)
+0:31                Constant:
+0:31                  0 (const int)
+0:31            Constant:
+0:31              3 (const int)
+0:31          Sequence
+0:31            Constant:
+0:31              0 (const int)
+0:31            Constant:
+0:31              1 (const int)
+0:31        subgroupQuadBroadcast ( temp 2-component vector of double)
+0:31          vector swizzle ( temp 2-component vector of double)
+0:31            d: direct index for structure ( temp 4-component vector of double)
+0:31              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:31                  Constant:
+0:31                    0 (const uint)
+0:31                direct index ( temp uint)
+0:31                  'dti' ( in 3-component vector of uint)
+0:31                  Constant:
+0:31                    0 (const int)
+0:31              Constant:
+0:31                3 (const int)
+0:31            Sequence
+0:31              Constant:
+0:31                0 (const int)
+0:31              Constant:
+0:31                1 (const int)
+0:31          Constant:
+0:31            0 (const uint)
+0:32      move second child to first child ( temp 3-component vector of double)
+0:32        vector swizzle ( temp 3-component vector of double)
+0:32          d: direct index for structure ( temp 4-component vector of double)
+0:32            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:32                Constant:
+0:32                  0 (const uint)
+0:32              direct index ( temp uint)
+0:32                'dti' ( in 3-component vector of uint)
+0:32                Constant:
+0:32                  0 (const int)
+0:32            Constant:
+0:32              3 (const int)
+0:32          Sequence
+0:32            Constant:
+0:32              0 (const int)
+0:32            Constant:
+0:32              1 (const int)
+0:32            Constant:
+0:32              2 (const int)
+0:32        subgroupQuadBroadcast ( temp 3-component vector of double)
+0:32          vector swizzle ( temp 3-component vector of double)
+0:32            d: direct index for structure ( temp 4-component vector of double)
+0:32              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:32                  Constant:
+0:32                    0 (const uint)
+0:32                direct index ( temp uint)
+0:32                  'dti' ( in 3-component vector of uint)
+0:32                  Constant:
+0:32                    0 (const int)
+0:32              Constant:
+0:32                3 (const int)
+0:32            Sequence
+0:32              Constant:
+0:32                0 (const int)
+0:32              Constant:
+0:32                1 (const int)
+0:32              Constant:
+0:32                2 (const int)
+0:32          Constant:
+0:32            0 (const uint)
+0:34      move second child to first child ( temp 4-component vector of uint)
+0:34        u: direct index for structure ( temp 4-component vector of uint)
+0:34          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:34              Constant:
+0:34                0 (const uint)
+0:34            direct index ( temp uint)
+0:34              'dti' ( in 3-component vector of uint)
+0:34              Constant:
+0:34                0 (const int)
+0:34          Constant:
+0:34            0 (const int)
+0:34        subgroupQuadBroadcast ( temp 4-component vector of uint)
+0:34          u: direct index for structure ( temp 4-component vector of uint)
+0:34            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:34                Constant:
+0:34                  0 (const uint)
+0:34              direct index ( temp uint)
+0:34                'dti' ( in 3-component vector of uint)
+0:34                Constant:
+0:34                  0 (const int)
+0:34            Constant:
+0:34              0 (const int)
+0:34          Constant:
+0:34            1 (const uint)
+0:35      move second child to first child ( temp uint)
+0:35        direct index ( temp uint)
+0:35          u: direct index for structure ( temp 4-component vector of uint)
+0:35            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:35                Constant:
+0:35                  0 (const uint)
+0:35              direct index ( temp uint)
+0:35                'dti' ( in 3-component vector of uint)
+0:35                Constant:
+0:35                  0 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:35          Constant:
+0:35            0 (const int)
+0:35        subgroupQuadBroadcast ( temp uint)
+0:35          direct index ( temp uint)
+0:35            u: direct index for structure ( temp 4-component vector of uint)
+0:35              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:35                  Constant:
+0:35                    0 (const uint)
+0:35                direct index ( temp uint)
+0:35                  'dti' ( in 3-component vector of uint)
+0:35                  Constant:
+0:35                    0 (const int)
+0:35              Constant:
+0:35                0 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:35          Constant:
+0:35            1 (const uint)
+0:36      move second child to first child ( temp 2-component vector of uint)
+0:36        vector swizzle ( temp 2-component vector of uint)
+0:36          u: direct index for structure ( temp 4-component vector of uint)
+0:36            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:36                Constant:
+0:36                  0 (const uint)
+0:36              direct index ( temp uint)
+0:36                'dti' ( in 3-component vector of uint)
+0:36                Constant:
+0:36                  0 (const int)
+0:36            Constant:
+0:36              0 (const int)
+0:36          Sequence
+0:36            Constant:
+0:36              0 (const int)
+0:36            Constant:
+0:36              1 (const int)
+0:36        subgroupQuadBroadcast ( temp 2-component vector of uint)
+0:36          vector swizzle ( temp 2-component vector of uint)
+0:36            u: direct index for structure ( temp 4-component vector of uint)
+0:36              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:36                  Constant:
+0:36                    0 (const uint)
+0:36                direct index ( temp uint)
+0:36                  'dti' ( in 3-component vector of uint)
+0:36                  Constant:
+0:36                    0 (const int)
+0:36              Constant:
+0:36                0 (const int)
+0:36            Sequence
+0:36              Constant:
+0:36                0 (const int)
+0:36              Constant:
+0:36                1 (const int)
+0:36          Constant:
+0:36            1 (const uint)
+0:37      move second child to first child ( temp 3-component vector of uint)
+0:37        vector swizzle ( temp 3-component vector of uint)
+0:37          u: direct index for structure ( temp 4-component vector of uint)
+0:37            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:37                Constant:
+0:37                  0 (const uint)
+0:37              direct index ( temp uint)
+0:37                'dti' ( in 3-component vector of uint)
+0:37                Constant:
+0:37                  0 (const int)
+0:37            Constant:
+0:37              0 (const int)
+0:37          Sequence
+0:37            Constant:
+0:37              0 (const int)
+0:37            Constant:
+0:37              1 (const int)
+0:37            Constant:
+0:37              2 (const int)
+0:37        subgroupQuadBroadcast ( temp 3-component vector of uint)
+0:37          vector swizzle ( temp 3-component vector of uint)
+0:37            u: direct index for structure ( temp 4-component vector of uint)
+0:37              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:37                  Constant:
+0:37                    0 (const uint)
+0:37                direct index ( temp uint)
+0:37                  'dti' ( in 3-component vector of uint)
+0:37                  Constant:
+0:37                    0 (const int)
+0:37              Constant:
+0:37                0 (const int)
+0:37            Sequence
+0:37              Constant:
+0:37                0 (const int)
+0:37              Constant:
+0:37                1 (const int)
+0:37              Constant:
+0:37                2 (const int)
+0:37          Constant:
+0:37            1 (const uint)
+0:39      move second child to first child ( temp 4-component vector of int)
+0:39        i: direct index for structure ( temp 4-component vector of int)
+0:39          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:39              Constant:
+0:39                0 (const uint)
+0:39            direct index ( temp uint)
+0:39              'dti' ( in 3-component vector of uint)
+0:39              Constant:
+0:39                0 (const int)
+0:39          Constant:
+0:39            1 (const int)
+0:39        subgroupQuadBroadcast ( temp 4-component vector of int)
+0:39          i: direct index for structure ( temp 4-component vector of int)
+0:39            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:39                Constant:
+0:39                  0 (const uint)
+0:39              direct index ( temp uint)
+0:39                'dti' ( in 3-component vector of uint)
+0:39                Constant:
+0:39                  0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:39          Constant:
+0:39            1 (const uint)
+0:40      move second child to first child ( temp int)
+0:40        direct index ( temp int)
+0:40          i: direct index for structure ( temp 4-component vector of int)
+0:40            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:40                Constant:
+0:40                  0 (const uint)
+0:40              direct index ( temp uint)
+0:40                'dti' ( in 3-component vector of uint)
+0:40                Constant:
+0:40                  0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40          Constant:
+0:40            0 (const int)
+0:40        subgroupQuadBroadcast ( temp int)
+0:40          direct index ( temp int)
+0:40            i: direct index for structure ( temp 4-component vector of int)
+0:40              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:40                  Constant:
+0:40                    0 (const uint)
+0:40                direct index ( temp uint)
+0:40                  'dti' ( in 3-component vector of uint)
+0:40                  Constant:
+0:40                    0 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40            Constant:
+0:40              0 (const int)
+0:40          Constant:
+0:40            1 (const uint)
+0:41      move second child to first child ( temp 2-component vector of int)
+0:41        vector swizzle ( temp 2-component vector of int)
+0:41          i: direct index for structure ( temp 4-component vector of int)
+0:41            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:41                Constant:
+0:41                  0 (const uint)
+0:41              direct index ( temp uint)
+0:41                'dti' ( in 3-component vector of uint)
+0:41                Constant:
+0:41                  0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41          Sequence
+0:41            Constant:
+0:41              0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41        subgroupQuadBroadcast ( temp 2-component vector of int)
+0:41          vector swizzle ( temp 2-component vector of int)
+0:41            i: direct index for structure ( temp 4-component vector of int)
+0:41              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:41                  Constant:
+0:41                    0 (const uint)
+0:41                direct index ( temp uint)
+0:41                  'dti' ( in 3-component vector of uint)
+0:41                  Constant:
+0:41                    0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:41            Sequence
+0:41              Constant:
+0:41                0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:41          Constant:
+0:41            1 (const uint)
+0:42      move second child to first child ( temp 3-component vector of int)
+0:42        vector swizzle ( temp 3-component vector of int)
+0:42          i: direct index for structure ( temp 4-component vector of int)
+0:42            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:42                Constant:
+0:42                  0 (const uint)
+0:42              direct index ( temp uint)
+0:42                'dti' ( in 3-component vector of uint)
+0:42                Constant:
+0:42                  0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42          Sequence
+0:42            Constant:
+0:42              0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42            Constant:
+0:42              2 (const int)
+0:42        subgroupQuadBroadcast ( temp 3-component vector of int)
+0:42          vector swizzle ( temp 3-component vector of int)
+0:42            i: direct index for structure ( temp 4-component vector of int)
+0:42              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:42                  Constant:
+0:42                    0 (const uint)
+0:42                direct index ( temp uint)
+0:42                  'dti' ( in 3-component vector of uint)
+0:42                  Constant:
+0:42                    0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42            Sequence
+0:42              Constant:
+0:42                0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42              Constant:
+0:42                2 (const int)
+0:42          Constant:
+0:42            1 (const uint)
+0:44      move second child to first child ( temp 4-component vector of float)
+0:44        f: direct index for structure ( temp 4-component vector of float)
+0:44          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:44              Constant:
+0:44                0 (const uint)
+0:44            direct index ( temp uint)
+0:44              'dti' ( in 3-component vector of uint)
+0:44              Constant:
+0:44                0 (const int)
+0:44          Constant:
+0:44            2 (const int)
+0:44        subgroupQuadBroadcast ( temp 4-component vector of float)
+0:44          f: direct index for structure ( temp 4-component vector of float)
+0:44            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:44                Constant:
+0:44                  0 (const uint)
+0:44              direct index ( temp uint)
+0:44                'dti' ( in 3-component vector of uint)
+0:44                Constant:
+0:44                  0 (const int)
+0:44            Constant:
+0:44              2 (const int)
+0:44          Constant:
+0:44            1 (const uint)
+0:45      move second child to first child ( temp float)
+0:45        direct index ( temp float)
+0:45          f: direct index for structure ( temp 4-component vector of float)
+0:45            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:45                Constant:
+0:45                  0 (const uint)
+0:45              direct index ( temp uint)
+0:45                'dti' ( in 3-component vector of uint)
+0:45                Constant:
+0:45                  0 (const int)
+0:45            Constant:
+0:45              2 (const int)
+0:45          Constant:
+0:45            0 (const int)
+0:45        subgroupQuadBroadcast ( temp float)
+0:45          direct index ( temp float)
+0:45            f: direct index for structure ( temp 4-component vector of float)
+0:45              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:45                  Constant:
+0:45                    0 (const uint)
+0:45                direct index ( temp uint)
+0:45                  'dti' ( in 3-component vector of uint)
+0:45                  Constant:
+0:45                    0 (const int)
+0:45              Constant:
+0:45                2 (const int)
+0:45            Constant:
+0:45              0 (const int)
+0:45          Constant:
+0:45            1 (const uint)
+0:46      move second child to first child ( temp 2-component vector of float)
+0:46        vector swizzle ( temp 2-component vector of float)
+0:46          f: direct index for structure ( temp 4-component vector of float)
+0:46            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:46                Constant:
+0:46                  0 (const uint)
+0:46              direct index ( temp uint)
+0:46                'dti' ( in 3-component vector of uint)
+0:46                Constant:
+0:46                  0 (const int)
+0:46            Constant:
+0:46              2 (const int)
+0:46          Sequence
+0:46            Constant:
+0:46              0 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46        subgroupQuadBroadcast ( temp 2-component vector of float)
+0:46          vector swizzle ( temp 2-component vector of float)
+0:46            f: direct index for structure ( temp 4-component vector of float)
+0:46              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:46                  Constant:
+0:46                    0 (const uint)
+0:46                direct index ( temp uint)
+0:46                  'dti' ( in 3-component vector of uint)
+0:46                  Constant:
+0:46                    0 (const int)
+0:46              Constant:
+0:46                2 (const int)
+0:46            Sequence
+0:46              Constant:
+0:46                0 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:46          Constant:
+0:46            1 (const uint)
+0:47      move second child to first child ( temp 3-component vector of float)
+0:47        vector swizzle ( temp 3-component vector of float)
+0:47          f: direct index for structure ( temp 4-component vector of float)
+0:47            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:47                Constant:
+0:47                  0 (const uint)
+0:47              direct index ( temp uint)
+0:47                'dti' ( in 3-component vector of uint)
+0:47                Constant:
+0:47                  0 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47          Sequence
+0:47            Constant:
+0:47              0 (const int)
+0:47            Constant:
+0:47              1 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47        subgroupQuadBroadcast ( temp 3-component vector of float)
+0:47          vector swizzle ( temp 3-component vector of float)
+0:47            f: direct index for structure ( temp 4-component vector of float)
+0:47              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:47                  Constant:
+0:47                    0 (const uint)
+0:47                direct index ( temp uint)
+0:47                  'dti' ( in 3-component vector of uint)
+0:47                  Constant:
+0:47                    0 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:47            Sequence
+0:47              Constant:
+0:47                0 (const int)
+0:47              Constant:
+0:47                1 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:47          Constant:
+0:47            1 (const uint)
+0:49      move second child to first child ( temp 4-component vector of double)
+0:49        d: direct index for structure ( temp 4-component vector of double)
+0:49          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:49              Constant:
+0:49                0 (const uint)
+0:49            direct index ( temp uint)
+0:49              'dti' ( in 3-component vector of uint)
+0:49              Constant:
+0:49                0 (const int)
+0:49          Constant:
+0:49            3 (const int)
+0:49        subgroupQuadBroadcast ( temp 4-component vector of double)
+0:49          d: direct index for structure ( temp 4-component vector of double)
+0:49            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:49                Constant:
+0:49                  0 (const uint)
+0:49              direct index ( temp uint)
+0:49                'dti' ( in 3-component vector of uint)
+0:49                Constant:
+0:49                  0 (const int)
+0:49            Constant:
+0:49              3 (const int)
+0:49          Constant:
+0:49            1 (const uint)
+0:50      move second child to first child ( temp double)
+0:50        direct index ( temp double)
+0:50          d: direct index for structure ( temp 4-component vector of double)
+0:50            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:50                Constant:
+0:50                  0 (const uint)
+0:50              direct index ( temp uint)
+0:50                'dti' ( in 3-component vector of uint)
+0:50                Constant:
+0:50                  0 (const int)
+0:50            Constant:
+0:50              3 (const int)
+0:50          Constant:
+0:50            0 (const int)
+0:50        subgroupQuadBroadcast ( temp double)
+0:50          direct index ( temp double)
+0:50            d: direct index for structure ( temp 4-component vector of double)
+0:50              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:50                  Constant:
+0:50                    0 (const uint)
+0:50                direct index ( temp uint)
+0:50                  'dti' ( in 3-component vector of uint)
+0:50                  Constant:
+0:50                    0 (const int)
+0:50              Constant:
+0:50                3 (const int)
+0:50            Constant:
+0:50              0 (const int)
+0:50          Constant:
+0:50            1 (const uint)
+0:51      move second child to first child ( temp 2-component vector of double)
+0:51        vector swizzle ( temp 2-component vector of double)
+0:51          d: direct index for structure ( temp 4-component vector of double)
+0:51            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:51                Constant:
+0:51                  0 (const uint)
+0:51              direct index ( temp uint)
+0:51                'dti' ( in 3-component vector of uint)
+0:51                Constant:
+0:51                  0 (const int)
+0:51            Constant:
+0:51              3 (const int)
+0:51          Sequence
+0:51            Constant:
+0:51              0 (const int)
+0:51            Constant:
+0:51              1 (const int)
+0:51        subgroupQuadBroadcast ( temp 2-component vector of double)
+0:51          vector swizzle ( temp 2-component vector of double)
+0:51            d: direct index for structure ( temp 4-component vector of double)
+0:51              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:51                  Constant:
+0:51                    0 (const uint)
+0:51                direct index ( temp uint)
+0:51                  'dti' ( in 3-component vector of uint)
+0:51                  Constant:
+0:51                    0 (const int)
+0:51              Constant:
+0:51                3 (const int)
+0:51            Sequence
+0:51              Constant:
+0:51                0 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:51          Constant:
+0:51            1 (const uint)
+0:52      move second child to first child ( temp 3-component vector of double)
+0:52        vector swizzle ( temp 3-component vector of double)
+0:52          d: direct index for structure ( temp 4-component vector of double)
+0:52            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:52                Constant:
+0:52                  0 (const uint)
+0:52              direct index ( temp uint)
+0:52                'dti' ( in 3-component vector of uint)
+0:52                Constant:
+0:52                  0 (const int)
+0:52            Constant:
+0:52              3 (const int)
+0:52          Sequence
+0:52            Constant:
+0:52              0 (const int)
+0:52            Constant:
+0:52              1 (const int)
+0:52            Constant:
+0:52              2 (const int)
+0:52        subgroupQuadBroadcast ( temp 3-component vector of double)
+0:52          vector swizzle ( temp 3-component vector of double)
+0:52            d: direct index for structure ( temp 4-component vector of double)
+0:52              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:52                  Constant:
+0:52                    0 (const uint)
+0:52                direct index ( temp uint)
+0:52                  'dti' ( in 3-component vector of uint)
+0:52                  Constant:
+0:52                    0 (const int)
+0:52              Constant:
+0:52                3 (const int)
+0:52            Sequence
+0:52              Constant:
+0:52                0 (const int)
+0:52              Constant:
+0:52                1 (const int)
+0:52              Constant:
+0:52                2 (const int)
+0:52          Constant:
+0:52            1 (const uint)
+0:54      move second child to first child ( temp 4-component vector of uint)
+0:54        u: direct index for structure ( temp 4-component vector of uint)
+0:54          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:54              Constant:
+0:54                0 (const uint)
+0:54            direct index ( temp uint)
+0:54              'dti' ( in 3-component vector of uint)
+0:54              Constant:
+0:54                0 (const int)
+0:54          Constant:
+0:54            0 (const int)
+0:54        subgroupQuadBroadcast ( temp 4-component vector of uint)
+0:54          u: direct index for structure ( temp 4-component vector of uint)
+0:54            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:54                Constant:
+0:54                  0 (const uint)
+0:54              direct index ( temp uint)
+0:54                'dti' ( in 3-component vector of uint)
+0:54                Constant:
+0:54                  0 (const int)
+0:54            Constant:
+0:54              0 (const int)
+0:54          Constant:
+0:54            2 (const uint)
+0:55      move second child to first child ( temp uint)
+0:55        direct index ( temp uint)
+0:55          u: direct index for structure ( temp 4-component vector of uint)
+0:55            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:55              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:55                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:55                Constant:
+0:55                  0 (const uint)
+0:55              direct index ( temp uint)
+0:55                'dti' ( in 3-component vector of uint)
+0:55                Constant:
+0:55                  0 (const int)
+0:55            Constant:
+0:55              0 (const int)
+0:55          Constant:
+0:55            0 (const int)
+0:55        subgroupQuadBroadcast ( temp uint)
+0:55          direct index ( temp uint)
+0:55            u: direct index for structure ( temp 4-component vector of uint)
+0:55              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:55                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:55                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:55                  Constant:
+0:55                    0 (const uint)
+0:55                direct index ( temp uint)
+0:55                  'dti' ( in 3-component vector of uint)
+0:55                  Constant:
+0:55                    0 (const int)
+0:55              Constant:
+0:55                0 (const int)
+0:55            Constant:
+0:55              0 (const int)
+0:55          Constant:
+0:55            2 (const uint)
+0:56      move second child to first child ( temp 2-component vector of uint)
+0:56        vector swizzle ( temp 2-component vector of uint)
+0:56          u: direct index for structure ( temp 4-component vector of uint)
+0:56            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:56              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:56                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:56                Constant:
+0:56                  0 (const uint)
+0:56              direct index ( temp uint)
+0:56                'dti' ( in 3-component vector of uint)
+0:56                Constant:
+0:56                  0 (const int)
+0:56            Constant:
+0:56              0 (const int)
+0:56          Sequence
+0:56            Constant:
+0:56              0 (const int)
+0:56            Constant:
+0:56              1 (const int)
+0:56        subgroupQuadBroadcast ( temp 2-component vector of uint)
+0:56          vector swizzle ( temp 2-component vector of uint)
+0:56            u: direct index for structure ( temp 4-component vector of uint)
+0:56              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:56                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:56                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:56                  Constant:
+0:56                    0 (const uint)
+0:56                direct index ( temp uint)
+0:56                  'dti' ( in 3-component vector of uint)
+0:56                  Constant:
+0:56                    0 (const int)
+0:56              Constant:
+0:56                0 (const int)
+0:56            Sequence
+0:56              Constant:
+0:56                0 (const int)
+0:56              Constant:
+0:56                1 (const int)
+0:56          Constant:
+0:56            2 (const uint)
+0:57      move second child to first child ( temp 3-component vector of uint)
+0:57        vector swizzle ( temp 3-component vector of uint)
+0:57          u: direct index for structure ( temp 4-component vector of uint)
+0:57            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:57              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:57                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:57                Constant:
+0:57                  0 (const uint)
+0:57              direct index ( temp uint)
+0:57                'dti' ( in 3-component vector of uint)
+0:57                Constant:
+0:57                  0 (const int)
+0:57            Constant:
+0:57              0 (const int)
+0:57          Sequence
+0:57            Constant:
+0:57              0 (const int)
+0:57            Constant:
+0:57              1 (const int)
+0:57            Constant:
+0:57              2 (const int)
+0:57        subgroupQuadBroadcast ( temp 3-component vector of uint)
+0:57          vector swizzle ( temp 3-component vector of uint)
+0:57            u: direct index for structure ( temp 4-component vector of uint)
+0:57              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:57                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:57                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:57                  Constant:
+0:57                    0 (const uint)
+0:57                direct index ( temp uint)
+0:57                  'dti' ( in 3-component vector of uint)
+0:57                  Constant:
+0:57                    0 (const int)
+0:57              Constant:
+0:57                0 (const int)
+0:57            Sequence
+0:57              Constant:
+0:57                0 (const int)
+0:57              Constant:
+0:57                1 (const int)
+0:57              Constant:
+0:57                2 (const int)
+0:57          Constant:
+0:57            2 (const uint)
+0:59      move second child to first child ( temp 4-component vector of int)
+0:59        i: direct index for structure ( temp 4-component vector of int)
+0:59          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:59            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:59              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:59              Constant:
+0:59                0 (const uint)
+0:59            direct index ( temp uint)
+0:59              'dti' ( in 3-component vector of uint)
+0:59              Constant:
+0:59                0 (const int)
+0:59          Constant:
+0:59            1 (const int)
+0:59        subgroupQuadBroadcast ( temp 4-component vector of int)
+0:59          i: direct index for structure ( temp 4-component vector of int)
+0:59            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:59              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:59                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:59                Constant:
+0:59                  0 (const uint)
+0:59              direct index ( temp uint)
+0:59                'dti' ( in 3-component vector of uint)
+0:59                Constant:
+0:59                  0 (const int)
+0:59            Constant:
+0:59              1 (const int)
+0:59          Constant:
+0:59            2 (const uint)
+0:60      move second child to first child ( temp int)
+0:60        direct index ( temp int)
+0:60          i: direct index for structure ( temp 4-component vector of int)
+0:60            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:60              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:60                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:60                Constant:
+0:60                  0 (const uint)
+0:60              direct index ( temp uint)
+0:60                'dti' ( in 3-component vector of uint)
+0:60                Constant:
+0:60                  0 (const int)
+0:60            Constant:
+0:60              1 (const int)
+0:60          Constant:
+0:60            0 (const int)
+0:60        subgroupQuadBroadcast ( temp int)
+0:60          direct index ( temp int)
+0:60            i: direct index for structure ( temp 4-component vector of int)
+0:60              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:60                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:60                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:60                  Constant:
+0:60                    0 (const uint)
+0:60                direct index ( temp uint)
+0:60                  'dti' ( in 3-component vector of uint)
+0:60                  Constant:
+0:60                    0 (const int)
+0:60              Constant:
+0:60                1 (const int)
+0:60            Constant:
+0:60              0 (const int)
+0:60          Constant:
+0:60            2 (const uint)
+0:61      move second child to first child ( temp 2-component vector of int)
+0:61        vector swizzle ( temp 2-component vector of int)
+0:61          i: direct index for structure ( temp 4-component vector of int)
+0:61            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:61              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:61                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:61                Constant:
+0:61                  0 (const uint)
+0:61              direct index ( temp uint)
+0:61                'dti' ( in 3-component vector of uint)
+0:61                Constant:
+0:61                  0 (const int)
+0:61            Constant:
+0:61              1 (const int)
+0:61          Sequence
+0:61            Constant:
+0:61              0 (const int)
+0:61            Constant:
+0:61              1 (const int)
+0:61        subgroupQuadBroadcast ( temp 2-component vector of int)
+0:61          vector swizzle ( temp 2-component vector of int)
+0:61            i: direct index for structure ( temp 4-component vector of int)
+0:61              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:61                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:61                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:61                  Constant:
+0:61                    0 (const uint)
+0:61                direct index ( temp uint)
+0:61                  'dti' ( in 3-component vector of uint)
+0:61                  Constant:
+0:61                    0 (const int)
+0:61              Constant:
+0:61                1 (const int)
+0:61            Sequence
+0:61              Constant:
+0:61                0 (const int)
+0:61              Constant:
+0:61                1 (const int)
+0:61          Constant:
+0:61            2 (const uint)
+0:62      move second child to first child ( temp 3-component vector of int)
+0:62        vector swizzle ( temp 3-component vector of int)
+0:62          i: direct index for structure ( temp 4-component vector of int)
+0:62            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:62              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:62                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:62                Constant:
+0:62                  0 (const uint)
+0:62              direct index ( temp uint)
+0:62                'dti' ( in 3-component vector of uint)
+0:62                Constant:
+0:62                  0 (const int)
+0:62            Constant:
+0:62              1 (const int)
+0:62          Sequence
+0:62            Constant:
+0:62              0 (const int)
+0:62            Constant:
+0:62              1 (const int)
+0:62            Constant:
+0:62              2 (const int)
+0:62        subgroupQuadBroadcast ( temp 3-component vector of int)
+0:62          vector swizzle ( temp 3-component vector of int)
+0:62            i: direct index for structure ( temp 4-component vector of int)
+0:62              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:62                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:62                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:62                  Constant:
+0:62                    0 (const uint)
+0:62                direct index ( temp uint)
+0:62                  'dti' ( in 3-component vector of uint)
+0:62                  Constant:
+0:62                    0 (const int)
+0:62              Constant:
+0:62                1 (const int)
+0:62            Sequence
+0:62              Constant:
+0:62                0 (const int)
+0:62              Constant:
+0:62                1 (const int)
+0:62              Constant:
+0:62                2 (const int)
+0:62          Constant:
+0:62            2 (const uint)
+0:64      move second child to first child ( temp 4-component vector of float)
+0:64        f: direct index for structure ( temp 4-component vector of float)
+0:64          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:64            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:64              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:64              Constant:
+0:64                0 (const uint)
+0:64            direct index ( temp uint)
+0:64              'dti' ( in 3-component vector of uint)
+0:64              Constant:
+0:64                0 (const int)
+0:64          Constant:
+0:64            2 (const int)
+0:64        subgroupQuadBroadcast ( temp 4-component vector of float)
+0:64          f: direct index for structure ( temp 4-component vector of float)
+0:64            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:64              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:64                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:64                Constant:
+0:64                  0 (const uint)
+0:64              direct index ( temp uint)
+0:64                'dti' ( in 3-component vector of uint)
+0:64                Constant:
+0:64                  0 (const int)
+0:64            Constant:
+0:64              2 (const int)
+0:64          Constant:
+0:64            2 (const uint)
+0:65      move second child to first child ( temp float)
+0:65        direct index ( temp float)
+0:65          f: direct index for structure ( temp 4-component vector of float)
+0:65            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:65              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:65                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:65                Constant:
+0:65                  0 (const uint)
+0:65              direct index ( temp uint)
+0:65                'dti' ( in 3-component vector of uint)
+0:65                Constant:
+0:65                  0 (const int)
+0:65            Constant:
+0:65              2 (const int)
+0:65          Constant:
+0:65            0 (const int)
+0:65        subgroupQuadBroadcast ( temp float)
+0:65          direct index ( temp float)
+0:65            f: direct index for structure ( temp 4-component vector of float)
+0:65              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:65                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:65                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:65                  Constant:
+0:65                    0 (const uint)
+0:65                direct index ( temp uint)
+0:65                  'dti' ( in 3-component vector of uint)
+0:65                  Constant:
+0:65                    0 (const int)
+0:65              Constant:
+0:65                2 (const int)
+0:65            Constant:
+0:65              0 (const int)
+0:65          Constant:
+0:65            2 (const uint)
+0:66      move second child to first child ( temp 2-component vector of float)
+0:66        vector swizzle ( temp 2-component vector of float)
+0:66          f: direct index for structure ( temp 4-component vector of float)
+0:66            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:66              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:66                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:66                Constant:
+0:66                  0 (const uint)
+0:66              direct index ( temp uint)
+0:66                'dti' ( in 3-component vector of uint)
+0:66                Constant:
+0:66                  0 (const int)
+0:66            Constant:
+0:66              2 (const int)
+0:66          Sequence
+0:66            Constant:
+0:66              0 (const int)
+0:66            Constant:
+0:66              1 (const int)
+0:66        subgroupQuadBroadcast ( temp 2-component vector of float)
+0:66          vector swizzle ( temp 2-component vector of float)
+0:66            f: direct index for structure ( temp 4-component vector of float)
+0:66              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:66                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:66                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:66                  Constant:
+0:66                    0 (const uint)
+0:66                direct index ( temp uint)
+0:66                  'dti' ( in 3-component vector of uint)
+0:66                  Constant:
+0:66                    0 (const int)
+0:66              Constant:
+0:66                2 (const int)
+0:66            Sequence
+0:66              Constant:
+0:66                0 (const int)
+0:66              Constant:
+0:66                1 (const int)
+0:66          Constant:
+0:66            2 (const uint)
+0:67      move second child to first child ( temp 3-component vector of float)
+0:67        vector swizzle ( temp 3-component vector of float)
+0:67          f: direct index for structure ( temp 4-component vector of float)
+0:67            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:67              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:67                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:67                Constant:
+0:67                  0 (const uint)
+0:67              direct index ( temp uint)
+0:67                'dti' ( in 3-component vector of uint)
+0:67                Constant:
+0:67                  0 (const int)
+0:67            Constant:
+0:67              2 (const int)
+0:67          Sequence
+0:67            Constant:
+0:67              0 (const int)
+0:67            Constant:
+0:67              1 (const int)
+0:67            Constant:
+0:67              2 (const int)
+0:67        subgroupQuadBroadcast ( temp 3-component vector of float)
+0:67          vector swizzle ( temp 3-component vector of float)
+0:67            f: direct index for structure ( temp 4-component vector of float)
+0:67              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:67                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:67                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:67                  Constant:
+0:67                    0 (const uint)
+0:67                direct index ( temp uint)
+0:67                  'dti' ( in 3-component vector of uint)
+0:67                  Constant:
+0:67                    0 (const int)
+0:67              Constant:
+0:67                2 (const int)
+0:67            Sequence
+0:67              Constant:
+0:67                0 (const int)
+0:67              Constant:
+0:67                1 (const int)
+0:67              Constant:
+0:67                2 (const int)
+0:67          Constant:
+0:67            2 (const uint)
+0:69      move second child to first child ( temp 4-component vector of double)
+0:69        d: direct index for structure ( temp 4-component vector of double)
+0:69          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:69            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:69              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:69              Constant:
+0:69                0 (const uint)
+0:69            direct index ( temp uint)
+0:69              'dti' ( in 3-component vector of uint)
+0:69              Constant:
+0:69                0 (const int)
+0:69          Constant:
+0:69            3 (const int)
+0:69        subgroupQuadBroadcast ( temp 4-component vector of double)
+0:69          d: direct index for structure ( temp 4-component vector of double)
+0:69            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:69              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:69                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:69                Constant:
+0:69                  0 (const uint)
+0:69              direct index ( temp uint)
+0:69                'dti' ( in 3-component vector of uint)
+0:69                Constant:
+0:69                  0 (const int)
+0:69            Constant:
+0:69              3 (const int)
+0:69          Constant:
+0:69            2 (const uint)
+0:70      move second child to first child ( temp double)
+0:70        direct index ( temp double)
+0:70          d: direct index for structure ( temp 4-component vector of double)
+0:70            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:70              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:70                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:70                Constant:
+0:70                  0 (const uint)
+0:70              direct index ( temp uint)
+0:70                'dti' ( in 3-component vector of uint)
+0:70                Constant:
+0:70                  0 (const int)
+0:70            Constant:
+0:70              3 (const int)
+0:70          Constant:
+0:70            0 (const int)
+0:70        subgroupQuadBroadcast ( temp double)
+0:70          direct index ( temp double)
+0:70            d: direct index for structure ( temp 4-component vector of double)
+0:70              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:70                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:70                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:70                  Constant:
+0:70                    0 (const uint)
+0:70                direct index ( temp uint)
+0:70                  'dti' ( in 3-component vector of uint)
+0:70                  Constant:
+0:70                    0 (const int)
+0:70              Constant:
+0:70                3 (const int)
+0:70            Constant:
+0:70              0 (const int)
+0:70          Constant:
+0:70            2 (const uint)
+0:71      move second child to first child ( temp 2-component vector of double)
+0:71        vector swizzle ( temp 2-component vector of double)
+0:71          d: direct index for structure ( temp 4-component vector of double)
+0:71            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:71              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:71                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:71                Constant:
+0:71                  0 (const uint)
+0:71              direct index ( temp uint)
+0:71                'dti' ( in 3-component vector of uint)
+0:71                Constant:
+0:71                  0 (const int)
+0:71            Constant:
+0:71              3 (const int)
+0:71          Sequence
+0:71            Constant:
+0:71              0 (const int)
+0:71            Constant:
+0:71              1 (const int)
+0:71        subgroupQuadBroadcast ( temp 2-component vector of double)
+0:71          vector swizzle ( temp 2-component vector of double)
+0:71            d: direct index for structure ( temp 4-component vector of double)
+0:71              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:71                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:71                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:71                  Constant:
+0:71                    0 (const uint)
+0:71                direct index ( temp uint)
+0:71                  'dti' ( in 3-component vector of uint)
+0:71                  Constant:
+0:71                    0 (const int)
+0:71              Constant:
+0:71                3 (const int)
+0:71            Sequence
+0:71              Constant:
+0:71                0 (const int)
+0:71              Constant:
+0:71                1 (const int)
+0:71          Constant:
+0:71            2 (const uint)
+0:72      move second child to first child ( temp 3-component vector of double)
+0:72        vector swizzle ( temp 3-component vector of double)
+0:72          d: direct index for structure ( temp 4-component vector of double)
+0:72            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:72              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:72                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:72                Constant:
+0:72                  0 (const uint)
+0:72              direct index ( temp uint)
+0:72                'dti' ( in 3-component vector of uint)
+0:72                Constant:
+0:72                  0 (const int)
+0:72            Constant:
+0:72              3 (const int)
+0:72          Sequence
+0:72            Constant:
+0:72              0 (const int)
+0:72            Constant:
+0:72              1 (const int)
+0:72            Constant:
+0:72              2 (const int)
+0:72        subgroupQuadBroadcast ( temp 3-component vector of double)
+0:72          vector swizzle ( temp 3-component vector of double)
+0:72            d: direct index for structure ( temp 4-component vector of double)
+0:72              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:72                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:72                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:72                  Constant:
+0:72                    0 (const uint)
+0:72                direct index ( temp uint)
+0:72                  'dti' ( in 3-component vector of uint)
+0:72                  Constant:
+0:72                    0 (const int)
+0:72              Constant:
+0:72                3 (const int)
+0:72            Sequence
+0:72              Constant:
+0:72                0 (const int)
+0:72              Constant:
+0:72                1 (const int)
+0:72              Constant:
+0:72                2 (const int)
+0:72          Constant:
+0:72            2 (const uint)
+0:74      move second child to first child ( temp 4-component vector of uint)
+0:74        u: direct index for structure ( temp 4-component vector of uint)
+0:74          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:74            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:74              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:74              Constant:
+0:74                0 (const uint)
+0:74            direct index ( temp uint)
+0:74              'dti' ( in 3-component vector of uint)
+0:74              Constant:
+0:74                0 (const int)
+0:74          Constant:
+0:74            0 (const int)
+0:74        subgroupQuadBroadcast ( temp 4-component vector of uint)
+0:74          u: direct index for structure ( temp 4-component vector of uint)
+0:74            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:74              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:74                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:74                Constant:
+0:74                  0 (const uint)
+0:74              direct index ( temp uint)
+0:74                'dti' ( in 3-component vector of uint)
+0:74                Constant:
+0:74                  0 (const int)
+0:74            Constant:
+0:74              0 (const int)
+0:74          Constant:
+0:74            3 (const uint)
+0:75      move second child to first child ( temp uint)
+0:75        direct index ( temp uint)
+0:75          u: direct index for structure ( temp 4-component vector of uint)
+0:75            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:75              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:75                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:75                Constant:
+0:75                  0 (const uint)
+0:75              direct index ( temp uint)
+0:75                'dti' ( in 3-component vector of uint)
+0:75                Constant:
+0:75                  0 (const int)
+0:75            Constant:
+0:75              0 (const int)
+0:75          Constant:
+0:75            0 (const int)
+0:75        subgroupQuadBroadcast ( temp uint)
+0:75          direct index ( temp uint)
+0:75            u: direct index for structure ( temp 4-component vector of uint)
+0:75              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:75                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:75                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:75                  Constant:
+0:75                    0 (const uint)
+0:75                direct index ( temp uint)
+0:75                  'dti' ( in 3-component vector of uint)
+0:75                  Constant:
+0:75                    0 (const int)
+0:75              Constant:
+0:75                0 (const int)
+0:75            Constant:
+0:75              0 (const int)
+0:75          Constant:
+0:75            3 (const uint)
+0:76      move second child to first child ( temp 2-component vector of uint)
+0:76        vector swizzle ( temp 2-component vector of uint)
+0:76          u: direct index for structure ( temp 4-component vector of uint)
+0:76            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:76              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:76                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:76                Constant:
+0:76                  0 (const uint)
+0:76              direct index ( temp uint)
+0:76                'dti' ( in 3-component vector of uint)
+0:76                Constant:
+0:76                  0 (const int)
+0:76            Constant:
+0:76              0 (const int)
+0:76          Sequence
+0:76            Constant:
+0:76              0 (const int)
+0:76            Constant:
+0:76              1 (const int)
+0:76        subgroupQuadBroadcast ( temp 2-component vector of uint)
+0:76          vector swizzle ( temp 2-component vector of uint)
+0:76            u: direct index for structure ( temp 4-component vector of uint)
+0:76              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:76                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:76                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:76                  Constant:
+0:76                    0 (const uint)
+0:76                direct index ( temp uint)
+0:76                  'dti' ( in 3-component vector of uint)
+0:76                  Constant:
+0:76                    0 (const int)
+0:76              Constant:
+0:76                0 (const int)
+0:76            Sequence
+0:76              Constant:
+0:76                0 (const int)
+0:76              Constant:
+0:76                1 (const int)
+0:76          Constant:
+0:76            3 (const uint)
+0:77      move second child to first child ( temp 3-component vector of uint)
+0:77        vector swizzle ( temp 3-component vector of uint)
+0:77          u: direct index for structure ( temp 4-component vector of uint)
+0:77            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:77              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:77                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:77                Constant:
+0:77                  0 (const uint)
+0:77              direct index ( temp uint)
+0:77                'dti' ( in 3-component vector of uint)
+0:77                Constant:
+0:77                  0 (const int)
+0:77            Constant:
+0:77              0 (const int)
+0:77          Sequence
+0:77            Constant:
+0:77              0 (const int)
+0:77            Constant:
+0:77              1 (const int)
+0:77            Constant:
+0:77              2 (const int)
+0:77        subgroupQuadBroadcast ( temp 3-component vector of uint)
+0:77          vector swizzle ( temp 3-component vector of uint)
+0:77            u: direct index for structure ( temp 4-component vector of uint)
+0:77              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:77                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:77                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:77                  Constant:
+0:77                    0 (const uint)
+0:77                direct index ( temp uint)
+0:77                  'dti' ( in 3-component vector of uint)
+0:77                  Constant:
+0:77                    0 (const int)
+0:77              Constant:
+0:77                0 (const int)
+0:77            Sequence
+0:77              Constant:
+0:77                0 (const int)
+0:77              Constant:
+0:77                1 (const int)
+0:77              Constant:
+0:77                2 (const int)
+0:77          Constant:
+0:77            3 (const uint)
+0:79      move second child to first child ( temp 4-component vector of int)
+0:79        i: direct index for structure ( temp 4-component vector of int)
+0:79          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:79            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:79              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:79              Constant:
+0:79                0 (const uint)
+0:79            direct index ( temp uint)
+0:79              'dti' ( in 3-component vector of uint)
+0:79              Constant:
+0:79                0 (const int)
+0:79          Constant:
+0:79            1 (const int)
+0:79        subgroupQuadBroadcast ( temp 4-component vector of int)
+0:79          i: direct index for structure ( temp 4-component vector of int)
+0:79            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:79              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:79                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:79                Constant:
+0:79                  0 (const uint)
+0:79              direct index ( temp uint)
+0:79                'dti' ( in 3-component vector of uint)
+0:79                Constant:
+0:79                  0 (const int)
+0:79            Constant:
+0:79              1 (const int)
+0:79          Constant:
+0:79            3 (const uint)
+0:80      move second child to first child ( temp int)
+0:80        direct index ( temp int)
+0:80          i: direct index for structure ( temp 4-component vector of int)
+0:80            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:80              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:80                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:80                Constant:
+0:80                  0 (const uint)
+0:80              direct index ( temp uint)
+0:80                'dti' ( in 3-component vector of uint)
+0:80                Constant:
+0:80                  0 (const int)
+0:80            Constant:
+0:80              1 (const int)
+0:80          Constant:
+0:80            0 (const int)
+0:80        subgroupQuadBroadcast ( temp int)
+0:80          direct index ( temp int)
+0:80            i: direct index for structure ( temp 4-component vector of int)
+0:80              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:80                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:80                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:80                  Constant:
+0:80                    0 (const uint)
+0:80                direct index ( temp uint)
+0:80                  'dti' ( in 3-component vector of uint)
+0:80                  Constant:
+0:80                    0 (const int)
+0:80              Constant:
+0:80                1 (const int)
+0:80            Constant:
+0:80              0 (const int)
+0:80          Constant:
+0:80            3 (const uint)
+0:81      move second child to first child ( temp 2-component vector of int)
+0:81        vector swizzle ( temp 2-component vector of int)
+0:81          i: direct index for structure ( temp 4-component vector of int)
+0:81            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:81              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:81                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:81                Constant:
+0:81                  0 (const uint)
+0:81              direct index ( temp uint)
+0:81                'dti' ( in 3-component vector of uint)
+0:81                Constant:
+0:81                  0 (const int)
+0:81            Constant:
+0:81              1 (const int)
+0:81          Sequence
+0:81            Constant:
+0:81              0 (const int)
+0:81            Constant:
+0:81              1 (const int)
+0:81        subgroupQuadBroadcast ( temp 2-component vector of int)
+0:81          vector swizzle ( temp 2-component vector of int)
+0:81            i: direct index for structure ( temp 4-component vector of int)
+0:81              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:81                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:81                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:81                  Constant:
+0:81                    0 (const uint)
+0:81                direct index ( temp uint)
+0:81                  'dti' ( in 3-component vector of uint)
+0:81                  Constant:
+0:81                    0 (const int)
+0:81              Constant:
+0:81                1 (const int)
+0:81            Sequence
+0:81              Constant:
+0:81                0 (const int)
+0:81              Constant:
+0:81                1 (const int)
+0:81          Constant:
+0:81            3 (const uint)
+0:82      move second child to first child ( temp 3-component vector of int)
+0:82        vector swizzle ( temp 3-component vector of int)
+0:82          i: direct index for structure ( temp 4-component vector of int)
+0:82            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:82              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:82                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:82                Constant:
+0:82                  0 (const uint)
+0:82              direct index ( temp uint)
+0:82                'dti' ( in 3-component vector of uint)
+0:82                Constant:
+0:82                  0 (const int)
+0:82            Constant:
+0:82              1 (const int)
+0:82          Sequence
+0:82            Constant:
+0:82              0 (const int)
+0:82            Constant:
+0:82              1 (const int)
+0:82            Constant:
+0:82              2 (const int)
+0:82        subgroupQuadBroadcast ( temp 3-component vector of int)
+0:82          vector swizzle ( temp 3-component vector of int)
+0:82            i: direct index for structure ( temp 4-component vector of int)
+0:82              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:82                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:82                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:82                  Constant:
+0:82                    0 (const uint)
+0:82                direct index ( temp uint)
+0:82                  'dti' ( in 3-component vector of uint)
+0:82                  Constant:
+0:82                    0 (const int)
+0:82              Constant:
+0:82                1 (const int)
+0:82            Sequence
+0:82              Constant:
+0:82                0 (const int)
+0:82              Constant:
+0:82                1 (const int)
+0:82              Constant:
+0:82                2 (const int)
+0:82          Constant:
+0:82            3 (const uint)
+0:84      move second child to first child ( temp 4-component vector of float)
+0:84        f: direct index for structure ( temp 4-component vector of float)
+0:84          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:84            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:84              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:84              Constant:
+0:84                0 (const uint)
+0:84            direct index ( temp uint)
+0:84              'dti' ( in 3-component vector of uint)
+0:84              Constant:
+0:84                0 (const int)
+0:84          Constant:
+0:84            2 (const int)
+0:84        subgroupQuadBroadcast ( temp 4-component vector of float)
+0:84          f: direct index for structure ( temp 4-component vector of float)
+0:84            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:84              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:84                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:84                Constant:
+0:84                  0 (const uint)
+0:84              direct index ( temp uint)
+0:84                'dti' ( in 3-component vector of uint)
+0:84                Constant:
+0:84                  0 (const int)
+0:84            Constant:
+0:84              2 (const int)
+0:84          Constant:
+0:84            3 (const uint)
+0:85      move second child to first child ( temp float)
+0:85        direct index ( temp float)
+0:85          f: direct index for structure ( temp 4-component vector of float)
+0:85            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:85              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:85                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:85                Constant:
+0:85                  0 (const uint)
+0:85              direct index ( temp uint)
+0:85                'dti' ( in 3-component vector of uint)
+0:85                Constant:
+0:85                  0 (const int)
+0:85            Constant:
+0:85              2 (const int)
+0:85          Constant:
+0:85            0 (const int)
+0:85        subgroupQuadBroadcast ( temp float)
+0:85          direct index ( temp float)
+0:85            f: direct index for structure ( temp 4-component vector of float)
+0:85              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:85                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:85                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:85                  Constant:
+0:85                    0 (const uint)
+0:85                direct index ( temp uint)
+0:85                  'dti' ( in 3-component vector of uint)
+0:85                  Constant:
+0:85                    0 (const int)
+0:85              Constant:
+0:85                2 (const int)
+0:85            Constant:
+0:85              0 (const int)
+0:85          Constant:
+0:85            3 (const uint)
+0:86      move second child to first child ( temp 2-component vector of float)
+0:86        vector swizzle ( temp 2-component vector of float)
+0:86          f: direct index for structure ( temp 4-component vector of float)
+0:86            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:86              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:86                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:86                Constant:
+0:86                  0 (const uint)
+0:86              direct index ( temp uint)
+0:86                'dti' ( in 3-component vector of uint)
+0:86                Constant:
+0:86                  0 (const int)
+0:86            Constant:
+0:86              2 (const int)
+0:86          Sequence
+0:86            Constant:
+0:86              0 (const int)
+0:86            Constant:
+0:86              1 (const int)
+0:86        subgroupQuadBroadcast ( temp 2-component vector of float)
+0:86          vector swizzle ( temp 2-component vector of float)
+0:86            f: direct index for structure ( temp 4-component vector of float)
+0:86              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:86                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:86                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:86                  Constant:
+0:86                    0 (const uint)
+0:86                direct index ( temp uint)
+0:86                  'dti' ( in 3-component vector of uint)
+0:86                  Constant:
+0:86                    0 (const int)
+0:86              Constant:
+0:86                2 (const int)
+0:86            Sequence
+0:86              Constant:
+0:86                0 (const int)
+0:86              Constant:
+0:86                1 (const int)
+0:86          Constant:
+0:86            3 (const uint)
+0:87      move second child to first child ( temp 3-component vector of float)
+0:87        vector swizzle ( temp 3-component vector of float)
+0:87          f: direct index for structure ( temp 4-component vector of float)
+0:87            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:87              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:87                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:87                Constant:
+0:87                  0 (const uint)
+0:87              direct index ( temp uint)
+0:87                'dti' ( in 3-component vector of uint)
+0:87                Constant:
+0:87                  0 (const int)
+0:87            Constant:
+0:87              2 (const int)
+0:87          Sequence
+0:87            Constant:
+0:87              0 (const int)
+0:87            Constant:
+0:87              1 (const int)
+0:87            Constant:
+0:87              2 (const int)
+0:87        subgroupQuadBroadcast ( temp 3-component vector of float)
+0:87          vector swizzle ( temp 3-component vector of float)
+0:87            f: direct index for structure ( temp 4-component vector of float)
+0:87              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:87                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:87                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:87                  Constant:
+0:87                    0 (const uint)
+0:87                direct index ( temp uint)
+0:87                  'dti' ( in 3-component vector of uint)
+0:87                  Constant:
+0:87                    0 (const int)
+0:87              Constant:
+0:87                2 (const int)
+0:87            Sequence
+0:87              Constant:
+0:87                0 (const int)
+0:87              Constant:
+0:87                1 (const int)
+0:87              Constant:
+0:87                2 (const int)
+0:87          Constant:
+0:87            3 (const uint)
+0:89      move second child to first child ( temp 4-component vector of double)
+0:89        d: direct index for structure ( temp 4-component vector of double)
+0:89          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:89            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:89              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:89              Constant:
+0:89                0 (const uint)
+0:89            direct index ( temp uint)
+0:89              'dti' ( in 3-component vector of uint)
+0:89              Constant:
+0:89                0 (const int)
+0:89          Constant:
+0:89            3 (const int)
+0:89        subgroupQuadBroadcast ( temp 4-component vector of double)
+0:89          d: direct index for structure ( temp 4-component vector of double)
+0:89            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:89              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:89                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:89                Constant:
+0:89                  0 (const uint)
+0:89              direct index ( temp uint)
+0:89                'dti' ( in 3-component vector of uint)
+0:89                Constant:
+0:89                  0 (const int)
+0:89            Constant:
+0:89              3 (const int)
+0:89          Constant:
+0:89            3 (const uint)
+0:90      move second child to first child ( temp double)
+0:90        direct index ( temp double)
+0:90          d: direct index for structure ( temp 4-component vector of double)
+0:90            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:90              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:90                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:90                Constant:
+0:90                  0 (const uint)
+0:90              direct index ( temp uint)
+0:90                'dti' ( in 3-component vector of uint)
+0:90                Constant:
+0:90                  0 (const int)
+0:90            Constant:
+0:90              3 (const int)
+0:90          Constant:
+0:90            0 (const int)
+0:90        subgroupQuadBroadcast ( temp double)
+0:90          direct index ( temp double)
+0:90            d: direct index for structure ( temp 4-component vector of double)
+0:90              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:90                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:90                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:90                  Constant:
+0:90                    0 (const uint)
+0:90                direct index ( temp uint)
+0:90                  'dti' ( in 3-component vector of uint)
+0:90                  Constant:
+0:90                    0 (const int)
+0:90              Constant:
+0:90                3 (const int)
+0:90            Constant:
+0:90              0 (const int)
+0:90          Constant:
+0:90            3 (const uint)
+0:91      move second child to first child ( temp 2-component vector of double)
+0:91        vector swizzle ( temp 2-component vector of double)
+0:91          d: direct index for structure ( temp 4-component vector of double)
+0:91            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:91              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:91                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:91                Constant:
+0:91                  0 (const uint)
+0:91              direct index ( temp uint)
+0:91                'dti' ( in 3-component vector of uint)
+0:91                Constant:
+0:91                  0 (const int)
+0:91            Constant:
+0:91              3 (const int)
+0:91          Sequence
+0:91            Constant:
+0:91              0 (const int)
+0:91            Constant:
+0:91              1 (const int)
+0:91        subgroupQuadBroadcast ( temp 2-component vector of double)
+0:91          vector swizzle ( temp 2-component vector of double)
+0:91            d: direct index for structure ( temp 4-component vector of double)
+0:91              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:91                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:91                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:91                  Constant:
+0:91                    0 (const uint)
+0:91                direct index ( temp uint)
+0:91                  'dti' ( in 3-component vector of uint)
+0:91                  Constant:
+0:91                    0 (const int)
+0:91              Constant:
+0:91                3 (const int)
+0:91            Sequence
+0:91              Constant:
+0:91                0 (const int)
+0:91              Constant:
+0:91                1 (const int)
+0:91          Constant:
+0:91            3 (const uint)
+0:92      move second child to first child ( temp 3-component vector of double)
+0:92        vector swizzle ( temp 3-component vector of double)
+0:92          d: direct index for structure ( temp 4-component vector of double)
+0:92            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:92              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:92                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:92                Constant:
+0:92                  0 (const uint)
+0:92              direct index ( temp uint)
+0:92                'dti' ( in 3-component vector of uint)
+0:92                Constant:
+0:92                  0 (const int)
+0:92            Constant:
+0:92              3 (const int)
+0:92          Sequence
+0:92            Constant:
+0:92              0 (const int)
+0:92            Constant:
+0:92              1 (const int)
+0:92            Constant:
+0:92              2 (const int)
+0:92        subgroupQuadBroadcast ( temp 3-component vector of double)
+0:92          vector swizzle ( temp 3-component vector of double)
+0:92            d: direct index for structure ( temp 4-component vector of double)
+0:92              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:92                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:92                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:92                  Constant:
+0:92                    0 (const uint)
+0:92                direct index ( temp uint)
+0:92                  'dti' ( in 3-component vector of uint)
+0:92                  Constant:
+0:92                    0 (const int)
+0:92              Constant:
+0:92                3 (const int)
+0:92            Sequence
+0:92              Constant:
+0:92                0 (const int)
+0:92              Constant:
+0:92                1 (const int)
+0:92              Constant:
+0:92                2 (const int)
+0:92          Constant:
+0:92            3 (const uint)
+0:94      move second child to first child ( temp 4-component vector of uint)
+0:94        u: direct index for structure ( temp 4-component vector of uint)
+0:94          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:94            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:94              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:94              Constant:
+0:94                0 (const uint)
+0:94            direct index ( temp uint)
+0:94              'dti' ( in 3-component vector of uint)
+0:94              Constant:
+0:94                0 (const int)
+0:94          Constant:
+0:94            0 (const int)
+0:94        subgroupQuadSwapHorizontal ( temp 4-component vector of uint)
+0:94          u: direct index for structure ( temp 4-component vector of uint)
+0:94            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:94              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:94                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:94                Constant:
+0:94                  0 (const uint)
+0:94              direct index ( temp uint)
+0:94                'dti' ( in 3-component vector of uint)
+0:94                Constant:
+0:94                  0 (const int)
+0:94            Constant:
+0:94              0 (const int)
+0:95      move second child to first child ( temp uint)
+0:95        direct index ( temp uint)
+0:95          u: direct index for structure ( temp 4-component vector of uint)
+0:95            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:95              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:95                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:95                Constant:
+0:95                  0 (const uint)
+0:95              direct index ( temp uint)
+0:95                'dti' ( in 3-component vector of uint)
+0:95                Constant:
+0:95                  0 (const int)
+0:95            Constant:
+0:95              0 (const int)
+0:95          Constant:
+0:95            0 (const int)
+0:95        subgroupQuadSwapHorizontal ( temp uint)
+0:95          direct index ( temp uint)
+0:95            u: direct index for structure ( temp 4-component vector of uint)
+0:95              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:95                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:95                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:95                  Constant:
+0:95                    0 (const uint)
+0:95                direct index ( temp uint)
+0:95                  'dti' ( in 3-component vector of uint)
+0:95                  Constant:
+0:95                    0 (const int)
+0:95              Constant:
+0:95                0 (const int)
+0:95            Constant:
+0:95              0 (const int)
+0:96      move second child to first child ( temp 2-component vector of uint)
+0:96        vector swizzle ( temp 2-component vector of uint)
+0:96          u: direct index for structure ( temp 4-component vector of uint)
+0:96            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:96              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:96                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:96                Constant:
+0:96                  0 (const uint)
+0:96              direct index ( temp uint)
+0:96                'dti' ( in 3-component vector of uint)
+0:96                Constant:
+0:96                  0 (const int)
+0:96            Constant:
+0:96              0 (const int)
+0:96          Sequence
+0:96            Constant:
+0:96              0 (const int)
+0:96            Constant:
+0:96              1 (const int)
+0:96        subgroupQuadSwapHorizontal ( temp 2-component vector of uint)
+0:96          vector swizzle ( temp 2-component vector of uint)
+0:96            u: direct index for structure ( temp 4-component vector of uint)
+0:96              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:96                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:96                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:96                  Constant:
+0:96                    0 (const uint)
+0:96                direct index ( temp uint)
+0:96                  'dti' ( in 3-component vector of uint)
+0:96                  Constant:
+0:96                    0 (const int)
+0:96              Constant:
+0:96                0 (const int)
+0:96            Sequence
+0:96              Constant:
+0:96                0 (const int)
+0:96              Constant:
+0:96                1 (const int)
+0:97      move second child to first child ( temp 3-component vector of uint)
+0:97        vector swizzle ( temp 3-component vector of uint)
+0:97          u: direct index for structure ( temp 4-component vector of uint)
+0:97            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:97              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:97                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:97                Constant:
+0:97                  0 (const uint)
+0:97              direct index ( temp uint)
+0:97                'dti' ( in 3-component vector of uint)
+0:97                Constant:
+0:97                  0 (const int)
+0:97            Constant:
+0:97              0 (const int)
+0:97          Sequence
+0:97            Constant:
+0:97              0 (const int)
+0:97            Constant:
+0:97              1 (const int)
+0:97            Constant:
+0:97              2 (const int)
+0:97        subgroupQuadSwapHorizontal ( temp 3-component vector of uint)
+0:97          vector swizzle ( temp 3-component vector of uint)
+0:97            u: direct index for structure ( temp 4-component vector of uint)
+0:97              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:97                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:97                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:97                  Constant:
+0:97                    0 (const uint)
+0:97                direct index ( temp uint)
+0:97                  'dti' ( in 3-component vector of uint)
+0:97                  Constant:
+0:97                    0 (const int)
+0:97              Constant:
+0:97                0 (const int)
+0:97            Sequence
+0:97              Constant:
+0:97                0 (const int)
+0:97              Constant:
+0:97                1 (const int)
+0:97              Constant:
+0:97                2 (const int)
+0:99      move second child to first child ( temp 4-component vector of int)
+0:99        i: direct index for structure ( temp 4-component vector of int)
+0:99          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:99            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:99              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:99              Constant:
+0:99                0 (const uint)
+0:99            direct index ( temp uint)
+0:99              'dti' ( in 3-component vector of uint)
+0:99              Constant:
+0:99                0 (const int)
+0:99          Constant:
+0:99            1 (const int)
+0:99        subgroupQuadSwapHorizontal ( temp 4-component vector of int)
+0:99          i: direct index for structure ( temp 4-component vector of int)
+0:99            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:99              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:99                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:99                Constant:
+0:99                  0 (const uint)
+0:99              direct index ( temp uint)
+0:99                'dti' ( in 3-component vector of uint)
+0:99                Constant:
+0:99                  0 (const int)
+0:99            Constant:
+0:99              1 (const int)
+0:100      move second child to first child ( temp int)
+0:100        direct index ( temp int)
+0:100          i: direct index for structure ( temp 4-component vector of int)
+0:100            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:100              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:100                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:100                Constant:
+0:100                  0 (const uint)
+0:100              direct index ( temp uint)
+0:100                'dti' ( in 3-component vector of uint)
+0:100                Constant:
+0:100                  0 (const int)
+0:100            Constant:
+0:100              1 (const int)
+0:100          Constant:
+0:100            0 (const int)
+0:100        subgroupQuadSwapHorizontal ( temp int)
+0:100          direct index ( temp int)
+0:100            i: direct index for structure ( temp 4-component vector of int)
+0:100              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:100                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:100                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:100                  Constant:
+0:100                    0 (const uint)
+0:100                direct index ( temp uint)
+0:100                  'dti' ( in 3-component vector of uint)
+0:100                  Constant:
+0:100                    0 (const int)
+0:100              Constant:
+0:100                1 (const int)
+0:100            Constant:
+0:100              0 (const int)
+0:101      move second child to first child ( temp 2-component vector of int)
+0:101        vector swizzle ( temp 2-component vector of int)
+0:101          i: direct index for structure ( temp 4-component vector of int)
+0:101            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:101              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:101                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:101                Constant:
+0:101                  0 (const uint)
+0:101              direct index ( temp uint)
+0:101                'dti' ( in 3-component vector of uint)
+0:101                Constant:
+0:101                  0 (const int)
+0:101            Constant:
+0:101              1 (const int)
+0:101          Sequence
+0:101            Constant:
+0:101              0 (const int)
+0:101            Constant:
+0:101              1 (const int)
+0:101        subgroupQuadSwapHorizontal ( temp 2-component vector of int)
+0:101          vector swizzle ( temp 2-component vector of int)
+0:101            i: direct index for structure ( temp 4-component vector of int)
+0:101              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:101                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:101                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:101                  Constant:
+0:101                    0 (const uint)
+0:101                direct index ( temp uint)
+0:101                  'dti' ( in 3-component vector of uint)
+0:101                  Constant:
+0:101                    0 (const int)
+0:101              Constant:
+0:101                1 (const int)
+0:101            Sequence
+0:101              Constant:
+0:101                0 (const int)
+0:101              Constant:
+0:101                1 (const int)
+0:102      move second child to first child ( temp 3-component vector of int)
+0:102        vector swizzle ( temp 3-component vector of int)
+0:102          i: direct index for structure ( temp 4-component vector of int)
+0:102            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:102              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:102                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:102                Constant:
+0:102                  0 (const uint)
+0:102              direct index ( temp uint)
+0:102                'dti' ( in 3-component vector of uint)
+0:102                Constant:
+0:102                  0 (const int)
+0:102            Constant:
+0:102              1 (const int)
+0:102          Sequence
+0:102            Constant:
+0:102              0 (const int)
+0:102            Constant:
+0:102              1 (const int)
+0:102            Constant:
+0:102              2 (const int)
+0:102        subgroupQuadSwapHorizontal ( temp 3-component vector of int)
+0:102          vector swizzle ( temp 3-component vector of int)
+0:102            i: direct index for structure ( temp 4-component vector of int)
+0:102              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:102                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:102                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:102                  Constant:
+0:102                    0 (const uint)
+0:102                direct index ( temp uint)
+0:102                  'dti' ( in 3-component vector of uint)
+0:102                  Constant:
+0:102                    0 (const int)
+0:102              Constant:
+0:102                1 (const int)
+0:102            Sequence
+0:102              Constant:
+0:102                0 (const int)
+0:102              Constant:
+0:102                1 (const int)
+0:102              Constant:
+0:102                2 (const int)
+0:104      move second child to first child ( temp 4-component vector of float)
+0:104        f: direct index for structure ( temp 4-component vector of float)
+0:104          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:104            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:104              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:104              Constant:
+0:104                0 (const uint)
+0:104            direct index ( temp uint)
+0:104              'dti' ( in 3-component vector of uint)
+0:104              Constant:
+0:104                0 (const int)
+0:104          Constant:
+0:104            2 (const int)
+0:104        subgroupQuadSwapHorizontal ( temp 4-component vector of float)
+0:104          f: direct index for structure ( temp 4-component vector of float)
+0:104            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:104              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:104                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:104                Constant:
+0:104                  0 (const uint)
+0:104              direct index ( temp uint)
+0:104                'dti' ( in 3-component vector of uint)
+0:104                Constant:
+0:104                  0 (const int)
+0:104            Constant:
+0:104              2 (const int)
+0:105      move second child to first child ( temp float)
+0:105        direct index ( temp float)
+0:105          f: direct index for structure ( temp 4-component vector of float)
+0:105            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:105              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:105                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:105                Constant:
+0:105                  0 (const uint)
+0:105              direct index ( temp uint)
+0:105                'dti' ( in 3-component vector of uint)
+0:105                Constant:
+0:105                  0 (const int)
+0:105            Constant:
+0:105              2 (const int)
+0:105          Constant:
+0:105            0 (const int)
+0:105        subgroupQuadSwapHorizontal ( temp float)
+0:105          direct index ( temp float)
+0:105            f: direct index for structure ( temp 4-component vector of float)
+0:105              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:105                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:105                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:105                  Constant:
+0:105                    0 (const uint)
+0:105                direct index ( temp uint)
+0:105                  'dti' ( in 3-component vector of uint)
+0:105                  Constant:
+0:105                    0 (const int)
+0:105              Constant:
+0:105                2 (const int)
+0:105            Constant:
+0:105              0 (const int)
+0:106      move second child to first child ( temp 2-component vector of float)
+0:106        vector swizzle ( temp 2-component vector of float)
+0:106          f: direct index for structure ( temp 4-component vector of float)
+0:106            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:106              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:106                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:106                Constant:
+0:106                  0 (const uint)
+0:106              direct index ( temp uint)
+0:106                'dti' ( in 3-component vector of uint)
+0:106                Constant:
+0:106                  0 (const int)
+0:106            Constant:
+0:106              2 (const int)
+0:106          Sequence
+0:106            Constant:
+0:106              0 (const int)
+0:106            Constant:
+0:106              1 (const int)
+0:106        subgroupQuadSwapHorizontal ( temp 2-component vector of float)
+0:106          vector swizzle ( temp 2-component vector of float)
+0:106            f: direct index for structure ( temp 4-component vector of float)
+0:106              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:106                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:106                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:106                  Constant:
+0:106                    0 (const uint)
+0:106                direct index ( temp uint)
+0:106                  'dti' ( in 3-component vector of uint)
+0:106                  Constant:
+0:106                    0 (const int)
+0:106              Constant:
+0:106                2 (const int)
+0:106            Sequence
+0:106              Constant:
+0:106                0 (const int)
+0:106              Constant:
+0:106                1 (const int)
+0:107      move second child to first child ( temp 3-component vector of float)
+0:107        vector swizzle ( temp 3-component vector of float)
+0:107          f: direct index for structure ( temp 4-component vector of float)
+0:107            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:107              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:107                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:107                Constant:
+0:107                  0 (const uint)
+0:107              direct index ( temp uint)
+0:107                'dti' ( in 3-component vector of uint)
+0:107                Constant:
+0:107                  0 (const int)
+0:107            Constant:
+0:107              2 (const int)
+0:107          Sequence
+0:107            Constant:
+0:107              0 (const int)
+0:107            Constant:
+0:107              1 (const int)
+0:107            Constant:
+0:107              2 (const int)
+0:107        subgroupQuadSwapHorizontal ( temp 3-component vector of float)
+0:107          vector swizzle ( temp 3-component vector of float)
+0:107            f: direct index for structure ( temp 4-component vector of float)
+0:107              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:107                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:107                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:107                  Constant:
+0:107                    0 (const uint)
+0:107                direct index ( temp uint)
+0:107                  'dti' ( in 3-component vector of uint)
+0:107                  Constant:
+0:107                    0 (const int)
+0:107              Constant:
+0:107                2 (const int)
+0:107            Sequence
+0:107              Constant:
+0:107                0 (const int)
+0:107              Constant:
+0:107                1 (const int)
+0:107              Constant:
+0:107                2 (const int)
+0:109      move second child to first child ( temp 4-component vector of double)
+0:109        d: direct index for structure ( temp 4-component vector of double)
+0:109          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:109            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:109              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:109              Constant:
+0:109                0 (const uint)
+0:109            direct index ( temp uint)
+0:109              'dti' ( in 3-component vector of uint)
+0:109              Constant:
+0:109                0 (const int)
+0:109          Constant:
+0:109            3 (const int)
+0:109        subgroupQuadSwapHorizontal ( temp 4-component vector of double)
+0:109          d: direct index for structure ( temp 4-component vector of double)
+0:109            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:109              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:109                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:109                Constant:
+0:109                  0 (const uint)
+0:109              direct index ( temp uint)
+0:109                'dti' ( in 3-component vector of uint)
+0:109                Constant:
+0:109                  0 (const int)
+0:109            Constant:
+0:109              3 (const int)
+0:110      move second child to first child ( temp double)
+0:110        direct index ( temp double)
+0:110          d: direct index for structure ( temp 4-component vector of double)
+0:110            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:110              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:110                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:110                Constant:
+0:110                  0 (const uint)
+0:110              direct index ( temp uint)
+0:110                'dti' ( in 3-component vector of uint)
+0:110                Constant:
+0:110                  0 (const int)
+0:110            Constant:
+0:110              3 (const int)
+0:110          Constant:
+0:110            0 (const int)
+0:110        subgroupQuadSwapHorizontal ( temp double)
+0:110          direct index ( temp double)
+0:110            d: direct index for structure ( temp 4-component vector of double)
+0:110              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:110                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:110                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:110                  Constant:
+0:110                    0 (const uint)
+0:110                direct index ( temp uint)
+0:110                  'dti' ( in 3-component vector of uint)
+0:110                  Constant:
+0:110                    0 (const int)
+0:110              Constant:
+0:110                3 (const int)
+0:110            Constant:
+0:110              0 (const int)
+0:111      move second child to first child ( temp 2-component vector of double)
+0:111        vector swizzle ( temp 2-component vector of double)
+0:111          d: direct index for structure ( temp 4-component vector of double)
+0:111            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:111              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:111                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:111                Constant:
+0:111                  0 (const uint)
+0:111              direct index ( temp uint)
+0:111                'dti' ( in 3-component vector of uint)
+0:111                Constant:
+0:111                  0 (const int)
+0:111            Constant:
+0:111              3 (const int)
+0:111          Sequence
+0:111            Constant:
+0:111              0 (const int)
+0:111            Constant:
+0:111              1 (const int)
+0:111        subgroupQuadSwapHorizontal ( temp 2-component vector of double)
+0:111          vector swizzle ( temp 2-component vector of double)
+0:111            d: direct index for structure ( temp 4-component vector of double)
+0:111              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:111                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:111                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:111                  Constant:
+0:111                    0 (const uint)
+0:111                direct index ( temp uint)
+0:111                  'dti' ( in 3-component vector of uint)
+0:111                  Constant:
+0:111                    0 (const int)
+0:111              Constant:
+0:111                3 (const int)
+0:111            Sequence
+0:111              Constant:
+0:111                0 (const int)
+0:111              Constant:
+0:111                1 (const int)
+0:112      move second child to first child ( temp 3-component vector of double)
+0:112        vector swizzle ( temp 3-component vector of double)
+0:112          d: direct index for structure ( temp 4-component vector of double)
+0:112            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:112              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:112                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:112                Constant:
+0:112                  0 (const uint)
+0:112              direct index ( temp uint)
+0:112                'dti' ( in 3-component vector of uint)
+0:112                Constant:
+0:112                  0 (const int)
+0:112            Constant:
+0:112              3 (const int)
+0:112          Sequence
+0:112            Constant:
+0:112              0 (const int)
+0:112            Constant:
+0:112              1 (const int)
+0:112            Constant:
+0:112              2 (const int)
+0:112        subgroupQuadSwapHorizontal ( temp 3-component vector of double)
+0:112          vector swizzle ( temp 3-component vector of double)
+0:112            d: direct index for structure ( temp 4-component vector of double)
+0:112              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:112                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:112                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:112                  Constant:
+0:112                    0 (const uint)
+0:112                direct index ( temp uint)
+0:112                  'dti' ( in 3-component vector of uint)
+0:112                  Constant:
+0:112                    0 (const int)
+0:112              Constant:
+0:112                3 (const int)
+0:112            Sequence
+0:112              Constant:
+0:112                0 (const int)
+0:112              Constant:
+0:112                1 (const int)
+0:112              Constant:
+0:112                2 (const int)
+0:114      move second child to first child ( temp 4-component vector of uint)
+0:114        u: direct index for structure ( temp 4-component vector of uint)
+0:114          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:114            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:114              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:114              Constant:
+0:114                0 (const uint)
+0:114            direct index ( temp uint)
+0:114              'dti' ( in 3-component vector of uint)
+0:114              Constant:
+0:114                0 (const int)
+0:114          Constant:
+0:114            0 (const int)
+0:114        subgroupQuadSwapVertical ( temp 4-component vector of uint)
+0:114          u: direct index for structure ( temp 4-component vector of uint)
+0:114            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:114              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:114                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:114                Constant:
+0:114                  0 (const uint)
+0:114              direct index ( temp uint)
+0:114                'dti' ( in 3-component vector of uint)
+0:114                Constant:
+0:114                  0 (const int)
+0:114            Constant:
+0:114              0 (const int)
+0:115      move second child to first child ( temp uint)
+0:115        direct index ( temp uint)
+0:115          u: direct index for structure ( temp 4-component vector of uint)
+0:115            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:115              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:115                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:115                Constant:
+0:115                  0 (const uint)
+0:115              direct index ( temp uint)
+0:115                'dti' ( in 3-component vector of uint)
+0:115                Constant:
+0:115                  0 (const int)
+0:115            Constant:
+0:115              0 (const int)
+0:115          Constant:
+0:115            0 (const int)
+0:115        subgroupQuadSwapVertical ( temp uint)
+0:115          direct index ( temp uint)
+0:115            u: direct index for structure ( temp 4-component vector of uint)
+0:115              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:115                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:115                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:115                  Constant:
+0:115                    0 (const uint)
+0:115                direct index ( temp uint)
+0:115                  'dti' ( in 3-component vector of uint)
+0:115                  Constant:
+0:115                    0 (const int)
+0:115              Constant:
+0:115                0 (const int)
+0:115            Constant:
+0:115              0 (const int)
+0:116      move second child to first child ( temp 2-component vector of uint)
+0:116        vector swizzle ( temp 2-component vector of uint)
+0:116          u: direct index for structure ( temp 4-component vector of uint)
+0:116            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:116              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:116                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:116                Constant:
+0:116                  0 (const uint)
+0:116              direct index ( temp uint)
+0:116                'dti' ( in 3-component vector of uint)
+0:116                Constant:
+0:116                  0 (const int)
+0:116            Constant:
+0:116              0 (const int)
+0:116          Sequence
+0:116            Constant:
+0:116              0 (const int)
+0:116            Constant:
+0:116              1 (const int)
+0:116        subgroupQuadSwapVertical ( temp 2-component vector of uint)
+0:116          vector swizzle ( temp 2-component vector of uint)
+0:116            u: direct index for structure ( temp 4-component vector of uint)
+0:116              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:116                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:116                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:116                  Constant:
+0:116                    0 (const uint)
+0:116                direct index ( temp uint)
+0:116                  'dti' ( in 3-component vector of uint)
+0:116                  Constant:
+0:116                    0 (const int)
+0:116              Constant:
+0:116                0 (const int)
+0:116            Sequence
+0:116              Constant:
+0:116                0 (const int)
+0:116              Constant:
+0:116                1 (const int)
+0:117      move second child to first child ( temp 3-component vector of uint)
+0:117        vector swizzle ( temp 3-component vector of uint)
+0:117          u: direct index for structure ( temp 4-component vector of uint)
+0:117            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:117              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:117                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:117                Constant:
+0:117                  0 (const uint)
+0:117              direct index ( temp uint)
+0:117                'dti' ( in 3-component vector of uint)
+0:117                Constant:
+0:117                  0 (const int)
+0:117            Constant:
+0:117              0 (const int)
+0:117          Sequence
+0:117            Constant:
+0:117              0 (const int)
+0:117            Constant:
+0:117              1 (const int)
+0:117            Constant:
+0:117              2 (const int)
+0:117        subgroupQuadSwapVertical ( temp 3-component vector of uint)
+0:117          vector swizzle ( temp 3-component vector of uint)
+0:117            u: direct index for structure ( temp 4-component vector of uint)
+0:117              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:117                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:117                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:117                  Constant:
+0:117                    0 (const uint)
+0:117                direct index ( temp uint)
+0:117                  'dti' ( in 3-component vector of uint)
+0:117                  Constant:
+0:117                    0 (const int)
+0:117              Constant:
+0:117                0 (const int)
+0:117            Sequence
+0:117              Constant:
+0:117                0 (const int)
+0:117              Constant:
+0:117                1 (const int)
+0:117              Constant:
+0:117                2 (const int)
+0:119      move second child to first child ( temp 4-component vector of int)
+0:119        i: direct index for structure ( temp 4-component vector of int)
+0:119          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:119            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:119              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:119              Constant:
+0:119                0 (const uint)
+0:119            direct index ( temp uint)
+0:119              'dti' ( in 3-component vector of uint)
+0:119              Constant:
+0:119                0 (const int)
+0:119          Constant:
+0:119            1 (const int)
+0:119        subgroupQuadSwapVertical ( temp 4-component vector of int)
+0:119          i: direct index for structure ( temp 4-component vector of int)
+0:119            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:119              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:119                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:119                Constant:
+0:119                  0 (const uint)
+0:119              direct index ( temp uint)
+0:119                'dti' ( in 3-component vector of uint)
+0:119                Constant:
+0:119                  0 (const int)
+0:119            Constant:
+0:119              1 (const int)
+0:120      move second child to first child ( temp int)
+0:120        direct index ( temp int)
+0:120          i: direct index for structure ( temp 4-component vector of int)
+0:120            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:120              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:120                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:120                Constant:
+0:120                  0 (const uint)
+0:120              direct index ( temp uint)
+0:120                'dti' ( in 3-component vector of uint)
+0:120                Constant:
+0:120                  0 (const int)
+0:120            Constant:
+0:120              1 (const int)
+0:120          Constant:
+0:120            0 (const int)
+0:120        subgroupQuadSwapVertical ( temp int)
+0:120          direct index ( temp int)
+0:120            i: direct index for structure ( temp 4-component vector of int)
+0:120              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:120                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:120                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:120                  Constant:
+0:120                    0 (const uint)
+0:120                direct index ( temp uint)
+0:120                  'dti' ( in 3-component vector of uint)
+0:120                  Constant:
+0:120                    0 (const int)
+0:120              Constant:
+0:120                1 (const int)
+0:120            Constant:
+0:120              0 (const int)
+0:121      move second child to first child ( temp 2-component vector of int)
+0:121        vector swizzle ( temp 2-component vector of int)
+0:121          i: direct index for structure ( temp 4-component vector of int)
+0:121            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:121              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:121                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:121                Constant:
+0:121                  0 (const uint)
+0:121              direct index ( temp uint)
+0:121                'dti' ( in 3-component vector of uint)
+0:121                Constant:
+0:121                  0 (const int)
+0:121            Constant:
+0:121              1 (const int)
+0:121          Sequence
+0:121            Constant:
+0:121              0 (const int)
+0:121            Constant:
+0:121              1 (const int)
+0:121        subgroupQuadSwapVertical ( temp 2-component vector of int)
+0:121          vector swizzle ( temp 2-component vector of int)
+0:121            i: direct index for structure ( temp 4-component vector of int)
+0:121              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:121                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:121                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:121                  Constant:
+0:121                    0 (const uint)
+0:121                direct index ( temp uint)
+0:121                  'dti' ( in 3-component vector of uint)
+0:121                  Constant:
+0:121                    0 (const int)
+0:121              Constant:
+0:121                1 (const int)
+0:121            Sequence
+0:121              Constant:
+0:121                0 (const int)
+0:121              Constant:
+0:121                1 (const int)
+0:122      move second child to first child ( temp 3-component vector of int)
+0:122        vector swizzle ( temp 3-component vector of int)
+0:122          i: direct index for structure ( temp 4-component vector of int)
+0:122            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:122              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:122                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:122                Constant:
+0:122                  0 (const uint)
+0:122              direct index ( temp uint)
+0:122                'dti' ( in 3-component vector of uint)
+0:122                Constant:
+0:122                  0 (const int)
+0:122            Constant:
+0:122              1 (const int)
+0:122          Sequence
+0:122            Constant:
+0:122              0 (const int)
+0:122            Constant:
+0:122              1 (const int)
+0:122            Constant:
+0:122              2 (const int)
+0:122        subgroupQuadSwapVertical ( temp 3-component vector of int)
+0:122          vector swizzle ( temp 3-component vector of int)
+0:122            i: direct index for structure ( temp 4-component vector of int)
+0:122              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:122                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:122                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:122                  Constant:
+0:122                    0 (const uint)
+0:122                direct index ( temp uint)
+0:122                  'dti' ( in 3-component vector of uint)
+0:122                  Constant:
+0:122                    0 (const int)
+0:122              Constant:
+0:122                1 (const int)
+0:122            Sequence
+0:122              Constant:
+0:122                0 (const int)
+0:122              Constant:
+0:122                1 (const int)
+0:122              Constant:
+0:122                2 (const int)
+0:124      move second child to first child ( temp 4-component vector of float)
+0:124        f: direct index for structure ( temp 4-component vector of float)
+0:124          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:124            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:124              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:124              Constant:
+0:124                0 (const uint)
+0:124            direct index ( temp uint)
+0:124              'dti' ( in 3-component vector of uint)
+0:124              Constant:
+0:124                0 (const int)
+0:124          Constant:
+0:124            2 (const int)
+0:124        subgroupQuadSwapVertical ( temp 4-component vector of float)
+0:124          f: direct index for structure ( temp 4-component vector of float)
+0:124            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:124              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:124                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:124                Constant:
+0:124                  0 (const uint)
+0:124              direct index ( temp uint)
+0:124                'dti' ( in 3-component vector of uint)
+0:124                Constant:
+0:124                  0 (const int)
+0:124            Constant:
+0:124              2 (const int)
+0:125      move second child to first child ( temp float)
+0:125        direct index ( temp float)
+0:125          f: direct index for structure ( temp 4-component vector of float)
+0:125            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:125              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:125                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:125                Constant:
+0:125                  0 (const uint)
+0:125              direct index ( temp uint)
+0:125                'dti' ( in 3-component vector of uint)
+0:125                Constant:
+0:125                  0 (const int)
+0:125            Constant:
+0:125              2 (const int)
+0:125          Constant:
+0:125            0 (const int)
+0:125        subgroupQuadSwapVertical ( temp float)
+0:125          direct index ( temp float)
+0:125            f: direct index for structure ( temp 4-component vector of float)
+0:125              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:125                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:125                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:125                  Constant:
+0:125                    0 (const uint)
+0:125                direct index ( temp uint)
+0:125                  'dti' ( in 3-component vector of uint)
+0:125                  Constant:
+0:125                    0 (const int)
+0:125              Constant:
+0:125                2 (const int)
+0:125            Constant:
+0:125              0 (const int)
+0:126      move second child to first child ( temp 2-component vector of float)
+0:126        vector swizzle ( temp 2-component vector of float)
+0:126          f: direct index for structure ( temp 4-component vector of float)
+0:126            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:126              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:126                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:126                Constant:
+0:126                  0 (const uint)
+0:126              direct index ( temp uint)
+0:126                'dti' ( in 3-component vector of uint)
+0:126                Constant:
+0:126                  0 (const int)
+0:126            Constant:
+0:126              2 (const int)
+0:126          Sequence
+0:126            Constant:
+0:126              0 (const int)
+0:126            Constant:
+0:126              1 (const int)
+0:126        subgroupQuadSwapVertical ( temp 2-component vector of float)
+0:126          vector swizzle ( temp 2-component vector of float)
+0:126            f: direct index for structure ( temp 4-component vector of float)
+0:126              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:126                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:126                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:126                  Constant:
+0:126                    0 (const uint)
+0:126                direct index ( temp uint)
+0:126                  'dti' ( in 3-component vector of uint)
+0:126                  Constant:
+0:126                    0 (const int)
+0:126              Constant:
+0:126                2 (const int)
+0:126            Sequence
+0:126              Constant:
+0:126                0 (const int)
+0:126              Constant:
+0:126                1 (const int)
+0:127      move second child to first child ( temp 3-component vector of float)
+0:127        vector swizzle ( temp 3-component vector of float)
+0:127          f: direct index for structure ( temp 4-component vector of float)
+0:127            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:127              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:127                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:127                Constant:
+0:127                  0 (const uint)
+0:127              direct index ( temp uint)
+0:127                'dti' ( in 3-component vector of uint)
+0:127                Constant:
+0:127                  0 (const int)
+0:127            Constant:
+0:127              2 (const int)
+0:127          Sequence
+0:127            Constant:
+0:127              0 (const int)
+0:127            Constant:
+0:127              1 (const int)
+0:127            Constant:
+0:127              2 (const int)
+0:127        subgroupQuadSwapVertical ( temp 3-component vector of float)
+0:127          vector swizzle ( temp 3-component vector of float)
+0:127            f: direct index for structure ( temp 4-component vector of float)
+0:127              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:127                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:127                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:127                  Constant:
+0:127                    0 (const uint)
+0:127                direct index ( temp uint)
+0:127                  'dti' ( in 3-component vector of uint)
+0:127                  Constant:
+0:127                    0 (const int)
+0:127              Constant:
+0:127                2 (const int)
+0:127            Sequence
+0:127              Constant:
+0:127                0 (const int)
+0:127              Constant:
+0:127                1 (const int)
+0:127              Constant:
+0:127                2 (const int)
+0:129      move second child to first child ( temp 4-component vector of double)
+0:129        d: direct index for structure ( temp 4-component vector of double)
+0:129          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:129            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:129              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:129              Constant:
+0:129                0 (const uint)
+0:129            direct index ( temp uint)
+0:129              'dti' ( in 3-component vector of uint)
+0:129              Constant:
+0:129                0 (const int)
+0:129          Constant:
+0:129            3 (const int)
+0:129        subgroupQuadSwapVertical ( temp 4-component vector of double)
+0:129          d: direct index for structure ( temp 4-component vector of double)
+0:129            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:129              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:129                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:129                Constant:
+0:129                  0 (const uint)
+0:129              direct index ( temp uint)
+0:129                'dti' ( in 3-component vector of uint)
+0:129                Constant:
+0:129                  0 (const int)
+0:129            Constant:
+0:129              3 (const int)
+0:130      move second child to first child ( temp double)
+0:130        direct index ( temp double)
+0:130          d: direct index for structure ( temp 4-component vector of double)
+0:130            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:130              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:130                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:130                Constant:
+0:130                  0 (const uint)
+0:130              direct index ( temp uint)
+0:130                'dti' ( in 3-component vector of uint)
+0:130                Constant:
+0:130                  0 (const int)
+0:130            Constant:
+0:130              3 (const int)
+0:130          Constant:
+0:130            0 (const int)
+0:130        subgroupQuadSwapVertical ( temp double)
+0:130          direct index ( temp double)
+0:130            d: direct index for structure ( temp 4-component vector of double)
+0:130              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:130                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:130                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:130                  Constant:
+0:130                    0 (const uint)
+0:130                direct index ( temp uint)
+0:130                  'dti' ( in 3-component vector of uint)
+0:130                  Constant:
+0:130                    0 (const int)
+0:130              Constant:
+0:130                3 (const int)
+0:130            Constant:
+0:130              0 (const int)
+0:131      move second child to first child ( temp 2-component vector of double)
+0:131        vector swizzle ( temp 2-component vector of double)
+0:131          d: direct index for structure ( temp 4-component vector of double)
+0:131            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:131              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:131                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:131                Constant:
+0:131                  0 (const uint)
+0:131              direct index ( temp uint)
+0:131                'dti' ( in 3-component vector of uint)
+0:131                Constant:
+0:131                  0 (const int)
+0:131            Constant:
+0:131              3 (const int)
+0:131          Sequence
+0:131            Constant:
+0:131              0 (const int)
+0:131            Constant:
+0:131              1 (const int)
+0:131        subgroupQuadSwapVertical ( temp 2-component vector of double)
+0:131          vector swizzle ( temp 2-component vector of double)
+0:131            d: direct index for structure ( temp 4-component vector of double)
+0:131              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:131                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:131                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:131                  Constant:
+0:131                    0 (const uint)
+0:131                direct index ( temp uint)
+0:131                  'dti' ( in 3-component vector of uint)
+0:131                  Constant:
+0:131                    0 (const int)
+0:131              Constant:
+0:131                3 (const int)
+0:131            Sequence
+0:131              Constant:
+0:131                0 (const int)
+0:131              Constant:
+0:131                1 (const int)
+0:132      move second child to first child ( temp 3-component vector of double)
+0:132        vector swizzle ( temp 3-component vector of double)
+0:132          d: direct index for structure ( temp 4-component vector of double)
+0:132            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:132              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:132                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:132                Constant:
+0:132                  0 (const uint)
+0:132              direct index ( temp uint)
+0:132                'dti' ( in 3-component vector of uint)
+0:132                Constant:
+0:132                  0 (const int)
+0:132            Constant:
+0:132              3 (const int)
+0:132          Sequence
+0:132            Constant:
+0:132              0 (const int)
+0:132            Constant:
+0:132              1 (const int)
+0:132            Constant:
+0:132              2 (const int)
+0:132        subgroupQuadSwapVertical ( temp 3-component vector of double)
+0:132          vector swizzle ( temp 3-component vector of double)
+0:132            d: direct index for structure ( temp 4-component vector of double)
+0:132              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:132                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:132                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:132                  Constant:
+0:132                    0 (const uint)
+0:132                direct index ( temp uint)
+0:132                  'dti' ( in 3-component vector of uint)
+0:132                  Constant:
+0:132                    0 (const int)
+0:132              Constant:
+0:132                3 (const int)
+0:132            Sequence
+0:132              Constant:
+0:132                0 (const int)
+0:132              Constant:
+0:132                1 (const int)
+0:132              Constant:
+0:132                2 (const int)
+0:134      move second child to first child ( temp 4-component vector of uint)
+0:134        u: direct index for structure ( temp 4-component vector of uint)
+0:134          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:134            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:134              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:134              Constant:
+0:134                0 (const uint)
+0:134            direct index ( temp uint)
+0:134              'dti' ( in 3-component vector of uint)
+0:134              Constant:
+0:134                0 (const int)
+0:134          Constant:
+0:134            0 (const int)
+0:134        subgroupQuadSwapDiagonal ( temp 4-component vector of uint)
+0:134          u: direct index for structure ( temp 4-component vector of uint)
+0:134            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:134              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:134                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:134                Constant:
+0:134                  0 (const uint)
+0:134              direct index ( temp uint)
+0:134                'dti' ( in 3-component vector of uint)
+0:134                Constant:
+0:134                  0 (const int)
+0:134            Constant:
+0:134              0 (const int)
+0:135      move second child to first child ( temp uint)
+0:135        direct index ( temp uint)
+0:135          u: direct index for structure ( temp 4-component vector of uint)
+0:135            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:135              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:135                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:135                Constant:
+0:135                  0 (const uint)
+0:135              direct index ( temp uint)
+0:135                'dti' ( in 3-component vector of uint)
+0:135                Constant:
+0:135                  0 (const int)
+0:135            Constant:
+0:135              0 (const int)
+0:135          Constant:
+0:135            0 (const int)
+0:135        subgroupQuadSwapDiagonal ( temp uint)
+0:135          direct index ( temp uint)
+0:135            u: direct index for structure ( temp 4-component vector of uint)
+0:135              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:135                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:135                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:135                  Constant:
+0:135                    0 (const uint)
+0:135                direct index ( temp uint)
+0:135                  'dti' ( in 3-component vector of uint)
+0:135                  Constant:
+0:135                    0 (const int)
+0:135              Constant:
+0:135                0 (const int)
+0:135            Constant:
+0:135              0 (const int)
+0:136      move second child to first child ( temp 2-component vector of uint)
+0:136        vector swizzle ( temp 2-component vector of uint)
+0:136          u: direct index for structure ( temp 4-component vector of uint)
+0:136            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:136              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:136                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:136                Constant:
+0:136                  0 (const uint)
+0:136              direct index ( temp uint)
+0:136                'dti' ( in 3-component vector of uint)
+0:136                Constant:
+0:136                  0 (const int)
+0:136            Constant:
+0:136              0 (const int)
+0:136          Sequence
+0:136            Constant:
+0:136              0 (const int)
+0:136            Constant:
+0:136              1 (const int)
+0:136        subgroupQuadSwapDiagonal ( temp 2-component vector of uint)
+0:136          vector swizzle ( temp 2-component vector of uint)
+0:136            u: direct index for structure ( temp 4-component vector of uint)
+0:136              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:136                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:136                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:136                  Constant:
+0:136                    0 (const uint)
+0:136                direct index ( temp uint)
+0:136                  'dti' ( in 3-component vector of uint)
+0:136                  Constant:
+0:136                    0 (const int)
+0:136              Constant:
+0:136                0 (const int)
+0:136            Sequence
+0:136              Constant:
+0:136                0 (const int)
+0:136              Constant:
+0:136                1 (const int)
+0:137      move second child to first child ( temp 3-component vector of uint)
+0:137        vector swizzle ( temp 3-component vector of uint)
+0:137          u: direct index for structure ( temp 4-component vector of uint)
+0:137            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:137              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:137                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:137                Constant:
+0:137                  0 (const uint)
+0:137              direct index ( temp uint)
+0:137                'dti' ( in 3-component vector of uint)
+0:137                Constant:
+0:137                  0 (const int)
+0:137            Constant:
+0:137              0 (const int)
+0:137          Sequence
+0:137            Constant:
+0:137              0 (const int)
+0:137            Constant:
+0:137              1 (const int)
+0:137            Constant:
+0:137              2 (const int)
+0:137        subgroupQuadSwapDiagonal ( temp 3-component vector of uint)
+0:137          vector swizzle ( temp 3-component vector of uint)
+0:137            u: direct index for structure ( temp 4-component vector of uint)
+0:137              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:137                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:137                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:137                  Constant:
+0:137                    0 (const uint)
+0:137                direct index ( temp uint)
+0:137                  'dti' ( in 3-component vector of uint)
+0:137                  Constant:
+0:137                    0 (const int)
+0:137              Constant:
+0:137                0 (const int)
+0:137            Sequence
+0:137              Constant:
+0:137                0 (const int)
+0:137              Constant:
+0:137                1 (const int)
+0:137              Constant:
+0:137                2 (const int)
+0:139      move second child to first child ( temp 4-component vector of int)
+0:139        i: direct index for structure ( temp 4-component vector of int)
+0:139          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:139            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:139              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:139              Constant:
+0:139                0 (const uint)
+0:139            direct index ( temp uint)
+0:139              'dti' ( in 3-component vector of uint)
+0:139              Constant:
+0:139                0 (const int)
+0:139          Constant:
+0:139            1 (const int)
+0:139        subgroupQuadSwapDiagonal ( temp 4-component vector of int)
+0:139          i: direct index for structure ( temp 4-component vector of int)
+0:139            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:139              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:139                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:139                Constant:
+0:139                  0 (const uint)
+0:139              direct index ( temp uint)
+0:139                'dti' ( in 3-component vector of uint)
+0:139                Constant:
+0:139                  0 (const int)
+0:139            Constant:
+0:139              1 (const int)
+0:140      move second child to first child ( temp int)
+0:140        direct index ( temp int)
+0:140          i: direct index for structure ( temp 4-component vector of int)
+0:140            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:140              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:140                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:140                Constant:
+0:140                  0 (const uint)
+0:140              direct index ( temp uint)
+0:140                'dti' ( in 3-component vector of uint)
+0:140                Constant:
+0:140                  0 (const int)
+0:140            Constant:
+0:140              1 (const int)
+0:140          Constant:
+0:140            0 (const int)
+0:140        subgroupQuadSwapDiagonal ( temp int)
+0:140          direct index ( temp int)
+0:140            i: direct index for structure ( temp 4-component vector of int)
+0:140              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:140                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:140                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:140                  Constant:
+0:140                    0 (const uint)
+0:140                direct index ( temp uint)
+0:140                  'dti' ( in 3-component vector of uint)
+0:140                  Constant:
+0:140                    0 (const int)
+0:140              Constant:
+0:140                1 (const int)
+0:140            Constant:
+0:140              0 (const int)
+0:141      move second child to first child ( temp 2-component vector of int)
+0:141        vector swizzle ( temp 2-component vector of int)
+0:141          i: direct index for structure ( temp 4-component vector of int)
+0:141            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:141              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:141                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:141                Constant:
+0:141                  0 (const uint)
+0:141              direct index ( temp uint)
+0:141                'dti' ( in 3-component vector of uint)
+0:141                Constant:
+0:141                  0 (const int)
+0:141            Constant:
+0:141              1 (const int)
+0:141          Sequence
+0:141            Constant:
+0:141              0 (const int)
+0:141            Constant:
+0:141              1 (const int)
+0:141        subgroupQuadSwapDiagonal ( temp 2-component vector of int)
+0:141          vector swizzle ( temp 2-component vector of int)
+0:141            i: direct index for structure ( temp 4-component vector of int)
+0:141              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:141                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:141                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:141                  Constant:
+0:141                    0 (const uint)
+0:141                direct index ( temp uint)
+0:141                  'dti' ( in 3-component vector of uint)
+0:141                  Constant:
+0:141                    0 (const int)
+0:141              Constant:
+0:141                1 (const int)
+0:141            Sequence
+0:141              Constant:
+0:141                0 (const int)
+0:141              Constant:
+0:141                1 (const int)
+0:142      move second child to first child ( temp 3-component vector of int)
+0:142        vector swizzle ( temp 3-component vector of int)
+0:142          i: direct index for structure ( temp 4-component vector of int)
+0:142            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:142              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:142                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:142                Constant:
+0:142                  0 (const uint)
+0:142              direct index ( temp uint)
+0:142                'dti' ( in 3-component vector of uint)
+0:142                Constant:
+0:142                  0 (const int)
+0:142            Constant:
+0:142              1 (const int)
+0:142          Sequence
+0:142            Constant:
+0:142              0 (const int)
+0:142            Constant:
+0:142              1 (const int)
+0:142            Constant:
+0:142              2 (const int)
+0:142        subgroupQuadSwapDiagonal ( temp 3-component vector of int)
+0:142          vector swizzle ( temp 3-component vector of int)
+0:142            i: direct index for structure ( temp 4-component vector of int)
+0:142              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:142                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:142                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:142                  Constant:
+0:142                    0 (const uint)
+0:142                direct index ( temp uint)
+0:142                  'dti' ( in 3-component vector of uint)
+0:142                  Constant:
+0:142                    0 (const int)
+0:142              Constant:
+0:142                1 (const int)
+0:142            Sequence
+0:142              Constant:
+0:142                0 (const int)
+0:142              Constant:
+0:142                1 (const int)
+0:142              Constant:
+0:142                2 (const int)
+0:144      move second child to first child ( temp 4-component vector of float)
+0:144        f: direct index for structure ( temp 4-component vector of float)
+0:144          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:144            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:144              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:144              Constant:
+0:144                0 (const uint)
+0:144            direct index ( temp uint)
+0:144              'dti' ( in 3-component vector of uint)
+0:144              Constant:
+0:144                0 (const int)
+0:144          Constant:
+0:144            2 (const int)
+0:144        subgroupQuadSwapDiagonal ( temp 4-component vector of float)
+0:144          f: direct index for structure ( temp 4-component vector of float)
+0:144            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:144              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:144                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:144                Constant:
+0:144                  0 (const uint)
+0:144              direct index ( temp uint)
+0:144                'dti' ( in 3-component vector of uint)
+0:144                Constant:
+0:144                  0 (const int)
+0:144            Constant:
+0:144              2 (const int)
+0:145      move second child to first child ( temp float)
+0:145        direct index ( temp float)
+0:145          f: direct index for structure ( temp 4-component vector of float)
+0:145            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:145              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:145                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:145                Constant:
+0:145                  0 (const uint)
+0:145              direct index ( temp uint)
+0:145                'dti' ( in 3-component vector of uint)
+0:145                Constant:
+0:145                  0 (const int)
+0:145            Constant:
+0:145              2 (const int)
+0:145          Constant:
+0:145            0 (const int)
+0:145        subgroupQuadSwapDiagonal ( temp float)
+0:145          direct index ( temp float)
+0:145            f: direct index for structure ( temp 4-component vector of float)
+0:145              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:145                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:145                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:145                  Constant:
+0:145                    0 (const uint)
+0:145                direct index ( temp uint)
+0:145                  'dti' ( in 3-component vector of uint)
+0:145                  Constant:
+0:145                    0 (const int)
+0:145              Constant:
+0:145                2 (const int)
+0:145            Constant:
+0:145              0 (const int)
+0:146      move second child to first child ( temp 2-component vector of float)
+0:146        vector swizzle ( temp 2-component vector of float)
+0:146          f: direct index for structure ( temp 4-component vector of float)
+0:146            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:146              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:146                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:146                Constant:
+0:146                  0 (const uint)
+0:146              direct index ( temp uint)
+0:146                'dti' ( in 3-component vector of uint)
+0:146                Constant:
+0:146                  0 (const int)
+0:146            Constant:
+0:146              2 (const int)
+0:146          Sequence
+0:146            Constant:
+0:146              0 (const int)
+0:146            Constant:
+0:146              1 (const int)
+0:146        subgroupQuadSwapDiagonal ( temp 2-component vector of float)
+0:146          vector swizzle ( temp 2-component vector of float)
+0:146            f: direct index for structure ( temp 4-component vector of float)
+0:146              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:146                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:146                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:146                  Constant:
+0:146                    0 (const uint)
+0:146                direct index ( temp uint)
+0:146                  'dti' ( in 3-component vector of uint)
+0:146                  Constant:
+0:146                    0 (const int)
+0:146              Constant:
+0:146                2 (const int)
+0:146            Sequence
+0:146              Constant:
+0:146                0 (const int)
+0:146              Constant:
+0:146                1 (const int)
+0:147      move second child to first child ( temp 3-component vector of float)
+0:147        vector swizzle ( temp 3-component vector of float)
+0:147          f: direct index for structure ( temp 4-component vector of float)
+0:147            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:147              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:147                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:147                Constant:
+0:147                  0 (const uint)
+0:147              direct index ( temp uint)
+0:147                'dti' ( in 3-component vector of uint)
+0:147                Constant:
+0:147                  0 (const int)
+0:147            Constant:
+0:147              2 (const int)
+0:147          Sequence
+0:147            Constant:
+0:147              0 (const int)
+0:147            Constant:
+0:147              1 (const int)
+0:147            Constant:
+0:147              2 (const int)
+0:147        subgroupQuadSwapDiagonal ( temp 3-component vector of float)
+0:147          vector swizzle ( temp 3-component vector of float)
+0:147            f: direct index for structure ( temp 4-component vector of float)
+0:147              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:147                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:147                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:147                  Constant:
+0:147                    0 (const uint)
+0:147                direct index ( temp uint)
+0:147                  'dti' ( in 3-component vector of uint)
+0:147                  Constant:
+0:147                    0 (const int)
+0:147              Constant:
+0:147                2 (const int)
+0:147            Sequence
+0:147              Constant:
+0:147                0 (const int)
+0:147              Constant:
+0:147                1 (const int)
+0:147              Constant:
+0:147                2 (const int)
+0:149      move second child to first child ( temp 4-component vector of double)
+0:149        d: direct index for structure ( temp 4-component vector of double)
+0:149          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:149            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:149              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:149              Constant:
+0:149                0 (const uint)
+0:149            direct index ( temp uint)
+0:149              'dti' ( in 3-component vector of uint)
+0:149              Constant:
+0:149                0 (const int)
+0:149          Constant:
+0:149            3 (const int)
+0:149        subgroupQuadSwapDiagonal ( temp 4-component vector of double)
+0:149          d: direct index for structure ( temp 4-component vector of double)
+0:149            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:149              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:149                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:149                Constant:
+0:149                  0 (const uint)
+0:149              direct index ( temp uint)
+0:149                'dti' ( in 3-component vector of uint)
+0:149                Constant:
+0:149                  0 (const int)
+0:149            Constant:
+0:149              3 (const int)
+0:150      move second child to first child ( temp double)
+0:150        direct index ( temp double)
+0:150          d: direct index for structure ( temp 4-component vector of double)
+0:150            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:150              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:150                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:150                Constant:
+0:150                  0 (const uint)
+0:150              direct index ( temp uint)
+0:150                'dti' ( in 3-component vector of uint)
+0:150                Constant:
+0:150                  0 (const int)
+0:150            Constant:
+0:150              3 (const int)
+0:150          Constant:
+0:150            0 (const int)
+0:150        subgroupQuadSwapDiagonal ( temp double)
+0:150          direct index ( temp double)
+0:150            d: direct index for structure ( temp 4-component vector of double)
+0:150              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:150                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:150                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:150                  Constant:
+0:150                    0 (const uint)
+0:150                direct index ( temp uint)
+0:150                  'dti' ( in 3-component vector of uint)
+0:150                  Constant:
+0:150                    0 (const int)
+0:150              Constant:
+0:150                3 (const int)
+0:150            Constant:
+0:150              0 (const int)
+0:151      move second child to first child ( temp 2-component vector of double)
+0:151        vector swizzle ( temp 2-component vector of double)
+0:151          d: direct index for structure ( temp 4-component vector of double)
+0:151            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:151              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:151                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:151                Constant:
+0:151                  0 (const uint)
+0:151              direct index ( temp uint)
+0:151                'dti' ( in 3-component vector of uint)
+0:151                Constant:
+0:151                  0 (const int)
+0:151            Constant:
+0:151              3 (const int)
+0:151          Sequence
+0:151            Constant:
+0:151              0 (const int)
+0:151            Constant:
+0:151              1 (const int)
+0:151        subgroupQuadSwapDiagonal ( temp 2-component vector of double)
+0:151          vector swizzle ( temp 2-component vector of double)
+0:151            d: direct index for structure ( temp 4-component vector of double)
+0:151              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:151                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:151                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:151                  Constant:
+0:151                    0 (const uint)
+0:151                direct index ( temp uint)
+0:151                  'dti' ( in 3-component vector of uint)
+0:151                  Constant:
+0:151                    0 (const int)
+0:151              Constant:
+0:151                3 (const int)
+0:151            Sequence
+0:151              Constant:
+0:151                0 (const int)
+0:151              Constant:
+0:151                1 (const int)
+0:152      move second child to first child ( temp 3-component vector of double)
+0:152        vector swizzle ( temp 3-component vector of double)
+0:152          d: direct index for structure ( temp 4-component vector of double)
+0:152            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:152              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:152                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:152                Constant:
+0:152                  0 (const uint)
+0:152              direct index ( temp uint)
+0:152                'dti' ( in 3-component vector of uint)
+0:152                Constant:
+0:152                  0 (const int)
+0:152            Constant:
+0:152              3 (const int)
+0:152          Sequence
+0:152            Constant:
+0:152              0 (const int)
+0:152            Constant:
+0:152              1 (const int)
+0:152            Constant:
+0:152              2 (const int)
+0:152        subgroupQuadSwapDiagonal ( temp 3-component vector of double)
+0:152          vector swizzle ( temp 3-component vector of double)
+0:152            d: direct index for structure ( temp 4-component vector of double)
+0:152              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:152                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:152                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:152                  Constant:
+0:152                    0 (const uint)
+0:152                direct index ( temp uint)
+0:152                  'dti' ( in 3-component vector of uint)
+0:152                  Constant:
+0:152                    0 (const int)
+0:152              Constant:
+0:152                3 (const int)
+0:152            Sequence
+0:152              Constant:
+0:152                0 (const int)
+0:152              Constant:
+0:152                1 (const int)
+0:152              Constant:
+0:152                2 (const int)
+0:13  Function Definition: CSMain( ( temp void)
+0:13    Function Parameters: 
+0:?     Sequence
+0:13      move second child to first child ( temp 3-component vector of uint)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?         'dti' ( in 3-component vector of uint GlobalInvocationID)
+0:13      Function Call: @CSMain(vu3; ( temp void)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?   Linker Objects
+0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
+
+// Module Version 10300
+// Generated by (magic number): 80005
+// Id's are bound by 1120
+
+                              Capability Shader
+                              Capability Float64
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformQuad
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "CSMain" 1115
+                              ExecutionMode 4 LocalSize 32 16 1
+                              Source HLSL 500
+                              Name 4  "CSMain"
+                              Name 11  "@CSMain(vu3;"
+                              Name 10  "dti"
+                              Name 20  "Types"
+                              MemberName 20(Types) 0  "u"
+                              MemberName 20(Types) 1  "i"
+                              MemberName 20(Types) 2  "f"
+                              MemberName 20(Types) 3  "d"
+                              Name 22  "data"
+                              MemberName 22(data) 0  "@data"
+                              Name 24  "data"
+                              Name 1113  "dti"
+                              Name 1115  "dti"
+                              Name 1117  "param"
+                              MemberDecorate 20(Types) 0 Offset 0
+                              MemberDecorate 20(Types) 1 Offset 16
+                              MemberDecorate 20(Types) 2 Offset 32
+                              MemberDecorate 20(Types) 3 Offset 64
+                              Decorate 21 ArrayStride 96
+                              MemberDecorate 22(data) 0 Offset 0
+                              Decorate 22(data) BufferBlock
+                              Decorate 24(data) DescriptorSet 0
+                              Decorate 1115(dti) BuiltIn GlobalInvocationId
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 3
+               8:             TypePointer Function 7(ivec3)
+               9:             TypeFunction 2 8(ptr)
+              13:             TypeVector 6(int) 4
+              14:             TypeInt 32 1
+              15:             TypeVector 14(int) 4
+              16:             TypeFloat 32
+              17:             TypeVector 16(float) 4
+              18:             TypeFloat 64
+              19:             TypeVector 18(float) 4
+       20(Types):             TypeStruct 13(ivec4) 15(ivec4) 17(fvec4) 19(fvec4)
+              21:             TypeRuntimeArray 20(Types)
+        22(data):             TypeStruct 21
+              23:             TypePointer Uniform 22(data)
+        24(data):     23(ptr) Variable Uniform
+              25:     14(int) Constant 0
+              26:      6(int) Constant 0
+              27:             TypePointer Function 6(int)
+              32:             TypePointer Uniform 13(ivec4)
+              35:      6(int) Constant 3
+              42:             TypePointer Uniform 6(int)
+              51:             TypeVector 6(int) 2
+              72:     14(int) Constant 1
+              75:             TypePointer Uniform 15(ivec4)
+              84:             TypePointer Uniform 14(int)
+              93:             TypeVector 14(int) 2
+             105:             TypeVector 14(int) 3
+             115:     14(int) Constant 2
+             118:             TypePointer Uniform 17(fvec4)
+             127:             TypePointer Uniform 16(float)
+             136:             TypeVector 16(float) 2
+             148:             TypeVector 16(float) 3
+             158:     14(int) Constant 3
+             161:             TypePointer Uniform 19(fvec4)
+             170:             TypePointer Uniform 18(float)
+             179:             TypeVector 18(float) 2
+             191:             TypeVector 18(float) 3
+             205:      6(int) Constant 1
+             358:      6(int) Constant 2
+            1114:             TypePointer Input 7(ivec3)
+       1115(dti):   1114(ptr) Variable Input
+       4(CSMain):           2 Function None 3
+               5:             Label
+       1113(dti):      8(ptr) Variable Function
+     1117(param):      8(ptr) Variable Function
+            1116:    7(ivec3) Load 1115(dti)
+                              Store 1113(dti) 1116
+            1118:    7(ivec3) Load 1113(dti)
+                              Store 1117(param) 1118
+            1119:           2 FunctionCall 11(@CSMain(vu3;) 1117(param)
+                              Return
+                              FunctionEnd
+11(@CSMain(vu3;):           2 Function None 9
+         10(dti):      8(ptr) FunctionParameter
+              12:             Label
+              28:     27(ptr) AccessChain 10(dti) 26
+              29:      6(int) Load 28
+              30:     27(ptr) AccessChain 10(dti) 26
+              31:      6(int) Load 30
+              33:     32(ptr) AccessChain 24(data) 25 31 25
+              34:   13(ivec4) Load 33
+              36:   13(ivec4) GroupNonUniformQuadBroadcast 35 34 26
+              37:     32(ptr) AccessChain 24(data) 25 29 25
+                              Store 37 36
+              38:     27(ptr) AccessChain 10(dti) 26
+              39:      6(int) Load 38
+              40:     27(ptr) AccessChain 10(dti) 26
+              41:      6(int) Load 40
+              43:     42(ptr) AccessChain 24(data) 25 41 25 26
+              44:      6(int) Load 43
+              45:      6(int) GroupNonUniformQuadBroadcast 35 44 26
+              46:     42(ptr) AccessChain 24(data) 25 39 25 26
+                              Store 46 45
+              47:     27(ptr) AccessChain 10(dti) 26
+              48:      6(int) Load 47
+              49:     27(ptr) AccessChain 10(dti) 26
+              50:      6(int) Load 49
+              52:     32(ptr) AccessChain 24(data) 25 50 25
+              53:   13(ivec4) Load 52
+              54:   51(ivec2) VectorShuffle 53 53 0 1
+              55:   51(ivec2) GroupNonUniformQuadBroadcast 35 54 26
+              56:     32(ptr) AccessChain 24(data) 25 48 25
+              57:   13(ivec4) Load 56
+              58:   13(ivec4) VectorShuffle 57 55 4 5 2 3
+                              Store 56 58
+              59:     27(ptr) AccessChain 10(dti) 26
+              60:      6(int) Load 59
+              61:     27(ptr) AccessChain 10(dti) 26
+              62:      6(int) Load 61
+              63:     32(ptr) AccessChain 24(data) 25 62 25
+              64:   13(ivec4) Load 63
+              65:    7(ivec3) VectorShuffle 64 64 0 1 2
+              66:    7(ivec3) GroupNonUniformQuadBroadcast 35 65 26
+              67:     32(ptr) AccessChain 24(data) 25 60 25
+              68:   13(ivec4) Load 67
+              69:   13(ivec4) VectorShuffle 68 66 4 5 6 3
+                              Store 67 69
+              70:     27(ptr) AccessChain 10(dti) 26
+              71:      6(int) Load 70
+              73:     27(ptr) AccessChain 10(dti) 26
+              74:      6(int) Load 73
+              76:     75(ptr) AccessChain 24(data) 25 74 72
+              77:   15(ivec4) Load 76
+              78:   15(ivec4) GroupNonUniformQuadBroadcast 35 77 26
+              79:     75(ptr) AccessChain 24(data) 25 71 72
+                              Store 79 78
+              80:     27(ptr) AccessChain 10(dti) 26
+              81:      6(int) Load 80
+              82:     27(ptr) AccessChain 10(dti) 26
+              83:      6(int) Load 82
+              85:     84(ptr) AccessChain 24(data) 25 83 72 26
+              86:     14(int) Load 85
+              87:     14(int) GroupNonUniformQuadBroadcast 35 86 26
+              88:     84(ptr) AccessChain 24(data) 25 81 72 26
+                              Store 88 87
+              89:     27(ptr) AccessChain 10(dti) 26
+              90:      6(int) Load 89
+              91:     27(ptr) AccessChain 10(dti) 26
+              92:      6(int) Load 91
+              94:     75(ptr) AccessChain 24(data) 25 92 72
+              95:   15(ivec4) Load 94
+              96:   93(ivec2) VectorShuffle 95 95 0 1
+              97:   93(ivec2) GroupNonUniformQuadBroadcast 35 96 26
+              98:     75(ptr) AccessChain 24(data) 25 90 72
+              99:   15(ivec4) Load 98
+             100:   15(ivec4) VectorShuffle 99 97 4 5 2 3
+                              Store 98 100
+             101:     27(ptr) AccessChain 10(dti) 26
+             102:      6(int) Load 101
+             103:     27(ptr) AccessChain 10(dti) 26
+             104:      6(int) Load 103
+             106:     75(ptr) AccessChain 24(data) 25 104 72
+             107:   15(ivec4) Load 106
+             108:  105(ivec3) VectorShuffle 107 107 0 1 2
+             109:  105(ivec3) GroupNonUniformQuadBroadcast 35 108 26
+             110:     75(ptr) AccessChain 24(data) 25 102 72
+             111:   15(ivec4) Load 110
+             112:   15(ivec4) VectorShuffle 111 109 4 5 6 3
+                              Store 110 112
+             113:     27(ptr) AccessChain 10(dti) 26
+             114:      6(int) Load 113
+             116:     27(ptr) AccessChain 10(dti) 26
+             117:      6(int) Load 116
+             119:    118(ptr) AccessChain 24(data) 25 117 115
+             120:   17(fvec4) Load 119
+             121:   17(fvec4) GroupNonUniformQuadBroadcast 35 120 26
+             122:    118(ptr) AccessChain 24(data) 25 114 115
+                              Store 122 121
+             123:     27(ptr) AccessChain 10(dti) 26
+             124:      6(int) Load 123
+             125:     27(ptr) AccessChain 10(dti) 26
+             126:      6(int) Load 125
+             128:    127(ptr) AccessChain 24(data) 25 126 115 26
+             129:   16(float) Load 128
+             130:   16(float) GroupNonUniformQuadBroadcast 35 129 26
+             131:    127(ptr) AccessChain 24(data) 25 124 115 26
+                              Store 131 130
+             132:     27(ptr) AccessChain 10(dti) 26
+             133:      6(int) Load 132
+             134:     27(ptr) AccessChain 10(dti) 26
+             135:      6(int) Load 134
+             137:    118(ptr) AccessChain 24(data) 25 135 115
+             138:   17(fvec4) Load 137
+             139:  136(fvec2) VectorShuffle 138 138 0 1
+             140:  136(fvec2) GroupNonUniformQuadBroadcast 35 139 26
+             141:    118(ptr) AccessChain 24(data) 25 133 115
+             142:   17(fvec4) Load 141
+             143:   17(fvec4) VectorShuffle 142 140 4 5 2 3
+                              Store 141 143
+             144:     27(ptr) AccessChain 10(dti) 26
+             145:      6(int) Load 144
+             146:     27(ptr) AccessChain 10(dti) 26
+             147:      6(int) Load 146
+             149:    118(ptr) AccessChain 24(data) 25 147 115
+             150:   17(fvec4) Load 149
+             151:  148(fvec3) VectorShuffle 150 150 0 1 2
+             152:  148(fvec3) GroupNonUniformQuadBroadcast 35 151 26
+             153:    118(ptr) AccessChain 24(data) 25 145 115
+             154:   17(fvec4) Load 153
+             155:   17(fvec4) VectorShuffle 154 152 4 5 6 3
+                              Store 153 155
+             156:     27(ptr) AccessChain 10(dti) 26
+             157:      6(int) Load 156
+             159:     27(ptr) AccessChain 10(dti) 26
+             160:      6(int) Load 159
+             162:    161(ptr) AccessChain 24(data) 25 160 158
+             163:   19(fvec4) Load 162
+             164:   19(fvec4) GroupNonUniformQuadBroadcast 35 163 26
+             165:    161(ptr) AccessChain 24(data) 25 157 158
+                              Store 165 164
+             166:     27(ptr) AccessChain 10(dti) 26
+             167:      6(int) Load 166
+             168:     27(ptr) AccessChain 10(dti) 26
+             169:      6(int) Load 168
+             171:    170(ptr) AccessChain 24(data) 25 169 158 26
+             172:   18(float) Load 171
+             173:   18(float) GroupNonUniformQuadBroadcast 35 172 26
+             174:    170(ptr) AccessChain 24(data) 25 167 158 26
+                              Store 174 173
+             175:     27(ptr) AccessChain 10(dti) 26
+             176:      6(int) Load 175
+             177:     27(ptr) AccessChain 10(dti) 26
+             178:      6(int) Load 177
+             180:    161(ptr) AccessChain 24(data) 25 178 158
+             181:   19(fvec4) Load 180
+             182:  179(fvec2) VectorShuffle 181 181 0 1
+             183:  179(fvec2) GroupNonUniformQuadBroadcast 35 182 26
+             184:    161(ptr) AccessChain 24(data) 25 176 158
+             185:   19(fvec4) Load 184
+             186:   19(fvec4) VectorShuffle 185 183 4 5 2 3
+                              Store 184 186
+             187:     27(ptr) AccessChain 10(dti) 26
+             188:      6(int) Load 187
+             189:     27(ptr) AccessChain 10(dti) 26
+             190:      6(int) Load 189
+             192:    161(ptr) AccessChain 24(data) 25 190 158
+             193:   19(fvec4) Load 192
+             194:  191(fvec3) VectorShuffle 193 193 0 1 2
+             195:  191(fvec3) GroupNonUniformQuadBroadcast 35 194 26
+             196:    161(ptr) AccessChain 24(data) 25 188 158
+             197:   19(fvec4) Load 196
+             198:   19(fvec4) VectorShuffle 197 195 4 5 6 3
+                              Store 196 198
+             199:     27(ptr) AccessChain 10(dti) 26
+             200:      6(int) Load 199
+             201:     27(ptr) AccessChain 10(dti) 26
+             202:      6(int) Load 201
+             203:     32(ptr) AccessChain 24(data) 25 202 25
+             204:   13(ivec4) Load 203
+             206:   13(ivec4) GroupNonUniformQuadBroadcast 35 204 205
+             207:     32(ptr) AccessChain 24(data) 25 200 25
+                              Store 207 206
+             208:     27(ptr) AccessChain 10(dti) 26
+             209:      6(int) Load 208
+             210:     27(ptr) AccessChain 10(dti) 26
+             211:      6(int) Load 210
+             212:     42(ptr) AccessChain 24(data) 25 211 25 26
+             213:      6(int) Load 212
+             214:      6(int) GroupNonUniformQuadBroadcast 35 213 205
+             215:     42(ptr) AccessChain 24(data) 25 209 25 26
+                              Store 215 214
+             216:     27(ptr) AccessChain 10(dti) 26
+             217:      6(int) Load 216
+             218:     27(ptr) AccessChain 10(dti) 26
+             219:      6(int) Load 218
+             220:     32(ptr) AccessChain 24(data) 25 219 25
+             221:   13(ivec4) Load 220
+             222:   51(ivec2) VectorShuffle 221 221 0 1
+             223:   51(ivec2) GroupNonUniformQuadBroadcast 35 222 205
+             224:     32(ptr) AccessChain 24(data) 25 217 25
+             225:   13(ivec4) Load 224
+             226:   13(ivec4) VectorShuffle 225 223 4 5 2 3
+                              Store 224 226
+             227:     27(ptr) AccessChain 10(dti) 26
+             228:      6(int) Load 227
+             229:     27(ptr) AccessChain 10(dti) 26
+             230:      6(int) Load 229
+             231:     32(ptr) AccessChain 24(data) 25 230 25
+             232:   13(ivec4) Load 231
+             233:    7(ivec3) VectorShuffle 232 232 0 1 2
+             234:    7(ivec3) GroupNonUniformQuadBroadcast 35 233 205
+             235:     32(ptr) AccessChain 24(data) 25 228 25
+             236:   13(ivec4) Load 235
+             237:   13(ivec4) VectorShuffle 236 234 4 5 6 3
+                              Store 235 237
+             238:     27(ptr) AccessChain 10(dti) 26
+             239:      6(int) Load 238
+             240:     27(ptr) AccessChain 10(dti) 26
+             241:      6(int) Load 240
+             242:     75(ptr) AccessChain 24(data) 25 241 72
+             243:   15(ivec4) Load 242
+             244:   15(ivec4) GroupNonUniformQuadBroadcast 35 243 205
+             245:     75(ptr) AccessChain 24(data) 25 239 72
+                              Store 245 244
+             246:     27(ptr) AccessChain 10(dti) 26
+             247:      6(int) Load 246
+             248:     27(ptr) AccessChain 10(dti) 26
+             249:      6(int) Load 248
+             250:     84(ptr) AccessChain 24(data) 25 249 72 26
+             251:     14(int) Load 250
+             252:     14(int) GroupNonUniformQuadBroadcast 35 251 205
+             253:     84(ptr) AccessChain 24(data) 25 247 72 26
+                              Store 253 252
+             254:     27(ptr) AccessChain 10(dti) 26
+             255:      6(int) Load 254
+             256:     27(ptr) AccessChain 10(dti) 26
+             257:      6(int) Load 256
+             258:     75(ptr) AccessChain 24(data) 25 257 72
+             259:   15(ivec4) Load 258
+             260:   93(ivec2) VectorShuffle 259 259 0 1
+             261:   93(ivec2) GroupNonUniformQuadBroadcast 35 260 205
+             262:     75(ptr) AccessChain 24(data) 25 255 72
+             263:   15(ivec4) Load 262
+             264:   15(ivec4) VectorShuffle 263 261 4 5 2 3
+                              Store 262 264
+             265:     27(ptr) AccessChain 10(dti) 26
+             266:      6(int) Load 265
+             267:     27(ptr) AccessChain 10(dti) 26
+             268:      6(int) Load 267
+             269:     75(ptr) AccessChain 24(data) 25 268 72
+             270:   15(ivec4) Load 269
+             271:  105(ivec3) VectorShuffle 270 270 0 1 2
+             272:  105(ivec3) GroupNonUniformQuadBroadcast 35 271 205
+             273:     75(ptr) AccessChain 24(data) 25 266 72
+             274:   15(ivec4) Load 273
+             275:   15(ivec4) VectorShuffle 274 272 4 5 6 3
+                              Store 273 275
+             276:     27(ptr) AccessChain 10(dti) 26
+             277:      6(int) Load 276
+             278:     27(ptr) AccessChain 10(dti) 26
+             279:      6(int) Load 278
+             280:    118(ptr) AccessChain 24(data) 25 279 115
+             281:   17(fvec4) Load 280
+             282:   17(fvec4) GroupNonUniformQuadBroadcast 35 281 205
+             283:    118(ptr) AccessChain 24(data) 25 277 115
+                              Store 283 282
+             284:     27(ptr) AccessChain 10(dti) 26
+             285:      6(int) Load 284
+             286:     27(ptr) AccessChain 10(dti) 26
+             287:      6(int) Load 286
+             288:    127(ptr) AccessChain 24(data) 25 287 115 26
+             289:   16(float) Load 288
+             290:   16(float) GroupNonUniformQuadBroadcast 35 289 205
+             291:    127(ptr) AccessChain 24(data) 25 285 115 26
+                              Store 291 290
+             292:     27(ptr) AccessChain 10(dti) 26
+             293:      6(int) Load 292
+             294:     27(ptr) AccessChain 10(dti) 26
+             295:      6(int) Load 294
+             296:    118(ptr) AccessChain 24(data) 25 295 115
+             297:   17(fvec4) Load 296
+             298:  136(fvec2) VectorShuffle 297 297 0 1
+             299:  136(fvec2) GroupNonUniformQuadBroadcast 35 298 205
+             300:    118(ptr) AccessChain 24(data) 25 293 115
+             301:   17(fvec4) Load 300
+             302:   17(fvec4) VectorShuffle 301 299 4 5 2 3
+                              Store 300 302
+             303:     27(ptr) AccessChain 10(dti) 26
+             304:      6(int) Load 303
+             305:     27(ptr) AccessChain 10(dti) 26
+             306:      6(int) Load 305
+             307:    118(ptr) AccessChain 24(data) 25 306 115
+             308:   17(fvec4) Load 307
+             309:  148(fvec3) VectorShuffle 308 308 0 1 2
+             310:  148(fvec3) GroupNonUniformQuadBroadcast 35 309 205
+             311:    118(ptr) AccessChain 24(data) 25 304 115
+             312:   17(fvec4) Load 311
+             313:   17(fvec4) VectorShuffle 312 310 4 5 6 3
+                              Store 311 313
+             314:     27(ptr) AccessChain 10(dti) 26
+             315:      6(int) Load 314
+             316:     27(ptr) AccessChain 10(dti) 26
+             317:      6(int) Load 316
+             318:    161(ptr) AccessChain 24(data) 25 317 158
+             319:   19(fvec4) Load 318
+             320:   19(fvec4) GroupNonUniformQuadBroadcast 35 319 205
+             321:    161(ptr) AccessChain 24(data) 25 315 158
+                              Store 321 320
+             322:     27(ptr) AccessChain 10(dti) 26
+             323:      6(int) Load 322
+             324:     27(ptr) AccessChain 10(dti) 26
+             325:      6(int) Load 324
+             326:    170(ptr) AccessChain 24(data) 25 325 158 26
+             327:   18(float) Load 326
+             328:   18(float) GroupNonUniformQuadBroadcast 35 327 205
+             329:    170(ptr) AccessChain 24(data) 25 323 158 26
+                              Store 329 328
+             330:     27(ptr) AccessChain 10(dti) 26
+             331:      6(int) Load 330
+             332:     27(ptr) AccessChain 10(dti) 26
+             333:      6(int) Load 332
+             334:    161(ptr) AccessChain 24(data) 25 333 158
+             335:   19(fvec4) Load 334
+             336:  179(fvec2) VectorShuffle 335 335 0 1
+             337:  179(fvec2) GroupNonUniformQuadBroadcast 35 336 205
+             338:    161(ptr) AccessChain 24(data) 25 331 158
+             339:   19(fvec4) Load 338
+             340:   19(fvec4) VectorShuffle 339 337 4 5 2 3
+                              Store 338 340
+             341:     27(ptr) AccessChain 10(dti) 26
+             342:      6(int) Load 341
+             343:     27(ptr) AccessChain 10(dti) 26
+             344:      6(int) Load 343
+             345:    161(ptr) AccessChain 24(data) 25 344 158
+             346:   19(fvec4) Load 345
+             347:  191(fvec3) VectorShuffle 346 346 0 1 2
+             348:  191(fvec3) GroupNonUniformQuadBroadcast 35 347 205
+             349:    161(ptr) AccessChain 24(data) 25 342 158
+             350:   19(fvec4) Load 349
+             351:   19(fvec4) VectorShuffle 350 348 4 5 6 3
+                              Store 349 351
+             352:     27(ptr) AccessChain 10(dti) 26
+             353:      6(int) Load 352
+             354:     27(ptr) AccessChain 10(dti) 26
+             355:      6(int) Load 354
+             356:     32(ptr) AccessChain 24(data) 25 355 25
+             357:   13(ivec4) Load 356
+             359:   13(ivec4) GroupNonUniformQuadBroadcast 35 357 358
+             360:     32(ptr) AccessChain 24(data) 25 353 25
+                              Store 360 359
+             361:     27(ptr) AccessChain 10(dti) 26
+             362:      6(int) Load 361
+             363:     27(ptr) AccessChain 10(dti) 26
+             364:      6(int) Load 363
+             365:     42(ptr) AccessChain 24(data) 25 364 25 26
+             366:      6(int) Load 365
+             367:      6(int) GroupNonUniformQuadBroadcast 35 366 358
+             368:     42(ptr) AccessChain 24(data) 25 362 25 26
+                              Store 368 367
+             369:     27(ptr) AccessChain 10(dti) 26
+             370:      6(int) Load 369
+             371:     27(ptr) AccessChain 10(dti) 26
+             372:      6(int) Load 371
+             373:     32(ptr) AccessChain 24(data) 25 372 25
+             374:   13(ivec4) Load 373
+             375:   51(ivec2) VectorShuffle 374 374 0 1
+             376:   51(ivec2) GroupNonUniformQuadBroadcast 35 375 358
+             377:     32(ptr) AccessChain 24(data) 25 370 25
+             378:   13(ivec4) Load 377
+             379:   13(ivec4) VectorShuffle 378 376 4 5 2 3
+                              Store 377 379
+             380:     27(ptr) AccessChain 10(dti) 26
+             381:      6(int) Load 380
+             382:     27(ptr) AccessChain 10(dti) 26
+             383:      6(int) Load 382
+             384:     32(ptr) AccessChain 24(data) 25 383 25
+             385:   13(ivec4) Load 384
+             386:    7(ivec3) VectorShuffle 385 385 0 1 2
+             387:    7(ivec3) GroupNonUniformQuadBroadcast 35 386 358
+             388:     32(ptr) AccessChain 24(data) 25 381 25
+             389:   13(ivec4) Load 388
+             390:   13(ivec4) VectorShuffle 389 387 4 5 6 3
+                              Store 388 390
+             391:     27(ptr) AccessChain 10(dti) 26
+             392:      6(int) Load 391
+             393:     27(ptr) AccessChain 10(dti) 26
+             394:      6(int) Load 393
+             395:     75(ptr) AccessChain 24(data) 25 394 72
+             396:   15(ivec4) Load 395
+             397:   15(ivec4) GroupNonUniformQuadBroadcast 35 396 358
+             398:     75(ptr) AccessChain 24(data) 25 392 72
+                              Store 398 397
+             399:     27(ptr) AccessChain 10(dti) 26
+             400:      6(int) Load 399
+             401:     27(ptr) AccessChain 10(dti) 26
+             402:      6(int) Load 401
+             403:     84(ptr) AccessChain 24(data) 25 402 72 26
+             404:     14(int) Load 403
+             405:     14(int) GroupNonUniformQuadBroadcast 35 404 358
+             406:     84(ptr) AccessChain 24(data) 25 400 72 26
+                              Store 406 405
+             407:     27(ptr) AccessChain 10(dti) 26
+             408:      6(int) Load 407
+             409:     27(ptr) AccessChain 10(dti) 26
+             410:      6(int) Load 409
+             411:     75(ptr) AccessChain 24(data) 25 410 72
+             412:   15(ivec4) Load 411
+             413:   93(ivec2) VectorShuffle 412 412 0 1
+             414:   93(ivec2) GroupNonUniformQuadBroadcast 35 413 358
+             415:     75(ptr) AccessChain 24(data) 25 408 72
+             416:   15(ivec4) Load 415
+             417:   15(ivec4) VectorShuffle 416 414 4 5 2 3
+                              Store 415 417
+             418:     27(ptr) AccessChain 10(dti) 26
+             419:      6(int) Load 418
+             420:     27(ptr) AccessChain 10(dti) 26
+             421:      6(int) Load 420
+             422:     75(ptr) AccessChain 24(data) 25 421 72
+             423:   15(ivec4) Load 422
+             424:  105(ivec3) VectorShuffle 423 423 0 1 2
+             425:  105(ivec3) GroupNonUniformQuadBroadcast 35 424 358
+             426:     75(ptr) AccessChain 24(data) 25 419 72
+             427:   15(ivec4) Load 426
+             428:   15(ivec4) VectorShuffle 427 425 4 5 6 3
+                              Store 426 428
+             429:     27(ptr) AccessChain 10(dti) 26
+             430:      6(int) Load 429
+             431:     27(ptr) AccessChain 10(dti) 26
+             432:      6(int) Load 431
+             433:    118(ptr) AccessChain 24(data) 25 432 115
+             434:   17(fvec4) Load 433
+             435:   17(fvec4) GroupNonUniformQuadBroadcast 35 434 358
+             436:    118(ptr) AccessChain 24(data) 25 430 115
+                              Store 436 435
+             437:     27(ptr) AccessChain 10(dti) 26
+             438:      6(int) Load 437
+             439:     27(ptr) AccessChain 10(dti) 26
+             440:      6(int) Load 439
+             441:    127(ptr) AccessChain 24(data) 25 440 115 26
+             442:   16(float) Load 441
+             443:   16(float) GroupNonUniformQuadBroadcast 35 442 358
+             444:    127(ptr) AccessChain 24(data) 25 438 115 26
+                              Store 444 443
+             445:     27(ptr) AccessChain 10(dti) 26
+             446:      6(int) Load 445
+             447:     27(ptr) AccessChain 10(dti) 26
+             448:      6(int) Load 447
+             449:    118(ptr) AccessChain 24(data) 25 448 115
+             450:   17(fvec4) Load 449
+             451:  136(fvec2) VectorShuffle 450 450 0 1
+             452:  136(fvec2) GroupNonUniformQuadBroadcast 35 451 358
+             453:    118(ptr) AccessChain 24(data) 25 446 115
+             454:   17(fvec4) Load 453
+             455:   17(fvec4) VectorShuffle 454 452 4 5 2 3
+                              Store 453 455
+             456:     27(ptr) AccessChain 10(dti) 26
+             457:      6(int) Load 456
+             458:     27(ptr) AccessChain 10(dti) 26
+             459:      6(int) Load 458
+             460:    118(ptr) AccessChain 24(data) 25 459 115
+             461:   17(fvec4) Load 460
+             462:  148(fvec3) VectorShuffle 461 461 0 1 2
+             463:  148(fvec3) GroupNonUniformQuadBroadcast 35 462 358
+             464:    118(ptr) AccessChain 24(data) 25 457 115
+             465:   17(fvec4) Load 464
+             466:   17(fvec4) VectorShuffle 465 463 4 5 6 3
+                              Store 464 466
+             467:     27(ptr) AccessChain 10(dti) 26
+             468:      6(int) Load 467
+             469:     27(ptr) AccessChain 10(dti) 26
+             470:      6(int) Load 469
+             471:    161(ptr) AccessChain 24(data) 25 470 158
+             472:   19(fvec4) Load 471
+             473:   19(fvec4) GroupNonUniformQuadBroadcast 35 472 358
+             474:    161(ptr) AccessChain 24(data) 25 468 158
+                              Store 474 473
+             475:     27(ptr) AccessChain 10(dti) 26
+             476:      6(int) Load 475
+             477:     27(ptr) AccessChain 10(dti) 26
+             478:      6(int) Load 477
+             479:    170(ptr) AccessChain 24(data) 25 478 158 26
+             480:   18(float) Load 479
+             481:   18(float) GroupNonUniformQuadBroadcast 35 480 358
+             482:    170(ptr) AccessChain 24(data) 25 476 158 26
+                              Store 482 481
+             483:     27(ptr) AccessChain 10(dti) 26
+             484:      6(int) Load 483
+             485:     27(ptr) AccessChain 10(dti) 26
+             486:      6(int) Load 485
+             487:    161(ptr) AccessChain 24(data) 25 486 158
+             488:   19(fvec4) Load 487
+             489:  179(fvec2) VectorShuffle 488 488 0 1
+             490:  179(fvec2) GroupNonUniformQuadBroadcast 35 489 358
+             491:    161(ptr) AccessChain 24(data) 25 484 158
+             492:   19(fvec4) Load 491
+             493:   19(fvec4) VectorShuffle 492 490 4 5 2 3
+                              Store 491 493
+             494:     27(ptr) AccessChain 10(dti) 26
+             495:      6(int) Load 494
+             496:     27(ptr) AccessChain 10(dti) 26
+             497:      6(int) Load 496
+             498:    161(ptr) AccessChain 24(data) 25 497 158
+             499:   19(fvec4) Load 498
+             500:  191(fvec3) VectorShuffle 499 499 0 1 2
+             501:  191(fvec3) GroupNonUniformQuadBroadcast 35 500 358
+             502:    161(ptr) AccessChain 24(data) 25 495 158
+             503:   19(fvec4) Load 502
+             504:   19(fvec4) VectorShuffle 503 501 4 5 6 3
+                              Store 502 504
+             505:     27(ptr) AccessChain 10(dti) 26
+             506:      6(int) Load 505
+             507:     27(ptr) AccessChain 10(dti) 26
+             508:      6(int) Load 507
+             509:     32(ptr) AccessChain 24(data) 25 508 25
+             510:   13(ivec4) Load 509
+             511:   13(ivec4) GroupNonUniformQuadBroadcast 35 510 35
+             512:     32(ptr) AccessChain 24(data) 25 506 25
+                              Store 512 511
+             513:     27(ptr) AccessChain 10(dti) 26
+             514:      6(int) Load 513
+             515:     27(ptr) AccessChain 10(dti) 26
+             516:      6(int) Load 515
+             517:     42(ptr) AccessChain 24(data) 25 516 25 26
+             518:      6(int) Load 517
+             519:      6(int) GroupNonUniformQuadBroadcast 35 518 35
+             520:     42(ptr) AccessChain 24(data) 25 514 25 26
+                              Store 520 519
+             521:     27(ptr) AccessChain 10(dti) 26
+             522:      6(int) Load 521
+             523:     27(ptr) AccessChain 10(dti) 26
+             524:      6(int) Load 523
+             525:     32(ptr) AccessChain 24(data) 25 524 25
+             526:   13(ivec4) Load 525
+             527:   51(ivec2) VectorShuffle 526 526 0 1
+             528:   51(ivec2) GroupNonUniformQuadBroadcast 35 527 35
+             529:     32(ptr) AccessChain 24(data) 25 522 25
+             530:   13(ivec4) Load 529
+             531:   13(ivec4) VectorShuffle 530 528 4 5 2 3
+                              Store 529 531
+             532:     27(ptr) AccessChain 10(dti) 26
+             533:      6(int) Load 532
+             534:     27(ptr) AccessChain 10(dti) 26
+             535:      6(int) Load 534
+             536:     32(ptr) AccessChain 24(data) 25 535 25
+             537:   13(ivec4) Load 536
+             538:    7(ivec3) VectorShuffle 537 537 0 1 2
+             539:    7(ivec3) GroupNonUniformQuadBroadcast 35 538 35
+             540:     32(ptr) AccessChain 24(data) 25 533 25
+             541:   13(ivec4) Load 540
+             542:   13(ivec4) VectorShuffle 541 539 4 5 6 3
+                              Store 540 542
+             543:     27(ptr) AccessChain 10(dti) 26
+             544:      6(int) Load 543
+             545:     27(ptr) AccessChain 10(dti) 26
+             546:      6(int) Load 545
+             547:     75(ptr) AccessChain 24(data) 25 546 72
+             548:   15(ivec4) Load 547
+             549:   15(ivec4) GroupNonUniformQuadBroadcast 35 548 35
+             550:     75(ptr) AccessChain 24(data) 25 544 72
+                              Store 550 549
+             551:     27(ptr) AccessChain 10(dti) 26
+             552:      6(int) Load 551
+             553:     27(ptr) AccessChain 10(dti) 26
+             554:      6(int) Load 553
+             555:     84(ptr) AccessChain 24(data) 25 554 72 26
+             556:     14(int) Load 555
+             557:     14(int) GroupNonUniformQuadBroadcast 35 556 35
+             558:     84(ptr) AccessChain 24(data) 25 552 72 26
+                              Store 558 557
+             559:     27(ptr) AccessChain 10(dti) 26
+             560:      6(int) Load 559
+             561:     27(ptr) AccessChain 10(dti) 26
+             562:      6(int) Load 561
+             563:     75(ptr) AccessChain 24(data) 25 562 72
+             564:   15(ivec4) Load 563
+             565:   93(ivec2) VectorShuffle 564 564 0 1
+             566:   93(ivec2) GroupNonUniformQuadBroadcast 35 565 35
+             567:     75(ptr) AccessChain 24(data) 25 560 72
+             568:   15(ivec4) Load 567
+             569:   15(ivec4) VectorShuffle 568 566 4 5 2 3
+                              Store 567 569
+             570:     27(ptr) AccessChain 10(dti) 26
+             571:      6(int) Load 570
+             572:     27(ptr) AccessChain 10(dti) 26
+             573:      6(int) Load 572
+             574:     75(ptr) AccessChain 24(data) 25 573 72
+             575:   15(ivec4) Load 574
+             576:  105(ivec3) VectorShuffle 575 575 0 1 2
+             577:  105(ivec3) GroupNonUniformQuadBroadcast 35 576 35
+             578:     75(ptr) AccessChain 24(data) 25 571 72
+             579:   15(ivec4) Load 578
+             580:   15(ivec4) VectorShuffle 579 577 4 5 6 3
+                              Store 578 580
+             581:     27(ptr) AccessChain 10(dti) 26
+             582:      6(int) Load 581
+             583:     27(ptr) AccessChain 10(dti) 26
+             584:      6(int) Load 583
+             585:    118(ptr) AccessChain 24(data) 25 584 115
+             586:   17(fvec4) Load 585
+             587:   17(fvec4) GroupNonUniformQuadBroadcast 35 586 35
+             588:    118(ptr) AccessChain 24(data) 25 582 115
+                              Store 588 587
+             589:     27(ptr) AccessChain 10(dti) 26
+             590:      6(int) Load 589
+             591:     27(ptr) AccessChain 10(dti) 26
+             592:      6(int) Load 591
+             593:    127(ptr) AccessChain 24(data) 25 592 115 26
+             594:   16(float) Load 593
+             595:   16(float) GroupNonUniformQuadBroadcast 35 594 35
+             596:    127(ptr) AccessChain 24(data) 25 590 115 26
+                              Store 596 595
+             597:     27(ptr) AccessChain 10(dti) 26
+             598:      6(int) Load 597
+             599:     27(ptr) AccessChain 10(dti) 26
+             600:      6(int) Load 599
+             601:    118(ptr) AccessChain 24(data) 25 600 115
+             602:   17(fvec4) Load 601
+             603:  136(fvec2) VectorShuffle 602 602 0 1
+             604:  136(fvec2) GroupNonUniformQuadBroadcast 35 603 35
+             605:    118(ptr) AccessChain 24(data) 25 598 115
+             606:   17(fvec4) Load 605
+             607:   17(fvec4) VectorShuffle 606 604 4 5 2 3
+                              Store 605 607
+             608:     27(ptr) AccessChain 10(dti) 26
+             609:      6(int) Load 608
+             610:     27(ptr) AccessChain 10(dti) 26
+             611:      6(int) Load 610
+             612:    118(ptr) AccessChain 24(data) 25 611 115
+             613:   17(fvec4) Load 612
+             614:  148(fvec3) VectorShuffle 613 613 0 1 2
+             615:  148(fvec3) GroupNonUniformQuadBroadcast 35 614 35
+             616:    118(ptr) AccessChain 24(data) 25 609 115
+             617:   17(fvec4) Load 616
+             618:   17(fvec4) VectorShuffle 617 615 4 5 6 3
+                              Store 616 618
+             619:     27(ptr) AccessChain 10(dti) 26
+             620:      6(int) Load 619
+             621:     27(ptr) AccessChain 10(dti) 26
+             622:      6(int) Load 621
+             623:    161(ptr) AccessChain 24(data) 25 622 158
+             624:   19(fvec4) Load 623
+             625:   19(fvec4) GroupNonUniformQuadBroadcast 35 624 35
+             626:    161(ptr) AccessChain 24(data) 25 620 158
+                              Store 626 625
+             627:     27(ptr) AccessChain 10(dti) 26
+             628:      6(int) Load 627
+             629:     27(ptr) AccessChain 10(dti) 26
+             630:      6(int) Load 629
+             631:    170(ptr) AccessChain 24(data) 25 630 158 26
+             632:   18(float) Load 631
+             633:   18(float) GroupNonUniformQuadBroadcast 35 632 35
+             634:    170(ptr) AccessChain 24(data) 25 628 158 26
+                              Store 634 633
+             635:     27(ptr) AccessChain 10(dti) 26
+             636:      6(int) Load 635
+             637:     27(ptr) AccessChain 10(dti) 26
+             638:      6(int) Load 637
+             639:    161(ptr) AccessChain 24(data) 25 638 158
+             640:   19(fvec4) Load 639
+             641:  179(fvec2) VectorShuffle 640 640 0 1
+             642:  179(fvec2) GroupNonUniformQuadBroadcast 35 641 35
+             643:    161(ptr) AccessChain 24(data) 25 636 158
+             644:   19(fvec4) Load 643
+             645:   19(fvec4) VectorShuffle 644 642 4 5 2 3
+                              Store 643 645
+             646:     27(ptr) AccessChain 10(dti) 26
+             647:      6(int) Load 646
+             648:     27(ptr) AccessChain 10(dti) 26
+             649:      6(int) Load 648
+             650:    161(ptr) AccessChain 24(data) 25 649 158
+             651:   19(fvec4) Load 650
+             652:  191(fvec3) VectorShuffle 651 651 0 1 2
+             653:  191(fvec3) GroupNonUniformQuadBroadcast 35 652 35
+             654:    161(ptr) AccessChain 24(data) 25 647 158
+             655:   19(fvec4) Load 654
+             656:   19(fvec4) VectorShuffle 655 653 4 5 6 3
+                              Store 654 656
+             657:     27(ptr) AccessChain 10(dti) 26
+             658:      6(int) Load 657
+             659:     27(ptr) AccessChain 10(dti) 26
+             660:      6(int) Load 659
+             661:     32(ptr) AccessChain 24(data) 25 660 25
+             662:   13(ivec4) Load 661
+             663:   13(ivec4) GroupNonUniformQuadSwap 35 662 26
+             664:     32(ptr) AccessChain 24(data) 25 658 25
+                              Store 664 663
+             665:     27(ptr) AccessChain 10(dti) 26
+             666:      6(int) Load 665
+             667:     27(ptr) AccessChain 10(dti) 26
+             668:      6(int) Load 667
+             669:     42(ptr) AccessChain 24(data) 25 668 25 26
+             670:      6(int) Load 669
+             671:      6(int) GroupNonUniformQuadSwap 35 670 26
+             672:     42(ptr) AccessChain 24(data) 25 666 25 26
+                              Store 672 671
+             673:     27(ptr) AccessChain 10(dti) 26
+             674:      6(int) Load 673
+             675:     27(ptr) AccessChain 10(dti) 26
+             676:      6(int) Load 675
+             677:     32(ptr) AccessChain 24(data) 25 676 25
+             678:   13(ivec4) Load 677
+             679:   51(ivec2) VectorShuffle 678 678 0 1
+             680:   51(ivec2) GroupNonUniformQuadSwap 35 679 26
+             681:     32(ptr) AccessChain 24(data) 25 674 25
+             682:   13(ivec4) Load 681
+             683:   13(ivec4) VectorShuffle 682 680 4 5 2 3
+                              Store 681 683
+             684:     27(ptr) AccessChain 10(dti) 26
+             685:      6(int) Load 684
+             686:     27(ptr) AccessChain 10(dti) 26
+             687:      6(int) Load 686
+             688:     32(ptr) AccessChain 24(data) 25 687 25
+             689:   13(ivec4) Load 688
+             690:    7(ivec3) VectorShuffle 689 689 0 1 2
+             691:    7(ivec3) GroupNonUniformQuadSwap 35 690 26
+             692:     32(ptr) AccessChain 24(data) 25 685 25
+             693:   13(ivec4) Load 692
+             694:   13(ivec4) VectorShuffle 693 691 4 5 6 3
+                              Store 692 694
+             695:     27(ptr) AccessChain 10(dti) 26
+             696:      6(int) Load 695
+             697:     27(ptr) AccessChain 10(dti) 26
+             698:      6(int) Load 697
+             699:     75(ptr) AccessChain 24(data) 25 698 72
+             700:   15(ivec4) Load 699
+             701:   15(ivec4) GroupNonUniformQuadSwap 35 700 26
+             702:     75(ptr) AccessChain 24(data) 25 696 72
+                              Store 702 701
+             703:     27(ptr) AccessChain 10(dti) 26
+             704:      6(int) Load 703
+             705:     27(ptr) AccessChain 10(dti) 26
+             706:      6(int) Load 705
+             707:     84(ptr) AccessChain 24(data) 25 706 72 26
+             708:     14(int) Load 707
+             709:     14(int) GroupNonUniformQuadSwap 35 708 26
+             710:     84(ptr) AccessChain 24(data) 25 704 72 26
+                              Store 710 709
+             711:     27(ptr) AccessChain 10(dti) 26
+             712:      6(int) Load 711
+             713:     27(ptr) AccessChain 10(dti) 26
+             714:      6(int) Load 713
+             715:     75(ptr) AccessChain 24(data) 25 714 72
+             716:   15(ivec4) Load 715
+             717:   93(ivec2) VectorShuffle 716 716 0 1
+             718:   93(ivec2) GroupNonUniformQuadSwap 35 717 26
+             719:     75(ptr) AccessChain 24(data) 25 712 72
+             720:   15(ivec4) Load 719
+             721:   15(ivec4) VectorShuffle 720 718 4 5 2 3
+                              Store 719 721
+             722:     27(ptr) AccessChain 10(dti) 26
+             723:      6(int) Load 722
+             724:     27(ptr) AccessChain 10(dti) 26
+             725:      6(int) Load 724
+             726:     75(ptr) AccessChain 24(data) 25 725 72
+             727:   15(ivec4) Load 726
+             728:  105(ivec3) VectorShuffle 727 727 0 1 2
+             729:  105(ivec3) GroupNonUniformQuadSwap 35 728 26
+             730:     75(ptr) AccessChain 24(data) 25 723 72
+             731:   15(ivec4) Load 730
+             732:   15(ivec4) VectorShuffle 731 729 4 5 6 3
+                              Store 730 732
+             733:     27(ptr) AccessChain 10(dti) 26
+             734:      6(int) Load 733
+             735:     27(ptr) AccessChain 10(dti) 26
+             736:      6(int) Load 735
+             737:    118(ptr) AccessChain 24(data) 25 736 115
+             738:   17(fvec4) Load 737
+             739:   17(fvec4) GroupNonUniformQuadSwap 35 738 26
+             740:    118(ptr) AccessChain 24(data) 25 734 115
+                              Store 740 739
+             741:     27(ptr) AccessChain 10(dti) 26
+             742:      6(int) Load 741
+             743:     27(ptr) AccessChain 10(dti) 26
+             744:      6(int) Load 743
+             745:    127(ptr) AccessChain 24(data) 25 744 115 26
+             746:   16(float) Load 745
+             747:   16(float) GroupNonUniformQuadSwap 35 746 26
+             748:    127(ptr) AccessChain 24(data) 25 742 115 26
+                              Store 748 747
+             749:     27(ptr) AccessChain 10(dti) 26
+             750:      6(int) Load 749
+             751:     27(ptr) AccessChain 10(dti) 26
+             752:      6(int) Load 751
+             753:    118(ptr) AccessChain 24(data) 25 752 115
+             754:   17(fvec4) Load 753
+             755:  136(fvec2) VectorShuffle 754 754 0 1
+             756:  136(fvec2) GroupNonUniformQuadSwap 35 755 26
+             757:    118(ptr) AccessChain 24(data) 25 750 115
+             758:   17(fvec4) Load 757
+             759:   17(fvec4) VectorShuffle 758 756 4 5 2 3
+                              Store 757 759
+             760:     27(ptr) AccessChain 10(dti) 26
+             761:      6(int) Load 760
+             762:     27(ptr) AccessChain 10(dti) 26
+             763:      6(int) Load 762
+             764:    118(ptr) AccessChain 24(data) 25 763 115
+             765:   17(fvec4) Load 764
+             766:  148(fvec3) VectorShuffle 765 765 0 1 2
+             767:  148(fvec3) GroupNonUniformQuadSwap 35 766 26
+             768:    118(ptr) AccessChain 24(data) 25 761 115
+             769:   17(fvec4) Load 768
+             770:   17(fvec4) VectorShuffle 769 767 4 5 6 3
+                              Store 768 770
+             771:     27(ptr) AccessChain 10(dti) 26
+             772:      6(int) Load 771
+             773:     27(ptr) AccessChain 10(dti) 26
+             774:      6(int) Load 773
+             775:    161(ptr) AccessChain 24(data) 25 774 158
+             776:   19(fvec4) Load 775
+             777:   19(fvec4) GroupNonUniformQuadSwap 35 776 26
+             778:    161(ptr) AccessChain 24(data) 25 772 158
+                              Store 778 777
+             779:     27(ptr) AccessChain 10(dti) 26
+             780:      6(int) Load 779
+             781:     27(ptr) AccessChain 10(dti) 26
+             782:      6(int) Load 781
+             783:    170(ptr) AccessChain 24(data) 25 782 158 26
+             784:   18(float) Load 783
+             785:   18(float) GroupNonUniformQuadSwap 35 784 26
+             786:    170(ptr) AccessChain 24(data) 25 780 158 26
+                              Store 786 785
+             787:     27(ptr) AccessChain 10(dti) 26
+             788:      6(int) Load 787
+             789:     27(ptr) AccessChain 10(dti) 26
+             790:      6(int) Load 789
+             791:    161(ptr) AccessChain 24(data) 25 790 158
+             792:   19(fvec4) Load 791
+             793:  179(fvec2) VectorShuffle 792 792 0 1
+             794:  179(fvec2) GroupNonUniformQuadSwap 35 793 26
+             795:    161(ptr) AccessChain 24(data) 25 788 158
+             796:   19(fvec4) Load 795
+             797:   19(fvec4) VectorShuffle 796 794 4 5 2 3
+                              Store 795 797
+             798:     27(ptr) AccessChain 10(dti) 26
+             799:      6(int) Load 798
+             800:     27(ptr) AccessChain 10(dti) 26
+             801:      6(int) Load 800
+             802:    161(ptr) AccessChain 24(data) 25 801 158
+             803:   19(fvec4) Load 802
+             804:  191(fvec3) VectorShuffle 803 803 0 1 2
+             805:  191(fvec3) GroupNonUniformQuadSwap 35 804 26
+             806:    161(ptr) AccessChain 24(data) 25 799 158
+             807:   19(fvec4) Load 806
+             808:   19(fvec4) VectorShuffle 807 805 4 5 6 3
+                              Store 806 808
+             809:     27(ptr) AccessChain 10(dti) 26
+             810:      6(int) Load 809
+             811:     27(ptr) AccessChain 10(dti) 26
+             812:      6(int) Load 811
+             813:     32(ptr) AccessChain 24(data) 25 812 25
+             814:   13(ivec4) Load 813
+             815:   13(ivec4) GroupNonUniformQuadSwap 35 814 205
+             816:     32(ptr) AccessChain 24(data) 25 810 25
+                              Store 816 815
+             817:     27(ptr) AccessChain 10(dti) 26
+             818:      6(int) Load 817
+             819:     27(ptr) AccessChain 10(dti) 26
+             820:      6(int) Load 819
+             821:     42(ptr) AccessChain 24(data) 25 820 25 26
+             822:      6(int) Load 821
+             823:      6(int) GroupNonUniformQuadSwap 35 822 205
+             824:     42(ptr) AccessChain 24(data) 25 818 25 26
+                              Store 824 823
+             825:     27(ptr) AccessChain 10(dti) 26
+             826:      6(int) Load 825
+             827:     27(ptr) AccessChain 10(dti) 26
+             828:      6(int) Load 827
+             829:     32(ptr) AccessChain 24(data) 25 828 25
+             830:   13(ivec4) Load 829
+             831:   51(ivec2) VectorShuffle 830 830 0 1
+             832:   51(ivec2) GroupNonUniformQuadSwap 35 831 205
+             833:     32(ptr) AccessChain 24(data) 25 826 25
+             834:   13(ivec4) Load 833
+             835:   13(ivec4) VectorShuffle 834 832 4 5 2 3
+                              Store 833 835
+             836:     27(ptr) AccessChain 10(dti) 26
+             837:      6(int) Load 836
+             838:     27(ptr) AccessChain 10(dti) 26
+             839:      6(int) Load 838
+             840:     32(ptr) AccessChain 24(data) 25 839 25
+             841:   13(ivec4) Load 840
+             842:    7(ivec3) VectorShuffle 841 841 0 1 2
+             843:    7(ivec3) GroupNonUniformQuadSwap 35 842 205
+             844:     32(ptr) AccessChain 24(data) 25 837 25
+             845:   13(ivec4) Load 844
+             846:   13(ivec4) VectorShuffle 845 843 4 5 6 3
+                              Store 844 846
+             847:     27(ptr) AccessChain 10(dti) 26
+             848:      6(int) Load 847
+             849:     27(ptr) AccessChain 10(dti) 26
+             850:      6(int) Load 849
+             851:     75(ptr) AccessChain 24(data) 25 850 72
+             852:   15(ivec4) Load 851
+             853:   15(ivec4) GroupNonUniformQuadSwap 35 852 205
+             854:     75(ptr) AccessChain 24(data) 25 848 72
+                              Store 854 853
+             855:     27(ptr) AccessChain 10(dti) 26
+             856:      6(int) Load 855
+             857:     27(ptr) AccessChain 10(dti) 26
+             858:      6(int) Load 857
+             859:     84(ptr) AccessChain 24(data) 25 858 72 26
+             860:     14(int) Load 859
+             861:     14(int) GroupNonUniformQuadSwap 35 860 205
+             862:     84(ptr) AccessChain 24(data) 25 856 72 26
+                              Store 862 861
+             863:     27(ptr) AccessChain 10(dti) 26
+             864:      6(int) Load 863
+             865:     27(ptr) AccessChain 10(dti) 26
+             866:      6(int) Load 865
+             867:     75(ptr) AccessChain 24(data) 25 866 72
+             868:   15(ivec4) Load 867
+             869:   93(ivec2) VectorShuffle 868 868 0 1
+             870:   93(ivec2) GroupNonUniformQuadSwap 35 869 205
+             871:     75(ptr) AccessChain 24(data) 25 864 72
+             872:   15(ivec4) Load 871
+             873:   15(ivec4) VectorShuffle 872 870 4 5 2 3
+                              Store 871 873
+             874:     27(ptr) AccessChain 10(dti) 26
+             875:      6(int) Load 874
+             876:     27(ptr) AccessChain 10(dti) 26
+             877:      6(int) Load 876
+             878:     75(ptr) AccessChain 24(data) 25 877 72
+             879:   15(ivec4) Load 878
+             880:  105(ivec3) VectorShuffle 879 879 0 1 2
+             881:  105(ivec3) GroupNonUniformQuadSwap 35 880 205
+             882:     75(ptr) AccessChain 24(data) 25 875 72
+             883:   15(ivec4) Load 882
+             884:   15(ivec4) VectorShuffle 883 881 4 5 6 3
+                              Store 882 884
+             885:     27(ptr) AccessChain 10(dti) 26
+             886:      6(int) Load 885
+             887:     27(ptr) AccessChain 10(dti) 26
+             888:      6(int) Load 887
+             889:    118(ptr) AccessChain 24(data) 25 888 115
+             890:   17(fvec4) Load 889
+             891:   17(fvec4) GroupNonUniformQuadSwap 35 890 205
+             892:    118(ptr) AccessChain 24(data) 25 886 115
+                              Store 892 891
+             893:     27(ptr) AccessChain 10(dti) 26
+             894:      6(int) Load 893
+             895:     27(ptr) AccessChain 10(dti) 26
+             896:      6(int) Load 895
+             897:    127(ptr) AccessChain 24(data) 25 896 115 26
+             898:   16(float) Load 897
+             899:   16(float) GroupNonUniformQuadSwap 35 898 205
+             900:    127(ptr) AccessChain 24(data) 25 894 115 26
+                              Store 900 899
+             901:     27(ptr) AccessChain 10(dti) 26
+             902:      6(int) Load 901
+             903:     27(ptr) AccessChain 10(dti) 26
+             904:      6(int) Load 903
+             905:    118(ptr) AccessChain 24(data) 25 904 115
+             906:   17(fvec4) Load 905
+             907:  136(fvec2) VectorShuffle 906 906 0 1
+             908:  136(fvec2) GroupNonUniformQuadSwap 35 907 205
+             909:    118(ptr) AccessChain 24(data) 25 902 115
+             910:   17(fvec4) Load 909
+             911:   17(fvec4) VectorShuffle 910 908 4 5 2 3
+                              Store 909 911
+             912:     27(ptr) AccessChain 10(dti) 26
+             913:      6(int) Load 912
+             914:     27(ptr) AccessChain 10(dti) 26
+             915:      6(int) Load 914
+             916:    118(ptr) AccessChain 24(data) 25 915 115
+             917:   17(fvec4) Load 916
+             918:  148(fvec3) VectorShuffle 917 917 0 1 2
+             919:  148(fvec3) GroupNonUniformQuadSwap 35 918 205
+             920:    118(ptr) AccessChain 24(data) 25 913 115
+             921:   17(fvec4) Load 920
+             922:   17(fvec4) VectorShuffle 921 919 4 5 6 3
+                              Store 920 922
+             923:     27(ptr) AccessChain 10(dti) 26
+             924:      6(int) Load 923
+             925:     27(ptr) AccessChain 10(dti) 26
+             926:      6(int) Load 925
+             927:    161(ptr) AccessChain 24(data) 25 926 158
+             928:   19(fvec4) Load 927
+             929:   19(fvec4) GroupNonUniformQuadSwap 35 928 205
+             930:    161(ptr) AccessChain 24(data) 25 924 158
+                              Store 930 929
+             931:     27(ptr) AccessChain 10(dti) 26
+             932:      6(int) Load 931
+             933:     27(ptr) AccessChain 10(dti) 26
+             934:      6(int) Load 933
+             935:    170(ptr) AccessChain 24(data) 25 934 158 26
+             936:   18(float) Load 935
+             937:   18(float) GroupNonUniformQuadSwap 35 936 205
+             938:    170(ptr) AccessChain 24(data) 25 932 158 26
+                              Store 938 937
+             939:     27(ptr) AccessChain 10(dti) 26
+             940:      6(int) Load 939
+             941:     27(ptr) AccessChain 10(dti) 26
+             942:      6(int) Load 941
+             943:    161(ptr) AccessChain 24(data) 25 942 158
+             944:   19(fvec4) Load 943
+             945:  179(fvec2) VectorShuffle 944 944 0 1
+             946:  179(fvec2) GroupNonUniformQuadSwap 35 945 205
+             947:    161(ptr) AccessChain 24(data) 25 940 158
+             948:   19(fvec4) Load 947
+             949:   19(fvec4) VectorShuffle 948 946 4 5 2 3
+                              Store 947 949
+             950:     27(ptr) AccessChain 10(dti) 26
+             951:      6(int) Load 950
+             952:     27(ptr) AccessChain 10(dti) 26
+             953:      6(int) Load 952
+             954:    161(ptr) AccessChain 24(data) 25 953 158
+             955:   19(fvec4) Load 954
+             956:  191(fvec3) VectorShuffle 955 955 0 1 2
+             957:  191(fvec3) GroupNonUniformQuadSwap 35 956 205
+             958:    161(ptr) AccessChain 24(data) 25 951 158
+             959:   19(fvec4) Load 958
+             960:   19(fvec4) VectorShuffle 959 957 4 5 6 3
+                              Store 958 960
+             961:     27(ptr) AccessChain 10(dti) 26
+             962:      6(int) Load 961
+             963:     27(ptr) AccessChain 10(dti) 26
+             964:      6(int) Load 963
+             965:     32(ptr) AccessChain 24(data) 25 964 25
+             966:   13(ivec4) Load 965
+             967:   13(ivec4) GroupNonUniformQuadSwap 35 966 358
+             968:     32(ptr) AccessChain 24(data) 25 962 25
+                              Store 968 967
+             969:     27(ptr) AccessChain 10(dti) 26
+             970:      6(int) Load 969
+             971:     27(ptr) AccessChain 10(dti) 26
+             972:      6(int) Load 971
+             973:     42(ptr) AccessChain 24(data) 25 972 25 26
+             974:      6(int) Load 973
+             975:      6(int) GroupNonUniformQuadSwap 35 974 358
+             976:     42(ptr) AccessChain 24(data) 25 970 25 26
+                              Store 976 975
+             977:     27(ptr) AccessChain 10(dti) 26
+             978:      6(int) Load 977
+             979:     27(ptr) AccessChain 10(dti) 26
+             980:      6(int) Load 979
+             981:     32(ptr) AccessChain 24(data) 25 980 25
+             982:   13(ivec4) Load 981
+             983:   51(ivec2) VectorShuffle 982 982 0 1
+             984:   51(ivec2) GroupNonUniformQuadSwap 35 983 358
+             985:     32(ptr) AccessChain 24(data) 25 978 25
+             986:   13(ivec4) Load 985
+             987:   13(ivec4) VectorShuffle 986 984 4 5 2 3
+                              Store 985 987
+             988:     27(ptr) AccessChain 10(dti) 26
+             989:      6(int) Load 988
+             990:     27(ptr) AccessChain 10(dti) 26
+             991:      6(int) Load 990
+             992:     32(ptr) AccessChain 24(data) 25 991 25
+             993:   13(ivec4) Load 992
+             994:    7(ivec3) VectorShuffle 993 993 0 1 2
+             995:    7(ivec3) GroupNonUniformQuadSwap 35 994 358
+             996:     32(ptr) AccessChain 24(data) 25 989 25
+             997:   13(ivec4) Load 996
+             998:   13(ivec4) VectorShuffle 997 995 4 5 6 3
+                              Store 996 998
+             999:     27(ptr) AccessChain 10(dti) 26
+            1000:      6(int) Load 999
+            1001:     27(ptr) AccessChain 10(dti) 26
+            1002:      6(int) Load 1001
+            1003:     75(ptr) AccessChain 24(data) 25 1002 72
+            1004:   15(ivec4) Load 1003
+            1005:   15(ivec4) GroupNonUniformQuadSwap 35 1004 358
+            1006:     75(ptr) AccessChain 24(data) 25 1000 72
+                              Store 1006 1005
+            1007:     27(ptr) AccessChain 10(dti) 26
+            1008:      6(int) Load 1007
+            1009:     27(ptr) AccessChain 10(dti) 26
+            1010:      6(int) Load 1009
+            1011:     84(ptr) AccessChain 24(data) 25 1010 72 26
+            1012:     14(int) Load 1011
+            1013:     14(int) GroupNonUniformQuadSwap 35 1012 358
+            1014:     84(ptr) AccessChain 24(data) 25 1008 72 26
+                              Store 1014 1013
+            1015:     27(ptr) AccessChain 10(dti) 26
+            1016:      6(int) Load 1015
+            1017:     27(ptr) AccessChain 10(dti) 26
+            1018:      6(int) Load 1017
+            1019:     75(ptr) AccessChain 24(data) 25 1018 72
+            1020:   15(ivec4) Load 1019
+            1021:   93(ivec2) VectorShuffle 1020 1020 0 1
+            1022:   93(ivec2) GroupNonUniformQuadSwap 35 1021 358
+            1023:     75(ptr) AccessChain 24(data) 25 1016 72
+            1024:   15(ivec4) Load 1023
+            1025:   15(ivec4) VectorShuffle 1024 1022 4 5 2 3
+                              Store 1023 1025
+            1026:     27(ptr) AccessChain 10(dti) 26
+            1027:      6(int) Load 1026
+            1028:     27(ptr) AccessChain 10(dti) 26
+            1029:      6(int) Load 1028
+            1030:     75(ptr) AccessChain 24(data) 25 1029 72
+            1031:   15(ivec4) Load 1030
+            1032:  105(ivec3) VectorShuffle 1031 1031 0 1 2
+            1033:  105(ivec3) GroupNonUniformQuadSwap 35 1032 358
+            1034:     75(ptr) AccessChain 24(data) 25 1027 72
+            1035:   15(ivec4) Load 1034
+            1036:   15(ivec4) VectorShuffle 1035 1033 4 5 6 3
+                              Store 1034 1036
+            1037:     27(ptr) AccessChain 10(dti) 26
+            1038:      6(int) Load 1037
+            1039:     27(ptr) AccessChain 10(dti) 26
+            1040:      6(int) Load 1039
+            1041:    118(ptr) AccessChain 24(data) 25 1040 115
+            1042:   17(fvec4) Load 1041
+            1043:   17(fvec4) GroupNonUniformQuadSwap 35 1042 358
+            1044:    118(ptr) AccessChain 24(data) 25 1038 115
+                              Store 1044 1043
+            1045:     27(ptr) AccessChain 10(dti) 26
+            1046:      6(int) Load 1045
+            1047:     27(ptr) AccessChain 10(dti) 26
+            1048:      6(int) Load 1047
+            1049:    127(ptr) AccessChain 24(data) 25 1048 115 26
+            1050:   16(float) Load 1049
+            1051:   16(float) GroupNonUniformQuadSwap 35 1050 358
+            1052:    127(ptr) AccessChain 24(data) 25 1046 115 26
+                              Store 1052 1051
+            1053:     27(ptr) AccessChain 10(dti) 26
+            1054:      6(int) Load 1053
+            1055:     27(ptr) AccessChain 10(dti) 26
+            1056:      6(int) Load 1055
+            1057:    118(ptr) AccessChain 24(data) 25 1056 115
+            1058:   17(fvec4) Load 1057
+            1059:  136(fvec2) VectorShuffle 1058 1058 0 1
+            1060:  136(fvec2) GroupNonUniformQuadSwap 35 1059 358
+            1061:    118(ptr) AccessChain 24(data) 25 1054 115
+            1062:   17(fvec4) Load 1061
+            1063:   17(fvec4) VectorShuffle 1062 1060 4 5 2 3
+                              Store 1061 1063
+            1064:     27(ptr) AccessChain 10(dti) 26
+            1065:      6(int) Load 1064
+            1066:     27(ptr) AccessChain 10(dti) 26
+            1067:      6(int) Load 1066
+            1068:    118(ptr) AccessChain 24(data) 25 1067 115
+            1069:   17(fvec4) Load 1068
+            1070:  148(fvec3) VectorShuffle 1069 1069 0 1 2
+            1071:  148(fvec3) GroupNonUniformQuadSwap 35 1070 358
+            1072:    118(ptr) AccessChain 24(data) 25 1065 115
+            1073:   17(fvec4) Load 1072
+            1074:   17(fvec4) VectorShuffle 1073 1071 4 5 6 3
+                              Store 1072 1074
+            1075:     27(ptr) AccessChain 10(dti) 26
+            1076:      6(int) Load 1075
+            1077:     27(ptr) AccessChain 10(dti) 26
+            1078:      6(int) Load 1077
+            1079:    161(ptr) AccessChain 24(data) 25 1078 158
+            1080:   19(fvec4) Load 1079
+            1081:   19(fvec4) GroupNonUniformQuadSwap 35 1080 358
+            1082:    161(ptr) AccessChain 24(data) 25 1076 158
+                              Store 1082 1081
+            1083:     27(ptr) AccessChain 10(dti) 26
+            1084:      6(int) Load 1083
+            1085:     27(ptr) AccessChain 10(dti) 26
+            1086:      6(int) Load 1085
+            1087:    170(ptr) AccessChain 24(data) 25 1086 158 26
+            1088:   18(float) Load 1087
+            1089:   18(float) GroupNonUniformQuadSwap 35 1088 358
+            1090:    170(ptr) AccessChain 24(data) 25 1084 158 26
+                              Store 1090 1089
+            1091:     27(ptr) AccessChain 10(dti) 26
+            1092:      6(int) Load 1091
+            1093:     27(ptr) AccessChain 10(dti) 26
+            1094:      6(int) Load 1093
+            1095:    161(ptr) AccessChain 24(data) 25 1094 158
+            1096:   19(fvec4) Load 1095
+            1097:  179(fvec2) VectorShuffle 1096 1096 0 1
+            1098:  179(fvec2) GroupNonUniformQuadSwap 35 1097 358
+            1099:    161(ptr) AccessChain 24(data) 25 1092 158
+            1100:   19(fvec4) Load 1099
+            1101:   19(fvec4) VectorShuffle 1100 1098 4 5 2 3
+                              Store 1099 1101
+            1102:     27(ptr) AccessChain 10(dti) 26
+            1103:      6(int) Load 1102
+            1104:     27(ptr) AccessChain 10(dti) 26
+            1105:      6(int) Load 1104
+            1106:    161(ptr) AccessChain 24(data) 25 1105 158
+            1107:   19(fvec4) Load 1106
+            1108:  191(fvec3) VectorShuffle 1107 1107 0 1 2
+            1109:  191(fvec3) GroupNonUniformQuadSwap 35 1108 358
+            1110:    161(ptr) AccessChain 24(data) 25 1103 158
+            1111:   19(fvec4) Load 1110
+            1112:   19(fvec4) VectorShuffle 1111 1109 4 5 6 3
+                              Store 1110 1112
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.wavequery.comp.out b/Test/baseResults/hlsl.wavequery.comp.out
new file mode 100644
index 0000000..952a433
--- /dev/null
+++ b/Test/baseResults/hlsl.wavequery.comp.out
@@ -0,0 +1,116 @@
+hlsl.wavequery.comp
+Shader version: 500
+local_size = (32, 16, 1)
+0:? Sequence
+0:5  Function Definition: @CSMain( ( temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:6      move second child to first child ( temp uint)
+0:6        indirect index (layout( row_major std430) buffer uint)
+0:6          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:6            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:6            Constant:
+0:6              0 (const uint)
+0:6          '@gl_SubgroupInvocationID' ( in uint unknown built-in variable)
+0:6        Test condition and select ( temp uint): no shortcircuit
+0:6          Condition
+0:6          subgroupElect ( temp bool)
+0:6          true case
+0:6          '@gl_SubgroupSize' ( in uint unknown built-in variable)
+0:6          false case
+0:6          Constant:
+0:6            0 (const uint)
+0:5  Function Definition: CSMain( ( temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:5      Function Call: @CSMain( ( temp void)
+0:?   Linker Objects
+0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+
+
+Linked compute stage:
+
+
+Shader version: 500
+local_size = (32, 16, 1)
+0:? Sequence
+0:5  Function Definition: @CSMain( ( temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:6      move second child to first child ( temp uint)
+0:6        indirect index (layout( row_major std430) buffer uint)
+0:6          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:6            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:6            Constant:
+0:6              0 (const uint)
+0:6          '@gl_SubgroupInvocationID' ( in uint unknown built-in variable)
+0:6        Test condition and select ( temp uint): no shortcircuit
+0:6          Condition
+0:6          subgroupElect ( temp bool)
+0:6          true case
+0:6          '@gl_SubgroupSize' ( in uint unknown built-in variable)
+0:6          false case
+0:6          Constant:
+0:6            0 (const uint)
+0:5  Function Definition: CSMain( ( temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:5      Function Call: @CSMain( ( temp void)
+0:?   Linker Objects
+0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+
+// Module Version 10300
+// Generated by (magic number): 80005
+// Id's are bound by 28
+
+                              Capability Shader
+                              Capability GroupNonUniform
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "CSMain" 16 21
+                              ExecutionMode 4 LocalSize 32 16 1
+                              Source HLSL 500
+                              Name 4  "CSMain"
+                              Name 6  "@CSMain("
+                              Name 10  "data"
+                              MemberName 10(data) 0  "@data"
+                              Name 12  "data"
+                              Name 16  "@gl_SubgroupInvocationID"
+                              Name 21  "@gl_SubgroupSize"
+                              Decorate 9 ArrayStride 4
+                              MemberDecorate 10(data) 0 Offset 0
+                              Decorate 10(data) BufferBlock
+                              Decorate 12(data) DescriptorSet 0
+                              Decorate 16(@gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 21(@gl_SubgroupSize) BuiltIn SubgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               8:             TypeInt 32 0
+               9:             TypeRuntimeArray 8(int)
+        10(data):             TypeStruct 9
+              11:             TypePointer Uniform 10(data)
+        12(data):     11(ptr) Variable Uniform
+              13:             TypeInt 32 1
+              14:     13(int) Constant 0
+              15:             TypePointer Input 8(int)
+16(@gl_SubgroupInvocationID):     15(ptr) Variable Input
+              18:             TypeBool
+              19:      8(int) Constant 3
+21(@gl_SubgroupSize):     15(ptr) Variable Input
+              23:      8(int) Constant 0
+              25:             TypePointer Uniform 8(int)
+       4(CSMain):           2 Function None 3
+               5:             Label
+              27:           2 FunctionCall 6(@CSMain()
+                              Return
+                              FunctionEnd
+     6(@CSMain():           2 Function None 3
+               7:             Label
+              17:      8(int) Load 16(@gl_SubgroupInvocationID)
+              20:    18(bool) GroupNonUniformElect 19
+              22:      8(int) Load 21(@gl_SubgroupSize)
+              24:      8(int) Select 20 22 23
+              26:     25(ptr) AccessChain 12(data) 14 17
+                              Store 26 24
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.wavequery.frag.out b/Test/baseResults/hlsl.wavequery.frag.out
new file mode 100644
index 0000000..01d0c0e
--- /dev/null
+++ b/Test/baseResults/hlsl.wavequery.frag.out
@@ -0,0 +1,123 @@
+hlsl.wavequery.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:2  Function Definition: @PixelShaderFunction( ( temp 4-component vector of float)
+0:2    Function Parameters: 
+0:?     Sequence
+0:3      Test condition and select ( temp void)
+0:3        Condition
+0:3        subgroupElect ( temp bool)
+0:3        true case
+0:?         Sequence
+0:5          Branch: Return with expression
+0:?             Constant:
+0:?               1.000000
+0:?               2.000000
+0:?               3.000000
+0:?               4.000000
+0:3        false case
+0:?         Sequence
+0:9          Branch: Return with expression
+0:?             Constant:
+0:?               4.000000
+0:?               3.000000
+0:?               2.000000
+0:?               1.000000
+0:2  Function Definition: PixelShaderFunction( ( temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:2        Function Call: @PixelShaderFunction( ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:2  Function Definition: @PixelShaderFunction( ( temp 4-component vector of float)
+0:2    Function Parameters: 
+0:?     Sequence
+0:3      Test condition and select ( temp void)
+0:3        Condition
+0:3        subgroupElect ( temp bool)
+0:3        true case
+0:?         Sequence
+0:5          Branch: Return with expression
+0:?             Constant:
+0:?               1.000000
+0:?               2.000000
+0:?               3.000000
+0:?               4.000000
+0:3        false case
+0:?         Sequence
+0:9          Branch: Return with expression
+0:?             Constant:
+0:?               4.000000
+0:?               3.000000
+0:?               2.000000
+0:?               1.000000
+0:2  Function Definition: PixelShaderFunction( ( temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:2        Function Call: @PixelShaderFunction( ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10300
+// Generated by (magic number): 80005
+// Id's are bound by 30
+
+                              Capability Shader
+                              Capability GroupNonUniform
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "PixelShaderFunction" 28
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 500
+                              Name 4  "PixelShaderFunction"
+                              Name 9  "@PixelShaderFunction("
+                              Name 28  "@entryPointOutput"
+                              Decorate 28(@entryPointOutput) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeFunction 7(fvec4)
+              11:             TypeBool
+              12:             TypeInt 32 0
+              13:     12(int) Constant 3
+              17:    6(float) Constant 1065353216
+              18:    6(float) Constant 1073741824
+              19:    6(float) Constant 1077936128
+              20:    6(float) Constant 1082130432
+              21:    7(fvec4) ConstantComposite 17 18 19 20
+              24:    7(fvec4) ConstantComposite 20 19 18 17
+              27:             TypePointer Output 7(fvec4)
+28(@entryPointOutput):     27(ptr) Variable Output
+4(PixelShaderFunction):           2 Function None 3
+               5:             Label
+              29:    7(fvec4) FunctionCall 9(@PixelShaderFunction()
+                              Store 28(@entryPointOutput) 29
+                              Return
+                              FunctionEnd
+9(@PixelShaderFunction():    7(fvec4) Function None 8
+              10:             Label
+              14:    11(bool) GroupNonUniformElect 13
+                              SelectionMerge 16 None
+                              BranchConditional 14 15 23
+              15:               Label
+                                ReturnValue 21
+              23:               Label
+                                ReturnValue 24
+              16:             Label
+              26:    7(fvec4) Undef
+                              ReturnValue 26
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.wavereduction.comp.out b/Test/baseResults/hlsl.wavereduction.comp.out
new file mode 100644
index 0000000..1aae31f
--- /dev/null
+++ b/Test/baseResults/hlsl.wavereduction.comp.out
@@ -0,0 +1,7218 @@
+hlsl.wavereduction.comp
+Shader version: 500
+local_size = (32, 16, 1)
+0:? Sequence
+0:13  Function Definition: @CSMain(vu3; ( temp void)
+0:13    Function Parameters: 
+0:13      'dti' ( in 3-component vector of uint)
+0:?     Sequence
+0:14      move second child to first child ( temp 4-component vector of uint)
+0:14        u: direct index for structure ( temp 4-component vector of uint)
+0:14          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:14              Constant:
+0:14                0 (const uint)
+0:14            direct index ( temp uint)
+0:14              'dti' ( in 3-component vector of uint)
+0:14              Constant:
+0:14                0 (const int)
+0:14          Constant:
+0:14            0 (const int)
+0:14        subgroupAdd ( temp 4-component vector of uint)
+0:14          u: direct index for structure ( temp 4-component vector of uint)
+0:14            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:14                Constant:
+0:14                  0 (const uint)
+0:14              direct index ( temp uint)
+0:14                'dti' ( in 3-component vector of uint)
+0:14                Constant:
+0:14                  0 (const int)
+0:14            Constant:
+0:14              0 (const int)
+0:15      move second child to first child ( temp uint)
+0:15        direct index ( temp uint)
+0:15          u: direct index for structure ( temp 4-component vector of uint)
+0:15            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:15                Constant:
+0:15                  0 (const uint)
+0:15              direct index ( temp uint)
+0:15                'dti' ( in 3-component vector of uint)
+0:15                Constant:
+0:15                  0 (const int)
+0:15            Constant:
+0:15              0 (const int)
+0:15          Constant:
+0:15            0 (const int)
+0:15        subgroupAdd ( temp uint)
+0:15          direct index ( temp uint)
+0:15            u: direct index for structure ( temp 4-component vector of uint)
+0:15              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:15                  Constant:
+0:15                    0 (const uint)
+0:15                direct index ( temp uint)
+0:15                  'dti' ( in 3-component vector of uint)
+0:15                  Constant:
+0:15                    0 (const int)
+0:15              Constant:
+0:15                0 (const int)
+0:15            Constant:
+0:15              0 (const int)
+0:16      move second child to first child ( temp 2-component vector of uint)
+0:16        vector swizzle ( temp 2-component vector of uint)
+0:16          u: direct index for structure ( temp 4-component vector of uint)
+0:16            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:16                Constant:
+0:16                  0 (const uint)
+0:16              direct index ( temp uint)
+0:16                'dti' ( in 3-component vector of uint)
+0:16                Constant:
+0:16                  0 (const int)
+0:16            Constant:
+0:16              0 (const int)
+0:16          Sequence
+0:16            Constant:
+0:16              0 (const int)
+0:16            Constant:
+0:16              1 (const int)
+0:16        subgroupAdd ( temp 2-component vector of uint)
+0:16          vector swizzle ( temp 2-component vector of uint)
+0:16            u: direct index for structure ( temp 4-component vector of uint)
+0:16              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:16                  Constant:
+0:16                    0 (const uint)
+0:16                direct index ( temp uint)
+0:16                  'dti' ( in 3-component vector of uint)
+0:16                  Constant:
+0:16                    0 (const int)
+0:16              Constant:
+0:16                0 (const int)
+0:16            Sequence
+0:16              Constant:
+0:16                0 (const int)
+0:16              Constant:
+0:16                1 (const int)
+0:17      move second child to first child ( temp 3-component vector of uint)
+0:17        vector swizzle ( temp 3-component vector of uint)
+0:17          u: direct index for structure ( temp 4-component vector of uint)
+0:17            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:17                Constant:
+0:17                  0 (const uint)
+0:17              direct index ( temp uint)
+0:17                'dti' ( in 3-component vector of uint)
+0:17                Constant:
+0:17                  0 (const int)
+0:17            Constant:
+0:17              0 (const int)
+0:17          Sequence
+0:17            Constant:
+0:17              0 (const int)
+0:17            Constant:
+0:17              1 (const int)
+0:17            Constant:
+0:17              2 (const int)
+0:17        subgroupAdd ( temp 3-component vector of uint)
+0:17          vector swizzle ( temp 3-component vector of uint)
+0:17            u: direct index for structure ( temp 4-component vector of uint)
+0:17              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:17                  Constant:
+0:17                    0 (const uint)
+0:17                direct index ( temp uint)
+0:17                  'dti' ( in 3-component vector of uint)
+0:17                  Constant:
+0:17                    0 (const int)
+0:17              Constant:
+0:17                0 (const int)
+0:17            Sequence
+0:17              Constant:
+0:17                0 (const int)
+0:17              Constant:
+0:17                1 (const int)
+0:17              Constant:
+0:17                2 (const int)
+0:19      move second child to first child ( temp 4-component vector of int)
+0:19        i: direct index for structure ( temp 4-component vector of int)
+0:19          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:19              Constant:
+0:19                0 (const uint)
+0:19            direct index ( temp uint)
+0:19              'dti' ( in 3-component vector of uint)
+0:19              Constant:
+0:19                0 (const int)
+0:19          Constant:
+0:19            1 (const int)
+0:19        subgroupAdd ( temp 4-component vector of int)
+0:19          i: direct index for structure ( temp 4-component vector of int)
+0:19            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:19                Constant:
+0:19                  0 (const uint)
+0:19              direct index ( temp uint)
+0:19                'dti' ( in 3-component vector of uint)
+0:19                Constant:
+0:19                  0 (const int)
+0:19            Constant:
+0:19              1 (const int)
+0:20      move second child to first child ( temp int)
+0:20        direct index ( temp int)
+0:20          i: direct index for structure ( temp 4-component vector of int)
+0:20            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:20                Constant:
+0:20                  0 (const uint)
+0:20              direct index ( temp uint)
+0:20                'dti' ( in 3-component vector of uint)
+0:20                Constant:
+0:20                  0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20          Constant:
+0:20            0 (const int)
+0:20        subgroupAdd ( temp int)
+0:20          direct index ( temp int)
+0:20            i: direct index for structure ( temp 4-component vector of int)
+0:20              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:20                  Constant:
+0:20                    0 (const uint)
+0:20                direct index ( temp uint)
+0:20                  'dti' ( in 3-component vector of uint)
+0:20                  Constant:
+0:20                    0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20            Constant:
+0:20              0 (const int)
+0:21      move second child to first child ( temp 2-component vector of int)
+0:21        vector swizzle ( temp 2-component vector of int)
+0:21          i: direct index for structure ( temp 4-component vector of int)
+0:21            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:21                Constant:
+0:21                  0 (const uint)
+0:21              direct index ( temp uint)
+0:21                'dti' ( in 3-component vector of uint)
+0:21                Constant:
+0:21                  0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21          Sequence
+0:21            Constant:
+0:21              0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21        subgroupAdd ( temp 2-component vector of int)
+0:21          vector swizzle ( temp 2-component vector of int)
+0:21            i: direct index for structure ( temp 4-component vector of int)
+0:21              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:21                  Constant:
+0:21                    0 (const uint)
+0:21                direct index ( temp uint)
+0:21                  'dti' ( in 3-component vector of uint)
+0:21                  Constant:
+0:21                    0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21            Sequence
+0:21              Constant:
+0:21                0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:22      move second child to first child ( temp 3-component vector of int)
+0:22        vector swizzle ( temp 3-component vector of int)
+0:22          i: direct index for structure ( temp 4-component vector of int)
+0:22            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:22                Constant:
+0:22                  0 (const uint)
+0:22              direct index ( temp uint)
+0:22                'dti' ( in 3-component vector of uint)
+0:22                Constant:
+0:22                  0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22          Sequence
+0:22            Constant:
+0:22              0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22            Constant:
+0:22              2 (const int)
+0:22        subgroupAdd ( temp 3-component vector of int)
+0:22          vector swizzle ( temp 3-component vector of int)
+0:22            i: direct index for structure ( temp 4-component vector of int)
+0:22              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:22                  Constant:
+0:22                    0 (const uint)
+0:22                direct index ( temp uint)
+0:22                  'dti' ( in 3-component vector of uint)
+0:22                  Constant:
+0:22                    0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22            Sequence
+0:22              Constant:
+0:22                0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22              Constant:
+0:22                2 (const int)
+0:24      move second child to first child ( temp 4-component vector of float)
+0:24        f: direct index for structure ( temp 4-component vector of float)
+0:24          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:24              Constant:
+0:24                0 (const uint)
+0:24            direct index ( temp uint)
+0:24              'dti' ( in 3-component vector of uint)
+0:24              Constant:
+0:24                0 (const int)
+0:24          Constant:
+0:24            2 (const int)
+0:24        subgroupAdd ( temp 4-component vector of float)
+0:24          f: direct index for structure ( temp 4-component vector of float)
+0:24            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:24                Constant:
+0:24                  0 (const uint)
+0:24              direct index ( temp uint)
+0:24                'dti' ( in 3-component vector of uint)
+0:24                Constant:
+0:24                  0 (const int)
+0:24            Constant:
+0:24              2 (const int)
+0:25      move second child to first child ( temp float)
+0:25        direct index ( temp float)
+0:25          f: direct index for structure ( temp 4-component vector of float)
+0:25            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:25                Constant:
+0:25                  0 (const uint)
+0:25              direct index ( temp uint)
+0:25                'dti' ( in 3-component vector of uint)
+0:25                Constant:
+0:25                  0 (const int)
+0:25            Constant:
+0:25              2 (const int)
+0:25          Constant:
+0:25            0 (const int)
+0:25        subgroupAdd ( temp float)
+0:25          direct index ( temp float)
+0:25            f: direct index for structure ( temp 4-component vector of float)
+0:25              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:25                  Constant:
+0:25                    0 (const uint)
+0:25                direct index ( temp uint)
+0:25                  'dti' ( in 3-component vector of uint)
+0:25                  Constant:
+0:25                    0 (const int)
+0:25              Constant:
+0:25                2 (const int)
+0:25            Constant:
+0:25              0 (const int)
+0:26      move second child to first child ( temp 2-component vector of float)
+0:26        vector swizzle ( temp 2-component vector of float)
+0:26          f: direct index for structure ( temp 4-component vector of float)
+0:26            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:26                Constant:
+0:26                  0 (const uint)
+0:26              direct index ( temp uint)
+0:26                'dti' ( in 3-component vector of uint)
+0:26                Constant:
+0:26                  0 (const int)
+0:26            Constant:
+0:26              2 (const int)
+0:26          Sequence
+0:26            Constant:
+0:26              0 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26        subgroupAdd ( temp 2-component vector of float)
+0:26          vector swizzle ( temp 2-component vector of float)
+0:26            f: direct index for structure ( temp 4-component vector of float)
+0:26              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:26                  Constant:
+0:26                    0 (const uint)
+0:26                direct index ( temp uint)
+0:26                  'dti' ( in 3-component vector of uint)
+0:26                  Constant:
+0:26                    0 (const int)
+0:26              Constant:
+0:26                2 (const int)
+0:26            Sequence
+0:26              Constant:
+0:26                0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:27      move second child to first child ( temp 3-component vector of float)
+0:27        vector swizzle ( temp 3-component vector of float)
+0:27          f: direct index for structure ( temp 4-component vector of float)
+0:27            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:27                Constant:
+0:27                  0 (const uint)
+0:27              direct index ( temp uint)
+0:27                'dti' ( in 3-component vector of uint)
+0:27                Constant:
+0:27                  0 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27          Sequence
+0:27            Constant:
+0:27              0 (const int)
+0:27            Constant:
+0:27              1 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27        subgroupAdd ( temp 3-component vector of float)
+0:27          vector swizzle ( temp 3-component vector of float)
+0:27            f: direct index for structure ( temp 4-component vector of float)
+0:27              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:27                  Constant:
+0:27                    0 (const uint)
+0:27                direct index ( temp uint)
+0:27                  'dti' ( in 3-component vector of uint)
+0:27                  Constant:
+0:27                    0 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:27            Sequence
+0:27              Constant:
+0:27                0 (const int)
+0:27              Constant:
+0:27                1 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:29      move second child to first child ( temp 4-component vector of double)
+0:29        d: direct index for structure ( temp 4-component vector of double)
+0:29          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:29              Constant:
+0:29                0 (const uint)
+0:29            direct index ( temp uint)
+0:29              'dti' ( in 3-component vector of uint)
+0:29              Constant:
+0:29                0 (const int)
+0:29          Constant:
+0:29            3 (const int)
+0:29        subgroupAdd ( temp 4-component vector of double)
+0:29          d: direct index for structure ( temp 4-component vector of double)
+0:29            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:29                Constant:
+0:29                  0 (const uint)
+0:29              direct index ( temp uint)
+0:29                'dti' ( in 3-component vector of uint)
+0:29                Constant:
+0:29                  0 (const int)
+0:29            Constant:
+0:29              3 (const int)
+0:30      move second child to first child ( temp double)
+0:30        direct index ( temp double)
+0:30          d: direct index for structure ( temp 4-component vector of double)
+0:30            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:30                Constant:
+0:30                  0 (const uint)
+0:30              direct index ( temp uint)
+0:30                'dti' ( in 3-component vector of uint)
+0:30                Constant:
+0:30                  0 (const int)
+0:30            Constant:
+0:30              3 (const int)
+0:30          Constant:
+0:30            0 (const int)
+0:30        subgroupAdd ( temp double)
+0:30          direct index ( temp double)
+0:30            d: direct index for structure ( temp 4-component vector of double)
+0:30              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:30                  Constant:
+0:30                    0 (const uint)
+0:30                direct index ( temp uint)
+0:30                  'dti' ( in 3-component vector of uint)
+0:30                  Constant:
+0:30                    0 (const int)
+0:30              Constant:
+0:30                3 (const int)
+0:30            Constant:
+0:30              0 (const int)
+0:31      move second child to first child ( temp 2-component vector of double)
+0:31        vector swizzle ( temp 2-component vector of double)
+0:31          d: direct index for structure ( temp 4-component vector of double)
+0:31            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:31                Constant:
+0:31                  0 (const uint)
+0:31              direct index ( temp uint)
+0:31                'dti' ( in 3-component vector of uint)
+0:31                Constant:
+0:31                  0 (const int)
+0:31            Constant:
+0:31              3 (const int)
+0:31          Sequence
+0:31            Constant:
+0:31              0 (const int)
+0:31            Constant:
+0:31              1 (const int)
+0:31        subgroupAdd ( temp 2-component vector of double)
+0:31          vector swizzle ( temp 2-component vector of double)
+0:31            d: direct index for structure ( temp 4-component vector of double)
+0:31              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:31                  Constant:
+0:31                    0 (const uint)
+0:31                direct index ( temp uint)
+0:31                  'dti' ( in 3-component vector of uint)
+0:31                  Constant:
+0:31                    0 (const int)
+0:31              Constant:
+0:31                3 (const int)
+0:31            Sequence
+0:31              Constant:
+0:31                0 (const int)
+0:31              Constant:
+0:31                1 (const int)
+0:32      move second child to first child ( temp 3-component vector of double)
+0:32        vector swizzle ( temp 3-component vector of double)
+0:32          d: direct index for structure ( temp 4-component vector of double)
+0:32            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:32                Constant:
+0:32                  0 (const uint)
+0:32              direct index ( temp uint)
+0:32                'dti' ( in 3-component vector of uint)
+0:32                Constant:
+0:32                  0 (const int)
+0:32            Constant:
+0:32              3 (const int)
+0:32          Sequence
+0:32            Constant:
+0:32              0 (const int)
+0:32            Constant:
+0:32              1 (const int)
+0:32            Constant:
+0:32              2 (const int)
+0:32        subgroupAdd ( temp 3-component vector of double)
+0:32          vector swizzle ( temp 3-component vector of double)
+0:32            d: direct index for structure ( temp 4-component vector of double)
+0:32              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:32                  Constant:
+0:32                    0 (const uint)
+0:32                direct index ( temp uint)
+0:32                  'dti' ( in 3-component vector of uint)
+0:32                  Constant:
+0:32                    0 (const int)
+0:32              Constant:
+0:32                3 (const int)
+0:32            Sequence
+0:32              Constant:
+0:32                0 (const int)
+0:32              Constant:
+0:32                1 (const int)
+0:32              Constant:
+0:32                2 (const int)
+0:34      move second child to first child ( temp 4-component vector of uint)
+0:34        u: direct index for structure ( temp 4-component vector of uint)
+0:34          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:34              Constant:
+0:34                0 (const uint)
+0:34            direct index ( temp uint)
+0:34              'dti' ( in 3-component vector of uint)
+0:34              Constant:
+0:34                0 (const int)
+0:34          Constant:
+0:34            0 (const int)
+0:34        subgroupMul ( temp 4-component vector of uint)
+0:34          u: direct index for structure ( temp 4-component vector of uint)
+0:34            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:34                Constant:
+0:34                  0 (const uint)
+0:34              direct index ( temp uint)
+0:34                'dti' ( in 3-component vector of uint)
+0:34                Constant:
+0:34                  0 (const int)
+0:34            Constant:
+0:34              0 (const int)
+0:35      move second child to first child ( temp uint)
+0:35        direct index ( temp uint)
+0:35          u: direct index for structure ( temp 4-component vector of uint)
+0:35            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:35                Constant:
+0:35                  0 (const uint)
+0:35              direct index ( temp uint)
+0:35                'dti' ( in 3-component vector of uint)
+0:35                Constant:
+0:35                  0 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:35          Constant:
+0:35            0 (const int)
+0:35        subgroupMul ( temp uint)
+0:35          direct index ( temp uint)
+0:35            u: direct index for structure ( temp 4-component vector of uint)
+0:35              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:35                  Constant:
+0:35                    0 (const uint)
+0:35                direct index ( temp uint)
+0:35                  'dti' ( in 3-component vector of uint)
+0:35                  Constant:
+0:35                    0 (const int)
+0:35              Constant:
+0:35                0 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:36      move second child to first child ( temp 2-component vector of uint)
+0:36        vector swizzle ( temp 2-component vector of uint)
+0:36          u: direct index for structure ( temp 4-component vector of uint)
+0:36            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:36                Constant:
+0:36                  0 (const uint)
+0:36              direct index ( temp uint)
+0:36                'dti' ( in 3-component vector of uint)
+0:36                Constant:
+0:36                  0 (const int)
+0:36            Constant:
+0:36              0 (const int)
+0:36          Sequence
+0:36            Constant:
+0:36              0 (const int)
+0:36            Constant:
+0:36              1 (const int)
+0:36        subgroupMul ( temp 2-component vector of uint)
+0:36          vector swizzle ( temp 2-component vector of uint)
+0:36            u: direct index for structure ( temp 4-component vector of uint)
+0:36              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:36                  Constant:
+0:36                    0 (const uint)
+0:36                direct index ( temp uint)
+0:36                  'dti' ( in 3-component vector of uint)
+0:36                  Constant:
+0:36                    0 (const int)
+0:36              Constant:
+0:36                0 (const int)
+0:36            Sequence
+0:36              Constant:
+0:36                0 (const int)
+0:36              Constant:
+0:36                1 (const int)
+0:37      move second child to first child ( temp 3-component vector of uint)
+0:37        vector swizzle ( temp 3-component vector of uint)
+0:37          u: direct index for structure ( temp 4-component vector of uint)
+0:37            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:37                Constant:
+0:37                  0 (const uint)
+0:37              direct index ( temp uint)
+0:37                'dti' ( in 3-component vector of uint)
+0:37                Constant:
+0:37                  0 (const int)
+0:37            Constant:
+0:37              0 (const int)
+0:37          Sequence
+0:37            Constant:
+0:37              0 (const int)
+0:37            Constant:
+0:37              1 (const int)
+0:37            Constant:
+0:37              2 (const int)
+0:37        subgroupMul ( temp 3-component vector of uint)
+0:37          vector swizzle ( temp 3-component vector of uint)
+0:37            u: direct index for structure ( temp 4-component vector of uint)
+0:37              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:37                  Constant:
+0:37                    0 (const uint)
+0:37                direct index ( temp uint)
+0:37                  'dti' ( in 3-component vector of uint)
+0:37                  Constant:
+0:37                    0 (const int)
+0:37              Constant:
+0:37                0 (const int)
+0:37            Sequence
+0:37              Constant:
+0:37                0 (const int)
+0:37              Constant:
+0:37                1 (const int)
+0:37              Constant:
+0:37                2 (const int)
+0:39      move second child to first child ( temp 4-component vector of int)
+0:39        i: direct index for structure ( temp 4-component vector of int)
+0:39          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:39              Constant:
+0:39                0 (const uint)
+0:39            direct index ( temp uint)
+0:39              'dti' ( in 3-component vector of uint)
+0:39              Constant:
+0:39                0 (const int)
+0:39          Constant:
+0:39            1 (const int)
+0:39        subgroupMul ( temp 4-component vector of int)
+0:39          i: direct index for structure ( temp 4-component vector of int)
+0:39            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:39                Constant:
+0:39                  0 (const uint)
+0:39              direct index ( temp uint)
+0:39                'dti' ( in 3-component vector of uint)
+0:39                Constant:
+0:39                  0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:40      move second child to first child ( temp int)
+0:40        direct index ( temp int)
+0:40          i: direct index for structure ( temp 4-component vector of int)
+0:40            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:40                Constant:
+0:40                  0 (const uint)
+0:40              direct index ( temp uint)
+0:40                'dti' ( in 3-component vector of uint)
+0:40                Constant:
+0:40                  0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40          Constant:
+0:40            0 (const int)
+0:40        subgroupMul ( temp int)
+0:40          direct index ( temp int)
+0:40            i: direct index for structure ( temp 4-component vector of int)
+0:40              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:40                  Constant:
+0:40                    0 (const uint)
+0:40                direct index ( temp uint)
+0:40                  'dti' ( in 3-component vector of uint)
+0:40                  Constant:
+0:40                    0 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40            Constant:
+0:40              0 (const int)
+0:41      move second child to first child ( temp 2-component vector of int)
+0:41        vector swizzle ( temp 2-component vector of int)
+0:41          i: direct index for structure ( temp 4-component vector of int)
+0:41            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:41                Constant:
+0:41                  0 (const uint)
+0:41              direct index ( temp uint)
+0:41                'dti' ( in 3-component vector of uint)
+0:41                Constant:
+0:41                  0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41          Sequence
+0:41            Constant:
+0:41              0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41        subgroupMul ( temp 2-component vector of int)
+0:41          vector swizzle ( temp 2-component vector of int)
+0:41            i: direct index for structure ( temp 4-component vector of int)
+0:41              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:41                  Constant:
+0:41                    0 (const uint)
+0:41                direct index ( temp uint)
+0:41                  'dti' ( in 3-component vector of uint)
+0:41                  Constant:
+0:41                    0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:41            Sequence
+0:41              Constant:
+0:41                0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:42      move second child to first child ( temp 3-component vector of int)
+0:42        vector swizzle ( temp 3-component vector of int)
+0:42          i: direct index for structure ( temp 4-component vector of int)
+0:42            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:42                Constant:
+0:42                  0 (const uint)
+0:42              direct index ( temp uint)
+0:42                'dti' ( in 3-component vector of uint)
+0:42                Constant:
+0:42                  0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42          Sequence
+0:42            Constant:
+0:42              0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42            Constant:
+0:42              2 (const int)
+0:42        subgroupMul ( temp 3-component vector of int)
+0:42          vector swizzle ( temp 3-component vector of int)
+0:42            i: direct index for structure ( temp 4-component vector of int)
+0:42              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:42                  Constant:
+0:42                    0 (const uint)
+0:42                direct index ( temp uint)
+0:42                  'dti' ( in 3-component vector of uint)
+0:42                  Constant:
+0:42                    0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42            Sequence
+0:42              Constant:
+0:42                0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42              Constant:
+0:42                2 (const int)
+0:44      move second child to first child ( temp 4-component vector of float)
+0:44        f: direct index for structure ( temp 4-component vector of float)
+0:44          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:44              Constant:
+0:44                0 (const uint)
+0:44            direct index ( temp uint)
+0:44              'dti' ( in 3-component vector of uint)
+0:44              Constant:
+0:44                0 (const int)
+0:44          Constant:
+0:44            2 (const int)
+0:44        subgroupMul ( temp 4-component vector of float)
+0:44          f: direct index for structure ( temp 4-component vector of float)
+0:44            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:44                Constant:
+0:44                  0 (const uint)
+0:44              direct index ( temp uint)
+0:44                'dti' ( in 3-component vector of uint)
+0:44                Constant:
+0:44                  0 (const int)
+0:44            Constant:
+0:44              2 (const int)
+0:45      move second child to first child ( temp float)
+0:45        direct index ( temp float)
+0:45          f: direct index for structure ( temp 4-component vector of float)
+0:45            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:45                Constant:
+0:45                  0 (const uint)
+0:45              direct index ( temp uint)
+0:45                'dti' ( in 3-component vector of uint)
+0:45                Constant:
+0:45                  0 (const int)
+0:45            Constant:
+0:45              2 (const int)
+0:45          Constant:
+0:45            0 (const int)
+0:45        subgroupMul ( temp float)
+0:45          direct index ( temp float)
+0:45            f: direct index for structure ( temp 4-component vector of float)
+0:45              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:45                  Constant:
+0:45                    0 (const uint)
+0:45                direct index ( temp uint)
+0:45                  'dti' ( in 3-component vector of uint)
+0:45                  Constant:
+0:45                    0 (const int)
+0:45              Constant:
+0:45                2 (const int)
+0:45            Constant:
+0:45              0 (const int)
+0:46      move second child to first child ( temp 2-component vector of float)
+0:46        vector swizzle ( temp 2-component vector of float)
+0:46          f: direct index for structure ( temp 4-component vector of float)
+0:46            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:46                Constant:
+0:46                  0 (const uint)
+0:46              direct index ( temp uint)
+0:46                'dti' ( in 3-component vector of uint)
+0:46                Constant:
+0:46                  0 (const int)
+0:46            Constant:
+0:46              2 (const int)
+0:46          Sequence
+0:46            Constant:
+0:46              0 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46        subgroupMul ( temp 2-component vector of float)
+0:46          vector swizzle ( temp 2-component vector of float)
+0:46            f: direct index for structure ( temp 4-component vector of float)
+0:46              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:46                  Constant:
+0:46                    0 (const uint)
+0:46                direct index ( temp uint)
+0:46                  'dti' ( in 3-component vector of uint)
+0:46                  Constant:
+0:46                    0 (const int)
+0:46              Constant:
+0:46                2 (const int)
+0:46            Sequence
+0:46              Constant:
+0:46                0 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:47      move second child to first child ( temp 3-component vector of float)
+0:47        vector swizzle ( temp 3-component vector of float)
+0:47          f: direct index for structure ( temp 4-component vector of float)
+0:47            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:47                Constant:
+0:47                  0 (const uint)
+0:47              direct index ( temp uint)
+0:47                'dti' ( in 3-component vector of uint)
+0:47                Constant:
+0:47                  0 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47          Sequence
+0:47            Constant:
+0:47              0 (const int)
+0:47            Constant:
+0:47              1 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47        subgroupMul ( temp 3-component vector of float)
+0:47          vector swizzle ( temp 3-component vector of float)
+0:47            f: direct index for structure ( temp 4-component vector of float)
+0:47              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:47                  Constant:
+0:47                    0 (const uint)
+0:47                direct index ( temp uint)
+0:47                  'dti' ( in 3-component vector of uint)
+0:47                  Constant:
+0:47                    0 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:47            Sequence
+0:47              Constant:
+0:47                0 (const int)
+0:47              Constant:
+0:47                1 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:49      move second child to first child ( temp 4-component vector of double)
+0:49        d: direct index for structure ( temp 4-component vector of double)
+0:49          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:49              Constant:
+0:49                0 (const uint)
+0:49            direct index ( temp uint)
+0:49              'dti' ( in 3-component vector of uint)
+0:49              Constant:
+0:49                0 (const int)
+0:49          Constant:
+0:49            3 (const int)
+0:49        subgroupMul ( temp 4-component vector of double)
+0:49          d: direct index for structure ( temp 4-component vector of double)
+0:49            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:49                Constant:
+0:49                  0 (const uint)
+0:49              direct index ( temp uint)
+0:49                'dti' ( in 3-component vector of uint)
+0:49                Constant:
+0:49                  0 (const int)
+0:49            Constant:
+0:49              3 (const int)
+0:50      move second child to first child ( temp double)
+0:50        direct index ( temp double)
+0:50          d: direct index for structure ( temp 4-component vector of double)
+0:50            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:50                Constant:
+0:50                  0 (const uint)
+0:50              direct index ( temp uint)
+0:50                'dti' ( in 3-component vector of uint)
+0:50                Constant:
+0:50                  0 (const int)
+0:50            Constant:
+0:50              3 (const int)
+0:50          Constant:
+0:50            0 (const int)
+0:50        subgroupMul ( temp double)
+0:50          direct index ( temp double)
+0:50            d: direct index for structure ( temp 4-component vector of double)
+0:50              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:50                  Constant:
+0:50                    0 (const uint)
+0:50                direct index ( temp uint)
+0:50                  'dti' ( in 3-component vector of uint)
+0:50                  Constant:
+0:50                    0 (const int)
+0:50              Constant:
+0:50                3 (const int)
+0:50            Constant:
+0:50              0 (const int)
+0:51      move second child to first child ( temp 2-component vector of double)
+0:51        vector swizzle ( temp 2-component vector of double)
+0:51          d: direct index for structure ( temp 4-component vector of double)
+0:51            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:51                Constant:
+0:51                  0 (const uint)
+0:51              direct index ( temp uint)
+0:51                'dti' ( in 3-component vector of uint)
+0:51                Constant:
+0:51                  0 (const int)
+0:51            Constant:
+0:51              3 (const int)
+0:51          Sequence
+0:51            Constant:
+0:51              0 (const int)
+0:51            Constant:
+0:51              1 (const int)
+0:51        subgroupMul ( temp 2-component vector of double)
+0:51          vector swizzle ( temp 2-component vector of double)
+0:51            d: direct index for structure ( temp 4-component vector of double)
+0:51              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:51                  Constant:
+0:51                    0 (const uint)
+0:51                direct index ( temp uint)
+0:51                  'dti' ( in 3-component vector of uint)
+0:51                  Constant:
+0:51                    0 (const int)
+0:51              Constant:
+0:51                3 (const int)
+0:51            Sequence
+0:51              Constant:
+0:51                0 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:52      move second child to first child ( temp 3-component vector of double)
+0:52        vector swizzle ( temp 3-component vector of double)
+0:52          d: direct index for structure ( temp 4-component vector of double)
+0:52            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:52                Constant:
+0:52                  0 (const uint)
+0:52              direct index ( temp uint)
+0:52                'dti' ( in 3-component vector of uint)
+0:52                Constant:
+0:52                  0 (const int)
+0:52            Constant:
+0:52              3 (const int)
+0:52          Sequence
+0:52            Constant:
+0:52              0 (const int)
+0:52            Constant:
+0:52              1 (const int)
+0:52            Constant:
+0:52              2 (const int)
+0:52        subgroupMul ( temp 3-component vector of double)
+0:52          vector swizzle ( temp 3-component vector of double)
+0:52            d: direct index for structure ( temp 4-component vector of double)
+0:52              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:52                  Constant:
+0:52                    0 (const uint)
+0:52                direct index ( temp uint)
+0:52                  'dti' ( in 3-component vector of uint)
+0:52                  Constant:
+0:52                    0 (const int)
+0:52              Constant:
+0:52                3 (const int)
+0:52            Sequence
+0:52              Constant:
+0:52                0 (const int)
+0:52              Constant:
+0:52                1 (const int)
+0:52              Constant:
+0:52                2 (const int)
+0:54      move second child to first child ( temp 4-component vector of uint)
+0:54        u: direct index for structure ( temp 4-component vector of uint)
+0:54          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:54              Constant:
+0:54                0 (const uint)
+0:54            direct index ( temp uint)
+0:54              'dti' ( in 3-component vector of uint)
+0:54              Constant:
+0:54                0 (const int)
+0:54          Constant:
+0:54            0 (const int)
+0:54        subgroupMin ( temp 4-component vector of uint)
+0:54          u: direct index for structure ( temp 4-component vector of uint)
+0:54            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:54                Constant:
+0:54                  0 (const uint)
+0:54              direct index ( temp uint)
+0:54                'dti' ( in 3-component vector of uint)
+0:54                Constant:
+0:54                  0 (const int)
+0:54            Constant:
+0:54              0 (const int)
+0:55      move second child to first child ( temp uint)
+0:55        direct index ( temp uint)
+0:55          u: direct index for structure ( temp 4-component vector of uint)
+0:55            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:55              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:55                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:55                Constant:
+0:55                  0 (const uint)
+0:55              direct index ( temp uint)
+0:55                'dti' ( in 3-component vector of uint)
+0:55                Constant:
+0:55                  0 (const int)
+0:55            Constant:
+0:55              0 (const int)
+0:55          Constant:
+0:55            0 (const int)
+0:55        subgroupMin ( temp uint)
+0:55          direct index ( temp uint)
+0:55            u: direct index for structure ( temp 4-component vector of uint)
+0:55              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:55                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:55                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:55                  Constant:
+0:55                    0 (const uint)
+0:55                direct index ( temp uint)
+0:55                  'dti' ( in 3-component vector of uint)
+0:55                  Constant:
+0:55                    0 (const int)
+0:55              Constant:
+0:55                0 (const int)
+0:55            Constant:
+0:55              0 (const int)
+0:56      move second child to first child ( temp 2-component vector of uint)
+0:56        vector swizzle ( temp 2-component vector of uint)
+0:56          u: direct index for structure ( temp 4-component vector of uint)
+0:56            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:56              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:56                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:56                Constant:
+0:56                  0 (const uint)
+0:56              direct index ( temp uint)
+0:56                'dti' ( in 3-component vector of uint)
+0:56                Constant:
+0:56                  0 (const int)
+0:56            Constant:
+0:56              0 (const int)
+0:56          Sequence
+0:56            Constant:
+0:56              0 (const int)
+0:56            Constant:
+0:56              1 (const int)
+0:56        subgroupMin ( temp 2-component vector of uint)
+0:56          vector swizzle ( temp 2-component vector of uint)
+0:56            u: direct index for structure ( temp 4-component vector of uint)
+0:56              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:56                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:56                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:56                  Constant:
+0:56                    0 (const uint)
+0:56                direct index ( temp uint)
+0:56                  'dti' ( in 3-component vector of uint)
+0:56                  Constant:
+0:56                    0 (const int)
+0:56              Constant:
+0:56                0 (const int)
+0:56            Sequence
+0:56              Constant:
+0:56                0 (const int)
+0:56              Constant:
+0:56                1 (const int)
+0:57      move second child to first child ( temp 3-component vector of uint)
+0:57        vector swizzle ( temp 3-component vector of uint)
+0:57          u: direct index for structure ( temp 4-component vector of uint)
+0:57            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:57              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:57                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:57                Constant:
+0:57                  0 (const uint)
+0:57              direct index ( temp uint)
+0:57                'dti' ( in 3-component vector of uint)
+0:57                Constant:
+0:57                  0 (const int)
+0:57            Constant:
+0:57              0 (const int)
+0:57          Sequence
+0:57            Constant:
+0:57              0 (const int)
+0:57            Constant:
+0:57              1 (const int)
+0:57            Constant:
+0:57              2 (const int)
+0:57        subgroupMin ( temp 3-component vector of uint)
+0:57          vector swizzle ( temp 3-component vector of uint)
+0:57            u: direct index for structure ( temp 4-component vector of uint)
+0:57              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:57                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:57                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:57                  Constant:
+0:57                    0 (const uint)
+0:57                direct index ( temp uint)
+0:57                  'dti' ( in 3-component vector of uint)
+0:57                  Constant:
+0:57                    0 (const int)
+0:57              Constant:
+0:57                0 (const int)
+0:57            Sequence
+0:57              Constant:
+0:57                0 (const int)
+0:57              Constant:
+0:57                1 (const int)
+0:57              Constant:
+0:57                2 (const int)
+0:59      move second child to first child ( temp 4-component vector of int)
+0:59        i: direct index for structure ( temp 4-component vector of int)
+0:59          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:59            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:59              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:59              Constant:
+0:59                0 (const uint)
+0:59            direct index ( temp uint)
+0:59              'dti' ( in 3-component vector of uint)
+0:59              Constant:
+0:59                0 (const int)
+0:59          Constant:
+0:59            1 (const int)
+0:59        subgroupMin ( temp 4-component vector of int)
+0:59          i: direct index for structure ( temp 4-component vector of int)
+0:59            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:59              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:59                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:59                Constant:
+0:59                  0 (const uint)
+0:59              direct index ( temp uint)
+0:59                'dti' ( in 3-component vector of uint)
+0:59                Constant:
+0:59                  0 (const int)
+0:59            Constant:
+0:59              1 (const int)
+0:60      move second child to first child ( temp int)
+0:60        direct index ( temp int)
+0:60          i: direct index for structure ( temp 4-component vector of int)
+0:60            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:60              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:60                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:60                Constant:
+0:60                  0 (const uint)
+0:60              direct index ( temp uint)
+0:60                'dti' ( in 3-component vector of uint)
+0:60                Constant:
+0:60                  0 (const int)
+0:60            Constant:
+0:60              1 (const int)
+0:60          Constant:
+0:60            0 (const int)
+0:60        subgroupMin ( temp int)
+0:60          direct index ( temp int)
+0:60            i: direct index for structure ( temp 4-component vector of int)
+0:60              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:60                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:60                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:60                  Constant:
+0:60                    0 (const uint)
+0:60                direct index ( temp uint)
+0:60                  'dti' ( in 3-component vector of uint)
+0:60                  Constant:
+0:60                    0 (const int)
+0:60              Constant:
+0:60                1 (const int)
+0:60            Constant:
+0:60              0 (const int)
+0:61      move second child to first child ( temp 2-component vector of int)
+0:61        vector swizzle ( temp 2-component vector of int)
+0:61          i: direct index for structure ( temp 4-component vector of int)
+0:61            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:61              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:61                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:61                Constant:
+0:61                  0 (const uint)
+0:61              direct index ( temp uint)
+0:61                'dti' ( in 3-component vector of uint)
+0:61                Constant:
+0:61                  0 (const int)
+0:61            Constant:
+0:61              1 (const int)
+0:61          Sequence
+0:61            Constant:
+0:61              0 (const int)
+0:61            Constant:
+0:61              1 (const int)
+0:61        subgroupMin ( temp 2-component vector of int)
+0:61          vector swizzle ( temp 2-component vector of int)
+0:61            i: direct index for structure ( temp 4-component vector of int)
+0:61              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:61                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:61                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:61                  Constant:
+0:61                    0 (const uint)
+0:61                direct index ( temp uint)
+0:61                  'dti' ( in 3-component vector of uint)
+0:61                  Constant:
+0:61                    0 (const int)
+0:61              Constant:
+0:61                1 (const int)
+0:61            Sequence
+0:61              Constant:
+0:61                0 (const int)
+0:61              Constant:
+0:61                1 (const int)
+0:62      move second child to first child ( temp 3-component vector of int)
+0:62        vector swizzle ( temp 3-component vector of int)
+0:62          i: direct index for structure ( temp 4-component vector of int)
+0:62            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:62              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:62                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:62                Constant:
+0:62                  0 (const uint)
+0:62              direct index ( temp uint)
+0:62                'dti' ( in 3-component vector of uint)
+0:62                Constant:
+0:62                  0 (const int)
+0:62            Constant:
+0:62              1 (const int)
+0:62          Sequence
+0:62            Constant:
+0:62              0 (const int)
+0:62            Constant:
+0:62              1 (const int)
+0:62            Constant:
+0:62              2 (const int)
+0:62        subgroupMin ( temp 3-component vector of int)
+0:62          vector swizzle ( temp 3-component vector of int)
+0:62            i: direct index for structure ( temp 4-component vector of int)
+0:62              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:62                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:62                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:62                  Constant:
+0:62                    0 (const uint)
+0:62                direct index ( temp uint)
+0:62                  'dti' ( in 3-component vector of uint)
+0:62                  Constant:
+0:62                    0 (const int)
+0:62              Constant:
+0:62                1 (const int)
+0:62            Sequence
+0:62              Constant:
+0:62                0 (const int)
+0:62              Constant:
+0:62                1 (const int)
+0:62              Constant:
+0:62                2 (const int)
+0:64      move second child to first child ( temp 4-component vector of float)
+0:64        f: direct index for structure ( temp 4-component vector of float)
+0:64          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:64            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:64              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:64              Constant:
+0:64                0 (const uint)
+0:64            direct index ( temp uint)
+0:64              'dti' ( in 3-component vector of uint)
+0:64              Constant:
+0:64                0 (const int)
+0:64          Constant:
+0:64            2 (const int)
+0:64        subgroupMin ( temp 4-component vector of float)
+0:64          f: direct index for structure ( temp 4-component vector of float)
+0:64            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:64              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:64                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:64                Constant:
+0:64                  0 (const uint)
+0:64              direct index ( temp uint)
+0:64                'dti' ( in 3-component vector of uint)
+0:64                Constant:
+0:64                  0 (const int)
+0:64            Constant:
+0:64              2 (const int)
+0:65      move second child to first child ( temp float)
+0:65        direct index ( temp float)
+0:65          f: direct index for structure ( temp 4-component vector of float)
+0:65            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:65              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:65                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:65                Constant:
+0:65                  0 (const uint)
+0:65              direct index ( temp uint)
+0:65                'dti' ( in 3-component vector of uint)
+0:65                Constant:
+0:65                  0 (const int)
+0:65            Constant:
+0:65              2 (const int)
+0:65          Constant:
+0:65            0 (const int)
+0:65        subgroupMin ( temp float)
+0:65          direct index ( temp float)
+0:65            f: direct index for structure ( temp 4-component vector of float)
+0:65              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:65                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:65                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:65                  Constant:
+0:65                    0 (const uint)
+0:65                direct index ( temp uint)
+0:65                  'dti' ( in 3-component vector of uint)
+0:65                  Constant:
+0:65                    0 (const int)
+0:65              Constant:
+0:65                2 (const int)
+0:65            Constant:
+0:65              0 (const int)
+0:66      move second child to first child ( temp 2-component vector of float)
+0:66        vector swizzle ( temp 2-component vector of float)
+0:66          f: direct index for structure ( temp 4-component vector of float)
+0:66            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:66              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:66                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:66                Constant:
+0:66                  0 (const uint)
+0:66              direct index ( temp uint)
+0:66                'dti' ( in 3-component vector of uint)
+0:66                Constant:
+0:66                  0 (const int)
+0:66            Constant:
+0:66              2 (const int)
+0:66          Sequence
+0:66            Constant:
+0:66              0 (const int)
+0:66            Constant:
+0:66              1 (const int)
+0:66        subgroupMin ( temp 2-component vector of float)
+0:66          vector swizzle ( temp 2-component vector of float)
+0:66            f: direct index for structure ( temp 4-component vector of float)
+0:66              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:66                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:66                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:66                  Constant:
+0:66                    0 (const uint)
+0:66                direct index ( temp uint)
+0:66                  'dti' ( in 3-component vector of uint)
+0:66                  Constant:
+0:66                    0 (const int)
+0:66              Constant:
+0:66                2 (const int)
+0:66            Sequence
+0:66              Constant:
+0:66                0 (const int)
+0:66              Constant:
+0:66                1 (const int)
+0:67      move second child to first child ( temp 3-component vector of float)
+0:67        vector swizzle ( temp 3-component vector of float)
+0:67          f: direct index for structure ( temp 4-component vector of float)
+0:67            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:67              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:67                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:67                Constant:
+0:67                  0 (const uint)
+0:67              direct index ( temp uint)
+0:67                'dti' ( in 3-component vector of uint)
+0:67                Constant:
+0:67                  0 (const int)
+0:67            Constant:
+0:67              2 (const int)
+0:67          Sequence
+0:67            Constant:
+0:67              0 (const int)
+0:67            Constant:
+0:67              1 (const int)
+0:67            Constant:
+0:67              2 (const int)
+0:67        subgroupMin ( temp 3-component vector of float)
+0:67          vector swizzle ( temp 3-component vector of float)
+0:67            f: direct index for structure ( temp 4-component vector of float)
+0:67              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:67                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:67                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:67                  Constant:
+0:67                    0 (const uint)
+0:67                direct index ( temp uint)
+0:67                  'dti' ( in 3-component vector of uint)
+0:67                  Constant:
+0:67                    0 (const int)
+0:67              Constant:
+0:67                2 (const int)
+0:67            Sequence
+0:67              Constant:
+0:67                0 (const int)
+0:67              Constant:
+0:67                1 (const int)
+0:67              Constant:
+0:67                2 (const int)
+0:69      move second child to first child ( temp 4-component vector of double)
+0:69        d: direct index for structure ( temp 4-component vector of double)
+0:69          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:69            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:69              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:69              Constant:
+0:69                0 (const uint)
+0:69            direct index ( temp uint)
+0:69              'dti' ( in 3-component vector of uint)
+0:69              Constant:
+0:69                0 (const int)
+0:69          Constant:
+0:69            3 (const int)
+0:69        subgroupMin ( temp 4-component vector of double)
+0:69          d: direct index for structure ( temp 4-component vector of double)
+0:69            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:69              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:69                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:69                Constant:
+0:69                  0 (const uint)
+0:69              direct index ( temp uint)
+0:69                'dti' ( in 3-component vector of uint)
+0:69                Constant:
+0:69                  0 (const int)
+0:69            Constant:
+0:69              3 (const int)
+0:70      move second child to first child ( temp double)
+0:70        direct index ( temp double)
+0:70          d: direct index for structure ( temp 4-component vector of double)
+0:70            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:70              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:70                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:70                Constant:
+0:70                  0 (const uint)
+0:70              direct index ( temp uint)
+0:70                'dti' ( in 3-component vector of uint)
+0:70                Constant:
+0:70                  0 (const int)
+0:70            Constant:
+0:70              3 (const int)
+0:70          Constant:
+0:70            0 (const int)
+0:70        subgroupMin ( temp double)
+0:70          direct index ( temp double)
+0:70            d: direct index for structure ( temp 4-component vector of double)
+0:70              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:70                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:70                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:70                  Constant:
+0:70                    0 (const uint)
+0:70                direct index ( temp uint)
+0:70                  'dti' ( in 3-component vector of uint)
+0:70                  Constant:
+0:70                    0 (const int)
+0:70              Constant:
+0:70                3 (const int)
+0:70            Constant:
+0:70              0 (const int)
+0:71      move second child to first child ( temp 2-component vector of double)
+0:71        vector swizzle ( temp 2-component vector of double)
+0:71          d: direct index for structure ( temp 4-component vector of double)
+0:71            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:71              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:71                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:71                Constant:
+0:71                  0 (const uint)
+0:71              direct index ( temp uint)
+0:71                'dti' ( in 3-component vector of uint)
+0:71                Constant:
+0:71                  0 (const int)
+0:71            Constant:
+0:71              3 (const int)
+0:71          Sequence
+0:71            Constant:
+0:71              0 (const int)
+0:71            Constant:
+0:71              1 (const int)
+0:71        subgroupMin ( temp 2-component vector of double)
+0:71          vector swizzle ( temp 2-component vector of double)
+0:71            d: direct index for structure ( temp 4-component vector of double)
+0:71              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:71                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:71                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:71                  Constant:
+0:71                    0 (const uint)
+0:71                direct index ( temp uint)
+0:71                  'dti' ( in 3-component vector of uint)
+0:71                  Constant:
+0:71                    0 (const int)
+0:71              Constant:
+0:71                3 (const int)
+0:71            Sequence
+0:71              Constant:
+0:71                0 (const int)
+0:71              Constant:
+0:71                1 (const int)
+0:72      move second child to first child ( temp 3-component vector of double)
+0:72        vector swizzle ( temp 3-component vector of double)
+0:72          d: direct index for structure ( temp 4-component vector of double)
+0:72            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:72              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:72                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:72                Constant:
+0:72                  0 (const uint)
+0:72              direct index ( temp uint)
+0:72                'dti' ( in 3-component vector of uint)
+0:72                Constant:
+0:72                  0 (const int)
+0:72            Constant:
+0:72              3 (const int)
+0:72          Sequence
+0:72            Constant:
+0:72              0 (const int)
+0:72            Constant:
+0:72              1 (const int)
+0:72            Constant:
+0:72              2 (const int)
+0:72        subgroupMin ( temp 3-component vector of double)
+0:72          vector swizzle ( temp 3-component vector of double)
+0:72            d: direct index for structure ( temp 4-component vector of double)
+0:72              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:72                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:72                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:72                  Constant:
+0:72                    0 (const uint)
+0:72                direct index ( temp uint)
+0:72                  'dti' ( in 3-component vector of uint)
+0:72                  Constant:
+0:72                    0 (const int)
+0:72              Constant:
+0:72                3 (const int)
+0:72            Sequence
+0:72              Constant:
+0:72                0 (const int)
+0:72              Constant:
+0:72                1 (const int)
+0:72              Constant:
+0:72                2 (const int)
+0:74      move second child to first child ( temp 4-component vector of uint)
+0:74        u: direct index for structure ( temp 4-component vector of uint)
+0:74          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:74            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:74              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:74              Constant:
+0:74                0 (const uint)
+0:74            direct index ( temp uint)
+0:74              'dti' ( in 3-component vector of uint)
+0:74              Constant:
+0:74                0 (const int)
+0:74          Constant:
+0:74            0 (const int)
+0:74        subgroupMax ( temp 4-component vector of uint)
+0:74          u: direct index for structure ( temp 4-component vector of uint)
+0:74            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:74              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:74                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:74                Constant:
+0:74                  0 (const uint)
+0:74              direct index ( temp uint)
+0:74                'dti' ( in 3-component vector of uint)
+0:74                Constant:
+0:74                  0 (const int)
+0:74            Constant:
+0:74              0 (const int)
+0:75      move second child to first child ( temp uint)
+0:75        direct index ( temp uint)
+0:75          u: direct index for structure ( temp 4-component vector of uint)
+0:75            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:75              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:75                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:75                Constant:
+0:75                  0 (const uint)
+0:75              direct index ( temp uint)
+0:75                'dti' ( in 3-component vector of uint)
+0:75                Constant:
+0:75                  0 (const int)
+0:75            Constant:
+0:75              0 (const int)
+0:75          Constant:
+0:75            0 (const int)
+0:75        subgroupMax ( temp uint)
+0:75          direct index ( temp uint)
+0:75            u: direct index for structure ( temp 4-component vector of uint)
+0:75              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:75                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:75                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:75                  Constant:
+0:75                    0 (const uint)
+0:75                direct index ( temp uint)
+0:75                  'dti' ( in 3-component vector of uint)
+0:75                  Constant:
+0:75                    0 (const int)
+0:75              Constant:
+0:75                0 (const int)
+0:75            Constant:
+0:75              0 (const int)
+0:76      move second child to first child ( temp 2-component vector of uint)
+0:76        vector swizzle ( temp 2-component vector of uint)
+0:76          u: direct index for structure ( temp 4-component vector of uint)
+0:76            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:76              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:76                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:76                Constant:
+0:76                  0 (const uint)
+0:76              direct index ( temp uint)
+0:76                'dti' ( in 3-component vector of uint)
+0:76                Constant:
+0:76                  0 (const int)
+0:76            Constant:
+0:76              0 (const int)
+0:76          Sequence
+0:76            Constant:
+0:76              0 (const int)
+0:76            Constant:
+0:76              1 (const int)
+0:76        subgroupMax ( temp 2-component vector of uint)
+0:76          vector swizzle ( temp 2-component vector of uint)
+0:76            u: direct index for structure ( temp 4-component vector of uint)
+0:76              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:76                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:76                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:76                  Constant:
+0:76                    0 (const uint)
+0:76                direct index ( temp uint)
+0:76                  'dti' ( in 3-component vector of uint)
+0:76                  Constant:
+0:76                    0 (const int)
+0:76              Constant:
+0:76                0 (const int)
+0:76            Sequence
+0:76              Constant:
+0:76                0 (const int)
+0:76              Constant:
+0:76                1 (const int)
+0:77      move second child to first child ( temp 3-component vector of uint)
+0:77        vector swizzle ( temp 3-component vector of uint)
+0:77          u: direct index for structure ( temp 4-component vector of uint)
+0:77            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:77              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:77                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:77                Constant:
+0:77                  0 (const uint)
+0:77              direct index ( temp uint)
+0:77                'dti' ( in 3-component vector of uint)
+0:77                Constant:
+0:77                  0 (const int)
+0:77            Constant:
+0:77              0 (const int)
+0:77          Sequence
+0:77            Constant:
+0:77              0 (const int)
+0:77            Constant:
+0:77              1 (const int)
+0:77            Constant:
+0:77              2 (const int)
+0:77        subgroupMax ( temp 3-component vector of uint)
+0:77          vector swizzle ( temp 3-component vector of uint)
+0:77            u: direct index for structure ( temp 4-component vector of uint)
+0:77              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:77                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:77                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:77                  Constant:
+0:77                    0 (const uint)
+0:77                direct index ( temp uint)
+0:77                  'dti' ( in 3-component vector of uint)
+0:77                  Constant:
+0:77                    0 (const int)
+0:77              Constant:
+0:77                0 (const int)
+0:77            Sequence
+0:77              Constant:
+0:77                0 (const int)
+0:77              Constant:
+0:77                1 (const int)
+0:77              Constant:
+0:77                2 (const int)
+0:79      move second child to first child ( temp 4-component vector of int)
+0:79        i: direct index for structure ( temp 4-component vector of int)
+0:79          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:79            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:79              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:79              Constant:
+0:79                0 (const uint)
+0:79            direct index ( temp uint)
+0:79              'dti' ( in 3-component vector of uint)
+0:79              Constant:
+0:79                0 (const int)
+0:79          Constant:
+0:79            1 (const int)
+0:79        subgroupMax ( temp 4-component vector of int)
+0:79          i: direct index for structure ( temp 4-component vector of int)
+0:79            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:79              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:79                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:79                Constant:
+0:79                  0 (const uint)
+0:79              direct index ( temp uint)
+0:79                'dti' ( in 3-component vector of uint)
+0:79                Constant:
+0:79                  0 (const int)
+0:79            Constant:
+0:79              1 (const int)
+0:80      move second child to first child ( temp int)
+0:80        direct index ( temp int)
+0:80          i: direct index for structure ( temp 4-component vector of int)
+0:80            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:80              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:80                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:80                Constant:
+0:80                  0 (const uint)
+0:80              direct index ( temp uint)
+0:80                'dti' ( in 3-component vector of uint)
+0:80                Constant:
+0:80                  0 (const int)
+0:80            Constant:
+0:80              1 (const int)
+0:80          Constant:
+0:80            0 (const int)
+0:80        subgroupMax ( temp int)
+0:80          direct index ( temp int)
+0:80            i: direct index for structure ( temp 4-component vector of int)
+0:80              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:80                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:80                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:80                  Constant:
+0:80                    0 (const uint)
+0:80                direct index ( temp uint)
+0:80                  'dti' ( in 3-component vector of uint)
+0:80                  Constant:
+0:80                    0 (const int)
+0:80              Constant:
+0:80                1 (const int)
+0:80            Constant:
+0:80              0 (const int)
+0:81      move second child to first child ( temp 2-component vector of int)
+0:81        vector swizzle ( temp 2-component vector of int)
+0:81          i: direct index for structure ( temp 4-component vector of int)
+0:81            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:81              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:81                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:81                Constant:
+0:81                  0 (const uint)
+0:81              direct index ( temp uint)
+0:81                'dti' ( in 3-component vector of uint)
+0:81                Constant:
+0:81                  0 (const int)
+0:81            Constant:
+0:81              1 (const int)
+0:81          Sequence
+0:81            Constant:
+0:81              0 (const int)
+0:81            Constant:
+0:81              1 (const int)
+0:81        subgroupMax ( temp 2-component vector of int)
+0:81          vector swizzle ( temp 2-component vector of int)
+0:81            i: direct index for structure ( temp 4-component vector of int)
+0:81              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:81                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:81                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:81                  Constant:
+0:81                    0 (const uint)
+0:81                direct index ( temp uint)
+0:81                  'dti' ( in 3-component vector of uint)
+0:81                  Constant:
+0:81                    0 (const int)
+0:81              Constant:
+0:81                1 (const int)
+0:81            Sequence
+0:81              Constant:
+0:81                0 (const int)
+0:81              Constant:
+0:81                1 (const int)
+0:82      move second child to first child ( temp 3-component vector of int)
+0:82        vector swizzle ( temp 3-component vector of int)
+0:82          i: direct index for structure ( temp 4-component vector of int)
+0:82            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:82              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:82                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:82                Constant:
+0:82                  0 (const uint)
+0:82              direct index ( temp uint)
+0:82                'dti' ( in 3-component vector of uint)
+0:82                Constant:
+0:82                  0 (const int)
+0:82            Constant:
+0:82              1 (const int)
+0:82          Sequence
+0:82            Constant:
+0:82              0 (const int)
+0:82            Constant:
+0:82              1 (const int)
+0:82            Constant:
+0:82              2 (const int)
+0:82        subgroupMax ( temp 3-component vector of int)
+0:82          vector swizzle ( temp 3-component vector of int)
+0:82            i: direct index for structure ( temp 4-component vector of int)
+0:82              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:82                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:82                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:82                  Constant:
+0:82                    0 (const uint)
+0:82                direct index ( temp uint)
+0:82                  'dti' ( in 3-component vector of uint)
+0:82                  Constant:
+0:82                    0 (const int)
+0:82              Constant:
+0:82                1 (const int)
+0:82            Sequence
+0:82              Constant:
+0:82                0 (const int)
+0:82              Constant:
+0:82                1 (const int)
+0:82              Constant:
+0:82                2 (const int)
+0:84      move second child to first child ( temp 4-component vector of float)
+0:84        f: direct index for structure ( temp 4-component vector of float)
+0:84          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:84            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:84              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:84              Constant:
+0:84                0 (const uint)
+0:84            direct index ( temp uint)
+0:84              'dti' ( in 3-component vector of uint)
+0:84              Constant:
+0:84                0 (const int)
+0:84          Constant:
+0:84            2 (const int)
+0:84        subgroupMax ( temp 4-component vector of float)
+0:84          f: direct index for structure ( temp 4-component vector of float)
+0:84            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:84              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:84                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:84                Constant:
+0:84                  0 (const uint)
+0:84              direct index ( temp uint)
+0:84                'dti' ( in 3-component vector of uint)
+0:84                Constant:
+0:84                  0 (const int)
+0:84            Constant:
+0:84              2 (const int)
+0:85      move second child to first child ( temp float)
+0:85        direct index ( temp float)
+0:85          f: direct index for structure ( temp 4-component vector of float)
+0:85            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:85              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:85                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:85                Constant:
+0:85                  0 (const uint)
+0:85              direct index ( temp uint)
+0:85                'dti' ( in 3-component vector of uint)
+0:85                Constant:
+0:85                  0 (const int)
+0:85            Constant:
+0:85              2 (const int)
+0:85          Constant:
+0:85            0 (const int)
+0:85        subgroupMax ( temp float)
+0:85          direct index ( temp float)
+0:85            f: direct index for structure ( temp 4-component vector of float)
+0:85              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:85                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:85                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:85                  Constant:
+0:85                    0 (const uint)
+0:85                direct index ( temp uint)
+0:85                  'dti' ( in 3-component vector of uint)
+0:85                  Constant:
+0:85                    0 (const int)
+0:85              Constant:
+0:85                2 (const int)
+0:85            Constant:
+0:85              0 (const int)
+0:86      move second child to first child ( temp 2-component vector of float)
+0:86        vector swizzle ( temp 2-component vector of float)
+0:86          f: direct index for structure ( temp 4-component vector of float)
+0:86            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:86              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:86                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:86                Constant:
+0:86                  0 (const uint)
+0:86              direct index ( temp uint)
+0:86                'dti' ( in 3-component vector of uint)
+0:86                Constant:
+0:86                  0 (const int)
+0:86            Constant:
+0:86              2 (const int)
+0:86          Sequence
+0:86            Constant:
+0:86              0 (const int)
+0:86            Constant:
+0:86              1 (const int)
+0:86        subgroupMax ( temp 2-component vector of float)
+0:86          vector swizzle ( temp 2-component vector of float)
+0:86            f: direct index for structure ( temp 4-component vector of float)
+0:86              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:86                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:86                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:86                  Constant:
+0:86                    0 (const uint)
+0:86                direct index ( temp uint)
+0:86                  'dti' ( in 3-component vector of uint)
+0:86                  Constant:
+0:86                    0 (const int)
+0:86              Constant:
+0:86                2 (const int)
+0:86            Sequence
+0:86              Constant:
+0:86                0 (const int)
+0:86              Constant:
+0:86                1 (const int)
+0:87      move second child to first child ( temp 3-component vector of float)
+0:87        vector swizzle ( temp 3-component vector of float)
+0:87          f: direct index for structure ( temp 4-component vector of float)
+0:87            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:87              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:87                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:87                Constant:
+0:87                  0 (const uint)
+0:87              direct index ( temp uint)
+0:87                'dti' ( in 3-component vector of uint)
+0:87                Constant:
+0:87                  0 (const int)
+0:87            Constant:
+0:87              2 (const int)
+0:87          Sequence
+0:87            Constant:
+0:87              0 (const int)
+0:87            Constant:
+0:87              1 (const int)
+0:87            Constant:
+0:87              2 (const int)
+0:87        subgroupMax ( temp 3-component vector of float)
+0:87          vector swizzle ( temp 3-component vector of float)
+0:87            f: direct index for structure ( temp 4-component vector of float)
+0:87              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:87                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:87                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:87                  Constant:
+0:87                    0 (const uint)
+0:87                direct index ( temp uint)
+0:87                  'dti' ( in 3-component vector of uint)
+0:87                  Constant:
+0:87                    0 (const int)
+0:87              Constant:
+0:87                2 (const int)
+0:87            Sequence
+0:87              Constant:
+0:87                0 (const int)
+0:87              Constant:
+0:87                1 (const int)
+0:87              Constant:
+0:87                2 (const int)
+0:89      move second child to first child ( temp 4-component vector of double)
+0:89        d: direct index for structure ( temp 4-component vector of double)
+0:89          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:89            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:89              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:89              Constant:
+0:89                0 (const uint)
+0:89            direct index ( temp uint)
+0:89              'dti' ( in 3-component vector of uint)
+0:89              Constant:
+0:89                0 (const int)
+0:89          Constant:
+0:89            3 (const int)
+0:89        subgroupMax ( temp 4-component vector of double)
+0:89          d: direct index for structure ( temp 4-component vector of double)
+0:89            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:89              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:89                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:89                Constant:
+0:89                  0 (const uint)
+0:89              direct index ( temp uint)
+0:89                'dti' ( in 3-component vector of uint)
+0:89                Constant:
+0:89                  0 (const int)
+0:89            Constant:
+0:89              3 (const int)
+0:90      move second child to first child ( temp double)
+0:90        direct index ( temp double)
+0:90          d: direct index for structure ( temp 4-component vector of double)
+0:90            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:90              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:90                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:90                Constant:
+0:90                  0 (const uint)
+0:90              direct index ( temp uint)
+0:90                'dti' ( in 3-component vector of uint)
+0:90                Constant:
+0:90                  0 (const int)
+0:90            Constant:
+0:90              3 (const int)
+0:90          Constant:
+0:90            0 (const int)
+0:90        subgroupMax ( temp double)
+0:90          direct index ( temp double)
+0:90            d: direct index for structure ( temp 4-component vector of double)
+0:90              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:90                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:90                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:90                  Constant:
+0:90                    0 (const uint)
+0:90                direct index ( temp uint)
+0:90                  'dti' ( in 3-component vector of uint)
+0:90                  Constant:
+0:90                    0 (const int)
+0:90              Constant:
+0:90                3 (const int)
+0:90            Constant:
+0:90              0 (const int)
+0:91      move second child to first child ( temp 2-component vector of double)
+0:91        vector swizzle ( temp 2-component vector of double)
+0:91          d: direct index for structure ( temp 4-component vector of double)
+0:91            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:91              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:91                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:91                Constant:
+0:91                  0 (const uint)
+0:91              direct index ( temp uint)
+0:91                'dti' ( in 3-component vector of uint)
+0:91                Constant:
+0:91                  0 (const int)
+0:91            Constant:
+0:91              3 (const int)
+0:91          Sequence
+0:91            Constant:
+0:91              0 (const int)
+0:91            Constant:
+0:91              1 (const int)
+0:91        subgroupMax ( temp 2-component vector of double)
+0:91          vector swizzle ( temp 2-component vector of double)
+0:91            d: direct index for structure ( temp 4-component vector of double)
+0:91              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:91                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:91                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:91                  Constant:
+0:91                    0 (const uint)
+0:91                direct index ( temp uint)
+0:91                  'dti' ( in 3-component vector of uint)
+0:91                  Constant:
+0:91                    0 (const int)
+0:91              Constant:
+0:91                3 (const int)
+0:91            Sequence
+0:91              Constant:
+0:91                0 (const int)
+0:91              Constant:
+0:91                1 (const int)
+0:92      move second child to first child ( temp 3-component vector of double)
+0:92        vector swizzle ( temp 3-component vector of double)
+0:92          d: direct index for structure ( temp 4-component vector of double)
+0:92            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:92              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:92                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:92                Constant:
+0:92                  0 (const uint)
+0:92              direct index ( temp uint)
+0:92                'dti' ( in 3-component vector of uint)
+0:92                Constant:
+0:92                  0 (const int)
+0:92            Constant:
+0:92              3 (const int)
+0:92          Sequence
+0:92            Constant:
+0:92              0 (const int)
+0:92            Constant:
+0:92              1 (const int)
+0:92            Constant:
+0:92              2 (const int)
+0:92        subgroupMax ( temp 3-component vector of double)
+0:92          vector swizzle ( temp 3-component vector of double)
+0:92            d: direct index for structure ( temp 4-component vector of double)
+0:92              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:92                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:92                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:92                  Constant:
+0:92                    0 (const uint)
+0:92                direct index ( temp uint)
+0:92                  'dti' ( in 3-component vector of uint)
+0:92                  Constant:
+0:92                    0 (const int)
+0:92              Constant:
+0:92                3 (const int)
+0:92            Sequence
+0:92              Constant:
+0:92                0 (const int)
+0:92              Constant:
+0:92                1 (const int)
+0:92              Constant:
+0:92                2 (const int)
+0:94      move second child to first child ( temp 4-component vector of uint)
+0:94        u: direct index for structure ( temp 4-component vector of uint)
+0:94          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:94            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:94              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:94              Constant:
+0:94                0 (const uint)
+0:94            direct index ( temp uint)
+0:94              'dti' ( in 3-component vector of uint)
+0:94              Constant:
+0:94                0 (const int)
+0:94          Constant:
+0:94            0 (const int)
+0:94        subgroupAnd ( temp 4-component vector of uint)
+0:94          u: direct index for structure ( temp 4-component vector of uint)
+0:94            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:94              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:94                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:94                Constant:
+0:94                  0 (const uint)
+0:94              direct index ( temp uint)
+0:94                'dti' ( in 3-component vector of uint)
+0:94                Constant:
+0:94                  0 (const int)
+0:94            Constant:
+0:94              0 (const int)
+0:95      move second child to first child ( temp uint)
+0:95        direct index ( temp uint)
+0:95          u: direct index for structure ( temp 4-component vector of uint)
+0:95            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:95              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:95                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:95                Constant:
+0:95                  0 (const uint)
+0:95              direct index ( temp uint)
+0:95                'dti' ( in 3-component vector of uint)
+0:95                Constant:
+0:95                  0 (const int)
+0:95            Constant:
+0:95              0 (const int)
+0:95          Constant:
+0:95            0 (const int)
+0:95        subgroupAnd ( temp uint)
+0:95          direct index ( temp uint)
+0:95            u: direct index for structure ( temp 4-component vector of uint)
+0:95              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:95                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:95                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:95                  Constant:
+0:95                    0 (const uint)
+0:95                direct index ( temp uint)
+0:95                  'dti' ( in 3-component vector of uint)
+0:95                  Constant:
+0:95                    0 (const int)
+0:95              Constant:
+0:95                0 (const int)
+0:95            Constant:
+0:95              0 (const int)
+0:96      move second child to first child ( temp 2-component vector of uint)
+0:96        vector swizzle ( temp 2-component vector of uint)
+0:96          u: direct index for structure ( temp 4-component vector of uint)
+0:96            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:96              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:96                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:96                Constant:
+0:96                  0 (const uint)
+0:96              direct index ( temp uint)
+0:96                'dti' ( in 3-component vector of uint)
+0:96                Constant:
+0:96                  0 (const int)
+0:96            Constant:
+0:96              0 (const int)
+0:96          Sequence
+0:96            Constant:
+0:96              0 (const int)
+0:96            Constant:
+0:96              1 (const int)
+0:96        subgroupAnd ( temp 2-component vector of uint)
+0:96          vector swizzle ( temp 2-component vector of uint)
+0:96            u: direct index for structure ( temp 4-component vector of uint)
+0:96              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:96                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:96                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:96                  Constant:
+0:96                    0 (const uint)
+0:96                direct index ( temp uint)
+0:96                  'dti' ( in 3-component vector of uint)
+0:96                  Constant:
+0:96                    0 (const int)
+0:96              Constant:
+0:96                0 (const int)
+0:96            Sequence
+0:96              Constant:
+0:96                0 (const int)
+0:96              Constant:
+0:96                1 (const int)
+0:97      move second child to first child ( temp 3-component vector of uint)
+0:97        vector swizzle ( temp 3-component vector of uint)
+0:97          u: direct index for structure ( temp 4-component vector of uint)
+0:97            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:97              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:97                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:97                Constant:
+0:97                  0 (const uint)
+0:97              direct index ( temp uint)
+0:97                'dti' ( in 3-component vector of uint)
+0:97                Constant:
+0:97                  0 (const int)
+0:97            Constant:
+0:97              0 (const int)
+0:97          Sequence
+0:97            Constant:
+0:97              0 (const int)
+0:97            Constant:
+0:97              1 (const int)
+0:97            Constant:
+0:97              2 (const int)
+0:97        subgroupAnd ( temp 3-component vector of uint)
+0:97          vector swizzle ( temp 3-component vector of uint)
+0:97            u: direct index for structure ( temp 4-component vector of uint)
+0:97              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:97                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:97                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:97                  Constant:
+0:97                    0 (const uint)
+0:97                direct index ( temp uint)
+0:97                  'dti' ( in 3-component vector of uint)
+0:97                  Constant:
+0:97                    0 (const int)
+0:97              Constant:
+0:97                0 (const int)
+0:97            Sequence
+0:97              Constant:
+0:97                0 (const int)
+0:97              Constant:
+0:97                1 (const int)
+0:97              Constant:
+0:97                2 (const int)
+0:99      move second child to first child ( temp 4-component vector of int)
+0:99        i: direct index for structure ( temp 4-component vector of int)
+0:99          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:99            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:99              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:99              Constant:
+0:99                0 (const uint)
+0:99            direct index ( temp uint)
+0:99              'dti' ( in 3-component vector of uint)
+0:99              Constant:
+0:99                0 (const int)
+0:99          Constant:
+0:99            1 (const int)
+0:99        subgroupAnd ( temp 4-component vector of int)
+0:99          i: direct index for structure ( temp 4-component vector of int)
+0:99            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:99              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:99                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:99                Constant:
+0:99                  0 (const uint)
+0:99              direct index ( temp uint)
+0:99                'dti' ( in 3-component vector of uint)
+0:99                Constant:
+0:99                  0 (const int)
+0:99            Constant:
+0:99              1 (const int)
+0:100      move second child to first child ( temp int)
+0:100        direct index ( temp int)
+0:100          i: direct index for structure ( temp 4-component vector of int)
+0:100            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:100              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:100                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:100                Constant:
+0:100                  0 (const uint)
+0:100              direct index ( temp uint)
+0:100                'dti' ( in 3-component vector of uint)
+0:100                Constant:
+0:100                  0 (const int)
+0:100            Constant:
+0:100              1 (const int)
+0:100          Constant:
+0:100            0 (const int)
+0:100        subgroupAnd ( temp int)
+0:100          direct index ( temp int)
+0:100            i: direct index for structure ( temp 4-component vector of int)
+0:100              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:100                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:100                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:100                  Constant:
+0:100                    0 (const uint)
+0:100                direct index ( temp uint)
+0:100                  'dti' ( in 3-component vector of uint)
+0:100                  Constant:
+0:100                    0 (const int)
+0:100              Constant:
+0:100                1 (const int)
+0:100            Constant:
+0:100              0 (const int)
+0:101      move second child to first child ( temp 2-component vector of int)
+0:101        vector swizzle ( temp 2-component vector of int)
+0:101          i: direct index for structure ( temp 4-component vector of int)
+0:101            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:101              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:101                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:101                Constant:
+0:101                  0 (const uint)
+0:101              direct index ( temp uint)
+0:101                'dti' ( in 3-component vector of uint)
+0:101                Constant:
+0:101                  0 (const int)
+0:101            Constant:
+0:101              1 (const int)
+0:101          Sequence
+0:101            Constant:
+0:101              0 (const int)
+0:101            Constant:
+0:101              1 (const int)
+0:101        subgroupAnd ( temp 2-component vector of int)
+0:101          vector swizzle ( temp 2-component vector of int)
+0:101            i: direct index for structure ( temp 4-component vector of int)
+0:101              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:101                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:101                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:101                  Constant:
+0:101                    0 (const uint)
+0:101                direct index ( temp uint)
+0:101                  'dti' ( in 3-component vector of uint)
+0:101                  Constant:
+0:101                    0 (const int)
+0:101              Constant:
+0:101                1 (const int)
+0:101            Sequence
+0:101              Constant:
+0:101                0 (const int)
+0:101              Constant:
+0:101                1 (const int)
+0:102      move second child to first child ( temp 3-component vector of int)
+0:102        vector swizzle ( temp 3-component vector of int)
+0:102          i: direct index for structure ( temp 4-component vector of int)
+0:102            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:102              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:102                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:102                Constant:
+0:102                  0 (const uint)
+0:102              direct index ( temp uint)
+0:102                'dti' ( in 3-component vector of uint)
+0:102                Constant:
+0:102                  0 (const int)
+0:102            Constant:
+0:102              1 (const int)
+0:102          Sequence
+0:102            Constant:
+0:102              0 (const int)
+0:102            Constant:
+0:102              1 (const int)
+0:102            Constant:
+0:102              2 (const int)
+0:102        subgroupAnd ( temp 3-component vector of int)
+0:102          vector swizzle ( temp 3-component vector of int)
+0:102            i: direct index for structure ( temp 4-component vector of int)
+0:102              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:102                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:102                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:102                  Constant:
+0:102                    0 (const uint)
+0:102                direct index ( temp uint)
+0:102                  'dti' ( in 3-component vector of uint)
+0:102                  Constant:
+0:102                    0 (const int)
+0:102              Constant:
+0:102                1 (const int)
+0:102            Sequence
+0:102              Constant:
+0:102                0 (const int)
+0:102              Constant:
+0:102                1 (const int)
+0:102              Constant:
+0:102                2 (const int)
+0:104      move second child to first child ( temp 4-component vector of uint)
+0:104        u: direct index for structure ( temp 4-component vector of uint)
+0:104          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:104            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:104              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:104              Constant:
+0:104                0 (const uint)
+0:104            direct index ( temp uint)
+0:104              'dti' ( in 3-component vector of uint)
+0:104              Constant:
+0:104                0 (const int)
+0:104          Constant:
+0:104            0 (const int)
+0:104        subgroupOr ( temp 4-component vector of uint)
+0:104          u: direct index for structure ( temp 4-component vector of uint)
+0:104            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:104              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:104                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:104                Constant:
+0:104                  0 (const uint)
+0:104              direct index ( temp uint)
+0:104                'dti' ( in 3-component vector of uint)
+0:104                Constant:
+0:104                  0 (const int)
+0:104            Constant:
+0:104              0 (const int)
+0:105      move second child to first child ( temp uint)
+0:105        direct index ( temp uint)
+0:105          u: direct index for structure ( temp 4-component vector of uint)
+0:105            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:105              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:105                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:105                Constant:
+0:105                  0 (const uint)
+0:105              direct index ( temp uint)
+0:105                'dti' ( in 3-component vector of uint)
+0:105                Constant:
+0:105                  0 (const int)
+0:105            Constant:
+0:105              0 (const int)
+0:105          Constant:
+0:105            0 (const int)
+0:105        subgroupOr ( temp uint)
+0:105          direct index ( temp uint)
+0:105            u: direct index for structure ( temp 4-component vector of uint)
+0:105              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:105                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:105                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:105                  Constant:
+0:105                    0 (const uint)
+0:105                direct index ( temp uint)
+0:105                  'dti' ( in 3-component vector of uint)
+0:105                  Constant:
+0:105                    0 (const int)
+0:105              Constant:
+0:105                0 (const int)
+0:105            Constant:
+0:105              0 (const int)
+0:106      move second child to first child ( temp 2-component vector of uint)
+0:106        vector swizzle ( temp 2-component vector of uint)
+0:106          u: direct index for structure ( temp 4-component vector of uint)
+0:106            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:106              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:106                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:106                Constant:
+0:106                  0 (const uint)
+0:106              direct index ( temp uint)
+0:106                'dti' ( in 3-component vector of uint)
+0:106                Constant:
+0:106                  0 (const int)
+0:106            Constant:
+0:106              0 (const int)
+0:106          Sequence
+0:106            Constant:
+0:106              0 (const int)
+0:106            Constant:
+0:106              1 (const int)
+0:106        subgroupOr ( temp 2-component vector of uint)
+0:106          vector swizzle ( temp 2-component vector of uint)
+0:106            u: direct index for structure ( temp 4-component vector of uint)
+0:106              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:106                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:106                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:106                  Constant:
+0:106                    0 (const uint)
+0:106                direct index ( temp uint)
+0:106                  'dti' ( in 3-component vector of uint)
+0:106                  Constant:
+0:106                    0 (const int)
+0:106              Constant:
+0:106                0 (const int)
+0:106            Sequence
+0:106              Constant:
+0:106                0 (const int)
+0:106              Constant:
+0:106                1 (const int)
+0:107      move second child to first child ( temp 3-component vector of uint)
+0:107        vector swizzle ( temp 3-component vector of uint)
+0:107          u: direct index for structure ( temp 4-component vector of uint)
+0:107            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:107              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:107                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:107                Constant:
+0:107                  0 (const uint)
+0:107              direct index ( temp uint)
+0:107                'dti' ( in 3-component vector of uint)
+0:107                Constant:
+0:107                  0 (const int)
+0:107            Constant:
+0:107              0 (const int)
+0:107          Sequence
+0:107            Constant:
+0:107              0 (const int)
+0:107            Constant:
+0:107              1 (const int)
+0:107            Constant:
+0:107              2 (const int)
+0:107        subgroupOr ( temp 3-component vector of uint)
+0:107          vector swizzle ( temp 3-component vector of uint)
+0:107            u: direct index for structure ( temp 4-component vector of uint)
+0:107              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:107                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:107                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:107                  Constant:
+0:107                    0 (const uint)
+0:107                direct index ( temp uint)
+0:107                  'dti' ( in 3-component vector of uint)
+0:107                  Constant:
+0:107                    0 (const int)
+0:107              Constant:
+0:107                0 (const int)
+0:107            Sequence
+0:107              Constant:
+0:107                0 (const int)
+0:107              Constant:
+0:107                1 (const int)
+0:107              Constant:
+0:107                2 (const int)
+0:109      move second child to first child ( temp 4-component vector of int)
+0:109        i: direct index for structure ( temp 4-component vector of int)
+0:109          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:109            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:109              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:109              Constant:
+0:109                0 (const uint)
+0:109            direct index ( temp uint)
+0:109              'dti' ( in 3-component vector of uint)
+0:109              Constant:
+0:109                0 (const int)
+0:109          Constant:
+0:109            1 (const int)
+0:109        subgroupOr ( temp 4-component vector of int)
+0:109          i: direct index for structure ( temp 4-component vector of int)
+0:109            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:109              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:109                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:109                Constant:
+0:109                  0 (const uint)
+0:109              direct index ( temp uint)
+0:109                'dti' ( in 3-component vector of uint)
+0:109                Constant:
+0:109                  0 (const int)
+0:109            Constant:
+0:109              1 (const int)
+0:110      move second child to first child ( temp int)
+0:110        direct index ( temp int)
+0:110          i: direct index for structure ( temp 4-component vector of int)
+0:110            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:110              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:110                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:110                Constant:
+0:110                  0 (const uint)
+0:110              direct index ( temp uint)
+0:110                'dti' ( in 3-component vector of uint)
+0:110                Constant:
+0:110                  0 (const int)
+0:110            Constant:
+0:110              1 (const int)
+0:110          Constant:
+0:110            0 (const int)
+0:110        subgroupOr ( temp int)
+0:110          direct index ( temp int)
+0:110            i: direct index for structure ( temp 4-component vector of int)
+0:110              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:110                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:110                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:110                  Constant:
+0:110                    0 (const uint)
+0:110                direct index ( temp uint)
+0:110                  'dti' ( in 3-component vector of uint)
+0:110                  Constant:
+0:110                    0 (const int)
+0:110              Constant:
+0:110                1 (const int)
+0:110            Constant:
+0:110              0 (const int)
+0:111      move second child to first child ( temp 2-component vector of int)
+0:111        vector swizzle ( temp 2-component vector of int)
+0:111          i: direct index for structure ( temp 4-component vector of int)
+0:111            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:111              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:111                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:111                Constant:
+0:111                  0 (const uint)
+0:111              direct index ( temp uint)
+0:111                'dti' ( in 3-component vector of uint)
+0:111                Constant:
+0:111                  0 (const int)
+0:111            Constant:
+0:111              1 (const int)
+0:111          Sequence
+0:111            Constant:
+0:111              0 (const int)
+0:111            Constant:
+0:111              1 (const int)
+0:111        subgroupOr ( temp 2-component vector of int)
+0:111          vector swizzle ( temp 2-component vector of int)
+0:111            i: direct index for structure ( temp 4-component vector of int)
+0:111              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:111                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:111                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:111                  Constant:
+0:111                    0 (const uint)
+0:111                direct index ( temp uint)
+0:111                  'dti' ( in 3-component vector of uint)
+0:111                  Constant:
+0:111                    0 (const int)
+0:111              Constant:
+0:111                1 (const int)
+0:111            Sequence
+0:111              Constant:
+0:111                0 (const int)
+0:111              Constant:
+0:111                1 (const int)
+0:112      move second child to first child ( temp 3-component vector of int)
+0:112        vector swizzle ( temp 3-component vector of int)
+0:112          i: direct index for structure ( temp 4-component vector of int)
+0:112            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:112              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:112                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:112                Constant:
+0:112                  0 (const uint)
+0:112              direct index ( temp uint)
+0:112                'dti' ( in 3-component vector of uint)
+0:112                Constant:
+0:112                  0 (const int)
+0:112            Constant:
+0:112              1 (const int)
+0:112          Sequence
+0:112            Constant:
+0:112              0 (const int)
+0:112            Constant:
+0:112              1 (const int)
+0:112            Constant:
+0:112              2 (const int)
+0:112        subgroupOr ( temp 3-component vector of int)
+0:112          vector swizzle ( temp 3-component vector of int)
+0:112            i: direct index for structure ( temp 4-component vector of int)
+0:112              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:112                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:112                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:112                  Constant:
+0:112                    0 (const uint)
+0:112                direct index ( temp uint)
+0:112                  'dti' ( in 3-component vector of uint)
+0:112                  Constant:
+0:112                    0 (const int)
+0:112              Constant:
+0:112                1 (const int)
+0:112            Sequence
+0:112              Constant:
+0:112                0 (const int)
+0:112              Constant:
+0:112                1 (const int)
+0:112              Constant:
+0:112                2 (const int)
+0:114      move second child to first child ( temp 4-component vector of uint)
+0:114        u: direct index for structure ( temp 4-component vector of uint)
+0:114          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:114            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:114              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:114              Constant:
+0:114                0 (const uint)
+0:114            direct index ( temp uint)
+0:114              'dti' ( in 3-component vector of uint)
+0:114              Constant:
+0:114                0 (const int)
+0:114          Constant:
+0:114            0 (const int)
+0:114        subgroupXor ( temp 4-component vector of uint)
+0:114          u: direct index for structure ( temp 4-component vector of uint)
+0:114            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:114              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:114                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:114                Constant:
+0:114                  0 (const uint)
+0:114              direct index ( temp uint)
+0:114                'dti' ( in 3-component vector of uint)
+0:114                Constant:
+0:114                  0 (const int)
+0:114            Constant:
+0:114              0 (const int)
+0:115      move second child to first child ( temp uint)
+0:115        direct index ( temp uint)
+0:115          u: direct index for structure ( temp 4-component vector of uint)
+0:115            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:115              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:115                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:115                Constant:
+0:115                  0 (const uint)
+0:115              direct index ( temp uint)
+0:115                'dti' ( in 3-component vector of uint)
+0:115                Constant:
+0:115                  0 (const int)
+0:115            Constant:
+0:115              0 (const int)
+0:115          Constant:
+0:115            0 (const int)
+0:115        subgroupXor ( temp uint)
+0:115          direct index ( temp uint)
+0:115            u: direct index for structure ( temp 4-component vector of uint)
+0:115              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:115                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:115                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:115                  Constant:
+0:115                    0 (const uint)
+0:115                direct index ( temp uint)
+0:115                  'dti' ( in 3-component vector of uint)
+0:115                  Constant:
+0:115                    0 (const int)
+0:115              Constant:
+0:115                0 (const int)
+0:115            Constant:
+0:115              0 (const int)
+0:116      move second child to first child ( temp 2-component vector of uint)
+0:116        vector swizzle ( temp 2-component vector of uint)
+0:116          u: direct index for structure ( temp 4-component vector of uint)
+0:116            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:116              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:116                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:116                Constant:
+0:116                  0 (const uint)
+0:116              direct index ( temp uint)
+0:116                'dti' ( in 3-component vector of uint)
+0:116                Constant:
+0:116                  0 (const int)
+0:116            Constant:
+0:116              0 (const int)
+0:116          Sequence
+0:116            Constant:
+0:116              0 (const int)
+0:116            Constant:
+0:116              1 (const int)
+0:116        subgroupXor ( temp 2-component vector of uint)
+0:116          vector swizzle ( temp 2-component vector of uint)
+0:116            u: direct index for structure ( temp 4-component vector of uint)
+0:116              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:116                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:116                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:116                  Constant:
+0:116                    0 (const uint)
+0:116                direct index ( temp uint)
+0:116                  'dti' ( in 3-component vector of uint)
+0:116                  Constant:
+0:116                    0 (const int)
+0:116              Constant:
+0:116                0 (const int)
+0:116            Sequence
+0:116              Constant:
+0:116                0 (const int)
+0:116              Constant:
+0:116                1 (const int)
+0:117      move second child to first child ( temp 3-component vector of uint)
+0:117        vector swizzle ( temp 3-component vector of uint)
+0:117          u: direct index for structure ( temp 4-component vector of uint)
+0:117            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:117              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:117                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:117                Constant:
+0:117                  0 (const uint)
+0:117              direct index ( temp uint)
+0:117                'dti' ( in 3-component vector of uint)
+0:117                Constant:
+0:117                  0 (const int)
+0:117            Constant:
+0:117              0 (const int)
+0:117          Sequence
+0:117            Constant:
+0:117              0 (const int)
+0:117            Constant:
+0:117              1 (const int)
+0:117            Constant:
+0:117              2 (const int)
+0:117        subgroupXor ( temp 3-component vector of uint)
+0:117          vector swizzle ( temp 3-component vector of uint)
+0:117            u: direct index for structure ( temp 4-component vector of uint)
+0:117              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:117                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:117                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:117                  Constant:
+0:117                    0 (const uint)
+0:117                direct index ( temp uint)
+0:117                  'dti' ( in 3-component vector of uint)
+0:117                  Constant:
+0:117                    0 (const int)
+0:117              Constant:
+0:117                0 (const int)
+0:117            Sequence
+0:117              Constant:
+0:117                0 (const int)
+0:117              Constant:
+0:117                1 (const int)
+0:117              Constant:
+0:117                2 (const int)
+0:119      move second child to first child ( temp 4-component vector of int)
+0:119        i: direct index for structure ( temp 4-component vector of int)
+0:119          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:119            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:119              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:119              Constant:
+0:119                0 (const uint)
+0:119            direct index ( temp uint)
+0:119              'dti' ( in 3-component vector of uint)
+0:119              Constant:
+0:119                0 (const int)
+0:119          Constant:
+0:119            1 (const int)
+0:119        subgroupXor ( temp 4-component vector of int)
+0:119          i: direct index for structure ( temp 4-component vector of int)
+0:119            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:119              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:119                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:119                Constant:
+0:119                  0 (const uint)
+0:119              direct index ( temp uint)
+0:119                'dti' ( in 3-component vector of uint)
+0:119                Constant:
+0:119                  0 (const int)
+0:119            Constant:
+0:119              1 (const int)
+0:120      move second child to first child ( temp int)
+0:120        direct index ( temp int)
+0:120          i: direct index for structure ( temp 4-component vector of int)
+0:120            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:120              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:120                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:120                Constant:
+0:120                  0 (const uint)
+0:120              direct index ( temp uint)
+0:120                'dti' ( in 3-component vector of uint)
+0:120                Constant:
+0:120                  0 (const int)
+0:120            Constant:
+0:120              1 (const int)
+0:120          Constant:
+0:120            0 (const int)
+0:120        subgroupXor ( temp int)
+0:120          direct index ( temp int)
+0:120            i: direct index for structure ( temp 4-component vector of int)
+0:120              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:120                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:120                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:120                  Constant:
+0:120                    0 (const uint)
+0:120                direct index ( temp uint)
+0:120                  'dti' ( in 3-component vector of uint)
+0:120                  Constant:
+0:120                    0 (const int)
+0:120              Constant:
+0:120                1 (const int)
+0:120            Constant:
+0:120              0 (const int)
+0:121      move second child to first child ( temp 2-component vector of int)
+0:121        vector swizzle ( temp 2-component vector of int)
+0:121          i: direct index for structure ( temp 4-component vector of int)
+0:121            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:121              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:121                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:121                Constant:
+0:121                  0 (const uint)
+0:121              direct index ( temp uint)
+0:121                'dti' ( in 3-component vector of uint)
+0:121                Constant:
+0:121                  0 (const int)
+0:121            Constant:
+0:121              1 (const int)
+0:121          Sequence
+0:121            Constant:
+0:121              0 (const int)
+0:121            Constant:
+0:121              1 (const int)
+0:121        subgroupXor ( temp 2-component vector of int)
+0:121          vector swizzle ( temp 2-component vector of int)
+0:121            i: direct index for structure ( temp 4-component vector of int)
+0:121              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:121                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:121                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:121                  Constant:
+0:121                    0 (const uint)
+0:121                direct index ( temp uint)
+0:121                  'dti' ( in 3-component vector of uint)
+0:121                  Constant:
+0:121                    0 (const int)
+0:121              Constant:
+0:121                1 (const int)
+0:121            Sequence
+0:121              Constant:
+0:121                0 (const int)
+0:121              Constant:
+0:121                1 (const int)
+0:122      move second child to first child ( temp 3-component vector of int)
+0:122        vector swizzle ( temp 3-component vector of int)
+0:122          i: direct index for structure ( temp 4-component vector of int)
+0:122            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:122              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:122                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:122                Constant:
+0:122                  0 (const uint)
+0:122              direct index ( temp uint)
+0:122                'dti' ( in 3-component vector of uint)
+0:122                Constant:
+0:122                  0 (const int)
+0:122            Constant:
+0:122              1 (const int)
+0:122          Sequence
+0:122            Constant:
+0:122              0 (const int)
+0:122            Constant:
+0:122              1 (const int)
+0:122            Constant:
+0:122              2 (const int)
+0:122        subgroupXor ( temp 3-component vector of int)
+0:122          vector swizzle ( temp 3-component vector of int)
+0:122            i: direct index for structure ( temp 4-component vector of int)
+0:122              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:122                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:122                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:122                  Constant:
+0:122                    0 (const uint)
+0:122                direct index ( temp uint)
+0:122                  'dti' ( in 3-component vector of uint)
+0:122                  Constant:
+0:122                    0 (const int)
+0:122              Constant:
+0:122                1 (const int)
+0:122            Sequence
+0:122              Constant:
+0:122                0 (const int)
+0:122              Constant:
+0:122                1 (const int)
+0:122              Constant:
+0:122                2 (const int)
+0:124      move second child to first child ( temp uint)
+0:124        direct index ( temp uint)
+0:124          u: direct index for structure ( temp 4-component vector of uint)
+0:124            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:124              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:124                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:124                Constant:
+0:124                  0 (const uint)
+0:124              direct index ( temp uint)
+0:124                'dti' ( in 3-component vector of uint)
+0:124                Constant:
+0:124                  0 (const int)
+0:124            Constant:
+0:124              0 (const int)
+0:124          Constant:
+0:124            0 (const int)
+0:124        subgroupBallotBitCount ( temp uint)
+0:124          subgroupBallot ( temp 4-component vector of uint)
+0:124            Compare Equal ( temp bool)
+0:124              direct index ( temp uint)
+0:124                u: direct index for structure ( temp 4-component vector of uint)
+0:124                  indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:124                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:124                      'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:124                      Constant:
+0:124                        0 (const uint)
+0:124                    direct index ( temp uint)
+0:124                      'dti' ( in 3-component vector of uint)
+0:124                      Constant:
+0:124                        0 (const int)
+0:124                  Constant:
+0:124                    0 (const int)
+0:124                Constant:
+0:124                  0 (const int)
+0:124              Constant:
+0:124                0 (const uint)
+0:13  Function Definition: CSMain( ( temp void)
+0:13    Function Parameters: 
+0:?     Sequence
+0:13      move second child to first child ( temp 3-component vector of uint)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?         'dti' ( in 3-component vector of uint GlobalInvocationID)
+0:13      Function Call: @CSMain(vu3; ( temp void)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?   Linker Objects
+0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
+
+
+Linked compute stage:
+
+
+Shader version: 500
+local_size = (32, 16, 1)
+0:? Sequence
+0:13  Function Definition: @CSMain(vu3; ( temp void)
+0:13    Function Parameters: 
+0:13      'dti' ( in 3-component vector of uint)
+0:?     Sequence
+0:14      move second child to first child ( temp 4-component vector of uint)
+0:14        u: direct index for structure ( temp 4-component vector of uint)
+0:14          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:14              Constant:
+0:14                0 (const uint)
+0:14            direct index ( temp uint)
+0:14              'dti' ( in 3-component vector of uint)
+0:14              Constant:
+0:14                0 (const int)
+0:14          Constant:
+0:14            0 (const int)
+0:14        subgroupAdd ( temp 4-component vector of uint)
+0:14          u: direct index for structure ( temp 4-component vector of uint)
+0:14            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:14                Constant:
+0:14                  0 (const uint)
+0:14              direct index ( temp uint)
+0:14                'dti' ( in 3-component vector of uint)
+0:14                Constant:
+0:14                  0 (const int)
+0:14            Constant:
+0:14              0 (const int)
+0:15      move second child to first child ( temp uint)
+0:15        direct index ( temp uint)
+0:15          u: direct index for structure ( temp 4-component vector of uint)
+0:15            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:15                Constant:
+0:15                  0 (const uint)
+0:15              direct index ( temp uint)
+0:15                'dti' ( in 3-component vector of uint)
+0:15                Constant:
+0:15                  0 (const int)
+0:15            Constant:
+0:15              0 (const int)
+0:15          Constant:
+0:15            0 (const int)
+0:15        subgroupAdd ( temp uint)
+0:15          direct index ( temp uint)
+0:15            u: direct index for structure ( temp 4-component vector of uint)
+0:15              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:15                  Constant:
+0:15                    0 (const uint)
+0:15                direct index ( temp uint)
+0:15                  'dti' ( in 3-component vector of uint)
+0:15                  Constant:
+0:15                    0 (const int)
+0:15              Constant:
+0:15                0 (const int)
+0:15            Constant:
+0:15              0 (const int)
+0:16      move second child to first child ( temp 2-component vector of uint)
+0:16        vector swizzle ( temp 2-component vector of uint)
+0:16          u: direct index for structure ( temp 4-component vector of uint)
+0:16            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:16                Constant:
+0:16                  0 (const uint)
+0:16              direct index ( temp uint)
+0:16                'dti' ( in 3-component vector of uint)
+0:16                Constant:
+0:16                  0 (const int)
+0:16            Constant:
+0:16              0 (const int)
+0:16          Sequence
+0:16            Constant:
+0:16              0 (const int)
+0:16            Constant:
+0:16              1 (const int)
+0:16        subgroupAdd ( temp 2-component vector of uint)
+0:16          vector swizzle ( temp 2-component vector of uint)
+0:16            u: direct index for structure ( temp 4-component vector of uint)
+0:16              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:16                  Constant:
+0:16                    0 (const uint)
+0:16                direct index ( temp uint)
+0:16                  'dti' ( in 3-component vector of uint)
+0:16                  Constant:
+0:16                    0 (const int)
+0:16              Constant:
+0:16                0 (const int)
+0:16            Sequence
+0:16              Constant:
+0:16                0 (const int)
+0:16              Constant:
+0:16                1 (const int)
+0:17      move second child to first child ( temp 3-component vector of uint)
+0:17        vector swizzle ( temp 3-component vector of uint)
+0:17          u: direct index for structure ( temp 4-component vector of uint)
+0:17            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:17                Constant:
+0:17                  0 (const uint)
+0:17              direct index ( temp uint)
+0:17                'dti' ( in 3-component vector of uint)
+0:17                Constant:
+0:17                  0 (const int)
+0:17            Constant:
+0:17              0 (const int)
+0:17          Sequence
+0:17            Constant:
+0:17              0 (const int)
+0:17            Constant:
+0:17              1 (const int)
+0:17            Constant:
+0:17              2 (const int)
+0:17        subgroupAdd ( temp 3-component vector of uint)
+0:17          vector swizzle ( temp 3-component vector of uint)
+0:17            u: direct index for structure ( temp 4-component vector of uint)
+0:17              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:17                  Constant:
+0:17                    0 (const uint)
+0:17                direct index ( temp uint)
+0:17                  'dti' ( in 3-component vector of uint)
+0:17                  Constant:
+0:17                    0 (const int)
+0:17              Constant:
+0:17                0 (const int)
+0:17            Sequence
+0:17              Constant:
+0:17                0 (const int)
+0:17              Constant:
+0:17                1 (const int)
+0:17              Constant:
+0:17                2 (const int)
+0:19      move second child to first child ( temp 4-component vector of int)
+0:19        i: direct index for structure ( temp 4-component vector of int)
+0:19          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:19              Constant:
+0:19                0 (const uint)
+0:19            direct index ( temp uint)
+0:19              'dti' ( in 3-component vector of uint)
+0:19              Constant:
+0:19                0 (const int)
+0:19          Constant:
+0:19            1 (const int)
+0:19        subgroupAdd ( temp 4-component vector of int)
+0:19          i: direct index for structure ( temp 4-component vector of int)
+0:19            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:19                Constant:
+0:19                  0 (const uint)
+0:19              direct index ( temp uint)
+0:19                'dti' ( in 3-component vector of uint)
+0:19                Constant:
+0:19                  0 (const int)
+0:19            Constant:
+0:19              1 (const int)
+0:20      move second child to first child ( temp int)
+0:20        direct index ( temp int)
+0:20          i: direct index for structure ( temp 4-component vector of int)
+0:20            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:20                Constant:
+0:20                  0 (const uint)
+0:20              direct index ( temp uint)
+0:20                'dti' ( in 3-component vector of uint)
+0:20                Constant:
+0:20                  0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20          Constant:
+0:20            0 (const int)
+0:20        subgroupAdd ( temp int)
+0:20          direct index ( temp int)
+0:20            i: direct index for structure ( temp 4-component vector of int)
+0:20              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:20                  Constant:
+0:20                    0 (const uint)
+0:20                direct index ( temp uint)
+0:20                  'dti' ( in 3-component vector of uint)
+0:20                  Constant:
+0:20                    0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20            Constant:
+0:20              0 (const int)
+0:21      move second child to first child ( temp 2-component vector of int)
+0:21        vector swizzle ( temp 2-component vector of int)
+0:21          i: direct index for structure ( temp 4-component vector of int)
+0:21            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:21                Constant:
+0:21                  0 (const uint)
+0:21              direct index ( temp uint)
+0:21                'dti' ( in 3-component vector of uint)
+0:21                Constant:
+0:21                  0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21          Sequence
+0:21            Constant:
+0:21              0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21        subgroupAdd ( temp 2-component vector of int)
+0:21          vector swizzle ( temp 2-component vector of int)
+0:21            i: direct index for structure ( temp 4-component vector of int)
+0:21              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:21                  Constant:
+0:21                    0 (const uint)
+0:21                direct index ( temp uint)
+0:21                  'dti' ( in 3-component vector of uint)
+0:21                  Constant:
+0:21                    0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21            Sequence
+0:21              Constant:
+0:21                0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:22      move second child to first child ( temp 3-component vector of int)
+0:22        vector swizzle ( temp 3-component vector of int)
+0:22          i: direct index for structure ( temp 4-component vector of int)
+0:22            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:22                Constant:
+0:22                  0 (const uint)
+0:22              direct index ( temp uint)
+0:22                'dti' ( in 3-component vector of uint)
+0:22                Constant:
+0:22                  0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22          Sequence
+0:22            Constant:
+0:22              0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22            Constant:
+0:22              2 (const int)
+0:22        subgroupAdd ( temp 3-component vector of int)
+0:22          vector swizzle ( temp 3-component vector of int)
+0:22            i: direct index for structure ( temp 4-component vector of int)
+0:22              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:22                  Constant:
+0:22                    0 (const uint)
+0:22                direct index ( temp uint)
+0:22                  'dti' ( in 3-component vector of uint)
+0:22                  Constant:
+0:22                    0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22            Sequence
+0:22              Constant:
+0:22                0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22              Constant:
+0:22                2 (const int)
+0:24      move second child to first child ( temp 4-component vector of float)
+0:24        f: direct index for structure ( temp 4-component vector of float)
+0:24          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:24              Constant:
+0:24                0 (const uint)
+0:24            direct index ( temp uint)
+0:24              'dti' ( in 3-component vector of uint)
+0:24              Constant:
+0:24                0 (const int)
+0:24          Constant:
+0:24            2 (const int)
+0:24        subgroupAdd ( temp 4-component vector of float)
+0:24          f: direct index for structure ( temp 4-component vector of float)
+0:24            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:24                Constant:
+0:24                  0 (const uint)
+0:24              direct index ( temp uint)
+0:24                'dti' ( in 3-component vector of uint)
+0:24                Constant:
+0:24                  0 (const int)
+0:24            Constant:
+0:24              2 (const int)
+0:25      move second child to first child ( temp float)
+0:25        direct index ( temp float)
+0:25          f: direct index for structure ( temp 4-component vector of float)
+0:25            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:25                Constant:
+0:25                  0 (const uint)
+0:25              direct index ( temp uint)
+0:25                'dti' ( in 3-component vector of uint)
+0:25                Constant:
+0:25                  0 (const int)
+0:25            Constant:
+0:25              2 (const int)
+0:25          Constant:
+0:25            0 (const int)
+0:25        subgroupAdd ( temp float)
+0:25          direct index ( temp float)
+0:25            f: direct index for structure ( temp 4-component vector of float)
+0:25              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:25                  Constant:
+0:25                    0 (const uint)
+0:25                direct index ( temp uint)
+0:25                  'dti' ( in 3-component vector of uint)
+0:25                  Constant:
+0:25                    0 (const int)
+0:25              Constant:
+0:25                2 (const int)
+0:25            Constant:
+0:25              0 (const int)
+0:26      move second child to first child ( temp 2-component vector of float)
+0:26        vector swizzle ( temp 2-component vector of float)
+0:26          f: direct index for structure ( temp 4-component vector of float)
+0:26            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:26                Constant:
+0:26                  0 (const uint)
+0:26              direct index ( temp uint)
+0:26                'dti' ( in 3-component vector of uint)
+0:26                Constant:
+0:26                  0 (const int)
+0:26            Constant:
+0:26              2 (const int)
+0:26          Sequence
+0:26            Constant:
+0:26              0 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26        subgroupAdd ( temp 2-component vector of float)
+0:26          vector swizzle ( temp 2-component vector of float)
+0:26            f: direct index for structure ( temp 4-component vector of float)
+0:26              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:26                  Constant:
+0:26                    0 (const uint)
+0:26                direct index ( temp uint)
+0:26                  'dti' ( in 3-component vector of uint)
+0:26                  Constant:
+0:26                    0 (const int)
+0:26              Constant:
+0:26                2 (const int)
+0:26            Sequence
+0:26              Constant:
+0:26                0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:27      move second child to first child ( temp 3-component vector of float)
+0:27        vector swizzle ( temp 3-component vector of float)
+0:27          f: direct index for structure ( temp 4-component vector of float)
+0:27            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:27                Constant:
+0:27                  0 (const uint)
+0:27              direct index ( temp uint)
+0:27                'dti' ( in 3-component vector of uint)
+0:27                Constant:
+0:27                  0 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27          Sequence
+0:27            Constant:
+0:27              0 (const int)
+0:27            Constant:
+0:27              1 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27        subgroupAdd ( temp 3-component vector of float)
+0:27          vector swizzle ( temp 3-component vector of float)
+0:27            f: direct index for structure ( temp 4-component vector of float)
+0:27              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:27                  Constant:
+0:27                    0 (const uint)
+0:27                direct index ( temp uint)
+0:27                  'dti' ( in 3-component vector of uint)
+0:27                  Constant:
+0:27                    0 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:27            Sequence
+0:27              Constant:
+0:27                0 (const int)
+0:27              Constant:
+0:27                1 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:29      move second child to first child ( temp 4-component vector of double)
+0:29        d: direct index for structure ( temp 4-component vector of double)
+0:29          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:29              Constant:
+0:29                0 (const uint)
+0:29            direct index ( temp uint)
+0:29              'dti' ( in 3-component vector of uint)
+0:29              Constant:
+0:29                0 (const int)
+0:29          Constant:
+0:29            3 (const int)
+0:29        subgroupAdd ( temp 4-component vector of double)
+0:29          d: direct index for structure ( temp 4-component vector of double)
+0:29            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:29                Constant:
+0:29                  0 (const uint)
+0:29              direct index ( temp uint)
+0:29                'dti' ( in 3-component vector of uint)
+0:29                Constant:
+0:29                  0 (const int)
+0:29            Constant:
+0:29              3 (const int)
+0:30      move second child to first child ( temp double)
+0:30        direct index ( temp double)
+0:30          d: direct index for structure ( temp 4-component vector of double)
+0:30            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:30                Constant:
+0:30                  0 (const uint)
+0:30              direct index ( temp uint)
+0:30                'dti' ( in 3-component vector of uint)
+0:30                Constant:
+0:30                  0 (const int)
+0:30            Constant:
+0:30              3 (const int)
+0:30          Constant:
+0:30            0 (const int)
+0:30        subgroupAdd ( temp double)
+0:30          direct index ( temp double)
+0:30            d: direct index for structure ( temp 4-component vector of double)
+0:30              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:30                  Constant:
+0:30                    0 (const uint)
+0:30                direct index ( temp uint)
+0:30                  'dti' ( in 3-component vector of uint)
+0:30                  Constant:
+0:30                    0 (const int)
+0:30              Constant:
+0:30                3 (const int)
+0:30            Constant:
+0:30              0 (const int)
+0:31      move second child to first child ( temp 2-component vector of double)
+0:31        vector swizzle ( temp 2-component vector of double)
+0:31          d: direct index for structure ( temp 4-component vector of double)
+0:31            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:31                Constant:
+0:31                  0 (const uint)
+0:31              direct index ( temp uint)
+0:31                'dti' ( in 3-component vector of uint)
+0:31                Constant:
+0:31                  0 (const int)
+0:31            Constant:
+0:31              3 (const int)
+0:31          Sequence
+0:31            Constant:
+0:31              0 (const int)
+0:31            Constant:
+0:31              1 (const int)
+0:31        subgroupAdd ( temp 2-component vector of double)
+0:31          vector swizzle ( temp 2-component vector of double)
+0:31            d: direct index for structure ( temp 4-component vector of double)
+0:31              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:31                  Constant:
+0:31                    0 (const uint)
+0:31                direct index ( temp uint)
+0:31                  'dti' ( in 3-component vector of uint)
+0:31                  Constant:
+0:31                    0 (const int)
+0:31              Constant:
+0:31                3 (const int)
+0:31            Sequence
+0:31              Constant:
+0:31                0 (const int)
+0:31              Constant:
+0:31                1 (const int)
+0:32      move second child to first child ( temp 3-component vector of double)
+0:32        vector swizzle ( temp 3-component vector of double)
+0:32          d: direct index for structure ( temp 4-component vector of double)
+0:32            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:32                Constant:
+0:32                  0 (const uint)
+0:32              direct index ( temp uint)
+0:32                'dti' ( in 3-component vector of uint)
+0:32                Constant:
+0:32                  0 (const int)
+0:32            Constant:
+0:32              3 (const int)
+0:32          Sequence
+0:32            Constant:
+0:32              0 (const int)
+0:32            Constant:
+0:32              1 (const int)
+0:32            Constant:
+0:32              2 (const int)
+0:32        subgroupAdd ( temp 3-component vector of double)
+0:32          vector swizzle ( temp 3-component vector of double)
+0:32            d: direct index for structure ( temp 4-component vector of double)
+0:32              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:32                  Constant:
+0:32                    0 (const uint)
+0:32                direct index ( temp uint)
+0:32                  'dti' ( in 3-component vector of uint)
+0:32                  Constant:
+0:32                    0 (const int)
+0:32              Constant:
+0:32                3 (const int)
+0:32            Sequence
+0:32              Constant:
+0:32                0 (const int)
+0:32              Constant:
+0:32                1 (const int)
+0:32              Constant:
+0:32                2 (const int)
+0:34      move second child to first child ( temp 4-component vector of uint)
+0:34        u: direct index for structure ( temp 4-component vector of uint)
+0:34          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:34              Constant:
+0:34                0 (const uint)
+0:34            direct index ( temp uint)
+0:34              'dti' ( in 3-component vector of uint)
+0:34              Constant:
+0:34                0 (const int)
+0:34          Constant:
+0:34            0 (const int)
+0:34        subgroupMul ( temp 4-component vector of uint)
+0:34          u: direct index for structure ( temp 4-component vector of uint)
+0:34            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:34                Constant:
+0:34                  0 (const uint)
+0:34              direct index ( temp uint)
+0:34                'dti' ( in 3-component vector of uint)
+0:34                Constant:
+0:34                  0 (const int)
+0:34            Constant:
+0:34              0 (const int)
+0:35      move second child to first child ( temp uint)
+0:35        direct index ( temp uint)
+0:35          u: direct index for structure ( temp 4-component vector of uint)
+0:35            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:35                Constant:
+0:35                  0 (const uint)
+0:35              direct index ( temp uint)
+0:35                'dti' ( in 3-component vector of uint)
+0:35                Constant:
+0:35                  0 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:35          Constant:
+0:35            0 (const int)
+0:35        subgroupMul ( temp uint)
+0:35          direct index ( temp uint)
+0:35            u: direct index for structure ( temp 4-component vector of uint)
+0:35              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:35                  Constant:
+0:35                    0 (const uint)
+0:35                direct index ( temp uint)
+0:35                  'dti' ( in 3-component vector of uint)
+0:35                  Constant:
+0:35                    0 (const int)
+0:35              Constant:
+0:35                0 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:36      move second child to first child ( temp 2-component vector of uint)
+0:36        vector swizzle ( temp 2-component vector of uint)
+0:36          u: direct index for structure ( temp 4-component vector of uint)
+0:36            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:36                Constant:
+0:36                  0 (const uint)
+0:36              direct index ( temp uint)
+0:36                'dti' ( in 3-component vector of uint)
+0:36                Constant:
+0:36                  0 (const int)
+0:36            Constant:
+0:36              0 (const int)
+0:36          Sequence
+0:36            Constant:
+0:36              0 (const int)
+0:36            Constant:
+0:36              1 (const int)
+0:36        subgroupMul ( temp 2-component vector of uint)
+0:36          vector swizzle ( temp 2-component vector of uint)
+0:36            u: direct index for structure ( temp 4-component vector of uint)
+0:36              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:36                  Constant:
+0:36                    0 (const uint)
+0:36                direct index ( temp uint)
+0:36                  'dti' ( in 3-component vector of uint)
+0:36                  Constant:
+0:36                    0 (const int)
+0:36              Constant:
+0:36                0 (const int)
+0:36            Sequence
+0:36              Constant:
+0:36                0 (const int)
+0:36              Constant:
+0:36                1 (const int)
+0:37      move second child to first child ( temp 3-component vector of uint)
+0:37        vector swizzle ( temp 3-component vector of uint)
+0:37          u: direct index for structure ( temp 4-component vector of uint)
+0:37            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:37                Constant:
+0:37                  0 (const uint)
+0:37              direct index ( temp uint)
+0:37                'dti' ( in 3-component vector of uint)
+0:37                Constant:
+0:37                  0 (const int)
+0:37            Constant:
+0:37              0 (const int)
+0:37          Sequence
+0:37            Constant:
+0:37              0 (const int)
+0:37            Constant:
+0:37              1 (const int)
+0:37            Constant:
+0:37              2 (const int)
+0:37        subgroupMul ( temp 3-component vector of uint)
+0:37          vector swizzle ( temp 3-component vector of uint)
+0:37            u: direct index for structure ( temp 4-component vector of uint)
+0:37              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:37                  Constant:
+0:37                    0 (const uint)
+0:37                direct index ( temp uint)
+0:37                  'dti' ( in 3-component vector of uint)
+0:37                  Constant:
+0:37                    0 (const int)
+0:37              Constant:
+0:37                0 (const int)
+0:37            Sequence
+0:37              Constant:
+0:37                0 (const int)
+0:37              Constant:
+0:37                1 (const int)
+0:37              Constant:
+0:37                2 (const int)
+0:39      move second child to first child ( temp 4-component vector of int)
+0:39        i: direct index for structure ( temp 4-component vector of int)
+0:39          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:39              Constant:
+0:39                0 (const uint)
+0:39            direct index ( temp uint)
+0:39              'dti' ( in 3-component vector of uint)
+0:39              Constant:
+0:39                0 (const int)
+0:39          Constant:
+0:39            1 (const int)
+0:39        subgroupMul ( temp 4-component vector of int)
+0:39          i: direct index for structure ( temp 4-component vector of int)
+0:39            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:39                Constant:
+0:39                  0 (const uint)
+0:39              direct index ( temp uint)
+0:39                'dti' ( in 3-component vector of uint)
+0:39                Constant:
+0:39                  0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:40      move second child to first child ( temp int)
+0:40        direct index ( temp int)
+0:40          i: direct index for structure ( temp 4-component vector of int)
+0:40            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:40                Constant:
+0:40                  0 (const uint)
+0:40              direct index ( temp uint)
+0:40                'dti' ( in 3-component vector of uint)
+0:40                Constant:
+0:40                  0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40          Constant:
+0:40            0 (const int)
+0:40        subgroupMul ( temp int)
+0:40          direct index ( temp int)
+0:40            i: direct index for structure ( temp 4-component vector of int)
+0:40              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:40                  Constant:
+0:40                    0 (const uint)
+0:40                direct index ( temp uint)
+0:40                  'dti' ( in 3-component vector of uint)
+0:40                  Constant:
+0:40                    0 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40            Constant:
+0:40              0 (const int)
+0:41      move second child to first child ( temp 2-component vector of int)
+0:41        vector swizzle ( temp 2-component vector of int)
+0:41          i: direct index for structure ( temp 4-component vector of int)
+0:41            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:41                Constant:
+0:41                  0 (const uint)
+0:41              direct index ( temp uint)
+0:41                'dti' ( in 3-component vector of uint)
+0:41                Constant:
+0:41                  0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41          Sequence
+0:41            Constant:
+0:41              0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41        subgroupMul ( temp 2-component vector of int)
+0:41          vector swizzle ( temp 2-component vector of int)
+0:41            i: direct index for structure ( temp 4-component vector of int)
+0:41              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:41                  Constant:
+0:41                    0 (const uint)
+0:41                direct index ( temp uint)
+0:41                  'dti' ( in 3-component vector of uint)
+0:41                  Constant:
+0:41                    0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:41            Sequence
+0:41              Constant:
+0:41                0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:42      move second child to first child ( temp 3-component vector of int)
+0:42        vector swizzle ( temp 3-component vector of int)
+0:42          i: direct index for structure ( temp 4-component vector of int)
+0:42            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:42                Constant:
+0:42                  0 (const uint)
+0:42              direct index ( temp uint)
+0:42                'dti' ( in 3-component vector of uint)
+0:42                Constant:
+0:42                  0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42          Sequence
+0:42            Constant:
+0:42              0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42            Constant:
+0:42              2 (const int)
+0:42        subgroupMul ( temp 3-component vector of int)
+0:42          vector swizzle ( temp 3-component vector of int)
+0:42            i: direct index for structure ( temp 4-component vector of int)
+0:42              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:42                  Constant:
+0:42                    0 (const uint)
+0:42                direct index ( temp uint)
+0:42                  'dti' ( in 3-component vector of uint)
+0:42                  Constant:
+0:42                    0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42            Sequence
+0:42              Constant:
+0:42                0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42              Constant:
+0:42                2 (const int)
+0:44      move second child to first child ( temp 4-component vector of float)
+0:44        f: direct index for structure ( temp 4-component vector of float)
+0:44          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:44              Constant:
+0:44                0 (const uint)
+0:44            direct index ( temp uint)
+0:44              'dti' ( in 3-component vector of uint)
+0:44              Constant:
+0:44                0 (const int)
+0:44          Constant:
+0:44            2 (const int)
+0:44        subgroupMul ( temp 4-component vector of float)
+0:44          f: direct index for structure ( temp 4-component vector of float)
+0:44            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:44                Constant:
+0:44                  0 (const uint)
+0:44              direct index ( temp uint)
+0:44                'dti' ( in 3-component vector of uint)
+0:44                Constant:
+0:44                  0 (const int)
+0:44            Constant:
+0:44              2 (const int)
+0:45      move second child to first child ( temp float)
+0:45        direct index ( temp float)
+0:45          f: direct index for structure ( temp 4-component vector of float)
+0:45            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:45                Constant:
+0:45                  0 (const uint)
+0:45              direct index ( temp uint)
+0:45                'dti' ( in 3-component vector of uint)
+0:45                Constant:
+0:45                  0 (const int)
+0:45            Constant:
+0:45              2 (const int)
+0:45          Constant:
+0:45            0 (const int)
+0:45        subgroupMul ( temp float)
+0:45          direct index ( temp float)
+0:45            f: direct index for structure ( temp 4-component vector of float)
+0:45              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:45                  Constant:
+0:45                    0 (const uint)
+0:45                direct index ( temp uint)
+0:45                  'dti' ( in 3-component vector of uint)
+0:45                  Constant:
+0:45                    0 (const int)
+0:45              Constant:
+0:45                2 (const int)
+0:45            Constant:
+0:45              0 (const int)
+0:46      move second child to first child ( temp 2-component vector of float)
+0:46        vector swizzle ( temp 2-component vector of float)
+0:46          f: direct index for structure ( temp 4-component vector of float)
+0:46            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:46                Constant:
+0:46                  0 (const uint)
+0:46              direct index ( temp uint)
+0:46                'dti' ( in 3-component vector of uint)
+0:46                Constant:
+0:46                  0 (const int)
+0:46            Constant:
+0:46              2 (const int)
+0:46          Sequence
+0:46            Constant:
+0:46              0 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46        subgroupMul ( temp 2-component vector of float)
+0:46          vector swizzle ( temp 2-component vector of float)
+0:46            f: direct index for structure ( temp 4-component vector of float)
+0:46              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:46                  Constant:
+0:46                    0 (const uint)
+0:46                direct index ( temp uint)
+0:46                  'dti' ( in 3-component vector of uint)
+0:46                  Constant:
+0:46                    0 (const int)
+0:46              Constant:
+0:46                2 (const int)
+0:46            Sequence
+0:46              Constant:
+0:46                0 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:47      move second child to first child ( temp 3-component vector of float)
+0:47        vector swizzle ( temp 3-component vector of float)
+0:47          f: direct index for structure ( temp 4-component vector of float)
+0:47            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:47                Constant:
+0:47                  0 (const uint)
+0:47              direct index ( temp uint)
+0:47                'dti' ( in 3-component vector of uint)
+0:47                Constant:
+0:47                  0 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47          Sequence
+0:47            Constant:
+0:47              0 (const int)
+0:47            Constant:
+0:47              1 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47        subgroupMul ( temp 3-component vector of float)
+0:47          vector swizzle ( temp 3-component vector of float)
+0:47            f: direct index for structure ( temp 4-component vector of float)
+0:47              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:47                  Constant:
+0:47                    0 (const uint)
+0:47                direct index ( temp uint)
+0:47                  'dti' ( in 3-component vector of uint)
+0:47                  Constant:
+0:47                    0 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:47            Sequence
+0:47              Constant:
+0:47                0 (const int)
+0:47              Constant:
+0:47                1 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:49      move second child to first child ( temp 4-component vector of double)
+0:49        d: direct index for structure ( temp 4-component vector of double)
+0:49          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:49              Constant:
+0:49                0 (const uint)
+0:49            direct index ( temp uint)
+0:49              'dti' ( in 3-component vector of uint)
+0:49              Constant:
+0:49                0 (const int)
+0:49          Constant:
+0:49            3 (const int)
+0:49        subgroupMul ( temp 4-component vector of double)
+0:49          d: direct index for structure ( temp 4-component vector of double)
+0:49            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:49                Constant:
+0:49                  0 (const uint)
+0:49              direct index ( temp uint)
+0:49                'dti' ( in 3-component vector of uint)
+0:49                Constant:
+0:49                  0 (const int)
+0:49            Constant:
+0:49              3 (const int)
+0:50      move second child to first child ( temp double)
+0:50        direct index ( temp double)
+0:50          d: direct index for structure ( temp 4-component vector of double)
+0:50            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:50                Constant:
+0:50                  0 (const uint)
+0:50              direct index ( temp uint)
+0:50                'dti' ( in 3-component vector of uint)
+0:50                Constant:
+0:50                  0 (const int)
+0:50            Constant:
+0:50              3 (const int)
+0:50          Constant:
+0:50            0 (const int)
+0:50        subgroupMul ( temp double)
+0:50          direct index ( temp double)
+0:50            d: direct index for structure ( temp 4-component vector of double)
+0:50              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:50                  Constant:
+0:50                    0 (const uint)
+0:50                direct index ( temp uint)
+0:50                  'dti' ( in 3-component vector of uint)
+0:50                  Constant:
+0:50                    0 (const int)
+0:50              Constant:
+0:50                3 (const int)
+0:50            Constant:
+0:50              0 (const int)
+0:51      move second child to first child ( temp 2-component vector of double)
+0:51        vector swizzle ( temp 2-component vector of double)
+0:51          d: direct index for structure ( temp 4-component vector of double)
+0:51            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:51                Constant:
+0:51                  0 (const uint)
+0:51              direct index ( temp uint)
+0:51                'dti' ( in 3-component vector of uint)
+0:51                Constant:
+0:51                  0 (const int)
+0:51            Constant:
+0:51              3 (const int)
+0:51          Sequence
+0:51            Constant:
+0:51              0 (const int)
+0:51            Constant:
+0:51              1 (const int)
+0:51        subgroupMul ( temp 2-component vector of double)
+0:51          vector swizzle ( temp 2-component vector of double)
+0:51            d: direct index for structure ( temp 4-component vector of double)
+0:51              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:51                  Constant:
+0:51                    0 (const uint)
+0:51                direct index ( temp uint)
+0:51                  'dti' ( in 3-component vector of uint)
+0:51                  Constant:
+0:51                    0 (const int)
+0:51              Constant:
+0:51                3 (const int)
+0:51            Sequence
+0:51              Constant:
+0:51                0 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:52      move second child to first child ( temp 3-component vector of double)
+0:52        vector swizzle ( temp 3-component vector of double)
+0:52          d: direct index for structure ( temp 4-component vector of double)
+0:52            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:52                Constant:
+0:52                  0 (const uint)
+0:52              direct index ( temp uint)
+0:52                'dti' ( in 3-component vector of uint)
+0:52                Constant:
+0:52                  0 (const int)
+0:52            Constant:
+0:52              3 (const int)
+0:52          Sequence
+0:52            Constant:
+0:52              0 (const int)
+0:52            Constant:
+0:52              1 (const int)
+0:52            Constant:
+0:52              2 (const int)
+0:52        subgroupMul ( temp 3-component vector of double)
+0:52          vector swizzle ( temp 3-component vector of double)
+0:52            d: direct index for structure ( temp 4-component vector of double)
+0:52              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:52                  Constant:
+0:52                    0 (const uint)
+0:52                direct index ( temp uint)
+0:52                  'dti' ( in 3-component vector of uint)
+0:52                  Constant:
+0:52                    0 (const int)
+0:52              Constant:
+0:52                3 (const int)
+0:52            Sequence
+0:52              Constant:
+0:52                0 (const int)
+0:52              Constant:
+0:52                1 (const int)
+0:52              Constant:
+0:52                2 (const int)
+0:54      move second child to first child ( temp 4-component vector of uint)
+0:54        u: direct index for structure ( temp 4-component vector of uint)
+0:54          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:54              Constant:
+0:54                0 (const uint)
+0:54            direct index ( temp uint)
+0:54              'dti' ( in 3-component vector of uint)
+0:54              Constant:
+0:54                0 (const int)
+0:54          Constant:
+0:54            0 (const int)
+0:54        subgroupMin ( temp 4-component vector of uint)
+0:54          u: direct index for structure ( temp 4-component vector of uint)
+0:54            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:54                Constant:
+0:54                  0 (const uint)
+0:54              direct index ( temp uint)
+0:54                'dti' ( in 3-component vector of uint)
+0:54                Constant:
+0:54                  0 (const int)
+0:54            Constant:
+0:54              0 (const int)
+0:55      move second child to first child ( temp uint)
+0:55        direct index ( temp uint)
+0:55          u: direct index for structure ( temp 4-component vector of uint)
+0:55            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:55              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:55                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:55                Constant:
+0:55                  0 (const uint)
+0:55              direct index ( temp uint)
+0:55                'dti' ( in 3-component vector of uint)
+0:55                Constant:
+0:55                  0 (const int)
+0:55            Constant:
+0:55              0 (const int)
+0:55          Constant:
+0:55            0 (const int)
+0:55        subgroupMin ( temp uint)
+0:55          direct index ( temp uint)
+0:55            u: direct index for structure ( temp 4-component vector of uint)
+0:55              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:55                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:55                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:55                  Constant:
+0:55                    0 (const uint)
+0:55                direct index ( temp uint)
+0:55                  'dti' ( in 3-component vector of uint)
+0:55                  Constant:
+0:55                    0 (const int)
+0:55              Constant:
+0:55                0 (const int)
+0:55            Constant:
+0:55              0 (const int)
+0:56      move second child to first child ( temp 2-component vector of uint)
+0:56        vector swizzle ( temp 2-component vector of uint)
+0:56          u: direct index for structure ( temp 4-component vector of uint)
+0:56            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:56              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:56                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:56                Constant:
+0:56                  0 (const uint)
+0:56              direct index ( temp uint)
+0:56                'dti' ( in 3-component vector of uint)
+0:56                Constant:
+0:56                  0 (const int)
+0:56            Constant:
+0:56              0 (const int)
+0:56          Sequence
+0:56            Constant:
+0:56              0 (const int)
+0:56            Constant:
+0:56              1 (const int)
+0:56        subgroupMin ( temp 2-component vector of uint)
+0:56          vector swizzle ( temp 2-component vector of uint)
+0:56            u: direct index for structure ( temp 4-component vector of uint)
+0:56              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:56                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:56                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:56                  Constant:
+0:56                    0 (const uint)
+0:56                direct index ( temp uint)
+0:56                  'dti' ( in 3-component vector of uint)
+0:56                  Constant:
+0:56                    0 (const int)
+0:56              Constant:
+0:56                0 (const int)
+0:56            Sequence
+0:56              Constant:
+0:56                0 (const int)
+0:56              Constant:
+0:56                1 (const int)
+0:57      move second child to first child ( temp 3-component vector of uint)
+0:57        vector swizzle ( temp 3-component vector of uint)
+0:57          u: direct index for structure ( temp 4-component vector of uint)
+0:57            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:57              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:57                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:57                Constant:
+0:57                  0 (const uint)
+0:57              direct index ( temp uint)
+0:57                'dti' ( in 3-component vector of uint)
+0:57                Constant:
+0:57                  0 (const int)
+0:57            Constant:
+0:57              0 (const int)
+0:57          Sequence
+0:57            Constant:
+0:57              0 (const int)
+0:57            Constant:
+0:57              1 (const int)
+0:57            Constant:
+0:57              2 (const int)
+0:57        subgroupMin ( temp 3-component vector of uint)
+0:57          vector swizzle ( temp 3-component vector of uint)
+0:57            u: direct index for structure ( temp 4-component vector of uint)
+0:57              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:57                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:57                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:57                  Constant:
+0:57                    0 (const uint)
+0:57                direct index ( temp uint)
+0:57                  'dti' ( in 3-component vector of uint)
+0:57                  Constant:
+0:57                    0 (const int)
+0:57              Constant:
+0:57                0 (const int)
+0:57            Sequence
+0:57              Constant:
+0:57                0 (const int)
+0:57              Constant:
+0:57                1 (const int)
+0:57              Constant:
+0:57                2 (const int)
+0:59      move second child to first child ( temp 4-component vector of int)
+0:59        i: direct index for structure ( temp 4-component vector of int)
+0:59          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:59            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:59              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:59              Constant:
+0:59                0 (const uint)
+0:59            direct index ( temp uint)
+0:59              'dti' ( in 3-component vector of uint)
+0:59              Constant:
+0:59                0 (const int)
+0:59          Constant:
+0:59            1 (const int)
+0:59        subgroupMin ( temp 4-component vector of int)
+0:59          i: direct index for structure ( temp 4-component vector of int)
+0:59            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:59              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:59                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:59                Constant:
+0:59                  0 (const uint)
+0:59              direct index ( temp uint)
+0:59                'dti' ( in 3-component vector of uint)
+0:59                Constant:
+0:59                  0 (const int)
+0:59            Constant:
+0:59              1 (const int)
+0:60      move second child to first child ( temp int)
+0:60        direct index ( temp int)
+0:60          i: direct index for structure ( temp 4-component vector of int)
+0:60            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:60              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:60                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:60                Constant:
+0:60                  0 (const uint)
+0:60              direct index ( temp uint)
+0:60                'dti' ( in 3-component vector of uint)
+0:60                Constant:
+0:60                  0 (const int)
+0:60            Constant:
+0:60              1 (const int)
+0:60          Constant:
+0:60            0 (const int)
+0:60        subgroupMin ( temp int)
+0:60          direct index ( temp int)
+0:60            i: direct index for structure ( temp 4-component vector of int)
+0:60              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:60                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:60                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:60                  Constant:
+0:60                    0 (const uint)
+0:60                direct index ( temp uint)
+0:60                  'dti' ( in 3-component vector of uint)
+0:60                  Constant:
+0:60                    0 (const int)
+0:60              Constant:
+0:60                1 (const int)
+0:60            Constant:
+0:60              0 (const int)
+0:61      move second child to first child ( temp 2-component vector of int)
+0:61        vector swizzle ( temp 2-component vector of int)
+0:61          i: direct index for structure ( temp 4-component vector of int)
+0:61            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:61              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:61                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:61                Constant:
+0:61                  0 (const uint)
+0:61              direct index ( temp uint)
+0:61                'dti' ( in 3-component vector of uint)
+0:61                Constant:
+0:61                  0 (const int)
+0:61            Constant:
+0:61              1 (const int)
+0:61          Sequence
+0:61            Constant:
+0:61              0 (const int)
+0:61            Constant:
+0:61              1 (const int)
+0:61        subgroupMin ( temp 2-component vector of int)
+0:61          vector swizzle ( temp 2-component vector of int)
+0:61            i: direct index for structure ( temp 4-component vector of int)
+0:61              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:61                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:61                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:61                  Constant:
+0:61                    0 (const uint)
+0:61                direct index ( temp uint)
+0:61                  'dti' ( in 3-component vector of uint)
+0:61                  Constant:
+0:61                    0 (const int)
+0:61              Constant:
+0:61                1 (const int)
+0:61            Sequence
+0:61              Constant:
+0:61                0 (const int)
+0:61              Constant:
+0:61                1 (const int)
+0:62      move second child to first child ( temp 3-component vector of int)
+0:62        vector swizzle ( temp 3-component vector of int)
+0:62          i: direct index for structure ( temp 4-component vector of int)
+0:62            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:62              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:62                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:62                Constant:
+0:62                  0 (const uint)
+0:62              direct index ( temp uint)
+0:62                'dti' ( in 3-component vector of uint)
+0:62                Constant:
+0:62                  0 (const int)
+0:62            Constant:
+0:62              1 (const int)
+0:62          Sequence
+0:62            Constant:
+0:62              0 (const int)
+0:62            Constant:
+0:62              1 (const int)
+0:62            Constant:
+0:62              2 (const int)
+0:62        subgroupMin ( temp 3-component vector of int)
+0:62          vector swizzle ( temp 3-component vector of int)
+0:62            i: direct index for structure ( temp 4-component vector of int)
+0:62              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:62                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:62                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:62                  Constant:
+0:62                    0 (const uint)
+0:62                direct index ( temp uint)
+0:62                  'dti' ( in 3-component vector of uint)
+0:62                  Constant:
+0:62                    0 (const int)
+0:62              Constant:
+0:62                1 (const int)
+0:62            Sequence
+0:62              Constant:
+0:62                0 (const int)
+0:62              Constant:
+0:62                1 (const int)
+0:62              Constant:
+0:62                2 (const int)
+0:64      move second child to first child ( temp 4-component vector of float)
+0:64        f: direct index for structure ( temp 4-component vector of float)
+0:64          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:64            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:64              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:64              Constant:
+0:64                0 (const uint)
+0:64            direct index ( temp uint)
+0:64              'dti' ( in 3-component vector of uint)
+0:64              Constant:
+0:64                0 (const int)
+0:64          Constant:
+0:64            2 (const int)
+0:64        subgroupMin ( temp 4-component vector of float)
+0:64          f: direct index for structure ( temp 4-component vector of float)
+0:64            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:64              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:64                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:64                Constant:
+0:64                  0 (const uint)
+0:64              direct index ( temp uint)
+0:64                'dti' ( in 3-component vector of uint)
+0:64                Constant:
+0:64                  0 (const int)
+0:64            Constant:
+0:64              2 (const int)
+0:65      move second child to first child ( temp float)
+0:65        direct index ( temp float)
+0:65          f: direct index for structure ( temp 4-component vector of float)
+0:65            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:65              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:65                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:65                Constant:
+0:65                  0 (const uint)
+0:65              direct index ( temp uint)
+0:65                'dti' ( in 3-component vector of uint)
+0:65                Constant:
+0:65                  0 (const int)
+0:65            Constant:
+0:65              2 (const int)
+0:65          Constant:
+0:65            0 (const int)
+0:65        subgroupMin ( temp float)
+0:65          direct index ( temp float)
+0:65            f: direct index for structure ( temp 4-component vector of float)
+0:65              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:65                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:65                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:65                  Constant:
+0:65                    0 (const uint)
+0:65                direct index ( temp uint)
+0:65                  'dti' ( in 3-component vector of uint)
+0:65                  Constant:
+0:65                    0 (const int)
+0:65              Constant:
+0:65                2 (const int)
+0:65            Constant:
+0:65              0 (const int)
+0:66      move second child to first child ( temp 2-component vector of float)
+0:66        vector swizzle ( temp 2-component vector of float)
+0:66          f: direct index for structure ( temp 4-component vector of float)
+0:66            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:66              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:66                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:66                Constant:
+0:66                  0 (const uint)
+0:66              direct index ( temp uint)
+0:66                'dti' ( in 3-component vector of uint)
+0:66                Constant:
+0:66                  0 (const int)
+0:66            Constant:
+0:66              2 (const int)
+0:66          Sequence
+0:66            Constant:
+0:66              0 (const int)
+0:66            Constant:
+0:66              1 (const int)
+0:66        subgroupMin ( temp 2-component vector of float)
+0:66          vector swizzle ( temp 2-component vector of float)
+0:66            f: direct index for structure ( temp 4-component vector of float)
+0:66              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:66                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:66                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:66                  Constant:
+0:66                    0 (const uint)
+0:66                direct index ( temp uint)
+0:66                  'dti' ( in 3-component vector of uint)
+0:66                  Constant:
+0:66                    0 (const int)
+0:66              Constant:
+0:66                2 (const int)
+0:66            Sequence
+0:66              Constant:
+0:66                0 (const int)
+0:66              Constant:
+0:66                1 (const int)
+0:67      move second child to first child ( temp 3-component vector of float)
+0:67        vector swizzle ( temp 3-component vector of float)
+0:67          f: direct index for structure ( temp 4-component vector of float)
+0:67            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:67              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:67                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:67                Constant:
+0:67                  0 (const uint)
+0:67              direct index ( temp uint)
+0:67                'dti' ( in 3-component vector of uint)
+0:67                Constant:
+0:67                  0 (const int)
+0:67            Constant:
+0:67              2 (const int)
+0:67          Sequence
+0:67            Constant:
+0:67              0 (const int)
+0:67            Constant:
+0:67              1 (const int)
+0:67            Constant:
+0:67              2 (const int)
+0:67        subgroupMin ( temp 3-component vector of float)
+0:67          vector swizzle ( temp 3-component vector of float)
+0:67            f: direct index for structure ( temp 4-component vector of float)
+0:67              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:67                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:67                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:67                  Constant:
+0:67                    0 (const uint)
+0:67                direct index ( temp uint)
+0:67                  'dti' ( in 3-component vector of uint)
+0:67                  Constant:
+0:67                    0 (const int)
+0:67              Constant:
+0:67                2 (const int)
+0:67            Sequence
+0:67              Constant:
+0:67                0 (const int)
+0:67              Constant:
+0:67                1 (const int)
+0:67              Constant:
+0:67                2 (const int)
+0:69      move second child to first child ( temp 4-component vector of double)
+0:69        d: direct index for structure ( temp 4-component vector of double)
+0:69          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:69            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:69              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:69              Constant:
+0:69                0 (const uint)
+0:69            direct index ( temp uint)
+0:69              'dti' ( in 3-component vector of uint)
+0:69              Constant:
+0:69                0 (const int)
+0:69          Constant:
+0:69            3 (const int)
+0:69        subgroupMin ( temp 4-component vector of double)
+0:69          d: direct index for structure ( temp 4-component vector of double)
+0:69            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:69              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:69                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:69                Constant:
+0:69                  0 (const uint)
+0:69              direct index ( temp uint)
+0:69                'dti' ( in 3-component vector of uint)
+0:69                Constant:
+0:69                  0 (const int)
+0:69            Constant:
+0:69              3 (const int)
+0:70      move second child to first child ( temp double)
+0:70        direct index ( temp double)
+0:70          d: direct index for structure ( temp 4-component vector of double)
+0:70            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:70              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:70                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:70                Constant:
+0:70                  0 (const uint)
+0:70              direct index ( temp uint)
+0:70                'dti' ( in 3-component vector of uint)
+0:70                Constant:
+0:70                  0 (const int)
+0:70            Constant:
+0:70              3 (const int)
+0:70          Constant:
+0:70            0 (const int)
+0:70        subgroupMin ( temp double)
+0:70          direct index ( temp double)
+0:70            d: direct index for structure ( temp 4-component vector of double)
+0:70              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:70                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:70                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:70                  Constant:
+0:70                    0 (const uint)
+0:70                direct index ( temp uint)
+0:70                  'dti' ( in 3-component vector of uint)
+0:70                  Constant:
+0:70                    0 (const int)
+0:70              Constant:
+0:70                3 (const int)
+0:70            Constant:
+0:70              0 (const int)
+0:71      move second child to first child ( temp 2-component vector of double)
+0:71        vector swizzle ( temp 2-component vector of double)
+0:71          d: direct index for structure ( temp 4-component vector of double)
+0:71            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:71              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:71                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:71                Constant:
+0:71                  0 (const uint)
+0:71              direct index ( temp uint)
+0:71                'dti' ( in 3-component vector of uint)
+0:71                Constant:
+0:71                  0 (const int)
+0:71            Constant:
+0:71              3 (const int)
+0:71          Sequence
+0:71            Constant:
+0:71              0 (const int)
+0:71            Constant:
+0:71              1 (const int)
+0:71        subgroupMin ( temp 2-component vector of double)
+0:71          vector swizzle ( temp 2-component vector of double)
+0:71            d: direct index for structure ( temp 4-component vector of double)
+0:71              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:71                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:71                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:71                  Constant:
+0:71                    0 (const uint)
+0:71                direct index ( temp uint)
+0:71                  'dti' ( in 3-component vector of uint)
+0:71                  Constant:
+0:71                    0 (const int)
+0:71              Constant:
+0:71                3 (const int)
+0:71            Sequence
+0:71              Constant:
+0:71                0 (const int)
+0:71              Constant:
+0:71                1 (const int)
+0:72      move second child to first child ( temp 3-component vector of double)
+0:72        vector swizzle ( temp 3-component vector of double)
+0:72          d: direct index for structure ( temp 4-component vector of double)
+0:72            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:72              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:72                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:72                Constant:
+0:72                  0 (const uint)
+0:72              direct index ( temp uint)
+0:72                'dti' ( in 3-component vector of uint)
+0:72                Constant:
+0:72                  0 (const int)
+0:72            Constant:
+0:72              3 (const int)
+0:72          Sequence
+0:72            Constant:
+0:72              0 (const int)
+0:72            Constant:
+0:72              1 (const int)
+0:72            Constant:
+0:72              2 (const int)
+0:72        subgroupMin ( temp 3-component vector of double)
+0:72          vector swizzle ( temp 3-component vector of double)
+0:72            d: direct index for structure ( temp 4-component vector of double)
+0:72              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:72                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:72                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:72                  Constant:
+0:72                    0 (const uint)
+0:72                direct index ( temp uint)
+0:72                  'dti' ( in 3-component vector of uint)
+0:72                  Constant:
+0:72                    0 (const int)
+0:72              Constant:
+0:72                3 (const int)
+0:72            Sequence
+0:72              Constant:
+0:72                0 (const int)
+0:72              Constant:
+0:72                1 (const int)
+0:72              Constant:
+0:72                2 (const int)
+0:74      move second child to first child ( temp 4-component vector of uint)
+0:74        u: direct index for structure ( temp 4-component vector of uint)
+0:74          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:74            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:74              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:74              Constant:
+0:74                0 (const uint)
+0:74            direct index ( temp uint)
+0:74              'dti' ( in 3-component vector of uint)
+0:74              Constant:
+0:74                0 (const int)
+0:74          Constant:
+0:74            0 (const int)
+0:74        subgroupMax ( temp 4-component vector of uint)
+0:74          u: direct index for structure ( temp 4-component vector of uint)
+0:74            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:74              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:74                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:74                Constant:
+0:74                  0 (const uint)
+0:74              direct index ( temp uint)
+0:74                'dti' ( in 3-component vector of uint)
+0:74                Constant:
+0:74                  0 (const int)
+0:74            Constant:
+0:74              0 (const int)
+0:75      move second child to first child ( temp uint)
+0:75        direct index ( temp uint)
+0:75          u: direct index for structure ( temp 4-component vector of uint)
+0:75            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:75              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:75                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:75                Constant:
+0:75                  0 (const uint)
+0:75              direct index ( temp uint)
+0:75                'dti' ( in 3-component vector of uint)
+0:75                Constant:
+0:75                  0 (const int)
+0:75            Constant:
+0:75              0 (const int)
+0:75          Constant:
+0:75            0 (const int)
+0:75        subgroupMax ( temp uint)
+0:75          direct index ( temp uint)
+0:75            u: direct index for structure ( temp 4-component vector of uint)
+0:75              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:75                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:75                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:75                  Constant:
+0:75                    0 (const uint)
+0:75                direct index ( temp uint)
+0:75                  'dti' ( in 3-component vector of uint)
+0:75                  Constant:
+0:75                    0 (const int)
+0:75              Constant:
+0:75                0 (const int)
+0:75            Constant:
+0:75              0 (const int)
+0:76      move second child to first child ( temp 2-component vector of uint)
+0:76        vector swizzle ( temp 2-component vector of uint)
+0:76          u: direct index for structure ( temp 4-component vector of uint)
+0:76            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:76              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:76                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:76                Constant:
+0:76                  0 (const uint)
+0:76              direct index ( temp uint)
+0:76                'dti' ( in 3-component vector of uint)
+0:76                Constant:
+0:76                  0 (const int)
+0:76            Constant:
+0:76              0 (const int)
+0:76          Sequence
+0:76            Constant:
+0:76              0 (const int)
+0:76            Constant:
+0:76              1 (const int)
+0:76        subgroupMax ( temp 2-component vector of uint)
+0:76          vector swizzle ( temp 2-component vector of uint)
+0:76            u: direct index for structure ( temp 4-component vector of uint)
+0:76              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:76                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:76                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:76                  Constant:
+0:76                    0 (const uint)
+0:76                direct index ( temp uint)
+0:76                  'dti' ( in 3-component vector of uint)
+0:76                  Constant:
+0:76                    0 (const int)
+0:76              Constant:
+0:76                0 (const int)
+0:76            Sequence
+0:76              Constant:
+0:76                0 (const int)
+0:76              Constant:
+0:76                1 (const int)
+0:77      move second child to first child ( temp 3-component vector of uint)
+0:77        vector swizzle ( temp 3-component vector of uint)
+0:77          u: direct index for structure ( temp 4-component vector of uint)
+0:77            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:77              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:77                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:77                Constant:
+0:77                  0 (const uint)
+0:77              direct index ( temp uint)
+0:77                'dti' ( in 3-component vector of uint)
+0:77                Constant:
+0:77                  0 (const int)
+0:77            Constant:
+0:77              0 (const int)
+0:77          Sequence
+0:77            Constant:
+0:77              0 (const int)
+0:77            Constant:
+0:77              1 (const int)
+0:77            Constant:
+0:77              2 (const int)
+0:77        subgroupMax ( temp 3-component vector of uint)
+0:77          vector swizzle ( temp 3-component vector of uint)
+0:77            u: direct index for structure ( temp 4-component vector of uint)
+0:77              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:77                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:77                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:77                  Constant:
+0:77                    0 (const uint)
+0:77                direct index ( temp uint)
+0:77                  'dti' ( in 3-component vector of uint)
+0:77                  Constant:
+0:77                    0 (const int)
+0:77              Constant:
+0:77                0 (const int)
+0:77            Sequence
+0:77              Constant:
+0:77                0 (const int)
+0:77              Constant:
+0:77                1 (const int)
+0:77              Constant:
+0:77                2 (const int)
+0:79      move second child to first child ( temp 4-component vector of int)
+0:79        i: direct index for structure ( temp 4-component vector of int)
+0:79          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:79            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:79              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:79              Constant:
+0:79                0 (const uint)
+0:79            direct index ( temp uint)
+0:79              'dti' ( in 3-component vector of uint)
+0:79              Constant:
+0:79                0 (const int)
+0:79          Constant:
+0:79            1 (const int)
+0:79        subgroupMax ( temp 4-component vector of int)
+0:79          i: direct index for structure ( temp 4-component vector of int)
+0:79            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:79              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:79                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:79                Constant:
+0:79                  0 (const uint)
+0:79              direct index ( temp uint)
+0:79                'dti' ( in 3-component vector of uint)
+0:79                Constant:
+0:79                  0 (const int)
+0:79            Constant:
+0:79              1 (const int)
+0:80      move second child to first child ( temp int)
+0:80        direct index ( temp int)
+0:80          i: direct index for structure ( temp 4-component vector of int)
+0:80            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:80              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:80                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:80                Constant:
+0:80                  0 (const uint)
+0:80              direct index ( temp uint)
+0:80                'dti' ( in 3-component vector of uint)
+0:80                Constant:
+0:80                  0 (const int)
+0:80            Constant:
+0:80              1 (const int)
+0:80          Constant:
+0:80            0 (const int)
+0:80        subgroupMax ( temp int)
+0:80          direct index ( temp int)
+0:80            i: direct index for structure ( temp 4-component vector of int)
+0:80              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:80                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:80                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:80                  Constant:
+0:80                    0 (const uint)
+0:80                direct index ( temp uint)
+0:80                  'dti' ( in 3-component vector of uint)
+0:80                  Constant:
+0:80                    0 (const int)
+0:80              Constant:
+0:80                1 (const int)
+0:80            Constant:
+0:80              0 (const int)
+0:81      move second child to first child ( temp 2-component vector of int)
+0:81        vector swizzle ( temp 2-component vector of int)
+0:81          i: direct index for structure ( temp 4-component vector of int)
+0:81            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:81              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:81                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:81                Constant:
+0:81                  0 (const uint)
+0:81              direct index ( temp uint)
+0:81                'dti' ( in 3-component vector of uint)
+0:81                Constant:
+0:81                  0 (const int)
+0:81            Constant:
+0:81              1 (const int)
+0:81          Sequence
+0:81            Constant:
+0:81              0 (const int)
+0:81            Constant:
+0:81              1 (const int)
+0:81        subgroupMax ( temp 2-component vector of int)
+0:81          vector swizzle ( temp 2-component vector of int)
+0:81            i: direct index for structure ( temp 4-component vector of int)
+0:81              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:81                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:81                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:81                  Constant:
+0:81                    0 (const uint)
+0:81                direct index ( temp uint)
+0:81                  'dti' ( in 3-component vector of uint)
+0:81                  Constant:
+0:81                    0 (const int)
+0:81              Constant:
+0:81                1 (const int)
+0:81            Sequence
+0:81              Constant:
+0:81                0 (const int)
+0:81              Constant:
+0:81                1 (const int)
+0:82      move second child to first child ( temp 3-component vector of int)
+0:82        vector swizzle ( temp 3-component vector of int)
+0:82          i: direct index for structure ( temp 4-component vector of int)
+0:82            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:82              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:82                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:82                Constant:
+0:82                  0 (const uint)
+0:82              direct index ( temp uint)
+0:82                'dti' ( in 3-component vector of uint)
+0:82                Constant:
+0:82                  0 (const int)
+0:82            Constant:
+0:82              1 (const int)
+0:82          Sequence
+0:82            Constant:
+0:82              0 (const int)
+0:82            Constant:
+0:82              1 (const int)
+0:82            Constant:
+0:82              2 (const int)
+0:82        subgroupMax ( temp 3-component vector of int)
+0:82          vector swizzle ( temp 3-component vector of int)
+0:82            i: direct index for structure ( temp 4-component vector of int)
+0:82              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:82                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:82                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:82                  Constant:
+0:82                    0 (const uint)
+0:82                direct index ( temp uint)
+0:82                  'dti' ( in 3-component vector of uint)
+0:82                  Constant:
+0:82                    0 (const int)
+0:82              Constant:
+0:82                1 (const int)
+0:82            Sequence
+0:82              Constant:
+0:82                0 (const int)
+0:82              Constant:
+0:82                1 (const int)
+0:82              Constant:
+0:82                2 (const int)
+0:84      move second child to first child ( temp 4-component vector of float)
+0:84        f: direct index for structure ( temp 4-component vector of float)
+0:84          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:84            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:84              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:84              Constant:
+0:84                0 (const uint)
+0:84            direct index ( temp uint)
+0:84              'dti' ( in 3-component vector of uint)
+0:84              Constant:
+0:84                0 (const int)
+0:84          Constant:
+0:84            2 (const int)
+0:84        subgroupMax ( temp 4-component vector of float)
+0:84          f: direct index for structure ( temp 4-component vector of float)
+0:84            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:84              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:84                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:84                Constant:
+0:84                  0 (const uint)
+0:84              direct index ( temp uint)
+0:84                'dti' ( in 3-component vector of uint)
+0:84                Constant:
+0:84                  0 (const int)
+0:84            Constant:
+0:84              2 (const int)
+0:85      move second child to first child ( temp float)
+0:85        direct index ( temp float)
+0:85          f: direct index for structure ( temp 4-component vector of float)
+0:85            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:85              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:85                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:85                Constant:
+0:85                  0 (const uint)
+0:85              direct index ( temp uint)
+0:85                'dti' ( in 3-component vector of uint)
+0:85                Constant:
+0:85                  0 (const int)
+0:85            Constant:
+0:85              2 (const int)
+0:85          Constant:
+0:85            0 (const int)
+0:85        subgroupMax ( temp float)
+0:85          direct index ( temp float)
+0:85            f: direct index for structure ( temp 4-component vector of float)
+0:85              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:85                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:85                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:85                  Constant:
+0:85                    0 (const uint)
+0:85                direct index ( temp uint)
+0:85                  'dti' ( in 3-component vector of uint)
+0:85                  Constant:
+0:85                    0 (const int)
+0:85              Constant:
+0:85                2 (const int)
+0:85            Constant:
+0:85              0 (const int)
+0:86      move second child to first child ( temp 2-component vector of float)
+0:86        vector swizzle ( temp 2-component vector of float)
+0:86          f: direct index for structure ( temp 4-component vector of float)
+0:86            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:86              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:86                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:86                Constant:
+0:86                  0 (const uint)
+0:86              direct index ( temp uint)
+0:86                'dti' ( in 3-component vector of uint)
+0:86                Constant:
+0:86                  0 (const int)
+0:86            Constant:
+0:86              2 (const int)
+0:86          Sequence
+0:86            Constant:
+0:86              0 (const int)
+0:86            Constant:
+0:86              1 (const int)
+0:86        subgroupMax ( temp 2-component vector of float)
+0:86          vector swizzle ( temp 2-component vector of float)
+0:86            f: direct index for structure ( temp 4-component vector of float)
+0:86              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:86                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:86                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:86                  Constant:
+0:86                    0 (const uint)
+0:86                direct index ( temp uint)
+0:86                  'dti' ( in 3-component vector of uint)
+0:86                  Constant:
+0:86                    0 (const int)
+0:86              Constant:
+0:86                2 (const int)
+0:86            Sequence
+0:86              Constant:
+0:86                0 (const int)
+0:86              Constant:
+0:86                1 (const int)
+0:87      move second child to first child ( temp 3-component vector of float)
+0:87        vector swizzle ( temp 3-component vector of float)
+0:87          f: direct index for structure ( temp 4-component vector of float)
+0:87            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:87              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:87                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:87                Constant:
+0:87                  0 (const uint)
+0:87              direct index ( temp uint)
+0:87                'dti' ( in 3-component vector of uint)
+0:87                Constant:
+0:87                  0 (const int)
+0:87            Constant:
+0:87              2 (const int)
+0:87          Sequence
+0:87            Constant:
+0:87              0 (const int)
+0:87            Constant:
+0:87              1 (const int)
+0:87            Constant:
+0:87              2 (const int)
+0:87        subgroupMax ( temp 3-component vector of float)
+0:87          vector swizzle ( temp 3-component vector of float)
+0:87            f: direct index for structure ( temp 4-component vector of float)
+0:87              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:87                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:87                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:87                  Constant:
+0:87                    0 (const uint)
+0:87                direct index ( temp uint)
+0:87                  'dti' ( in 3-component vector of uint)
+0:87                  Constant:
+0:87                    0 (const int)
+0:87              Constant:
+0:87                2 (const int)
+0:87            Sequence
+0:87              Constant:
+0:87                0 (const int)
+0:87              Constant:
+0:87                1 (const int)
+0:87              Constant:
+0:87                2 (const int)
+0:89      move second child to first child ( temp 4-component vector of double)
+0:89        d: direct index for structure ( temp 4-component vector of double)
+0:89          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:89            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:89              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:89              Constant:
+0:89                0 (const uint)
+0:89            direct index ( temp uint)
+0:89              'dti' ( in 3-component vector of uint)
+0:89              Constant:
+0:89                0 (const int)
+0:89          Constant:
+0:89            3 (const int)
+0:89        subgroupMax ( temp 4-component vector of double)
+0:89          d: direct index for structure ( temp 4-component vector of double)
+0:89            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:89              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:89                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:89                Constant:
+0:89                  0 (const uint)
+0:89              direct index ( temp uint)
+0:89                'dti' ( in 3-component vector of uint)
+0:89                Constant:
+0:89                  0 (const int)
+0:89            Constant:
+0:89              3 (const int)
+0:90      move second child to first child ( temp double)
+0:90        direct index ( temp double)
+0:90          d: direct index for structure ( temp 4-component vector of double)
+0:90            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:90              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:90                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:90                Constant:
+0:90                  0 (const uint)
+0:90              direct index ( temp uint)
+0:90                'dti' ( in 3-component vector of uint)
+0:90                Constant:
+0:90                  0 (const int)
+0:90            Constant:
+0:90              3 (const int)
+0:90          Constant:
+0:90            0 (const int)
+0:90        subgroupMax ( temp double)
+0:90          direct index ( temp double)
+0:90            d: direct index for structure ( temp 4-component vector of double)
+0:90              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:90                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:90                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:90                  Constant:
+0:90                    0 (const uint)
+0:90                direct index ( temp uint)
+0:90                  'dti' ( in 3-component vector of uint)
+0:90                  Constant:
+0:90                    0 (const int)
+0:90              Constant:
+0:90                3 (const int)
+0:90            Constant:
+0:90              0 (const int)
+0:91      move second child to first child ( temp 2-component vector of double)
+0:91        vector swizzle ( temp 2-component vector of double)
+0:91          d: direct index for structure ( temp 4-component vector of double)
+0:91            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:91              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:91                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:91                Constant:
+0:91                  0 (const uint)
+0:91              direct index ( temp uint)
+0:91                'dti' ( in 3-component vector of uint)
+0:91                Constant:
+0:91                  0 (const int)
+0:91            Constant:
+0:91              3 (const int)
+0:91          Sequence
+0:91            Constant:
+0:91              0 (const int)
+0:91            Constant:
+0:91              1 (const int)
+0:91        subgroupMax ( temp 2-component vector of double)
+0:91          vector swizzle ( temp 2-component vector of double)
+0:91            d: direct index for structure ( temp 4-component vector of double)
+0:91              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:91                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:91                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:91                  Constant:
+0:91                    0 (const uint)
+0:91                direct index ( temp uint)
+0:91                  'dti' ( in 3-component vector of uint)
+0:91                  Constant:
+0:91                    0 (const int)
+0:91              Constant:
+0:91                3 (const int)
+0:91            Sequence
+0:91              Constant:
+0:91                0 (const int)
+0:91              Constant:
+0:91                1 (const int)
+0:92      move second child to first child ( temp 3-component vector of double)
+0:92        vector swizzle ( temp 3-component vector of double)
+0:92          d: direct index for structure ( temp 4-component vector of double)
+0:92            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:92              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:92                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:92                Constant:
+0:92                  0 (const uint)
+0:92              direct index ( temp uint)
+0:92                'dti' ( in 3-component vector of uint)
+0:92                Constant:
+0:92                  0 (const int)
+0:92            Constant:
+0:92              3 (const int)
+0:92          Sequence
+0:92            Constant:
+0:92              0 (const int)
+0:92            Constant:
+0:92              1 (const int)
+0:92            Constant:
+0:92              2 (const int)
+0:92        subgroupMax ( temp 3-component vector of double)
+0:92          vector swizzle ( temp 3-component vector of double)
+0:92            d: direct index for structure ( temp 4-component vector of double)
+0:92              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:92                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:92                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:92                  Constant:
+0:92                    0 (const uint)
+0:92                direct index ( temp uint)
+0:92                  'dti' ( in 3-component vector of uint)
+0:92                  Constant:
+0:92                    0 (const int)
+0:92              Constant:
+0:92                3 (const int)
+0:92            Sequence
+0:92              Constant:
+0:92                0 (const int)
+0:92              Constant:
+0:92                1 (const int)
+0:92              Constant:
+0:92                2 (const int)
+0:94      move second child to first child ( temp 4-component vector of uint)
+0:94        u: direct index for structure ( temp 4-component vector of uint)
+0:94          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:94            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:94              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:94              Constant:
+0:94                0 (const uint)
+0:94            direct index ( temp uint)
+0:94              'dti' ( in 3-component vector of uint)
+0:94              Constant:
+0:94                0 (const int)
+0:94          Constant:
+0:94            0 (const int)
+0:94        subgroupAnd ( temp 4-component vector of uint)
+0:94          u: direct index for structure ( temp 4-component vector of uint)
+0:94            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:94              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:94                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:94                Constant:
+0:94                  0 (const uint)
+0:94              direct index ( temp uint)
+0:94                'dti' ( in 3-component vector of uint)
+0:94                Constant:
+0:94                  0 (const int)
+0:94            Constant:
+0:94              0 (const int)
+0:95      move second child to first child ( temp uint)
+0:95        direct index ( temp uint)
+0:95          u: direct index for structure ( temp 4-component vector of uint)
+0:95            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:95              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:95                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:95                Constant:
+0:95                  0 (const uint)
+0:95              direct index ( temp uint)
+0:95                'dti' ( in 3-component vector of uint)
+0:95                Constant:
+0:95                  0 (const int)
+0:95            Constant:
+0:95              0 (const int)
+0:95          Constant:
+0:95            0 (const int)
+0:95        subgroupAnd ( temp uint)
+0:95          direct index ( temp uint)
+0:95            u: direct index for structure ( temp 4-component vector of uint)
+0:95              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:95                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:95                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:95                  Constant:
+0:95                    0 (const uint)
+0:95                direct index ( temp uint)
+0:95                  'dti' ( in 3-component vector of uint)
+0:95                  Constant:
+0:95                    0 (const int)
+0:95              Constant:
+0:95                0 (const int)
+0:95            Constant:
+0:95              0 (const int)
+0:96      move second child to first child ( temp 2-component vector of uint)
+0:96        vector swizzle ( temp 2-component vector of uint)
+0:96          u: direct index for structure ( temp 4-component vector of uint)
+0:96            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:96              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:96                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:96                Constant:
+0:96                  0 (const uint)
+0:96              direct index ( temp uint)
+0:96                'dti' ( in 3-component vector of uint)
+0:96                Constant:
+0:96                  0 (const int)
+0:96            Constant:
+0:96              0 (const int)
+0:96          Sequence
+0:96            Constant:
+0:96              0 (const int)
+0:96            Constant:
+0:96              1 (const int)
+0:96        subgroupAnd ( temp 2-component vector of uint)
+0:96          vector swizzle ( temp 2-component vector of uint)
+0:96            u: direct index for structure ( temp 4-component vector of uint)
+0:96              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:96                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:96                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:96                  Constant:
+0:96                    0 (const uint)
+0:96                direct index ( temp uint)
+0:96                  'dti' ( in 3-component vector of uint)
+0:96                  Constant:
+0:96                    0 (const int)
+0:96              Constant:
+0:96                0 (const int)
+0:96            Sequence
+0:96              Constant:
+0:96                0 (const int)
+0:96              Constant:
+0:96                1 (const int)
+0:97      move second child to first child ( temp 3-component vector of uint)
+0:97        vector swizzle ( temp 3-component vector of uint)
+0:97          u: direct index for structure ( temp 4-component vector of uint)
+0:97            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:97              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:97                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:97                Constant:
+0:97                  0 (const uint)
+0:97              direct index ( temp uint)
+0:97                'dti' ( in 3-component vector of uint)
+0:97                Constant:
+0:97                  0 (const int)
+0:97            Constant:
+0:97              0 (const int)
+0:97          Sequence
+0:97            Constant:
+0:97              0 (const int)
+0:97            Constant:
+0:97              1 (const int)
+0:97            Constant:
+0:97              2 (const int)
+0:97        subgroupAnd ( temp 3-component vector of uint)
+0:97          vector swizzle ( temp 3-component vector of uint)
+0:97            u: direct index for structure ( temp 4-component vector of uint)
+0:97              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:97                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:97                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:97                  Constant:
+0:97                    0 (const uint)
+0:97                direct index ( temp uint)
+0:97                  'dti' ( in 3-component vector of uint)
+0:97                  Constant:
+0:97                    0 (const int)
+0:97              Constant:
+0:97                0 (const int)
+0:97            Sequence
+0:97              Constant:
+0:97                0 (const int)
+0:97              Constant:
+0:97                1 (const int)
+0:97              Constant:
+0:97                2 (const int)
+0:99      move second child to first child ( temp 4-component vector of int)
+0:99        i: direct index for structure ( temp 4-component vector of int)
+0:99          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:99            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:99              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:99              Constant:
+0:99                0 (const uint)
+0:99            direct index ( temp uint)
+0:99              'dti' ( in 3-component vector of uint)
+0:99              Constant:
+0:99                0 (const int)
+0:99          Constant:
+0:99            1 (const int)
+0:99        subgroupAnd ( temp 4-component vector of int)
+0:99          i: direct index for structure ( temp 4-component vector of int)
+0:99            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:99              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:99                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:99                Constant:
+0:99                  0 (const uint)
+0:99              direct index ( temp uint)
+0:99                'dti' ( in 3-component vector of uint)
+0:99                Constant:
+0:99                  0 (const int)
+0:99            Constant:
+0:99              1 (const int)
+0:100      move second child to first child ( temp int)
+0:100        direct index ( temp int)
+0:100          i: direct index for structure ( temp 4-component vector of int)
+0:100            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:100              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:100                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:100                Constant:
+0:100                  0 (const uint)
+0:100              direct index ( temp uint)
+0:100                'dti' ( in 3-component vector of uint)
+0:100                Constant:
+0:100                  0 (const int)
+0:100            Constant:
+0:100              1 (const int)
+0:100          Constant:
+0:100            0 (const int)
+0:100        subgroupAnd ( temp int)
+0:100          direct index ( temp int)
+0:100            i: direct index for structure ( temp 4-component vector of int)
+0:100              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:100                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:100                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:100                  Constant:
+0:100                    0 (const uint)
+0:100                direct index ( temp uint)
+0:100                  'dti' ( in 3-component vector of uint)
+0:100                  Constant:
+0:100                    0 (const int)
+0:100              Constant:
+0:100                1 (const int)
+0:100            Constant:
+0:100              0 (const int)
+0:101      move second child to first child ( temp 2-component vector of int)
+0:101        vector swizzle ( temp 2-component vector of int)
+0:101          i: direct index for structure ( temp 4-component vector of int)
+0:101            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:101              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:101                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:101                Constant:
+0:101                  0 (const uint)
+0:101              direct index ( temp uint)
+0:101                'dti' ( in 3-component vector of uint)
+0:101                Constant:
+0:101                  0 (const int)
+0:101            Constant:
+0:101              1 (const int)
+0:101          Sequence
+0:101            Constant:
+0:101              0 (const int)
+0:101            Constant:
+0:101              1 (const int)
+0:101        subgroupAnd ( temp 2-component vector of int)
+0:101          vector swizzle ( temp 2-component vector of int)
+0:101            i: direct index for structure ( temp 4-component vector of int)
+0:101              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:101                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:101                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:101                  Constant:
+0:101                    0 (const uint)
+0:101                direct index ( temp uint)
+0:101                  'dti' ( in 3-component vector of uint)
+0:101                  Constant:
+0:101                    0 (const int)
+0:101              Constant:
+0:101                1 (const int)
+0:101            Sequence
+0:101              Constant:
+0:101                0 (const int)
+0:101              Constant:
+0:101                1 (const int)
+0:102      move second child to first child ( temp 3-component vector of int)
+0:102        vector swizzle ( temp 3-component vector of int)
+0:102          i: direct index for structure ( temp 4-component vector of int)
+0:102            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:102              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:102                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:102                Constant:
+0:102                  0 (const uint)
+0:102              direct index ( temp uint)
+0:102                'dti' ( in 3-component vector of uint)
+0:102                Constant:
+0:102                  0 (const int)
+0:102            Constant:
+0:102              1 (const int)
+0:102          Sequence
+0:102            Constant:
+0:102              0 (const int)
+0:102            Constant:
+0:102              1 (const int)
+0:102            Constant:
+0:102              2 (const int)
+0:102        subgroupAnd ( temp 3-component vector of int)
+0:102          vector swizzle ( temp 3-component vector of int)
+0:102            i: direct index for structure ( temp 4-component vector of int)
+0:102              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:102                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:102                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:102                  Constant:
+0:102                    0 (const uint)
+0:102                direct index ( temp uint)
+0:102                  'dti' ( in 3-component vector of uint)
+0:102                  Constant:
+0:102                    0 (const int)
+0:102              Constant:
+0:102                1 (const int)
+0:102            Sequence
+0:102              Constant:
+0:102                0 (const int)
+0:102              Constant:
+0:102                1 (const int)
+0:102              Constant:
+0:102                2 (const int)
+0:104      move second child to first child ( temp 4-component vector of uint)
+0:104        u: direct index for structure ( temp 4-component vector of uint)
+0:104          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:104            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:104              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:104              Constant:
+0:104                0 (const uint)
+0:104            direct index ( temp uint)
+0:104              'dti' ( in 3-component vector of uint)
+0:104              Constant:
+0:104                0 (const int)
+0:104          Constant:
+0:104            0 (const int)
+0:104        subgroupOr ( temp 4-component vector of uint)
+0:104          u: direct index for structure ( temp 4-component vector of uint)
+0:104            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:104              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:104                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:104                Constant:
+0:104                  0 (const uint)
+0:104              direct index ( temp uint)
+0:104                'dti' ( in 3-component vector of uint)
+0:104                Constant:
+0:104                  0 (const int)
+0:104            Constant:
+0:104              0 (const int)
+0:105      move second child to first child ( temp uint)
+0:105        direct index ( temp uint)
+0:105          u: direct index for structure ( temp 4-component vector of uint)
+0:105            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:105              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:105                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:105                Constant:
+0:105                  0 (const uint)
+0:105              direct index ( temp uint)
+0:105                'dti' ( in 3-component vector of uint)
+0:105                Constant:
+0:105                  0 (const int)
+0:105            Constant:
+0:105              0 (const int)
+0:105          Constant:
+0:105            0 (const int)
+0:105        subgroupOr ( temp uint)
+0:105          direct index ( temp uint)
+0:105            u: direct index for structure ( temp 4-component vector of uint)
+0:105              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:105                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:105                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:105                  Constant:
+0:105                    0 (const uint)
+0:105                direct index ( temp uint)
+0:105                  'dti' ( in 3-component vector of uint)
+0:105                  Constant:
+0:105                    0 (const int)
+0:105              Constant:
+0:105                0 (const int)
+0:105            Constant:
+0:105              0 (const int)
+0:106      move second child to first child ( temp 2-component vector of uint)
+0:106        vector swizzle ( temp 2-component vector of uint)
+0:106          u: direct index for structure ( temp 4-component vector of uint)
+0:106            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:106              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:106                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:106                Constant:
+0:106                  0 (const uint)
+0:106              direct index ( temp uint)
+0:106                'dti' ( in 3-component vector of uint)
+0:106                Constant:
+0:106                  0 (const int)
+0:106            Constant:
+0:106              0 (const int)
+0:106          Sequence
+0:106            Constant:
+0:106              0 (const int)
+0:106            Constant:
+0:106              1 (const int)
+0:106        subgroupOr ( temp 2-component vector of uint)
+0:106          vector swizzle ( temp 2-component vector of uint)
+0:106            u: direct index for structure ( temp 4-component vector of uint)
+0:106              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:106                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:106                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:106                  Constant:
+0:106                    0 (const uint)
+0:106                direct index ( temp uint)
+0:106                  'dti' ( in 3-component vector of uint)
+0:106                  Constant:
+0:106                    0 (const int)
+0:106              Constant:
+0:106                0 (const int)
+0:106            Sequence
+0:106              Constant:
+0:106                0 (const int)
+0:106              Constant:
+0:106                1 (const int)
+0:107      move second child to first child ( temp 3-component vector of uint)
+0:107        vector swizzle ( temp 3-component vector of uint)
+0:107          u: direct index for structure ( temp 4-component vector of uint)
+0:107            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:107              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:107                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:107                Constant:
+0:107                  0 (const uint)
+0:107              direct index ( temp uint)
+0:107                'dti' ( in 3-component vector of uint)
+0:107                Constant:
+0:107                  0 (const int)
+0:107            Constant:
+0:107              0 (const int)
+0:107          Sequence
+0:107            Constant:
+0:107              0 (const int)
+0:107            Constant:
+0:107              1 (const int)
+0:107            Constant:
+0:107              2 (const int)
+0:107        subgroupOr ( temp 3-component vector of uint)
+0:107          vector swizzle ( temp 3-component vector of uint)
+0:107            u: direct index for structure ( temp 4-component vector of uint)
+0:107              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:107                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:107                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:107                  Constant:
+0:107                    0 (const uint)
+0:107                direct index ( temp uint)
+0:107                  'dti' ( in 3-component vector of uint)
+0:107                  Constant:
+0:107                    0 (const int)
+0:107              Constant:
+0:107                0 (const int)
+0:107            Sequence
+0:107              Constant:
+0:107                0 (const int)
+0:107              Constant:
+0:107                1 (const int)
+0:107              Constant:
+0:107                2 (const int)
+0:109      move second child to first child ( temp 4-component vector of int)
+0:109        i: direct index for structure ( temp 4-component vector of int)
+0:109          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:109            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:109              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:109              Constant:
+0:109                0 (const uint)
+0:109            direct index ( temp uint)
+0:109              'dti' ( in 3-component vector of uint)
+0:109              Constant:
+0:109                0 (const int)
+0:109          Constant:
+0:109            1 (const int)
+0:109        subgroupOr ( temp 4-component vector of int)
+0:109          i: direct index for structure ( temp 4-component vector of int)
+0:109            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:109              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:109                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:109                Constant:
+0:109                  0 (const uint)
+0:109              direct index ( temp uint)
+0:109                'dti' ( in 3-component vector of uint)
+0:109                Constant:
+0:109                  0 (const int)
+0:109            Constant:
+0:109              1 (const int)
+0:110      move second child to first child ( temp int)
+0:110        direct index ( temp int)
+0:110          i: direct index for structure ( temp 4-component vector of int)
+0:110            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:110              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:110                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:110                Constant:
+0:110                  0 (const uint)
+0:110              direct index ( temp uint)
+0:110                'dti' ( in 3-component vector of uint)
+0:110                Constant:
+0:110                  0 (const int)
+0:110            Constant:
+0:110              1 (const int)
+0:110          Constant:
+0:110            0 (const int)
+0:110        subgroupOr ( temp int)
+0:110          direct index ( temp int)
+0:110            i: direct index for structure ( temp 4-component vector of int)
+0:110              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:110                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:110                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:110                  Constant:
+0:110                    0 (const uint)
+0:110                direct index ( temp uint)
+0:110                  'dti' ( in 3-component vector of uint)
+0:110                  Constant:
+0:110                    0 (const int)
+0:110              Constant:
+0:110                1 (const int)
+0:110            Constant:
+0:110              0 (const int)
+0:111      move second child to first child ( temp 2-component vector of int)
+0:111        vector swizzle ( temp 2-component vector of int)
+0:111          i: direct index for structure ( temp 4-component vector of int)
+0:111            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:111              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:111                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:111                Constant:
+0:111                  0 (const uint)
+0:111              direct index ( temp uint)
+0:111                'dti' ( in 3-component vector of uint)
+0:111                Constant:
+0:111                  0 (const int)
+0:111            Constant:
+0:111              1 (const int)
+0:111          Sequence
+0:111            Constant:
+0:111              0 (const int)
+0:111            Constant:
+0:111              1 (const int)
+0:111        subgroupOr ( temp 2-component vector of int)
+0:111          vector swizzle ( temp 2-component vector of int)
+0:111            i: direct index for structure ( temp 4-component vector of int)
+0:111              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:111                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:111                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:111                  Constant:
+0:111                    0 (const uint)
+0:111                direct index ( temp uint)
+0:111                  'dti' ( in 3-component vector of uint)
+0:111                  Constant:
+0:111                    0 (const int)
+0:111              Constant:
+0:111                1 (const int)
+0:111            Sequence
+0:111              Constant:
+0:111                0 (const int)
+0:111              Constant:
+0:111                1 (const int)
+0:112      move second child to first child ( temp 3-component vector of int)
+0:112        vector swizzle ( temp 3-component vector of int)
+0:112          i: direct index for structure ( temp 4-component vector of int)
+0:112            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:112              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:112                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:112                Constant:
+0:112                  0 (const uint)
+0:112              direct index ( temp uint)
+0:112                'dti' ( in 3-component vector of uint)
+0:112                Constant:
+0:112                  0 (const int)
+0:112            Constant:
+0:112              1 (const int)
+0:112          Sequence
+0:112            Constant:
+0:112              0 (const int)
+0:112            Constant:
+0:112              1 (const int)
+0:112            Constant:
+0:112              2 (const int)
+0:112        subgroupOr ( temp 3-component vector of int)
+0:112          vector swizzle ( temp 3-component vector of int)
+0:112            i: direct index for structure ( temp 4-component vector of int)
+0:112              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:112                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:112                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:112                  Constant:
+0:112                    0 (const uint)
+0:112                direct index ( temp uint)
+0:112                  'dti' ( in 3-component vector of uint)
+0:112                  Constant:
+0:112                    0 (const int)
+0:112              Constant:
+0:112                1 (const int)
+0:112            Sequence
+0:112              Constant:
+0:112                0 (const int)
+0:112              Constant:
+0:112                1 (const int)
+0:112              Constant:
+0:112                2 (const int)
+0:114      move second child to first child ( temp 4-component vector of uint)
+0:114        u: direct index for structure ( temp 4-component vector of uint)
+0:114          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:114            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:114              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:114              Constant:
+0:114                0 (const uint)
+0:114            direct index ( temp uint)
+0:114              'dti' ( in 3-component vector of uint)
+0:114              Constant:
+0:114                0 (const int)
+0:114          Constant:
+0:114            0 (const int)
+0:114        subgroupXor ( temp 4-component vector of uint)
+0:114          u: direct index for structure ( temp 4-component vector of uint)
+0:114            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:114              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:114                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:114                Constant:
+0:114                  0 (const uint)
+0:114              direct index ( temp uint)
+0:114                'dti' ( in 3-component vector of uint)
+0:114                Constant:
+0:114                  0 (const int)
+0:114            Constant:
+0:114              0 (const int)
+0:115      move second child to first child ( temp uint)
+0:115        direct index ( temp uint)
+0:115          u: direct index for structure ( temp 4-component vector of uint)
+0:115            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:115              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:115                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:115                Constant:
+0:115                  0 (const uint)
+0:115              direct index ( temp uint)
+0:115                'dti' ( in 3-component vector of uint)
+0:115                Constant:
+0:115                  0 (const int)
+0:115            Constant:
+0:115              0 (const int)
+0:115          Constant:
+0:115            0 (const int)
+0:115        subgroupXor ( temp uint)
+0:115          direct index ( temp uint)
+0:115            u: direct index for structure ( temp 4-component vector of uint)
+0:115              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:115                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:115                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:115                  Constant:
+0:115                    0 (const uint)
+0:115                direct index ( temp uint)
+0:115                  'dti' ( in 3-component vector of uint)
+0:115                  Constant:
+0:115                    0 (const int)
+0:115              Constant:
+0:115                0 (const int)
+0:115            Constant:
+0:115              0 (const int)
+0:116      move second child to first child ( temp 2-component vector of uint)
+0:116        vector swizzle ( temp 2-component vector of uint)
+0:116          u: direct index for structure ( temp 4-component vector of uint)
+0:116            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:116              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:116                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:116                Constant:
+0:116                  0 (const uint)
+0:116              direct index ( temp uint)
+0:116                'dti' ( in 3-component vector of uint)
+0:116                Constant:
+0:116                  0 (const int)
+0:116            Constant:
+0:116              0 (const int)
+0:116          Sequence
+0:116            Constant:
+0:116              0 (const int)
+0:116            Constant:
+0:116              1 (const int)
+0:116        subgroupXor ( temp 2-component vector of uint)
+0:116          vector swizzle ( temp 2-component vector of uint)
+0:116            u: direct index for structure ( temp 4-component vector of uint)
+0:116              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:116                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:116                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:116                  Constant:
+0:116                    0 (const uint)
+0:116                direct index ( temp uint)
+0:116                  'dti' ( in 3-component vector of uint)
+0:116                  Constant:
+0:116                    0 (const int)
+0:116              Constant:
+0:116                0 (const int)
+0:116            Sequence
+0:116              Constant:
+0:116                0 (const int)
+0:116              Constant:
+0:116                1 (const int)
+0:117      move second child to first child ( temp 3-component vector of uint)
+0:117        vector swizzle ( temp 3-component vector of uint)
+0:117          u: direct index for structure ( temp 4-component vector of uint)
+0:117            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:117              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:117                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:117                Constant:
+0:117                  0 (const uint)
+0:117              direct index ( temp uint)
+0:117                'dti' ( in 3-component vector of uint)
+0:117                Constant:
+0:117                  0 (const int)
+0:117            Constant:
+0:117              0 (const int)
+0:117          Sequence
+0:117            Constant:
+0:117              0 (const int)
+0:117            Constant:
+0:117              1 (const int)
+0:117            Constant:
+0:117              2 (const int)
+0:117        subgroupXor ( temp 3-component vector of uint)
+0:117          vector swizzle ( temp 3-component vector of uint)
+0:117            u: direct index for structure ( temp 4-component vector of uint)
+0:117              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:117                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:117                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:117                  Constant:
+0:117                    0 (const uint)
+0:117                direct index ( temp uint)
+0:117                  'dti' ( in 3-component vector of uint)
+0:117                  Constant:
+0:117                    0 (const int)
+0:117              Constant:
+0:117                0 (const int)
+0:117            Sequence
+0:117              Constant:
+0:117                0 (const int)
+0:117              Constant:
+0:117                1 (const int)
+0:117              Constant:
+0:117                2 (const int)
+0:119      move second child to first child ( temp 4-component vector of int)
+0:119        i: direct index for structure ( temp 4-component vector of int)
+0:119          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:119            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:119              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:119              Constant:
+0:119                0 (const uint)
+0:119            direct index ( temp uint)
+0:119              'dti' ( in 3-component vector of uint)
+0:119              Constant:
+0:119                0 (const int)
+0:119          Constant:
+0:119            1 (const int)
+0:119        subgroupXor ( temp 4-component vector of int)
+0:119          i: direct index for structure ( temp 4-component vector of int)
+0:119            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:119              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:119                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:119                Constant:
+0:119                  0 (const uint)
+0:119              direct index ( temp uint)
+0:119                'dti' ( in 3-component vector of uint)
+0:119                Constant:
+0:119                  0 (const int)
+0:119            Constant:
+0:119              1 (const int)
+0:120      move second child to first child ( temp int)
+0:120        direct index ( temp int)
+0:120          i: direct index for structure ( temp 4-component vector of int)
+0:120            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:120              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:120                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:120                Constant:
+0:120                  0 (const uint)
+0:120              direct index ( temp uint)
+0:120                'dti' ( in 3-component vector of uint)
+0:120                Constant:
+0:120                  0 (const int)
+0:120            Constant:
+0:120              1 (const int)
+0:120          Constant:
+0:120            0 (const int)
+0:120        subgroupXor ( temp int)
+0:120          direct index ( temp int)
+0:120            i: direct index for structure ( temp 4-component vector of int)
+0:120              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:120                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:120                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:120                  Constant:
+0:120                    0 (const uint)
+0:120                direct index ( temp uint)
+0:120                  'dti' ( in 3-component vector of uint)
+0:120                  Constant:
+0:120                    0 (const int)
+0:120              Constant:
+0:120                1 (const int)
+0:120            Constant:
+0:120              0 (const int)
+0:121      move second child to first child ( temp 2-component vector of int)
+0:121        vector swizzle ( temp 2-component vector of int)
+0:121          i: direct index for structure ( temp 4-component vector of int)
+0:121            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:121              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:121                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:121                Constant:
+0:121                  0 (const uint)
+0:121              direct index ( temp uint)
+0:121                'dti' ( in 3-component vector of uint)
+0:121                Constant:
+0:121                  0 (const int)
+0:121            Constant:
+0:121              1 (const int)
+0:121          Sequence
+0:121            Constant:
+0:121              0 (const int)
+0:121            Constant:
+0:121              1 (const int)
+0:121        subgroupXor ( temp 2-component vector of int)
+0:121          vector swizzle ( temp 2-component vector of int)
+0:121            i: direct index for structure ( temp 4-component vector of int)
+0:121              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:121                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:121                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:121                  Constant:
+0:121                    0 (const uint)
+0:121                direct index ( temp uint)
+0:121                  'dti' ( in 3-component vector of uint)
+0:121                  Constant:
+0:121                    0 (const int)
+0:121              Constant:
+0:121                1 (const int)
+0:121            Sequence
+0:121              Constant:
+0:121                0 (const int)
+0:121              Constant:
+0:121                1 (const int)
+0:122      move second child to first child ( temp 3-component vector of int)
+0:122        vector swizzle ( temp 3-component vector of int)
+0:122          i: direct index for structure ( temp 4-component vector of int)
+0:122            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:122              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:122                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:122                Constant:
+0:122                  0 (const uint)
+0:122              direct index ( temp uint)
+0:122                'dti' ( in 3-component vector of uint)
+0:122                Constant:
+0:122                  0 (const int)
+0:122            Constant:
+0:122              1 (const int)
+0:122          Sequence
+0:122            Constant:
+0:122              0 (const int)
+0:122            Constant:
+0:122              1 (const int)
+0:122            Constant:
+0:122              2 (const int)
+0:122        subgroupXor ( temp 3-component vector of int)
+0:122          vector swizzle ( temp 3-component vector of int)
+0:122            i: direct index for structure ( temp 4-component vector of int)
+0:122              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:122                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:122                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:122                  Constant:
+0:122                    0 (const uint)
+0:122                direct index ( temp uint)
+0:122                  'dti' ( in 3-component vector of uint)
+0:122                  Constant:
+0:122                    0 (const int)
+0:122              Constant:
+0:122                1 (const int)
+0:122            Sequence
+0:122              Constant:
+0:122                0 (const int)
+0:122              Constant:
+0:122                1 (const int)
+0:122              Constant:
+0:122                2 (const int)
+0:124      move second child to first child ( temp uint)
+0:124        direct index ( temp uint)
+0:124          u: direct index for structure ( temp 4-component vector of uint)
+0:124            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:124              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:124                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:124                Constant:
+0:124                  0 (const uint)
+0:124              direct index ( temp uint)
+0:124                'dti' ( in 3-component vector of uint)
+0:124                Constant:
+0:124                  0 (const int)
+0:124            Constant:
+0:124              0 (const int)
+0:124          Constant:
+0:124            0 (const int)
+0:124        subgroupBallotBitCount ( temp uint)
+0:124          subgroupBallot ( temp 4-component vector of uint)
+0:124            Compare Equal ( temp bool)
+0:124              direct index ( temp uint)
+0:124                u: direct index for structure ( temp 4-component vector of uint)
+0:124                  indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:124                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:124                      'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:124                      Constant:
+0:124                        0 (const uint)
+0:124                    direct index ( temp uint)
+0:124                      'dti' ( in 3-component vector of uint)
+0:124                      Constant:
+0:124                        0 (const int)
+0:124                  Constant:
+0:124                    0 (const int)
+0:124                Constant:
+0:124                  0 (const int)
+0:124              Constant:
+0:124                0 (const uint)
+0:13  Function Definition: CSMain( ( temp void)
+0:13    Function Parameters: 
+0:?     Sequence
+0:13      move second child to first child ( temp 3-component vector of uint)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?         'dti' ( in 3-component vector of uint GlobalInvocationID)
+0:13      Function Call: @CSMain(vu3; ( temp void)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?   Linker Objects
+0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
+
+// Module Version 10300
+// Generated by (magic number): 80005
+// Id's are bound by 901
+
+                              Capability Shader
+                              Capability Float64
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformArithmetic
+                              Capability GroupNonUniformBallot
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "CSMain" 896
+                              ExecutionMode 4 LocalSize 32 16 1
+                              Source HLSL 500
+                              Name 4  "CSMain"
+                              Name 11  "@CSMain(vu3;"
+                              Name 10  "dti"
+                              Name 20  "Types"
+                              MemberName 20(Types) 0  "u"
+                              MemberName 20(Types) 1  "i"
+                              MemberName 20(Types) 2  "f"
+                              MemberName 20(Types) 3  "d"
+                              Name 22  "data"
+                              MemberName 22(data) 0  "@data"
+                              Name 24  "data"
+                              Name 894  "dti"
+                              Name 896  "dti"
+                              Name 898  "param"
+                              MemberDecorate 20(Types) 0 Offset 0
+                              MemberDecorate 20(Types) 1 Offset 16
+                              MemberDecorate 20(Types) 2 Offset 32
+                              MemberDecorate 20(Types) 3 Offset 64
+                              Decorate 21 ArrayStride 96
+                              MemberDecorate 22(data) 0 Offset 0
+                              Decorate 22(data) BufferBlock
+                              Decorate 24(data) DescriptorSet 0
+                              Decorate 896(dti) BuiltIn GlobalInvocationId
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 3
+               8:             TypePointer Function 7(ivec3)
+               9:             TypeFunction 2 8(ptr)
+              13:             TypeVector 6(int) 4
+              14:             TypeInt 32 1
+              15:             TypeVector 14(int) 4
+              16:             TypeFloat 32
+              17:             TypeVector 16(float) 4
+              18:             TypeFloat 64
+              19:             TypeVector 18(float) 4
+       20(Types):             TypeStruct 13(ivec4) 15(ivec4) 17(fvec4) 19(fvec4)
+              21:             TypeRuntimeArray 20(Types)
+        22(data):             TypeStruct 21
+              23:             TypePointer Uniform 22(data)
+        24(data):     23(ptr) Variable Uniform
+              25:     14(int) Constant 0
+              26:      6(int) Constant 0
+              27:             TypePointer Function 6(int)
+              32:             TypePointer Uniform 13(ivec4)
+              35:      6(int) Constant 3
+              42:             TypePointer Uniform 6(int)
+              51:             TypeVector 6(int) 2
+              72:     14(int) Constant 1
+              75:             TypePointer Uniform 15(ivec4)
+              84:             TypePointer Uniform 14(int)
+              93:             TypeVector 14(int) 2
+             105:             TypeVector 14(int) 3
+             115:     14(int) Constant 2
+             118:             TypePointer Uniform 17(fvec4)
+             127:             TypePointer Uniform 16(float)
+             136:             TypeVector 16(float) 2
+             148:             TypeVector 16(float) 3
+             158:     14(int) Constant 3
+             161:             TypePointer Uniform 19(fvec4)
+             170:             TypePointer Uniform 18(float)
+             179:             TypeVector 18(float) 2
+             191:             TypeVector 18(float) 3
+             889:             TypeBool
+             895:             TypePointer Input 7(ivec3)
+        896(dti):    895(ptr) Variable Input
+       4(CSMain):           2 Function None 3
+               5:             Label
+        894(dti):      8(ptr) Variable Function
+      898(param):      8(ptr) Variable Function
+             897:    7(ivec3) Load 896(dti)
+                              Store 894(dti) 897
+             899:    7(ivec3) Load 894(dti)
+                              Store 898(param) 899
+             900:           2 FunctionCall 11(@CSMain(vu3;) 898(param)
+                              Return
+                              FunctionEnd
+11(@CSMain(vu3;):           2 Function None 9
+         10(dti):      8(ptr) FunctionParameter
+              12:             Label
+              28:     27(ptr) AccessChain 10(dti) 26
+              29:      6(int) Load 28
+              30:     27(ptr) AccessChain 10(dti) 26
+              31:      6(int) Load 30
+              33:     32(ptr) AccessChain 24(data) 25 31 25
+              34:   13(ivec4) Load 33
+              36:   13(ivec4) GroupNonUniformIAdd 35 Reduce 34
+              37:     32(ptr) AccessChain 24(data) 25 29 25
+                              Store 37 36
+              38:     27(ptr) AccessChain 10(dti) 26
+              39:      6(int) Load 38
+              40:     27(ptr) AccessChain 10(dti) 26
+              41:      6(int) Load 40
+              43:     42(ptr) AccessChain 24(data) 25 41 25 26
+              44:      6(int) Load 43
+              45:      6(int) GroupNonUniformIAdd 35 Reduce 44
+              46:     42(ptr) AccessChain 24(data) 25 39 25 26
+                              Store 46 45
+              47:     27(ptr) AccessChain 10(dti) 26
+              48:      6(int) Load 47
+              49:     27(ptr) AccessChain 10(dti) 26
+              50:      6(int) Load 49
+              52:     32(ptr) AccessChain 24(data) 25 50 25
+              53:   13(ivec4) Load 52
+              54:   51(ivec2) VectorShuffle 53 53 0 1
+              55:   51(ivec2) GroupNonUniformIAdd 35 Reduce 54
+              56:     32(ptr) AccessChain 24(data) 25 48 25
+              57:   13(ivec4) Load 56
+              58:   13(ivec4) VectorShuffle 57 55 4 5 2 3
+                              Store 56 58
+              59:     27(ptr) AccessChain 10(dti) 26
+              60:      6(int) Load 59
+              61:     27(ptr) AccessChain 10(dti) 26
+              62:      6(int) Load 61
+              63:     32(ptr) AccessChain 24(data) 25 62 25
+              64:   13(ivec4) Load 63
+              65:    7(ivec3) VectorShuffle 64 64 0 1 2
+              66:    7(ivec3) GroupNonUniformIAdd 35 Reduce 65
+              67:     32(ptr) AccessChain 24(data) 25 60 25
+              68:   13(ivec4) Load 67
+              69:   13(ivec4) VectorShuffle 68 66 4 5 6 3
+                              Store 67 69
+              70:     27(ptr) AccessChain 10(dti) 26
+              71:      6(int) Load 70
+              73:     27(ptr) AccessChain 10(dti) 26
+              74:      6(int) Load 73
+              76:     75(ptr) AccessChain 24(data) 25 74 72
+              77:   15(ivec4) Load 76
+              78:   15(ivec4) GroupNonUniformIAdd 35 Reduce 77
+              79:     75(ptr) AccessChain 24(data) 25 71 72
+                              Store 79 78
+              80:     27(ptr) AccessChain 10(dti) 26
+              81:      6(int) Load 80
+              82:     27(ptr) AccessChain 10(dti) 26
+              83:      6(int) Load 82
+              85:     84(ptr) AccessChain 24(data) 25 83 72 26
+              86:     14(int) Load 85
+              87:     14(int) GroupNonUniformIAdd 35 Reduce 86
+              88:     84(ptr) AccessChain 24(data) 25 81 72 26
+                              Store 88 87
+              89:     27(ptr) AccessChain 10(dti) 26
+              90:      6(int) Load 89
+              91:     27(ptr) AccessChain 10(dti) 26
+              92:      6(int) Load 91
+              94:     75(ptr) AccessChain 24(data) 25 92 72
+              95:   15(ivec4) Load 94
+              96:   93(ivec2) VectorShuffle 95 95 0 1
+              97:   93(ivec2) GroupNonUniformIAdd 35 Reduce 96
+              98:     75(ptr) AccessChain 24(data) 25 90 72
+              99:   15(ivec4) Load 98
+             100:   15(ivec4) VectorShuffle 99 97 4 5 2 3
+                              Store 98 100
+             101:     27(ptr) AccessChain 10(dti) 26
+             102:      6(int) Load 101
+             103:     27(ptr) AccessChain 10(dti) 26
+             104:      6(int) Load 103
+             106:     75(ptr) AccessChain 24(data) 25 104 72
+             107:   15(ivec4) Load 106
+             108:  105(ivec3) VectorShuffle 107 107 0 1 2
+             109:  105(ivec3) GroupNonUniformIAdd 35 Reduce 108
+             110:     75(ptr) AccessChain 24(data) 25 102 72
+             111:   15(ivec4) Load 110
+             112:   15(ivec4) VectorShuffle 111 109 4 5 6 3
+                              Store 110 112
+             113:     27(ptr) AccessChain 10(dti) 26
+             114:      6(int) Load 113
+             116:     27(ptr) AccessChain 10(dti) 26
+             117:      6(int) Load 116
+             119:    118(ptr) AccessChain 24(data) 25 117 115
+             120:   17(fvec4) Load 119
+             121:   17(fvec4) GroupNonUniformFAdd 35 Reduce 120
+             122:    118(ptr) AccessChain 24(data) 25 114 115
+                              Store 122 121
+             123:     27(ptr) AccessChain 10(dti) 26
+             124:      6(int) Load 123
+             125:     27(ptr) AccessChain 10(dti) 26
+             126:      6(int) Load 125
+             128:    127(ptr) AccessChain 24(data) 25 126 115 26
+             129:   16(float) Load 128
+             130:   16(float) GroupNonUniformFAdd 35 Reduce 129
+             131:    127(ptr) AccessChain 24(data) 25 124 115 26
+                              Store 131 130
+             132:     27(ptr) AccessChain 10(dti) 26
+             133:      6(int) Load 132
+             134:     27(ptr) AccessChain 10(dti) 26
+             135:      6(int) Load 134
+             137:    118(ptr) AccessChain 24(data) 25 135 115
+             138:   17(fvec4) Load 137
+             139:  136(fvec2) VectorShuffle 138 138 0 1
+             140:  136(fvec2) GroupNonUniformFAdd 35 Reduce 139
+             141:    118(ptr) AccessChain 24(data) 25 133 115
+             142:   17(fvec4) Load 141
+             143:   17(fvec4) VectorShuffle 142 140 4 5 2 3
+                              Store 141 143
+             144:     27(ptr) AccessChain 10(dti) 26
+             145:      6(int) Load 144
+             146:     27(ptr) AccessChain 10(dti) 26
+             147:      6(int) Load 146
+             149:    118(ptr) AccessChain 24(data) 25 147 115
+             150:   17(fvec4) Load 149
+             151:  148(fvec3) VectorShuffle 150 150 0 1 2
+             152:  148(fvec3) GroupNonUniformFAdd 35 Reduce 151
+             153:    118(ptr) AccessChain 24(data) 25 145 115
+             154:   17(fvec4) Load 153
+             155:   17(fvec4) VectorShuffle 154 152 4 5 6 3
+                              Store 153 155
+             156:     27(ptr) AccessChain 10(dti) 26
+             157:      6(int) Load 156
+             159:     27(ptr) AccessChain 10(dti) 26
+             160:      6(int) Load 159
+             162:    161(ptr) AccessChain 24(data) 25 160 158
+             163:   19(fvec4) Load 162
+             164:   19(fvec4) GroupNonUniformFAdd 35 Reduce 163
+             165:    161(ptr) AccessChain 24(data) 25 157 158
+                              Store 165 164
+             166:     27(ptr) AccessChain 10(dti) 26
+             167:      6(int) Load 166
+             168:     27(ptr) AccessChain 10(dti) 26
+             169:      6(int) Load 168
+             171:    170(ptr) AccessChain 24(data) 25 169 158 26
+             172:   18(float) Load 171
+             173:   18(float) GroupNonUniformFAdd 35 Reduce 172
+             174:    170(ptr) AccessChain 24(data) 25 167 158 26
+                              Store 174 173
+             175:     27(ptr) AccessChain 10(dti) 26
+             176:      6(int) Load 175
+             177:     27(ptr) AccessChain 10(dti) 26
+             178:      6(int) Load 177
+             180:    161(ptr) AccessChain 24(data) 25 178 158
+             181:   19(fvec4) Load 180
+             182:  179(fvec2) VectorShuffle 181 181 0 1
+             183:  179(fvec2) GroupNonUniformFAdd 35 Reduce 182
+             184:    161(ptr) AccessChain 24(data) 25 176 158
+             185:   19(fvec4) Load 184
+             186:   19(fvec4) VectorShuffle 185 183 4 5 2 3
+                              Store 184 186
+             187:     27(ptr) AccessChain 10(dti) 26
+             188:      6(int) Load 187
+             189:     27(ptr) AccessChain 10(dti) 26
+             190:      6(int) Load 189
+             192:    161(ptr) AccessChain 24(data) 25 190 158
+             193:   19(fvec4) Load 192
+             194:  191(fvec3) VectorShuffle 193 193 0 1 2
+             195:  191(fvec3) GroupNonUniformFAdd 35 Reduce 194
+             196:    161(ptr) AccessChain 24(data) 25 188 158
+             197:   19(fvec4) Load 196
+             198:   19(fvec4) VectorShuffle 197 195 4 5 6 3
+                              Store 196 198
+             199:     27(ptr) AccessChain 10(dti) 26
+             200:      6(int) Load 199
+             201:     27(ptr) AccessChain 10(dti) 26
+             202:      6(int) Load 201
+             203:     32(ptr) AccessChain 24(data) 25 202 25
+             204:   13(ivec4) Load 203
+             205:   13(ivec4) GroupNonUniformIMul 35 Reduce 204
+             206:     32(ptr) AccessChain 24(data) 25 200 25
+                              Store 206 205
+             207:     27(ptr) AccessChain 10(dti) 26
+             208:      6(int) Load 207
+             209:     27(ptr) AccessChain 10(dti) 26
+             210:      6(int) Load 209
+             211:     42(ptr) AccessChain 24(data) 25 210 25 26
+             212:      6(int) Load 211
+             213:      6(int) GroupNonUniformIMul 35 Reduce 212
+             214:     42(ptr) AccessChain 24(data) 25 208 25 26
+                              Store 214 213
+             215:     27(ptr) AccessChain 10(dti) 26
+             216:      6(int) Load 215
+             217:     27(ptr) AccessChain 10(dti) 26
+             218:      6(int) Load 217
+             219:     32(ptr) AccessChain 24(data) 25 218 25
+             220:   13(ivec4) Load 219
+             221:   51(ivec2) VectorShuffle 220 220 0 1
+             222:   51(ivec2) GroupNonUniformIMul 35 Reduce 221
+             223:     32(ptr) AccessChain 24(data) 25 216 25
+             224:   13(ivec4) Load 223
+             225:   13(ivec4) VectorShuffle 224 222 4 5 2 3
+                              Store 223 225
+             226:     27(ptr) AccessChain 10(dti) 26
+             227:      6(int) Load 226
+             228:     27(ptr) AccessChain 10(dti) 26
+             229:      6(int) Load 228
+             230:     32(ptr) AccessChain 24(data) 25 229 25
+             231:   13(ivec4) Load 230
+             232:    7(ivec3) VectorShuffle 231 231 0 1 2
+             233:    7(ivec3) GroupNonUniformIMul 35 Reduce 232
+             234:     32(ptr) AccessChain 24(data) 25 227 25
+             235:   13(ivec4) Load 234
+             236:   13(ivec4) VectorShuffle 235 233 4 5 6 3
+                              Store 234 236
+             237:     27(ptr) AccessChain 10(dti) 26
+             238:      6(int) Load 237
+             239:     27(ptr) AccessChain 10(dti) 26
+             240:      6(int) Load 239
+             241:     75(ptr) AccessChain 24(data) 25 240 72
+             242:   15(ivec4) Load 241
+             243:   15(ivec4) GroupNonUniformIMul 35 Reduce 242
+             244:     75(ptr) AccessChain 24(data) 25 238 72
+                              Store 244 243
+             245:     27(ptr) AccessChain 10(dti) 26
+             246:      6(int) Load 245
+             247:     27(ptr) AccessChain 10(dti) 26
+             248:      6(int) Load 247
+             249:     84(ptr) AccessChain 24(data) 25 248 72 26
+             250:     14(int) Load 249
+             251:     14(int) GroupNonUniformIMul 35 Reduce 250
+             252:     84(ptr) AccessChain 24(data) 25 246 72 26
+                              Store 252 251
+             253:     27(ptr) AccessChain 10(dti) 26
+             254:      6(int) Load 253
+             255:     27(ptr) AccessChain 10(dti) 26
+             256:      6(int) Load 255
+             257:     75(ptr) AccessChain 24(data) 25 256 72
+             258:   15(ivec4) Load 257
+             259:   93(ivec2) VectorShuffle 258 258 0 1
+             260:   93(ivec2) GroupNonUniformIMul 35 Reduce 259
+             261:     75(ptr) AccessChain 24(data) 25 254 72
+             262:   15(ivec4) Load 261
+             263:   15(ivec4) VectorShuffle 262 260 4 5 2 3
+                              Store 261 263
+             264:     27(ptr) AccessChain 10(dti) 26
+             265:      6(int) Load 264
+             266:     27(ptr) AccessChain 10(dti) 26
+             267:      6(int) Load 266
+             268:     75(ptr) AccessChain 24(data) 25 267 72
+             269:   15(ivec4) Load 268
+             270:  105(ivec3) VectorShuffle 269 269 0 1 2
+             271:  105(ivec3) GroupNonUniformIMul 35 Reduce 270
+             272:     75(ptr) AccessChain 24(data) 25 265 72
+             273:   15(ivec4) Load 272
+             274:   15(ivec4) VectorShuffle 273 271 4 5 6 3
+                              Store 272 274
+             275:     27(ptr) AccessChain 10(dti) 26
+             276:      6(int) Load 275
+             277:     27(ptr) AccessChain 10(dti) 26
+             278:      6(int) Load 277
+             279:    118(ptr) AccessChain 24(data) 25 278 115
+             280:   17(fvec4) Load 279
+             281:   17(fvec4) GroupNonUniformFMul 35 Reduce 280
+             282:    118(ptr) AccessChain 24(data) 25 276 115
+                              Store 282 281
+             283:     27(ptr) AccessChain 10(dti) 26
+             284:      6(int) Load 283
+             285:     27(ptr) AccessChain 10(dti) 26
+             286:      6(int) Load 285
+             287:    127(ptr) AccessChain 24(data) 25 286 115 26
+             288:   16(float) Load 287
+             289:   16(float) GroupNonUniformFMul 35 Reduce 288
+             290:    127(ptr) AccessChain 24(data) 25 284 115 26
+                              Store 290 289
+             291:     27(ptr) AccessChain 10(dti) 26
+             292:      6(int) Load 291
+             293:     27(ptr) AccessChain 10(dti) 26
+             294:      6(int) Load 293
+             295:    118(ptr) AccessChain 24(data) 25 294 115
+             296:   17(fvec4) Load 295
+             297:  136(fvec2) VectorShuffle 296 296 0 1
+             298:  136(fvec2) GroupNonUniformFMul 35 Reduce 297
+             299:    118(ptr) AccessChain 24(data) 25 292 115
+             300:   17(fvec4) Load 299
+             301:   17(fvec4) VectorShuffle 300 298 4 5 2 3
+                              Store 299 301
+             302:     27(ptr) AccessChain 10(dti) 26
+             303:      6(int) Load 302
+             304:     27(ptr) AccessChain 10(dti) 26
+             305:      6(int) Load 304
+             306:    118(ptr) AccessChain 24(data) 25 305 115
+             307:   17(fvec4) Load 306
+             308:  148(fvec3) VectorShuffle 307 307 0 1 2
+             309:  148(fvec3) GroupNonUniformFMul 35 Reduce 308
+             310:    118(ptr) AccessChain 24(data) 25 303 115
+             311:   17(fvec4) Load 310
+             312:   17(fvec4) VectorShuffle 311 309 4 5 6 3
+                              Store 310 312
+             313:     27(ptr) AccessChain 10(dti) 26
+             314:      6(int) Load 313
+             315:     27(ptr) AccessChain 10(dti) 26
+             316:      6(int) Load 315
+             317:    161(ptr) AccessChain 24(data) 25 316 158
+             318:   19(fvec4) Load 317
+             319:   19(fvec4) GroupNonUniformFMul 35 Reduce 318
+             320:    161(ptr) AccessChain 24(data) 25 314 158
+                              Store 320 319
+             321:     27(ptr) AccessChain 10(dti) 26
+             322:      6(int) Load 321
+             323:     27(ptr) AccessChain 10(dti) 26
+             324:      6(int) Load 323
+             325:    170(ptr) AccessChain 24(data) 25 324 158 26
+             326:   18(float) Load 325
+             327:   18(float) GroupNonUniformFMul 35 Reduce 326
+             328:    170(ptr) AccessChain 24(data) 25 322 158 26
+                              Store 328 327
+             329:     27(ptr) AccessChain 10(dti) 26
+             330:      6(int) Load 329
+             331:     27(ptr) AccessChain 10(dti) 26
+             332:      6(int) Load 331
+             333:    161(ptr) AccessChain 24(data) 25 332 158
+             334:   19(fvec4) Load 333
+             335:  179(fvec2) VectorShuffle 334 334 0 1
+             336:  179(fvec2) GroupNonUniformFMul 35 Reduce 335
+             337:    161(ptr) AccessChain 24(data) 25 330 158
+             338:   19(fvec4) Load 337
+             339:   19(fvec4) VectorShuffle 338 336 4 5 2 3
+                              Store 337 339
+             340:     27(ptr) AccessChain 10(dti) 26
+             341:      6(int) Load 340
+             342:     27(ptr) AccessChain 10(dti) 26
+             343:      6(int) Load 342
+             344:    161(ptr) AccessChain 24(data) 25 343 158
+             345:   19(fvec4) Load 344
+             346:  191(fvec3) VectorShuffle 345 345 0 1 2
+             347:  191(fvec3) GroupNonUniformFMul 35 Reduce 346
+             348:    161(ptr) AccessChain 24(data) 25 341 158
+             349:   19(fvec4) Load 348
+             350:   19(fvec4) VectorShuffle 349 347 4 5 6 3
+                              Store 348 350
+             351:     27(ptr) AccessChain 10(dti) 26
+             352:      6(int) Load 351
+             353:     27(ptr) AccessChain 10(dti) 26
+             354:      6(int) Load 353
+             355:     32(ptr) AccessChain 24(data) 25 354 25
+             356:   13(ivec4) Load 355
+             357:   13(ivec4) GroupNonUniformUMin 35 Reduce 356
+             358:     32(ptr) AccessChain 24(data) 25 352 25
+                              Store 358 357
+             359:     27(ptr) AccessChain 10(dti) 26
+             360:      6(int) Load 359
+             361:     27(ptr) AccessChain 10(dti) 26
+             362:      6(int) Load 361
+             363:     42(ptr) AccessChain 24(data) 25 362 25 26
+             364:      6(int) Load 363
+             365:      6(int) GroupNonUniformUMin 35 Reduce 364
+             366:     42(ptr) AccessChain 24(data) 25 360 25 26
+                              Store 366 365
+             367:     27(ptr) AccessChain 10(dti) 26
+             368:      6(int) Load 367
+             369:     27(ptr) AccessChain 10(dti) 26
+             370:      6(int) Load 369
+             371:     32(ptr) AccessChain 24(data) 25 370 25
+             372:   13(ivec4) Load 371
+             373:   51(ivec2) VectorShuffle 372 372 0 1
+             374:   51(ivec2) GroupNonUniformUMin 35 Reduce 373
+             375:     32(ptr) AccessChain 24(data) 25 368 25
+             376:   13(ivec4) Load 375
+             377:   13(ivec4) VectorShuffle 376 374 4 5 2 3
+                              Store 375 377
+             378:     27(ptr) AccessChain 10(dti) 26
+             379:      6(int) Load 378
+             380:     27(ptr) AccessChain 10(dti) 26
+             381:      6(int) Load 380
+             382:     32(ptr) AccessChain 24(data) 25 381 25
+             383:   13(ivec4) Load 382
+             384:    7(ivec3) VectorShuffle 383 383 0 1 2
+             385:    7(ivec3) GroupNonUniformUMin 35 Reduce 384
+             386:     32(ptr) AccessChain 24(data) 25 379 25
+             387:   13(ivec4) Load 386
+             388:   13(ivec4) VectorShuffle 387 385 4 5 6 3
+                              Store 386 388
+             389:     27(ptr) AccessChain 10(dti) 26
+             390:      6(int) Load 389
+             391:     27(ptr) AccessChain 10(dti) 26
+             392:      6(int) Load 391
+             393:     75(ptr) AccessChain 24(data) 25 392 72
+             394:   15(ivec4) Load 393
+             395:   15(ivec4) GroupNonUniformSMin 35 Reduce 394
+             396:     75(ptr) AccessChain 24(data) 25 390 72
+                              Store 396 395
+             397:     27(ptr) AccessChain 10(dti) 26
+             398:      6(int) Load 397
+             399:     27(ptr) AccessChain 10(dti) 26
+             400:      6(int) Load 399
+             401:     84(ptr) AccessChain 24(data) 25 400 72 26
+             402:     14(int) Load 401
+             403:     14(int) GroupNonUniformSMin 35 Reduce 402
+             404:     84(ptr) AccessChain 24(data) 25 398 72 26
+                              Store 404 403
+             405:     27(ptr) AccessChain 10(dti) 26
+             406:      6(int) Load 405
+             407:     27(ptr) AccessChain 10(dti) 26
+             408:      6(int) Load 407
+             409:     75(ptr) AccessChain 24(data) 25 408 72
+             410:   15(ivec4) Load 409
+             411:   93(ivec2) VectorShuffle 410 410 0 1
+             412:   93(ivec2) GroupNonUniformSMin 35 Reduce 411
+             413:     75(ptr) AccessChain 24(data) 25 406 72
+             414:   15(ivec4) Load 413
+             415:   15(ivec4) VectorShuffle 414 412 4 5 2 3
+                              Store 413 415
+             416:     27(ptr) AccessChain 10(dti) 26
+             417:      6(int) Load 416
+             418:     27(ptr) AccessChain 10(dti) 26
+             419:      6(int) Load 418
+             420:     75(ptr) AccessChain 24(data) 25 419 72
+             421:   15(ivec4) Load 420
+             422:  105(ivec3) VectorShuffle 421 421 0 1 2
+             423:  105(ivec3) GroupNonUniformSMin 35 Reduce 422
+             424:     75(ptr) AccessChain 24(data) 25 417 72
+             425:   15(ivec4) Load 424
+             426:   15(ivec4) VectorShuffle 425 423 4 5 6 3
+                              Store 424 426
+             427:     27(ptr) AccessChain 10(dti) 26
+             428:      6(int) Load 427
+             429:     27(ptr) AccessChain 10(dti) 26
+             430:      6(int) Load 429
+             431:    118(ptr) AccessChain 24(data) 25 430 115
+             432:   17(fvec4) Load 431
+             433:   17(fvec4) GroupNonUniformFMin 35 Reduce 432
+             434:    118(ptr) AccessChain 24(data) 25 428 115
+                              Store 434 433
+             435:     27(ptr) AccessChain 10(dti) 26
+             436:      6(int) Load 435
+             437:     27(ptr) AccessChain 10(dti) 26
+             438:      6(int) Load 437
+             439:    127(ptr) AccessChain 24(data) 25 438 115 26
+             440:   16(float) Load 439
+             441:   16(float) GroupNonUniformFMin 35 Reduce 440
+             442:    127(ptr) AccessChain 24(data) 25 436 115 26
+                              Store 442 441
+             443:     27(ptr) AccessChain 10(dti) 26
+             444:      6(int) Load 443
+             445:     27(ptr) AccessChain 10(dti) 26
+             446:      6(int) Load 445
+             447:    118(ptr) AccessChain 24(data) 25 446 115
+             448:   17(fvec4) Load 447
+             449:  136(fvec2) VectorShuffle 448 448 0 1
+             450:  136(fvec2) GroupNonUniformFMin 35 Reduce 449
+             451:    118(ptr) AccessChain 24(data) 25 444 115
+             452:   17(fvec4) Load 451
+             453:   17(fvec4) VectorShuffle 452 450 4 5 2 3
+                              Store 451 453
+             454:     27(ptr) AccessChain 10(dti) 26
+             455:      6(int) Load 454
+             456:     27(ptr) AccessChain 10(dti) 26
+             457:      6(int) Load 456
+             458:    118(ptr) AccessChain 24(data) 25 457 115
+             459:   17(fvec4) Load 458
+             460:  148(fvec3) VectorShuffle 459 459 0 1 2
+             461:  148(fvec3) GroupNonUniformFMin 35 Reduce 460
+             462:    118(ptr) AccessChain 24(data) 25 455 115
+             463:   17(fvec4) Load 462
+             464:   17(fvec4) VectorShuffle 463 461 4 5 6 3
+                              Store 462 464
+             465:     27(ptr) AccessChain 10(dti) 26
+             466:      6(int) Load 465
+             467:     27(ptr) AccessChain 10(dti) 26
+             468:      6(int) Load 467
+             469:    161(ptr) AccessChain 24(data) 25 468 158
+             470:   19(fvec4) Load 469
+             471:   19(fvec4) GroupNonUniformFMin 35 Reduce 470
+             472:    161(ptr) AccessChain 24(data) 25 466 158
+                              Store 472 471
+             473:     27(ptr) AccessChain 10(dti) 26
+             474:      6(int) Load 473
+             475:     27(ptr) AccessChain 10(dti) 26
+             476:      6(int) Load 475
+             477:    170(ptr) AccessChain 24(data) 25 476 158 26
+             478:   18(float) Load 477
+             479:   18(float) GroupNonUniformFMin 35 Reduce 478
+             480:    170(ptr) AccessChain 24(data) 25 474 158 26
+                              Store 480 479
+             481:     27(ptr) AccessChain 10(dti) 26
+             482:      6(int) Load 481
+             483:     27(ptr) AccessChain 10(dti) 26
+             484:      6(int) Load 483
+             485:    161(ptr) AccessChain 24(data) 25 484 158
+             486:   19(fvec4) Load 485
+             487:  179(fvec2) VectorShuffle 486 486 0 1
+             488:  179(fvec2) GroupNonUniformFMin 35 Reduce 487
+             489:    161(ptr) AccessChain 24(data) 25 482 158
+             490:   19(fvec4) Load 489
+             491:   19(fvec4) VectorShuffle 490 488 4 5 2 3
+                              Store 489 491
+             492:     27(ptr) AccessChain 10(dti) 26
+             493:      6(int) Load 492
+             494:     27(ptr) AccessChain 10(dti) 26
+             495:      6(int) Load 494
+             496:    161(ptr) AccessChain 24(data) 25 495 158
+             497:   19(fvec4) Load 496
+             498:  191(fvec3) VectorShuffle 497 497 0 1 2
+             499:  191(fvec3) GroupNonUniformFMin 35 Reduce 498
+             500:    161(ptr) AccessChain 24(data) 25 493 158
+             501:   19(fvec4) Load 500
+             502:   19(fvec4) VectorShuffle 501 499 4 5 6 3
+                              Store 500 502
+             503:     27(ptr) AccessChain 10(dti) 26
+             504:      6(int) Load 503
+             505:     27(ptr) AccessChain 10(dti) 26
+             506:      6(int) Load 505
+             507:     32(ptr) AccessChain 24(data) 25 506 25
+             508:   13(ivec4) Load 507
+             509:   13(ivec4) GroupNonUniformUMax 35 Reduce 508
+             510:     32(ptr) AccessChain 24(data) 25 504 25
+                              Store 510 509
+             511:     27(ptr) AccessChain 10(dti) 26
+             512:      6(int) Load 511
+             513:     27(ptr) AccessChain 10(dti) 26
+             514:      6(int) Load 513
+             515:     42(ptr) AccessChain 24(data) 25 514 25 26
+             516:      6(int) Load 515
+             517:      6(int) GroupNonUniformUMax 35 Reduce 516
+             518:     42(ptr) AccessChain 24(data) 25 512 25 26
+                              Store 518 517
+             519:     27(ptr) AccessChain 10(dti) 26
+             520:      6(int) Load 519
+             521:     27(ptr) AccessChain 10(dti) 26
+             522:      6(int) Load 521
+             523:     32(ptr) AccessChain 24(data) 25 522 25
+             524:   13(ivec4) Load 523
+             525:   51(ivec2) VectorShuffle 524 524 0 1
+             526:   51(ivec2) GroupNonUniformUMax 35 Reduce 525
+             527:     32(ptr) AccessChain 24(data) 25 520 25
+             528:   13(ivec4) Load 527
+             529:   13(ivec4) VectorShuffle 528 526 4 5 2 3
+                              Store 527 529
+             530:     27(ptr) AccessChain 10(dti) 26
+             531:      6(int) Load 530
+             532:     27(ptr) AccessChain 10(dti) 26
+             533:      6(int) Load 532
+             534:     32(ptr) AccessChain 24(data) 25 533 25
+             535:   13(ivec4) Load 534
+             536:    7(ivec3) VectorShuffle 535 535 0 1 2
+             537:    7(ivec3) GroupNonUniformUMax 35 Reduce 536
+             538:     32(ptr) AccessChain 24(data) 25 531 25
+             539:   13(ivec4) Load 538
+             540:   13(ivec4) VectorShuffle 539 537 4 5 6 3
+                              Store 538 540
+             541:     27(ptr) AccessChain 10(dti) 26
+             542:      6(int) Load 541
+             543:     27(ptr) AccessChain 10(dti) 26
+             544:      6(int) Load 543
+             545:     75(ptr) AccessChain 24(data) 25 544 72
+             546:   15(ivec4) Load 545
+             547:   15(ivec4) GroupNonUniformSMax 35 Reduce 546
+             548:     75(ptr) AccessChain 24(data) 25 542 72
+                              Store 548 547
+             549:     27(ptr) AccessChain 10(dti) 26
+             550:      6(int) Load 549
+             551:     27(ptr) AccessChain 10(dti) 26
+             552:      6(int) Load 551
+             553:     84(ptr) AccessChain 24(data) 25 552 72 26
+             554:     14(int) Load 553
+             555:     14(int) GroupNonUniformSMax 35 Reduce 554
+             556:     84(ptr) AccessChain 24(data) 25 550 72 26
+                              Store 556 555
+             557:     27(ptr) AccessChain 10(dti) 26
+             558:      6(int) Load 557
+             559:     27(ptr) AccessChain 10(dti) 26
+             560:      6(int) Load 559
+             561:     75(ptr) AccessChain 24(data) 25 560 72
+             562:   15(ivec4) Load 561
+             563:   93(ivec2) VectorShuffle 562 562 0 1
+             564:   93(ivec2) GroupNonUniformSMax 35 Reduce 563
+             565:     75(ptr) AccessChain 24(data) 25 558 72
+             566:   15(ivec4) Load 565
+             567:   15(ivec4) VectorShuffle 566 564 4 5 2 3
+                              Store 565 567
+             568:     27(ptr) AccessChain 10(dti) 26
+             569:      6(int) Load 568
+             570:     27(ptr) AccessChain 10(dti) 26
+             571:      6(int) Load 570
+             572:     75(ptr) AccessChain 24(data) 25 571 72
+             573:   15(ivec4) Load 572
+             574:  105(ivec3) VectorShuffle 573 573 0 1 2
+             575:  105(ivec3) GroupNonUniformSMax 35 Reduce 574
+             576:     75(ptr) AccessChain 24(data) 25 569 72
+             577:   15(ivec4) Load 576
+             578:   15(ivec4) VectorShuffle 577 575 4 5 6 3
+                              Store 576 578
+             579:     27(ptr) AccessChain 10(dti) 26
+             580:      6(int) Load 579
+             581:     27(ptr) AccessChain 10(dti) 26
+             582:      6(int) Load 581
+             583:    118(ptr) AccessChain 24(data) 25 582 115
+             584:   17(fvec4) Load 583
+             585:   17(fvec4) GroupNonUniformFMax 35 Reduce 584
+             586:    118(ptr) AccessChain 24(data) 25 580 115
+                              Store 586 585
+             587:     27(ptr) AccessChain 10(dti) 26
+             588:      6(int) Load 587
+             589:     27(ptr) AccessChain 10(dti) 26
+             590:      6(int) Load 589
+             591:    127(ptr) AccessChain 24(data) 25 590 115 26
+             592:   16(float) Load 591
+             593:   16(float) GroupNonUniformFMax 35 Reduce 592
+             594:    127(ptr) AccessChain 24(data) 25 588 115 26
+                              Store 594 593
+             595:     27(ptr) AccessChain 10(dti) 26
+             596:      6(int) Load 595
+             597:     27(ptr) AccessChain 10(dti) 26
+             598:      6(int) Load 597
+             599:    118(ptr) AccessChain 24(data) 25 598 115
+             600:   17(fvec4) Load 599
+             601:  136(fvec2) VectorShuffle 600 600 0 1
+             602:  136(fvec2) GroupNonUniformFMax 35 Reduce 601
+             603:    118(ptr) AccessChain 24(data) 25 596 115
+             604:   17(fvec4) Load 603
+             605:   17(fvec4) VectorShuffle 604 602 4 5 2 3
+                              Store 603 605
+             606:     27(ptr) AccessChain 10(dti) 26
+             607:      6(int) Load 606
+             608:     27(ptr) AccessChain 10(dti) 26
+             609:      6(int) Load 608
+             610:    118(ptr) AccessChain 24(data) 25 609 115
+             611:   17(fvec4) Load 610
+             612:  148(fvec3) VectorShuffle 611 611 0 1 2
+             613:  148(fvec3) GroupNonUniformFMax 35 Reduce 612
+             614:    118(ptr) AccessChain 24(data) 25 607 115
+             615:   17(fvec4) Load 614
+             616:   17(fvec4) VectorShuffle 615 613 4 5 6 3
+                              Store 614 616
+             617:     27(ptr) AccessChain 10(dti) 26
+             618:      6(int) Load 617
+             619:     27(ptr) AccessChain 10(dti) 26
+             620:      6(int) Load 619
+             621:    161(ptr) AccessChain 24(data) 25 620 158
+             622:   19(fvec4) Load 621
+             623:   19(fvec4) GroupNonUniformFMax 35 Reduce 622
+             624:    161(ptr) AccessChain 24(data) 25 618 158
+                              Store 624 623
+             625:     27(ptr) AccessChain 10(dti) 26
+             626:      6(int) Load 625
+             627:     27(ptr) AccessChain 10(dti) 26
+             628:      6(int) Load 627
+             629:    170(ptr) AccessChain 24(data) 25 628 158 26
+             630:   18(float) Load 629
+             631:   18(float) GroupNonUniformFMax 35 Reduce 630
+             632:    170(ptr) AccessChain 24(data) 25 626 158 26
+                              Store 632 631
+             633:     27(ptr) AccessChain 10(dti) 26
+             634:      6(int) Load 633
+             635:     27(ptr) AccessChain 10(dti) 26
+             636:      6(int) Load 635
+             637:    161(ptr) AccessChain 24(data) 25 636 158
+             638:   19(fvec4) Load 637
+             639:  179(fvec2) VectorShuffle 638 638 0 1
+             640:  179(fvec2) GroupNonUniformFMax 35 Reduce 639
+             641:    161(ptr) AccessChain 24(data) 25 634 158
+             642:   19(fvec4) Load 641
+             643:   19(fvec4) VectorShuffle 642 640 4 5 2 3
+                              Store 641 643
+             644:     27(ptr) AccessChain 10(dti) 26
+             645:      6(int) Load 644
+             646:     27(ptr) AccessChain 10(dti) 26
+             647:      6(int) Load 646
+             648:    161(ptr) AccessChain 24(data) 25 647 158
+             649:   19(fvec4) Load 648
+             650:  191(fvec3) VectorShuffle 649 649 0 1 2
+             651:  191(fvec3) GroupNonUniformFMax 35 Reduce 650
+             652:    161(ptr) AccessChain 24(data) 25 645 158
+             653:   19(fvec4) Load 652
+             654:   19(fvec4) VectorShuffle 653 651 4 5 6 3
+                              Store 652 654
+             655:     27(ptr) AccessChain 10(dti) 26
+             656:      6(int) Load 655
+             657:     27(ptr) AccessChain 10(dti) 26
+             658:      6(int) Load 657
+             659:     32(ptr) AccessChain 24(data) 25 658 25
+             660:   13(ivec4) Load 659
+             661:   13(ivec4) GroupNonUniformBitwiseAnd 35 Reduce 660
+             662:     32(ptr) AccessChain 24(data) 25 656 25
+                              Store 662 661
+             663:     27(ptr) AccessChain 10(dti) 26
+             664:      6(int) Load 663
+             665:     27(ptr) AccessChain 10(dti) 26
+             666:      6(int) Load 665
+             667:     42(ptr) AccessChain 24(data) 25 666 25 26
+             668:      6(int) Load 667
+             669:      6(int) GroupNonUniformBitwiseAnd 35 Reduce 668
+             670:     42(ptr) AccessChain 24(data) 25 664 25 26
+                              Store 670 669
+             671:     27(ptr) AccessChain 10(dti) 26
+             672:      6(int) Load 671
+             673:     27(ptr) AccessChain 10(dti) 26
+             674:      6(int) Load 673
+             675:     32(ptr) AccessChain 24(data) 25 674 25
+             676:   13(ivec4) Load 675
+             677:   51(ivec2) VectorShuffle 676 676 0 1
+             678:   51(ivec2) GroupNonUniformBitwiseAnd 35 Reduce 677
+             679:     32(ptr) AccessChain 24(data) 25 672 25
+             680:   13(ivec4) Load 679
+             681:   13(ivec4) VectorShuffle 680 678 4 5 2 3
+                              Store 679 681
+             682:     27(ptr) AccessChain 10(dti) 26
+             683:      6(int) Load 682
+             684:     27(ptr) AccessChain 10(dti) 26
+             685:      6(int) Load 684
+             686:     32(ptr) AccessChain 24(data) 25 685 25
+             687:   13(ivec4) Load 686
+             688:    7(ivec3) VectorShuffle 687 687 0 1 2
+             689:    7(ivec3) GroupNonUniformBitwiseAnd 35 Reduce 688
+             690:     32(ptr) AccessChain 24(data) 25 683 25
+             691:   13(ivec4) Load 690
+             692:   13(ivec4) VectorShuffle 691 689 4 5 6 3
+                              Store 690 692
+             693:     27(ptr) AccessChain 10(dti) 26
+             694:      6(int) Load 693
+             695:     27(ptr) AccessChain 10(dti) 26
+             696:      6(int) Load 695
+             697:     75(ptr) AccessChain 24(data) 25 696 72
+             698:   15(ivec4) Load 697
+             699:   15(ivec4) GroupNonUniformBitwiseAnd 35 Reduce 698
+             700:     75(ptr) AccessChain 24(data) 25 694 72
+                              Store 700 699
+             701:     27(ptr) AccessChain 10(dti) 26
+             702:      6(int) Load 701
+             703:     27(ptr) AccessChain 10(dti) 26
+             704:      6(int) Load 703
+             705:     84(ptr) AccessChain 24(data) 25 704 72 26
+             706:     14(int) Load 705
+             707:     14(int) GroupNonUniformBitwiseAnd 35 Reduce 706
+             708:     84(ptr) AccessChain 24(data) 25 702 72 26
+                              Store 708 707
+             709:     27(ptr) AccessChain 10(dti) 26
+             710:      6(int) Load 709
+             711:     27(ptr) AccessChain 10(dti) 26
+             712:      6(int) Load 711
+             713:     75(ptr) AccessChain 24(data) 25 712 72
+             714:   15(ivec4) Load 713
+             715:   93(ivec2) VectorShuffle 714 714 0 1
+             716:   93(ivec2) GroupNonUniformBitwiseAnd 35 Reduce 715
+             717:     75(ptr) AccessChain 24(data) 25 710 72
+             718:   15(ivec4) Load 717
+             719:   15(ivec4) VectorShuffle 718 716 4 5 2 3
+                              Store 717 719
+             720:     27(ptr) AccessChain 10(dti) 26
+             721:      6(int) Load 720
+             722:     27(ptr) AccessChain 10(dti) 26
+             723:      6(int) Load 722
+             724:     75(ptr) AccessChain 24(data) 25 723 72
+             725:   15(ivec4) Load 724
+             726:  105(ivec3) VectorShuffle 725 725 0 1 2
+             727:  105(ivec3) GroupNonUniformBitwiseAnd 35 Reduce 726
+             728:     75(ptr) AccessChain 24(data) 25 721 72
+             729:   15(ivec4) Load 728
+             730:   15(ivec4) VectorShuffle 729 727 4 5 6 3
+                              Store 728 730
+             731:     27(ptr) AccessChain 10(dti) 26
+             732:      6(int) Load 731
+             733:     27(ptr) AccessChain 10(dti) 26
+             734:      6(int) Load 733
+             735:     32(ptr) AccessChain 24(data) 25 734 25
+             736:   13(ivec4) Load 735
+             737:   13(ivec4) GroupNonUniformBitwiseOr 35 Reduce 736
+             738:     32(ptr) AccessChain 24(data) 25 732 25
+                              Store 738 737
+             739:     27(ptr) AccessChain 10(dti) 26
+             740:      6(int) Load 739
+             741:     27(ptr) AccessChain 10(dti) 26
+             742:      6(int) Load 741
+             743:     42(ptr) AccessChain 24(data) 25 742 25 26
+             744:      6(int) Load 743
+             745:      6(int) GroupNonUniformBitwiseOr 35 Reduce 744
+             746:     42(ptr) AccessChain 24(data) 25 740 25 26
+                              Store 746 745
+             747:     27(ptr) AccessChain 10(dti) 26
+             748:      6(int) Load 747
+             749:     27(ptr) AccessChain 10(dti) 26
+             750:      6(int) Load 749
+             751:     32(ptr) AccessChain 24(data) 25 750 25
+             752:   13(ivec4) Load 751
+             753:   51(ivec2) VectorShuffle 752 752 0 1
+             754:   51(ivec2) GroupNonUniformBitwiseOr 35 Reduce 753
+             755:     32(ptr) AccessChain 24(data) 25 748 25
+             756:   13(ivec4) Load 755
+             757:   13(ivec4) VectorShuffle 756 754 4 5 2 3
+                              Store 755 757
+             758:     27(ptr) AccessChain 10(dti) 26
+             759:      6(int) Load 758
+             760:     27(ptr) AccessChain 10(dti) 26
+             761:      6(int) Load 760
+             762:     32(ptr) AccessChain 24(data) 25 761 25
+             763:   13(ivec4) Load 762
+             764:    7(ivec3) VectorShuffle 763 763 0 1 2
+             765:    7(ivec3) GroupNonUniformBitwiseOr 35 Reduce 764
+             766:     32(ptr) AccessChain 24(data) 25 759 25
+             767:   13(ivec4) Load 766
+             768:   13(ivec4) VectorShuffle 767 765 4 5 6 3
+                              Store 766 768
+             769:     27(ptr) AccessChain 10(dti) 26
+             770:      6(int) Load 769
+             771:     27(ptr) AccessChain 10(dti) 26
+             772:      6(int) Load 771
+             773:     75(ptr) AccessChain 24(data) 25 772 72
+             774:   15(ivec4) Load 773
+             775:   15(ivec4) GroupNonUniformBitwiseOr 35 Reduce 774
+             776:     75(ptr) AccessChain 24(data) 25 770 72
+                              Store 776 775
+             777:     27(ptr) AccessChain 10(dti) 26
+             778:      6(int) Load 777
+             779:     27(ptr) AccessChain 10(dti) 26
+             780:      6(int) Load 779
+             781:     84(ptr) AccessChain 24(data) 25 780 72 26
+             782:     14(int) Load 781
+             783:     14(int) GroupNonUniformBitwiseOr 35 Reduce 782
+             784:     84(ptr) AccessChain 24(data) 25 778 72 26
+                              Store 784 783
+             785:     27(ptr) AccessChain 10(dti) 26
+             786:      6(int) Load 785
+             787:     27(ptr) AccessChain 10(dti) 26
+             788:      6(int) Load 787
+             789:     75(ptr) AccessChain 24(data) 25 788 72
+             790:   15(ivec4) Load 789
+             791:   93(ivec2) VectorShuffle 790 790 0 1
+             792:   93(ivec2) GroupNonUniformBitwiseOr 35 Reduce 791
+             793:     75(ptr) AccessChain 24(data) 25 786 72
+             794:   15(ivec4) Load 793
+             795:   15(ivec4) VectorShuffle 794 792 4 5 2 3
+                              Store 793 795
+             796:     27(ptr) AccessChain 10(dti) 26
+             797:      6(int) Load 796
+             798:     27(ptr) AccessChain 10(dti) 26
+             799:      6(int) Load 798
+             800:     75(ptr) AccessChain 24(data) 25 799 72
+             801:   15(ivec4) Load 800
+             802:  105(ivec3) VectorShuffle 801 801 0 1 2
+             803:  105(ivec3) GroupNonUniformBitwiseOr 35 Reduce 802
+             804:     75(ptr) AccessChain 24(data) 25 797 72
+             805:   15(ivec4) Load 804
+             806:   15(ivec4) VectorShuffle 805 803 4 5 6 3
+                              Store 804 806
+             807:     27(ptr) AccessChain 10(dti) 26
+             808:      6(int) Load 807
+             809:     27(ptr) AccessChain 10(dti) 26
+             810:      6(int) Load 809
+             811:     32(ptr) AccessChain 24(data) 25 810 25
+             812:   13(ivec4) Load 811
+             813:   13(ivec4) GroupNonUniformBitwiseXor 35 Reduce 812
+             814:     32(ptr) AccessChain 24(data) 25 808 25
+                              Store 814 813
+             815:     27(ptr) AccessChain 10(dti) 26
+             816:      6(int) Load 815
+             817:     27(ptr) AccessChain 10(dti) 26
+             818:      6(int) Load 817
+             819:     42(ptr) AccessChain 24(data) 25 818 25 26
+             820:      6(int) Load 819
+             821:      6(int) GroupNonUniformBitwiseXor 35 Reduce 820
+             822:     42(ptr) AccessChain 24(data) 25 816 25 26
+                              Store 822 821
+             823:     27(ptr) AccessChain 10(dti) 26
+             824:      6(int) Load 823
+             825:     27(ptr) AccessChain 10(dti) 26
+             826:      6(int) Load 825
+             827:     32(ptr) AccessChain 24(data) 25 826 25
+             828:   13(ivec4) Load 827
+             829:   51(ivec2) VectorShuffle 828 828 0 1
+             830:   51(ivec2) GroupNonUniformBitwiseXor 35 Reduce 829
+             831:     32(ptr) AccessChain 24(data) 25 824 25
+             832:   13(ivec4) Load 831
+             833:   13(ivec4) VectorShuffle 832 830 4 5 2 3
+                              Store 831 833
+             834:     27(ptr) AccessChain 10(dti) 26
+             835:      6(int) Load 834
+             836:     27(ptr) AccessChain 10(dti) 26
+             837:      6(int) Load 836
+             838:     32(ptr) AccessChain 24(data) 25 837 25
+             839:   13(ivec4) Load 838
+             840:    7(ivec3) VectorShuffle 839 839 0 1 2
+             841:    7(ivec3) GroupNonUniformBitwiseXor 35 Reduce 840
+             842:     32(ptr) AccessChain 24(data) 25 835 25
+             843:   13(ivec4) Load 842
+             844:   13(ivec4) VectorShuffle 843 841 4 5 6 3
+                              Store 842 844
+             845:     27(ptr) AccessChain 10(dti) 26
+             846:      6(int) Load 845
+             847:     27(ptr) AccessChain 10(dti) 26
+             848:      6(int) Load 847
+             849:     75(ptr) AccessChain 24(data) 25 848 72
+             850:   15(ivec4) Load 849
+             851:   15(ivec4) GroupNonUniformBitwiseXor 35 Reduce 850
+             852:     75(ptr) AccessChain 24(data) 25 846 72
+                              Store 852 851
+             853:     27(ptr) AccessChain 10(dti) 26
+             854:      6(int) Load 853
+             855:     27(ptr) AccessChain 10(dti) 26
+             856:      6(int) Load 855
+             857:     84(ptr) AccessChain 24(data) 25 856 72 26
+             858:     14(int) Load 857
+             859:     14(int) GroupNonUniformBitwiseXor 35 Reduce 858
+             860:     84(ptr) AccessChain 24(data) 25 854 72 26
+                              Store 860 859
+             861:     27(ptr) AccessChain 10(dti) 26
+             862:      6(int) Load 861
+             863:     27(ptr) AccessChain 10(dti) 26
+             864:      6(int) Load 863
+             865:     75(ptr) AccessChain 24(data) 25 864 72
+             866:   15(ivec4) Load 865
+             867:   93(ivec2) VectorShuffle 866 866 0 1
+             868:   93(ivec2) GroupNonUniformBitwiseXor 35 Reduce 867
+             869:     75(ptr) AccessChain 24(data) 25 862 72
+             870:   15(ivec4) Load 869
+             871:   15(ivec4) VectorShuffle 870 868 4 5 2 3
+                              Store 869 871
+             872:     27(ptr) AccessChain 10(dti) 26
+             873:      6(int) Load 872
+             874:     27(ptr) AccessChain 10(dti) 26
+             875:      6(int) Load 874
+             876:     75(ptr) AccessChain 24(data) 25 875 72
+             877:   15(ivec4) Load 876
+             878:  105(ivec3) VectorShuffle 877 877 0 1 2
+             879:  105(ivec3) GroupNonUniformBitwiseXor 35 Reduce 878
+             880:     75(ptr) AccessChain 24(data) 25 873 72
+             881:   15(ivec4) Load 880
+             882:   15(ivec4) VectorShuffle 881 879 4 5 6 3
+                              Store 880 882
+             883:     27(ptr) AccessChain 10(dti) 26
+             884:      6(int) Load 883
+             885:     27(ptr) AccessChain 10(dti) 26
+             886:      6(int) Load 885
+             887:     42(ptr) AccessChain 24(data) 25 886 25 26
+             888:      6(int) Load 887
+             890:   889(bool) IEqual 888 26
+             891:   13(ivec4) GroupNonUniformBallot 35 890
+             892:      6(int) GroupNonUniformBallotBitCount 35 Reduce 891
+             893:     42(ptr) AccessChain 24(data) 25 884 25 26
+                              Store 893 892
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.wavevote.comp.out b/Test/baseResults/hlsl.wavevote.comp.out
new file mode 100644
index 0000000..2a97f56
--- /dev/null
+++ b/Test/baseResults/hlsl.wavevote.comp.out
@@ -0,0 +1,316 @@
+hlsl.wavevote.comp
+Shader version: 500
+local_size = (32, 16, 1)
+0:? Sequence
+0:5  Function Definition: @CSMain(vu3; ( temp void)
+0:5    Function Parameters: 
+0:5      'dti' ( in 3-component vector of uint)
+0:?     Sequence
+0:6      move second child to first child ( temp uint64_t)
+0:6        indirect index (layout( row_major std430) buffer uint64_t)
+0:6          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint64_t)
+0:6            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint64_t @data})
+0:6            Constant:
+0:6              0 (const uint)
+0:6          direct index ( temp uint)
+0:6            'dti' ( in 3-component vector of uint)
+0:6            Constant:
+0:6              0 (const int)
+0:6        Construct uint64 (layout( row_major std430) buffer uint64_t)
+0:6          Convert uint to uint64 ( temp 4-component vector of uint64_t)
+0:6            subgroupBallot ( temp 4-component vector of uint)
+0:6              subgroupAny ( temp bool)
+0:6                Compare Equal ( temp bool)
+0:6                  direct index ( temp uint)
+0:6                    'dti' ( in 3-component vector of uint)
+0:6                    Constant:
+0:6                      0 (const int)
+0:6                  Constant:
+0:6                    0 (const uint)
+0:7      move second child to first child ( temp uint64_t)
+0:7        indirect index (layout( row_major std430) buffer uint64_t)
+0:7          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint64_t)
+0:7            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint64_t @data})
+0:7            Constant:
+0:7              0 (const uint)
+0:7          direct index ( temp uint)
+0:7            'dti' ( in 3-component vector of uint)
+0:7            Constant:
+0:7              1 (const int)
+0:7        Construct uint64 (layout( row_major std430) buffer uint64_t)
+0:7          Convert uint to uint64 ( temp 4-component vector of uint64_t)
+0:7            subgroupBallot ( temp 4-component vector of uint)
+0:7              subgroupAll ( temp bool)
+0:7                Compare Equal ( temp bool)
+0:7                  direct index ( temp uint)
+0:7                    'dti' ( in 3-component vector of uint)
+0:7                    Constant:
+0:7                      1 (const int)
+0:7                  Constant:
+0:7                    0 (const uint)
+0:8      move second child to first child ( temp uint64_t)
+0:8        indirect index (layout( row_major std430) buffer uint64_t)
+0:8          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint64_t)
+0:8            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint64_t @data})
+0:8            Constant:
+0:8              0 (const uint)
+0:8          direct index ( temp uint)
+0:8            'dti' ( in 3-component vector of uint)
+0:8            Constant:
+0:8              2 (const int)
+0:8        Construct uint64 (layout( row_major std430) buffer uint64_t)
+0:8          Convert uint to uint64 ( temp 4-component vector of uint64_t)
+0:8            subgroupBallot ( temp 4-component vector of uint)
+0:8              subgroupAllEqual ( temp bool)
+0:8                Compare Equal ( temp bool)
+0:8                  direct index ( temp uint)
+0:8                    'dti' ( in 3-component vector of uint)
+0:8                    Constant:
+0:8                      2 (const int)
+0:8                  Constant:
+0:8                    0 (const uint)
+0:9      move second child to first child ( temp uint64_t)
+0:9        indirect index (layout( row_major std430) buffer uint64_t)
+0:9          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint64_t)
+0:9            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint64_t @data})
+0:9            Constant:
+0:9              0 (const uint)
+0:9          direct index ( temp uint)
+0:9            'dti' ( in 3-component vector of uint)
+0:9            Constant:
+0:9              2 (const int)
+0:9        Construct uint64 (layout( row_major std430) buffer uint64_t)
+0:9          Convert uint to uint64 ( temp 4-component vector of uint64_t)
+0:9            subgroupBallot ( temp 4-component vector of uint)
+0:9              subgroupAllEqual ( temp bool)
+0:9                direct index ( temp uint)
+0:9                  'dti' ( in 3-component vector of uint)
+0:9                  Constant:
+0:9                    2 (const int)
+0:5  Function Definition: CSMain( ( temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:5      move second child to first child ( temp 3-component vector of uint)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?         'dti' ( in 3-component vector of uint GlobalInvocationID)
+0:5      Function Call: @CSMain(vu3; ( temp void)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?   Linker Objects
+0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint64_t @data})
+0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
+
+
+Linked compute stage:
+
+
+Shader version: 500
+local_size = (32, 16, 1)
+0:? Sequence
+0:5  Function Definition: @CSMain(vu3; ( temp void)
+0:5    Function Parameters: 
+0:5      'dti' ( in 3-component vector of uint)
+0:?     Sequence
+0:6      move second child to first child ( temp uint64_t)
+0:6        indirect index (layout( row_major std430) buffer uint64_t)
+0:6          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint64_t)
+0:6            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint64_t @data})
+0:6            Constant:
+0:6              0 (const uint)
+0:6          direct index ( temp uint)
+0:6            'dti' ( in 3-component vector of uint)
+0:6            Constant:
+0:6              0 (const int)
+0:6        Construct uint64 (layout( row_major std430) buffer uint64_t)
+0:6          Convert uint to uint64 ( temp 4-component vector of uint64_t)
+0:6            subgroupBallot ( temp 4-component vector of uint)
+0:6              subgroupAny ( temp bool)
+0:6                Compare Equal ( temp bool)
+0:6                  direct index ( temp uint)
+0:6                    'dti' ( in 3-component vector of uint)
+0:6                    Constant:
+0:6                      0 (const int)
+0:6                  Constant:
+0:6                    0 (const uint)
+0:7      move second child to first child ( temp uint64_t)
+0:7        indirect index (layout( row_major std430) buffer uint64_t)
+0:7          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint64_t)
+0:7            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint64_t @data})
+0:7            Constant:
+0:7              0 (const uint)
+0:7          direct index ( temp uint)
+0:7            'dti' ( in 3-component vector of uint)
+0:7            Constant:
+0:7              1 (const int)
+0:7        Construct uint64 (layout( row_major std430) buffer uint64_t)
+0:7          Convert uint to uint64 ( temp 4-component vector of uint64_t)
+0:7            subgroupBallot ( temp 4-component vector of uint)
+0:7              subgroupAll ( temp bool)
+0:7                Compare Equal ( temp bool)
+0:7                  direct index ( temp uint)
+0:7                    'dti' ( in 3-component vector of uint)
+0:7                    Constant:
+0:7                      1 (const int)
+0:7                  Constant:
+0:7                    0 (const uint)
+0:8      move second child to first child ( temp uint64_t)
+0:8        indirect index (layout( row_major std430) buffer uint64_t)
+0:8          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint64_t)
+0:8            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint64_t @data})
+0:8            Constant:
+0:8              0 (const uint)
+0:8          direct index ( temp uint)
+0:8            'dti' ( in 3-component vector of uint)
+0:8            Constant:
+0:8              2 (const int)
+0:8        Construct uint64 (layout( row_major std430) buffer uint64_t)
+0:8          Convert uint to uint64 ( temp 4-component vector of uint64_t)
+0:8            subgroupBallot ( temp 4-component vector of uint)
+0:8              subgroupAllEqual ( temp bool)
+0:8                Compare Equal ( temp bool)
+0:8                  direct index ( temp uint)
+0:8                    'dti' ( in 3-component vector of uint)
+0:8                    Constant:
+0:8                      2 (const int)
+0:8                  Constant:
+0:8                    0 (const uint)
+0:9      move second child to first child ( temp uint64_t)
+0:9        indirect index (layout( row_major std430) buffer uint64_t)
+0:9          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint64_t)
+0:9            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint64_t @data})
+0:9            Constant:
+0:9              0 (const uint)
+0:9          direct index ( temp uint)
+0:9            'dti' ( in 3-component vector of uint)
+0:9            Constant:
+0:9              2 (const int)
+0:9        Construct uint64 (layout( row_major std430) buffer uint64_t)
+0:9          Convert uint to uint64 ( temp 4-component vector of uint64_t)
+0:9            subgroupBallot ( temp 4-component vector of uint)
+0:9              subgroupAllEqual ( temp bool)
+0:9                direct index ( temp uint)
+0:9                  'dti' ( in 3-component vector of uint)
+0:9                  Constant:
+0:9                    2 (const int)
+0:5  Function Definition: CSMain( ( temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:5      move second child to first child ( temp 3-component vector of uint)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?         'dti' ( in 3-component vector of uint GlobalInvocationID)
+0:5      Function Call: @CSMain(vu3; ( temp void)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?   Linker Objects
+0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint64_t @data})
+0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
+
+// Module Version 10300
+// Generated by (magic number): 80005
+// Id's are bound by 75
+
+                              Capability Shader
+                              Capability Int64
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformVote
+                              Capability GroupNonUniformBallot
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "CSMain" 70
+                              ExecutionMode 4 LocalSize 32 16 1
+                              Source HLSL 500
+                              Name 4  "CSMain"
+                              Name 11  "@CSMain(vu3;"
+                              Name 10  "dti"
+                              Name 15  "data"
+                              MemberName 15(data) 0  "@data"
+                              Name 17  "data"
+                              Name 68  "dti"
+                              Name 70  "dti"
+                              Name 72  "param"
+                              Decorate 14 ArrayStride 8
+                              MemberDecorate 15(data) 0 Offset 0
+                              Decorate 15(data) BufferBlock
+                              Decorate 17(data) DescriptorSet 0
+                              Decorate 70(dti) BuiltIn GlobalInvocationId
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 3
+               8:             TypePointer Function 7(ivec3)
+               9:             TypeFunction 2 8(ptr)
+              13:             TypeInt 64 0
+              14:             TypeRuntimeArray 13(int)
+        15(data):             TypeStruct 14
+              16:             TypePointer Uniform 15(data)
+        17(data):     16(ptr) Variable Uniform
+              18:             TypeInt 32 1
+              19:     18(int) Constant 0
+              20:      6(int) Constant 0
+              21:             TypePointer Function 6(int)
+              26:             TypeBool
+              28:      6(int) Constant 3
+              30:             TypeVector 6(int) 4
+              32:             TypeVector 13(int) 4
+              35:             TypePointer Uniform 13(int)
+              37:      6(int) Constant 1
+              48:      6(int) Constant 2
+              69:             TypePointer Input 7(ivec3)
+         70(dti):     69(ptr) Variable Input
+       4(CSMain):           2 Function None 3
+               5:             Label
+         68(dti):      8(ptr) Variable Function
+       72(param):      8(ptr) Variable Function
+              71:    7(ivec3) Load 70(dti)
+                              Store 68(dti) 71
+              73:    7(ivec3) Load 68(dti)
+                              Store 72(param) 73
+              74:           2 FunctionCall 11(@CSMain(vu3;) 72(param)
+                              Return
+                              FunctionEnd
+11(@CSMain(vu3;):           2 Function None 9
+         10(dti):      8(ptr) FunctionParameter
+              12:             Label
+              22:     21(ptr) AccessChain 10(dti) 20
+              23:      6(int) Load 22
+              24:     21(ptr) AccessChain 10(dti) 20
+              25:      6(int) Load 24
+              27:    26(bool) IEqual 25 20
+              29:    26(bool) GroupNonUniformAny 28 27
+              31:   30(ivec4) GroupNonUniformBallot 28 29
+              33:   32(ivec4) UConvert 31
+              34:     13(int) CompositeExtract 33 0
+              36:     35(ptr) AccessChain 17(data) 19 23
+                              Store 36 34
+              38:     21(ptr) AccessChain 10(dti) 37
+              39:      6(int) Load 38
+              40:     21(ptr) AccessChain 10(dti) 37
+              41:      6(int) Load 40
+              42:    26(bool) IEqual 41 20
+              43:    26(bool) GroupNonUniformAll 28 42
+              44:   30(ivec4) GroupNonUniformBallot 28 43
+              45:   32(ivec4) UConvert 44
+              46:     13(int) CompositeExtract 45 0
+              47:     35(ptr) AccessChain 17(data) 19 39
+                              Store 47 46
+              49:     21(ptr) AccessChain 10(dti) 48
+              50:      6(int) Load 49
+              51:     21(ptr) AccessChain 10(dti) 48
+              52:      6(int) Load 51
+              53:    26(bool) IEqual 52 20
+              54:    26(bool) GroupNonUniformAllEqual 28 53
+              55:   30(ivec4) GroupNonUniformBallot 28 54
+              56:   32(ivec4) UConvert 55
+              57:     13(int) CompositeExtract 56 0
+              58:     35(ptr) AccessChain 17(data) 19 50
+                              Store 58 57
+              59:     21(ptr) AccessChain 10(dti) 48
+              60:      6(int) Load 59
+              61:     21(ptr) AccessChain 10(dti) 48
+              62:      6(int) Load 61
+              63:    26(bool) GroupNonUniformAllEqual 28 62
+              64:   30(ivec4) GroupNonUniformBallot 28 63
+              65:   32(ivec4) UConvert 64
+              66:     13(int) CompositeExtract 65 0
+              67:     35(ptr) AccessChain 17(data) 19 60
+                              Store 67 66
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.debugInfo.1.1.frag.out b/Test/baseResults/spv.debugInfo.1.1.frag.out
new file mode 100644
index 0000000..a423623
--- /dev/null
+++ b/Test/baseResults/spv.debugInfo.1.1.frag.out
@@ -0,0 +1,279 @@
+spv.debugInfo.frag
+// Module Version 10300
+// Generated by (magic number): 80005
+// Id's are bound by 126
+
+                              Capability Shader
+               2:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 5  "main" 24 52
+                              ExecutionMode 5 OriginLowerLeft
+               1:             String  "spv.debugInfo.frag"
+                              Source GLSL 450 1  "#version 450
+
+struct S {
+    int a;
+};
+
+uniform ubuf {
+    S s;
+};
+
+uniform sampler2D s2d;
+
+layout(location = 0) in vec4 inv;
+layout(location = 0) out vec4 outv;
+
+vec4 foo(S s)
+{
+    vec4 r = s.a * inv;
+    ++r;
+    if (r.x > 3.0)
+        --r;
+    else
+        r *= 2;
+
+    return r;
+}
+
+void main()
+{
+    outv = foo(s);
+    outv += texture(s2d, vec2(0.5));
+
+    switch (s.a) {
+    case 10:
+        ++outv;
+        break;
+    case 20:
+        outv = 2 * outv;
+        ++outv;
+        break;
+    default:
+        --outv;
+        break;
+    }
+
+    for (int i = 0; i < 10; ++i)
+        outv *= 3.0;
+
+    outv.x < 10.0 ?
+        outv = sin(outv) :
+        outv = cos(outv);
+}"
+                              Name 5  "main"
+                              Name 8  "S"
+                              MemberName 8(S) 0  "a"
+                              Name 14  "foo(struct-S-i11;"
+                              Name 13  "s"
+                              Name 17  "r"
+                              Name 24  "inv"
+                              Name 52  "outv"
+                              Name 53  "S"
+                              MemberName 53(S) 0  "a"
+                              Name 54  "ubuf"
+                              MemberName 54(ubuf) 0  "s"
+                              Name 56  ""
+                              Name 57  "S"
+                              MemberName 57(S) 0  "a"
+                              Name 59  "param"
+                              Name 69  "s2d"
+                              Name 99  "i"
+                              ModuleProcessed  "no-storage-format"
+                              ModuleProcessed  "resource-set-binding 3"
+                              ModuleProcessed  "auto-map-locations"
+                              ModuleProcessed  "client opengl100"
+                              ModuleProcessed  "target-env opengl"
+                              ModuleProcessed  "relaxed-errors"
+                              ModuleProcessed  "suppress-warnings"
+                              ModuleProcessed  "hlsl-offsets"
+                              ModuleProcessed  "entry-point main"
+                              Decorate 24(inv) Location 0
+                              Decorate 52(outv) Location 0
+                              MemberDecorate 53(S) 0 Offset 0
+                              MemberDecorate 54(ubuf) 0 Offset 0
+                              Decorate 54(ubuf) Block
+                              Decorate 56 DescriptorSet 3
+                              Decorate 69(s2d) DescriptorSet 3
+               3:             TypeVoid
+               4:             TypeFunction 3
+               7:             TypeInt 32 1
+            8(S):             TypeStruct 7(int)
+               9:             TypePointer Function 8(S)
+              10:             TypeFloat 32
+              11:             TypeVector 10(float) 4
+              12:             TypeFunction 11(fvec4) 9(ptr)
+              16:             TypePointer Function 11(fvec4)
+              18:      7(int) Constant 0
+              19:             TypePointer Function 7(int)
+              23:             TypePointer Input 11(fvec4)
+         24(inv):     23(ptr) Variable Input
+              28:   10(float) Constant 1065353216
+              31:             TypeInt 32 0
+              32:     31(int) Constant 0
+              33:             TypePointer Function 10(float)
+              36:   10(float) Constant 1077936128
+              37:             TypeBool
+              45:   10(float) Constant 1073741824
+              51:             TypePointer Output 11(fvec4)
+        52(outv):     51(ptr) Variable Output
+           53(S):             TypeStruct 7(int)
+        54(ubuf):             TypeStruct 53(S)
+              55:             TypePointer Uniform 54(ubuf)
+              56:     55(ptr) Variable Uniform
+           57(S):             TypeStruct 7(int)
+              58:             TypePointer Function 57(S)
+              60:             TypePointer Uniform 53(S)
+              66:             TypeImage 10(float) 2D sampled format:Unknown
+              67:             TypeSampledImage 66
+              68:             TypePointer UniformConstant 67
+         69(s2d):     68(ptr) Variable UniformConstant
+              71:             TypeVector 10(float) 2
+              72:   10(float) Constant 1056964608
+              73:   71(fvec2) ConstantComposite 72 72
+              77:             TypePointer Uniform 7(int)
+             106:      7(int) Constant 10
+             111:      7(int) Constant 1
+             113:             TypePointer Output 10(float)
+             116:   10(float) Constant 1092616192
+         5(main):           3 Function None 4
+               6:             Label
+       59(param):     58(ptr) Variable Function
+           99(i):     19(ptr) Variable Function
+             118:     16(ptr) Variable Function
+                              Line 1 30 0
+              61:     60(ptr) AccessChain 56 18
+              62:       53(S) Load 61
+              63:      7(int) CompositeExtract 62 0
+              64:     19(ptr) AccessChain 59(param) 18
+                              Store 64 63
+              65:   11(fvec4) FunctionCall 14(foo(struct-S-i11;) 59(param)
+                              Store 52(outv) 65
+                              Line 1 31 0
+              70:          67 Load 69(s2d)
+              74:   11(fvec4) ImageSampleImplicitLod 70 73
+              75:   11(fvec4) Load 52(outv)
+              76:   11(fvec4) FAdd 75 74
+                              Store 52(outv) 76
+                              Line 1 33 0
+              78:     77(ptr) AccessChain 56 18 18
+              79:      7(int) Load 78
+                              SelectionMerge 83 None
+                              Switch 79 82 
+                                     case 10: 80
+                                     case 20: 81
+              82:               Label
+                                Line 1 42 0
+              94:   11(fvec4)   Load 52(outv)
+              95:   11(fvec4)   CompositeConstruct 28 28 28 28
+              96:   11(fvec4)   FSub 94 95
+                                Store 52(outv) 96
+                                Line 1 43 0
+                                Branch 83
+              80:               Label
+                                Line 1 35 0
+              84:   11(fvec4)   Load 52(outv)
+              85:   11(fvec4)   CompositeConstruct 28 28 28 28
+              86:   11(fvec4)   FAdd 84 85
+                                Store 52(outv) 86
+                                Line 1 36 0
+                                Branch 83
+              81:               Label
+                                Line 1 38 0
+              88:   11(fvec4)   Load 52(outv)
+              89:   11(fvec4)   VectorTimesScalar 88 45
+                                Store 52(outv) 89
+                                Line 1 39 0
+              90:   11(fvec4)   Load 52(outv)
+              91:   11(fvec4)   CompositeConstruct 28 28 28 28
+              92:   11(fvec4)   FAdd 90 91
+                                Store 52(outv) 92
+                                Line 1 40 0
+                                Branch 83
+              83:             Label
+                              Line 1 46 0
+                              Store 99(i) 18
+                              Branch 100
+             100:             Label
+                              LoopMerge 102 103 None
+                              Branch 104
+             104:             Label
+             105:      7(int) Load 99(i)
+             107:    37(bool) SLessThan 105 106
+                              BranchConditional 107 101 102
+             101:               Label
+                                Line 1 47 0
+             108:   11(fvec4)   Load 52(outv)
+             109:   11(fvec4)   VectorTimesScalar 108 36
+                                Store 52(outv) 109
+                                Branch 103
+             103:               Label
+                                Line 1 46 0
+             110:      7(int)   Load 99(i)
+             112:      7(int)   IAdd 110 111
+                                Store 99(i) 112
+                                Branch 100
+             102:             Label
+                              Line 1 49 0
+             114:    113(ptr) AccessChain 52(outv) 32
+             115:   10(float) Load 114
+             117:    37(bool) FOrdLessThan 115 116
+                              SelectionMerge 120 None
+                              BranchConditional 117 119 123
+             119:               Label
+                                Line 1 50 0
+             121:   11(fvec4)   Load 52(outv)
+             122:   11(fvec4)   ExtInst 2(GLSL.std.450) 13(Sin) 121
+                                Store 52(outv) 122
+                                Store 118 122
+                                Branch 120
+             123:               Label
+                                Line 1 51 0
+             124:   11(fvec4)   Load 52(outv)
+             125:   11(fvec4)   ExtInst 2(GLSL.std.450) 14(Cos) 124
+                                Store 52(outv) 125
+                                Store 118 125
+                                Branch 120
+             120:             Label
+                              Return
+                              FunctionEnd
+14(foo(struct-S-i11;):   11(fvec4) Function None 12
+           13(s):      9(ptr) FunctionParameter
+              15:             Label
+           17(r):     16(ptr) Variable Function
+                              Line 1 18 0
+              20:     19(ptr) AccessChain 13(s) 18
+              21:      7(int) Load 20
+              22:   10(float) ConvertSToF 21
+              25:   11(fvec4) Load 24(inv)
+              26:   11(fvec4) VectorTimesScalar 25 22
+                              Store 17(r) 26
+                              Line 1 19 0
+              27:   11(fvec4) Load 17(r)
+              29:   11(fvec4) CompositeConstruct 28 28 28 28
+              30:   11(fvec4) FAdd 27 29
+                              Store 17(r) 30
+                              Line 1 20 0
+              34:     33(ptr) AccessChain 17(r) 32
+              35:   10(float) Load 34
+              38:    37(bool) FOrdGreaterThan 35 36
+                              SelectionMerge 40 None
+                              BranchConditional 38 39 44
+              39:               Label
+                                Line 1 21 0
+              41:   11(fvec4)   Load 17(r)
+              42:   11(fvec4)   CompositeConstruct 28 28 28 28
+              43:   11(fvec4)   FSub 41 42
+                                Store 17(r) 43
+                                Branch 40
+              44:               Label
+                                Line 1 23 0
+              46:   11(fvec4)   Load 17(r)
+              47:   11(fvec4)   VectorTimesScalar 46 45
+                                Store 17(r) 47
+                                Branch 40
+              40:             Label
+                              Line 1 25 0
+              48:   11(fvec4) Load 17(r)
+                              ReturnValue 48
+                              FunctionEnd
diff --git a/Test/baseResults/spv.deviceGroup.frag.out b/Test/baseResults/spv.deviceGroup.frag.out
old mode 100755
new mode 100644
index 5180e52..a5467da
--- a/Test/baseResults/spv.deviceGroup.frag.out
+++ b/Test/baseResults/spv.deviceGroup.frag.out
@@ -1,11 +1,10 @@
 spv.deviceGroup.frag
-// Module Version 10000
+// Module Version 10300
 // Generated by (magic number): 80005
 // Id's are bound by 17
 
                               Capability Shader
                               Capability DeviceGroup
-                              Extension  "SPV_KHR_device_group"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 9 12
diff --git a/Test/baseResults/spv.drawParams.vert.out b/Test/baseResults/spv.drawParams.vert.out
old mode 100755
new mode 100644
index bb4b38e..e3e17fb
--- a/Test/baseResults/spv.drawParams.vert.out
+++ b/Test/baseResults/spv.drawParams.vert.out
@@ -1,11 +1,10 @@
 spv.drawParams.vert
-// Module Version 10000
+// Module Version 10300
 // Generated by (magic number): 80005
 // Id's are bound by 29
 
                               Capability Shader
                               Capability DrawParameters
-                              Extension  "SPV_KHR_shader_draw_parameters"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
                               EntryPoint Vertex 4  "main" 10 13 16 21
diff --git a/Test/baseResults/spv.explicittypes.frag.out b/Test/baseResults/spv.explicittypes.frag.out
new file mode 100755
index 0000000..c3c79a4
--- /dev/null
+++ b/Test/baseResults/spv.explicittypes.frag.out
@@ -0,0 +1,882 @@
+spv.explicittypes.frag
+// Module Version 10300
+// Generated by (magic number): 80005
+// Id's are bound by 576
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Float64
+                              Capability Int64
+                              Capability Int16
+                              Capability Int8
+                              Capability StorageUniform16
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float16"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float32"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int16"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int32"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int8"
+                              Name 4  "main"
+                              Name 6  "literal("
+                              Name 8  "typeCast8("
+                              Name 10  "typeCast16("
+                              Name 12  "typeCast32("
+                              Name 14  "typeCast64("
+                              Name 18  "i64"
+                              Name 26  "Uniforms"
+                              MemberName 26(Uniforms) 0  "index"
+                              Name 28  ""
+                              Name 35  "indexable"
+                              Name 40  "u64"
+                              Name 49  "indexable"
+                              Name 53  "i32"
+                              Name 62  "indexable"
+                              Name 66  "u32"
+                              Name 74  "indexable"
+                              Name 79  "i16"
+                              Name 88  "indexable"
+                              Name 93  "u16"
+                              Name 101  "indexable"
+                              Name 106  "i8"
+                              Name 115  "indexable"
+                              Name 120  "u8"
+                              Name 128  "indexable"
+                              Name 133  "u8v"
+                              Name 136  "i8v"
+                              Name 141  "i16v"
+                              Name 149  "i32v"
+                              Name 157  "u32v"
+                              Name 163  "i64v"
+                              Name 168  "u64v"
+                              Name 182  "f16v"
+                              Name 188  "f32v"
+                              Name 194  "f64v"
+                              Name 222  "u16v"
+                              Name 252  "bv"
+                              Name 268  "i32v"
+                              Name 269  "i16v"
+                              Name 272  "u16v"
+                              Name 278  "u32v"
+                              Name 282  "i64v"
+                              Name 285  "u64v"
+                              Name 296  "f16v"
+                              Name 299  "f32v"
+                              Name 302  "f64v"
+                              Name 347  "i8v"
+                              Name 353  "u8v"
+                              Name 363  "bv"
+                              Name 380  "u32v"
+                              Name 381  "i32v"
+                              Name 384  "i64v"
+                              Name 387  "u64v"
+                              Name 396  "f32v"
+                              Name 399  "f64v"
+                              Name 406  "i8v"
+                              Name 412  "i16v"
+                              Name 429  "u8v"
+                              Name 435  "u16v"
+                              Name 452  "f16v"
+                              Name 465  "bv"
+                              Name 481  "u64v"
+                              Name 482  "i64v"
+                              Name 485  "f64v"
+                              Name 490  "i8v"
+                              Name 496  "i16v"
+                              Name 502  "i32v"
+                              Name 510  "u8v"
+                              Name 516  "u16v"
+                              Name 522  "u32v"
+                              Name 534  "f16v"
+                              Name 537  "f32v"
+                              Name 548  "bv"
+                              Name 573  "Block"
+                              MemberName 573(Block) 0  "i16"
+                              MemberName 573(Block) 1  "i16v2"
+                              MemberName 573(Block) 2  "i16v3"
+                              MemberName 573(Block) 3  "i16v4"
+                              MemberName 573(Block) 4  "u16"
+                              MemberName 573(Block) 5  "u16v2"
+                              MemberName 573(Block) 6  "u16v3"
+                              MemberName 573(Block) 7  "u16v4"
+                              MemberName 573(Block) 8  "i32"
+                              MemberName 573(Block) 9  "i32v2"
+                              MemberName 573(Block) 10  "i32v3"
+                              MemberName 573(Block) 11  "i32v4"
+                              MemberName 573(Block) 12  "u32"
+                              MemberName 573(Block) 13  "u32v2"
+                              MemberName 573(Block) 14  "u32v3"
+                              MemberName 573(Block) 15  "u32v4"
+                              Name 575  "block"
+                              MemberDecorate 26(Uniforms) 0 Offset 0
+                              Decorate 26(Uniforms) Block
+                              Decorate 28 DescriptorSet 0
+                              Decorate 28 Binding 0
+                              MemberDecorate 573(Block) 0 Offset 0
+                              MemberDecorate 573(Block) 1 Offset 4
+                              MemberDecorate 573(Block) 2 Offset 8
+                              MemberDecorate 573(Block) 3 Offset 16
+                              MemberDecorate 573(Block) 4 Offset 24
+                              MemberDecorate 573(Block) 5 Offset 28
+                              MemberDecorate 573(Block) 6 Offset 32
+                              MemberDecorate 573(Block) 7 Offset 40
+                              MemberDecorate 573(Block) 8 Offset 48
+                              MemberDecorate 573(Block) 9 Offset 56
+                              MemberDecorate 573(Block) 10 Offset 64
+                              MemberDecorate 573(Block) 11 Offset 80
+                              MemberDecorate 573(Block) 12 Offset 96
+                              MemberDecorate 573(Block) 13 Offset 104
+                              MemberDecorate 573(Block) 14 Offset 112
+                              MemberDecorate 573(Block) 15 Offset 128
+                              Decorate 573(Block) Block
+                              Decorate 575(block) DescriptorSet 0
+                              Decorate 575(block) Binding 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+              16:             TypeInt 64 1
+              17:             TypePointer Function 16(int)
+              19:             TypeInt 32 0
+              20:     19(int) Constant 3
+              21:             TypeArray 16(int) 20
+              22:     16(int) Constant 4008636143 4008636142
+              23:     16(int) Constant 4294967295 4294967295
+              24:     16(int) Constant 0 1
+              25:          21 ConstantComposite 22 23 24
+    26(Uniforms):             TypeStruct 19(int)
+              27:             TypePointer Uniform 26(Uniforms)
+              28:     27(ptr) Variable Uniform
+              29:             TypeInt 32 1
+              30:     29(int) Constant 0
+              31:             TypePointer Uniform 19(int)
+              34:             TypePointer Function 21
+              38:             TypeInt 64 0
+              39:             TypePointer Function 38(int)
+              41:             TypeArray 38(int) 20
+              42:     38(int) Constant 4294967295 4294967295
+              43:     38(int) Constant 0 1
+              44:     38(int) Constant 4294967295 1
+              45:          41 ConstantComposite 42 43 44
+              48:             TypePointer Function 41
+              52:             TypePointer Function 29(int)
+              54:             TypeArray 29(int) 20
+              55:     29(int) Constant 4008636143
+              56:     29(int) Constant 4294967295
+              57:     29(int) Constant 536870912
+              58:          54 ConstantComposite 55 56 57
+              61:             TypePointer Function 54
+              65:             TypePointer Function 19(int)
+              67:             TypeArray 19(int) 20
+              68:     19(int) Constant 4294967295
+              69:     19(int) Constant 2147483647
+              70:          67 ConstantComposite 68 68 69
+              73:             TypePointer Function 67
+              77:             TypeInt 16 1
+              78:             TypePointer Function 77(int)
+              80:             TypeArray 77(int) 20
+              81:     77(int) Constant 4294962927
+              82:     77(int) Constant 4294967295
+              83:     77(int) Constant 16384
+              84:          80 ConstantComposite 81 82 83
+              87:             TypePointer Function 80
+              91:             TypeInt 16 0
+              92:             TypePointer Function 91(int)
+              94:             TypeArray 91(int) 20
+              95:     91(int) Constant 65535
+              96:     91(int) Constant 32767
+              97:          94 ConstantComposite 95 95 96
+             100:             TypePointer Function 94
+             104:             TypeInt 8 1
+             105:             TypePointer Function 104(int)
+             107:             TypeArray 104(int) 20
+             108:    104(int) Constant 4294967279
+             109:    104(int) Constant 4294967295
+             110:    104(int) Constant 0
+             111:         107 ConstantComposite 108 109 110
+             114:             TypePointer Function 107
+             118:             TypeInt 8 0
+             119:             TypePointer Function 118(int)
+             121:             TypeArray 118(int) 20
+             122:    118(int) Constant 255
+             123:    118(int) Constant 127
+             124:         121 ConstantComposite 122 122 123
+             127:             TypePointer Function 121
+             131:             TypeVector 118(int) 2
+             132:             TypePointer Function 131(ivec2)
+             134:             TypeVector 104(int) 2
+             135:             TypePointer Function 134(ivec2)
+             139:             TypeVector 77(int) 2
+             140:             TypePointer Function 139(ivec2)
+             147:             TypeVector 29(int) 2
+             148:             TypePointer Function 147(ivec2)
+             155:             TypeVector 19(int) 2
+             156:             TypePointer Function 155(ivec2)
+             161:             TypeVector 16(int) 2
+             162:             TypePointer Function 161(ivec2)
+             166:             TypeVector 38(int) 2
+             167:             TypePointer Function 166(ivec2)
+             179:             TypeFloat 16
+             180:             TypeVector 179(float) 2
+             181:             TypePointer Function 180(fvec2)
+             185:             TypeFloat 32
+             186:             TypeVector 185(float) 2
+             187:             TypePointer Function 186(fvec2)
+             191:             TypeFloat 64
+             192:             TypeVector 191(float) 2
+             193:             TypePointer Function 192(fvec2)
+             220:             TypeVector 91(int) 2
+             221:             TypePointer Function 220(ivec2)
+             249:             TypeBool
+             250:             TypeVector 249(bool) 2
+             251:             TypePointer Function 250(bvec2)
+             254:    104(int) Constant 1
+             255:  134(ivec2) ConstantComposite 110 110
+             256:  134(ivec2) ConstantComposite 254 254
+             259:    118(int) Constant 0
+             260:    118(int) Constant 1
+             261:  131(ivec2) ConstantComposite 259 259
+             262:  131(ivec2) ConstantComposite 260 260
+             365:     77(int) Constant 0
+             366:     77(int) Constant 1
+             367:  139(ivec2) ConstantComposite 365 365
+             368:  139(ivec2) ConstantComposite 366 366
+             371:     91(int) Constant 0
+             372:     91(int) Constant 1
+             373:  220(ivec2) ConstantComposite 371 371
+             374:  220(ivec2) ConstantComposite 372 372
+             467:     29(int) Constant 1
+             468:  147(ivec2) ConstantComposite 30 30
+             469:  147(ivec2) ConstantComposite 467 467
+             472:     19(int) Constant 0
+             473:     19(int) Constant 1
+             474:  155(ivec2) ConstantComposite 472 472
+             475:  155(ivec2) ConstantComposite 473 473
+             550:     16(int) Constant 0 0
+             551:     16(int) Constant 1 0
+             552:  161(ivec2) ConstantComposite 550 550
+             553:  161(ivec2) ConstantComposite 551 551
+             556:     38(int) Constant 0 0
+             557:     38(int) Constant 1 0
+             558:  166(ivec2) ConstantComposite 556 556
+             559:  166(ivec2) ConstantComposite 557 557
+             565:             TypeVector 77(int) 3
+             566:             TypeVector 77(int) 4
+             567:             TypeVector 91(int) 3
+             568:             TypeVector 91(int) 4
+             569:             TypeVector 29(int) 3
+             570:             TypeVector 29(int) 4
+             571:             TypeVector 19(int) 3
+             572:             TypeVector 19(int) 4
+      573(Block):             TypeStruct 77(int) 139(ivec2) 565(ivec3) 566(ivec4) 91(int) 220(ivec2) 567(ivec3) 568(ivec4) 29(int) 147(ivec2) 569(ivec3) 570(ivec4) 19(int) 155(ivec2) 571(ivec3) 572(ivec4)
+             574:             TypePointer Uniform 573(Block)
+      575(block):    574(ptr) Variable Uniform
+         4(main):           2 Function None 3
+               5:             Label
+                              Return
+                              FunctionEnd
+     6(literal():           2 Function None 3
+               7:             Label
+         18(i64):     17(ptr) Variable Function
+   35(indexable):     34(ptr) Variable Function
+         40(u64):     39(ptr) Variable Function
+   49(indexable):     48(ptr) Variable Function
+         53(i32):     52(ptr) Variable Function
+   62(indexable):     61(ptr) Variable Function
+         66(u32):     65(ptr) Variable Function
+   74(indexable):     73(ptr) Variable Function
+         79(i16):     78(ptr) Variable Function
+   88(indexable):     87(ptr) Variable Function
+         93(u16):     92(ptr) Variable Function
+  101(indexable):    100(ptr) Variable Function
+         106(i8):    105(ptr) Variable Function
+  115(indexable):    114(ptr) Variable Function
+         120(u8):    119(ptr) Variable Function
+  128(indexable):    127(ptr) Variable Function
+              32:     31(ptr) AccessChain 28 30
+              33:     19(int) Load 32
+                              Store 35(indexable) 25
+              36:     17(ptr) AccessChain 35(indexable) 33
+              37:     16(int) Load 36
+                              Store 18(i64) 37
+              46:     31(ptr) AccessChain 28 30
+              47:     19(int) Load 46
+                              Store 49(indexable) 45
+              50:     39(ptr) AccessChain 49(indexable) 47
+              51:     38(int) Load 50
+                              Store 40(u64) 51
+              59:     31(ptr) AccessChain 28 30
+              60:     19(int) Load 59
+                              Store 62(indexable) 58
+              63:     52(ptr) AccessChain 62(indexable) 60
+              64:     29(int) Load 63
+                              Store 53(i32) 64
+              71:     31(ptr) AccessChain 28 30
+              72:     19(int) Load 71
+                              Store 74(indexable) 70
+              75:     65(ptr) AccessChain 74(indexable) 72
+              76:     19(int) Load 75
+                              Store 66(u32) 76
+              85:     31(ptr) AccessChain 28 30
+              86:     19(int) Load 85
+                              Store 88(indexable) 84
+              89:     78(ptr) AccessChain 88(indexable) 86
+              90:     77(int) Load 89
+                              Store 79(i16) 90
+              98:     31(ptr) AccessChain 28 30
+              99:     19(int) Load 98
+                              Store 101(indexable) 97
+             102:     92(ptr) AccessChain 101(indexable) 99
+             103:     91(int) Load 102
+                              Store 93(u16) 103
+             112:     31(ptr) AccessChain 28 30
+             113:     19(int) Load 112
+                              Store 115(indexable) 111
+             116:    105(ptr) AccessChain 115(indexable) 113
+             117:    104(int) Load 116
+                              Store 106(i8) 117
+             125:     31(ptr) AccessChain 28 30
+             126:     19(int) Load 125
+                              Store 128(indexable) 124
+             129:    119(ptr) AccessChain 128(indexable) 126
+             130:    118(int) Load 129
+                              Store 120(u8) 130
+                              Return
+                              FunctionEnd
+   8(typeCast8():           2 Function None 3
+               9:             Label
+        133(u8v):    132(ptr) Variable Function
+        136(i8v):    135(ptr) Variable Function
+       141(i16v):    140(ptr) Variable Function
+       149(i32v):    148(ptr) Variable Function
+       157(u32v):    156(ptr) Variable Function
+       163(i64v):    162(ptr) Variable Function
+       168(u64v):    167(ptr) Variable Function
+       182(f16v):    181(ptr) Variable Function
+       188(f32v):    187(ptr) Variable Function
+       194(f64v):    193(ptr) Variable Function
+       222(u16v):    221(ptr) Variable Function
+         252(bv):    251(ptr) Variable Function
+             137:  134(ivec2) Load 136(i8v)
+             138:  131(ivec2) Bitcast 137
+                              Store 133(u8v) 138
+             142:  134(ivec2) Load 136(i8v)
+             143:  139(ivec2) SConvert 142
+                              Store 141(i16v) 143
+             144:  131(ivec2) Load 133(u8v)
+             145:  139(ivec2) UConvert 144
+             146:  139(ivec2) Bitcast 145
+                              Store 141(i16v) 146
+             150:  134(ivec2) Load 136(i8v)
+             151:  147(ivec2) SConvert 150
+                              Store 149(i32v) 151
+             152:  131(ivec2) Load 133(u8v)
+             153:  147(ivec2) UConvert 152
+             154:  147(ivec2) Bitcast 153
+                              Store 149(i32v) 154
+             158:  134(ivec2) Load 136(i8v)
+             159:  147(ivec2) SConvert 158
+             160:  155(ivec2) Bitcast 159
+                              Store 157(u32v) 160
+             164:  134(ivec2) Load 136(i8v)
+             165:  161(ivec2) SConvert 164
+                              Store 163(i64v) 165
+             169:  134(ivec2) Load 136(i8v)
+             170:  161(ivec2) SConvert 169
+             171:  166(ivec2) Bitcast 170
+                              Store 168(u64v) 171
+             172:  131(ivec2) Load 133(u8v)
+             173:  155(ivec2) UConvert 172
+                              Store 157(u32v) 173
+             174:  131(ivec2) Load 133(u8v)
+             175:  161(ivec2) UConvert 174
+             176:  161(ivec2) Bitcast 175
+                              Store 163(i64v) 176
+             177:  131(ivec2) Load 133(u8v)
+             178:  166(ivec2) UConvert 177
+                              Store 168(u64v) 178
+             183:  134(ivec2) Load 136(i8v)
+             184:  180(fvec2) ConvertSToF 183
+                              Store 182(f16v) 184
+             189:  134(ivec2) Load 136(i8v)
+             190:  186(fvec2) ConvertSToF 189
+                              Store 188(f32v) 190
+             195:  134(ivec2) Load 136(i8v)
+             196:  192(fvec2) ConvertSToF 195
+                              Store 194(f64v) 196
+             197:  131(ivec2) Load 133(u8v)
+             198:  180(fvec2) ConvertUToF 197
+                              Store 182(f16v) 198
+             199:  131(ivec2) Load 133(u8v)
+             200:  186(fvec2) ConvertUToF 199
+                              Store 188(f32v) 200
+             201:  131(ivec2) Load 133(u8v)
+             202:  192(fvec2) ConvertUToF 201
+                              Store 194(f64v) 202
+             203:  131(ivec2) Load 133(u8v)
+             204:  134(ivec2) Bitcast 203
+                              Store 136(i8v) 204
+             205:  134(ivec2) Load 136(i8v)
+             206:  139(ivec2) SConvert 205
+                              Store 141(i16v) 206
+             207:  131(ivec2) Load 133(u8v)
+             208:  139(ivec2) UConvert 207
+             209:  139(ivec2) Bitcast 208
+                              Store 141(i16v) 209
+             210:  134(ivec2) Load 136(i8v)
+             211:  147(ivec2) SConvert 210
+                              Store 149(i32v) 211
+             212:  131(ivec2) Load 133(u8v)
+             213:  147(ivec2) UConvert 212
+             214:  147(ivec2) Bitcast 213
+                              Store 149(i32v) 214
+             215:  134(ivec2) Load 136(i8v)
+             216:  161(ivec2) SConvert 215
+                              Store 163(i64v) 216
+             217:  134(ivec2) Load 136(i8v)
+             218:  161(ivec2) SConvert 217
+             219:  166(ivec2) Bitcast 218
+                              Store 168(u64v) 219
+             223:  134(ivec2) Load 136(i8v)
+             224:  139(ivec2) SConvert 223
+             225:  220(ivec2) Bitcast 224
+                              Store 222(u16v) 225
+             226:  131(ivec2) Load 133(u8v)
+             227:  220(ivec2) UConvert 226
+                              Store 222(u16v) 227
+             228:  131(ivec2) Load 133(u8v)
+             229:  155(ivec2) UConvert 228
+                              Store 157(u32v) 229
+             230:  131(ivec2) Load 133(u8v)
+             231:  161(ivec2) UConvert 230
+             232:  161(ivec2) Bitcast 231
+                              Store 163(i64v) 232
+             233:  131(ivec2) Load 133(u8v)
+             234:  161(ivec2) UConvert 233
+             235:  161(ivec2) Bitcast 234
+             236:  166(ivec2) Bitcast 235
+                              Store 168(u64v) 236
+             237:  134(ivec2) Load 136(i8v)
+             238:  180(fvec2) ConvertSToF 237
+                              Store 182(f16v) 238
+             239:  134(ivec2) Load 136(i8v)
+             240:  186(fvec2) ConvertSToF 239
+                              Store 188(f32v) 240
+             241:  134(ivec2) Load 136(i8v)
+             242:  192(fvec2) ConvertSToF 241
+                              Store 194(f64v) 242
+             243:  131(ivec2) Load 133(u8v)
+             244:  180(fvec2) ConvertUToF 243
+                              Store 182(f16v) 244
+             245:  131(ivec2) Load 133(u8v)
+             246:  186(fvec2) ConvertUToF 245
+                              Store 188(f32v) 246
+             247:  131(ivec2) Load 133(u8v)
+             248:  192(fvec2) ConvertUToF 247
+                              Store 194(f64v) 248
+             253:  250(bvec2) Load 252(bv)
+             257:  134(ivec2) Select 253 256 255
+                              Store 136(i8v) 257
+             258:  250(bvec2) Load 252(bv)
+             263:  131(ivec2) Select 258 262 261
+                              Store 133(u8v) 263
+             264:  134(ivec2) Load 136(i8v)
+             265:  250(bvec2) INotEqual 264 261
+                              Store 252(bv) 265
+             266:  131(ivec2) Load 133(u8v)
+             267:  250(bvec2) INotEqual 266 261
+                              Store 252(bv) 267
+                              Return
+                              FunctionEnd
+ 10(typeCast16():           2 Function None 3
+              11:             Label
+       268(i32v):    148(ptr) Variable Function
+       269(i16v):    140(ptr) Variable Function
+       272(u16v):    221(ptr) Variable Function
+       278(u32v):    156(ptr) Variable Function
+       282(i64v):    162(ptr) Variable Function
+       285(u64v):    167(ptr) Variable Function
+       296(f16v):    181(ptr) Variable Function
+       299(f32v):    187(ptr) Variable Function
+       302(f64v):    193(ptr) Variable Function
+        347(i8v):    135(ptr) Variable Function
+        353(u8v):    132(ptr) Variable Function
+         363(bv):    251(ptr) Variable Function
+             270:  139(ivec2) Load 269(i16v)
+             271:  147(ivec2) SConvert 270
+                              Store 268(i32v) 271
+             273:  220(ivec2) Load 272(u16v)
+             274:  147(ivec2) UConvert 273
+             275:  147(ivec2) Bitcast 274
+                              Store 268(i32v) 275
+             276:  139(ivec2) Load 269(i16v)
+             277:  220(ivec2) Bitcast 276
+                              Store 272(u16v) 277
+             279:  139(ivec2) Load 269(i16v)
+             280:  147(ivec2) SConvert 279
+             281:  155(ivec2) Bitcast 280
+                              Store 278(u32v) 281
+             283:  139(ivec2) Load 269(i16v)
+             284:  161(ivec2) SConvert 283
+                              Store 282(i64v) 284
+             286:  139(ivec2) Load 269(i16v)
+             287:  161(ivec2) SConvert 286
+             288:  166(ivec2) Bitcast 287
+                              Store 285(u64v) 288
+             289:  220(ivec2) Load 272(u16v)
+             290:  155(ivec2) UConvert 289
+                              Store 278(u32v) 290
+             291:  220(ivec2) Load 272(u16v)
+             292:  161(ivec2) UConvert 291
+             293:  161(ivec2) Bitcast 292
+                              Store 282(i64v) 293
+             294:  220(ivec2) Load 272(u16v)
+             295:  166(ivec2) UConvert 294
+                              Store 285(u64v) 295
+             297:  139(ivec2) Load 269(i16v)
+             298:  180(fvec2) ConvertSToF 297
+                              Store 296(f16v) 298
+             300:  139(ivec2) Load 269(i16v)
+             301:  186(fvec2) ConvertSToF 300
+                              Store 299(f32v) 301
+             303:  139(ivec2) Load 269(i16v)
+             304:  192(fvec2) ConvertSToF 303
+                              Store 302(f64v) 304
+             305:  220(ivec2) Load 272(u16v)
+             306:  180(fvec2) ConvertUToF 305
+                              Store 296(f16v) 306
+             307:  220(ivec2) Load 272(u16v)
+             308:  186(fvec2) ConvertUToF 307
+                              Store 299(f32v) 308
+             309:  220(ivec2) Load 272(u16v)
+             310:  192(fvec2) ConvertUToF 309
+                              Store 302(f64v) 310
+             311:  139(ivec2) Load 269(i16v)
+             312:  147(ivec2) SConvert 311
+                              Store 268(i32v) 312
+             313:  220(ivec2) Load 272(u16v)
+             314:  147(ivec2) UConvert 313
+             315:  147(ivec2) Bitcast 314
+                              Store 268(i32v) 315
+             316:  139(ivec2) Load 269(i16v)
+             317:  220(ivec2) Bitcast 316
+                              Store 272(u16v) 317
+             318:  139(ivec2) Load 269(i16v)
+             319:  147(ivec2) SConvert 318
+             320:  155(ivec2) Bitcast 319
+                              Store 278(u32v) 320
+             321:  139(ivec2) Load 269(i16v)
+             322:  161(ivec2) SConvert 321
+                              Store 282(i64v) 322
+             323:  139(ivec2) Load 269(i16v)
+             324:  161(ivec2) SConvert 323
+             325:  166(ivec2) Bitcast 324
+                              Store 285(u64v) 325
+             326:  220(ivec2) Load 272(u16v)
+             327:  155(ivec2) UConvert 326
+                              Store 278(u32v) 327
+             328:  220(ivec2) Load 272(u16v)
+             329:  161(ivec2) UConvert 328
+             330:  161(ivec2) Bitcast 329
+                              Store 282(i64v) 330
+             331:  220(ivec2) Load 272(u16v)
+             332:  161(ivec2) UConvert 331
+             333:  161(ivec2) Bitcast 332
+             334:  166(ivec2) Bitcast 333
+                              Store 285(u64v) 334
+             335:  139(ivec2) Load 269(i16v)
+             336:  180(fvec2) ConvertSToF 335
+                              Store 296(f16v) 336
+             337:  139(ivec2) Load 269(i16v)
+             338:  186(fvec2) ConvertSToF 337
+                              Store 299(f32v) 338
+             339:  139(ivec2) Load 269(i16v)
+             340:  192(fvec2) ConvertSToF 339
+                              Store 302(f64v) 340
+             341:  220(ivec2) Load 272(u16v)
+             342:  180(fvec2) ConvertUToF 341
+                              Store 296(f16v) 342
+             343:  220(ivec2) Load 272(u16v)
+             344:  186(fvec2) ConvertUToF 343
+                              Store 299(f32v) 344
+             345:  220(ivec2) Load 272(u16v)
+             346:  192(fvec2) ConvertUToF 345
+                              Store 302(f64v) 346
+             348:  139(ivec2) Load 269(i16v)
+             349:  134(ivec2) SConvert 348
+                              Store 347(i8v) 349
+             350:  220(ivec2) Load 272(u16v)
+             351:  134(ivec2) UConvert 350
+             352:  134(ivec2) Bitcast 351
+                              Store 347(i8v) 352
+             354:  139(ivec2) Load 269(i16v)
+             355:  134(ivec2) SConvert 354
+             356:  131(ivec2) Bitcast 355
+                              Store 353(u8v) 356
+             357:  220(ivec2) Load 272(u16v)
+             358:  131(ivec2) UConvert 357
+                              Store 353(u8v) 358
+             359:  220(ivec2) Load 272(u16v)
+             360:  131(ivec2) UConvert 359
+             361:  139(ivec2) UConvert 360
+             362:  139(ivec2) Bitcast 361
+                              Store 269(i16v) 362
+             364:  250(bvec2) Load 363(bv)
+             369:  139(ivec2) Select 364 368 367
+                              Store 269(i16v) 369
+             370:  250(bvec2) Load 363(bv)
+             375:  220(ivec2) Select 370 374 373
+                              Store 272(u16v) 375
+             376:  139(ivec2) Load 269(i16v)
+             377:  250(bvec2) INotEqual 376 373
+                              Store 363(bv) 377
+             378:  220(ivec2) Load 272(u16v)
+             379:  250(bvec2) INotEqual 378 373
+                              Store 363(bv) 379
+                              Return
+                              FunctionEnd
+ 12(typeCast32():           2 Function None 3
+              13:             Label
+       380(u32v):    156(ptr) Variable Function
+       381(i32v):    148(ptr) Variable Function
+       384(i64v):    162(ptr) Variable Function
+       387(u64v):    167(ptr) Variable Function
+       396(f32v):    187(ptr) Variable Function
+       399(f64v):    193(ptr) Variable Function
+        406(i8v):    135(ptr) Variable Function
+       412(i16v):    140(ptr) Variable Function
+        429(u8v):    132(ptr) Variable Function
+       435(u16v):    221(ptr) Variable Function
+       452(f16v):    181(ptr) Variable Function
+         465(bv):    251(ptr) Variable Function
+             382:  147(ivec2) Load 381(i32v)
+             383:  155(ivec2) Bitcast 382
+                              Store 380(u32v) 383
+             385:  147(ivec2) Load 381(i32v)
+             386:  161(ivec2) SConvert 385
+                              Store 384(i64v) 386
+             388:  147(ivec2) Load 381(i32v)
+             389:  161(ivec2) SConvert 388
+             390:  166(ivec2) Bitcast 389
+                              Store 387(u64v) 390
+             391:  155(ivec2) Load 380(u32v)
+             392:  161(ivec2) UConvert 391
+             393:  161(ivec2) Bitcast 392
+                              Store 384(i64v) 393
+             394:  155(ivec2) Load 380(u32v)
+             395:  166(ivec2) UConvert 394
+                              Store 387(u64v) 395
+             397:  147(ivec2) Load 381(i32v)
+             398:  186(fvec2) ConvertSToF 397
+                              Store 396(f32v) 398
+             400:  147(ivec2) Load 381(i32v)
+             401:  192(fvec2) ConvertSToF 400
+                              Store 399(f64v) 401
+             402:  155(ivec2) Load 380(u32v)
+             403:  186(fvec2) ConvertUToF 402
+                              Store 396(f32v) 403
+             404:  155(ivec2) Load 380(u32v)
+             405:  192(fvec2) ConvertUToF 404
+                              Store 399(f64v) 405
+             407:  147(ivec2) Load 381(i32v)
+             408:  134(ivec2) SConvert 407
+                              Store 406(i8v) 408
+             409:  155(ivec2) Load 380(u32v)
+             410:  134(ivec2) UConvert 409
+             411:  134(ivec2) Bitcast 410
+                              Store 406(i8v) 411
+             413:  147(ivec2) Load 381(i32v)
+             414:  139(ivec2) SConvert 413
+                              Store 412(i16v) 414
+             415:  155(ivec2) Load 380(u32v)
+             416:  139(ivec2) UConvert 415
+             417:  139(ivec2) Bitcast 416
+                              Store 412(i16v) 417
+             418:  147(ivec2) Load 381(i32v)
+             419:     29(int) CompositeExtract 418 0
+             420:     29(int) CompositeExtract 418 1
+             421:  147(ivec2) CompositeConstruct 419 420
+                              Store 381(i32v) 421
+             422:  155(ivec2) Load 380(u32v)
+             423:  147(ivec2) Bitcast 422
+                              Store 381(i32v) 423
+             424:  147(ivec2) Load 381(i32v)
+             425:  161(ivec2) SConvert 424
+                              Store 384(i64v) 425
+             426:  155(ivec2) Load 380(u32v)
+             427:  161(ivec2) UConvert 426
+             428:  161(ivec2) Bitcast 427
+                              Store 384(i64v) 428
+             430:  147(ivec2) Load 381(i32v)
+             431:  134(ivec2) SConvert 430
+             432:  131(ivec2) Bitcast 431
+                              Store 429(u8v) 432
+             433:  155(ivec2) Load 380(u32v)
+             434:  131(ivec2) UConvert 433
+                              Store 429(u8v) 434
+             436:  147(ivec2) Load 381(i32v)
+             437:  139(ivec2) SConvert 436
+             438:  220(ivec2) Bitcast 437
+                              Store 435(u16v) 438
+             439:  155(ivec2) Load 380(u32v)
+             440:  220(ivec2) UConvert 439
+                              Store 435(u16v) 440
+             441:  147(ivec2) Load 381(i32v)
+             442:  155(ivec2) Bitcast 441
+                              Store 380(u32v) 442
+             443:  155(ivec2) Load 380(u32v)
+             444:     19(int) CompositeExtract 443 0
+             445:     19(int) CompositeExtract 443 1
+             446:  155(ivec2) CompositeConstruct 444 445
+                              Store 380(u32v) 446
+             447:  147(ivec2) Load 381(i32v)
+             448:  161(ivec2) SConvert 447
+             449:  166(ivec2) Bitcast 448
+                              Store 387(u64v) 449
+             450:  155(ivec2) Load 380(u32v)
+             451:  166(ivec2) UConvert 450
+                              Store 387(u64v) 451
+             453:  147(ivec2) Load 381(i32v)
+             454:  180(fvec2) ConvertSToF 453
+                              Store 452(f16v) 454
+             455:  147(ivec2) Load 381(i32v)
+             456:  186(fvec2) ConvertSToF 455
+                              Store 396(f32v) 456
+             457:  147(ivec2) Load 381(i32v)
+             458:  192(fvec2) ConvertSToF 457
+                              Store 399(f64v) 458
+             459:  155(ivec2) Load 380(u32v)
+             460:  180(fvec2) ConvertUToF 459
+                              Store 452(f16v) 460
+             461:  155(ivec2) Load 380(u32v)
+             462:  186(fvec2) ConvertUToF 461
+                              Store 396(f32v) 462
+             463:  155(ivec2) Load 380(u32v)
+             464:  192(fvec2) ConvertUToF 463
+                              Store 399(f64v) 464
+             466:  250(bvec2) Load 465(bv)
+             470:  147(ivec2) Select 466 469 468
+                              Store 381(i32v) 470
+             471:  250(bvec2) Load 465(bv)
+             476:  155(ivec2) Select 471 475 474
+                              Store 380(u32v) 476
+             477:  147(ivec2) Load 381(i32v)
+             478:  250(bvec2) INotEqual 477 474
+                              Store 465(bv) 478
+             479:  155(ivec2) Load 380(u32v)
+             480:  250(bvec2) INotEqual 479 474
+                              Store 465(bv) 480
+                              Return
+                              FunctionEnd
+ 14(typeCast64():           2 Function None 3
+              15:             Label
+       481(u64v):    167(ptr) Variable Function
+       482(i64v):    162(ptr) Variable Function
+       485(f64v):    193(ptr) Variable Function
+        490(i8v):    135(ptr) Variable Function
+       496(i16v):    140(ptr) Variable Function
+       502(i32v):    148(ptr) Variable Function
+        510(u8v):    132(ptr) Variable Function
+       516(u16v):    221(ptr) Variable Function
+       522(u32v):    156(ptr) Variable Function
+       534(f16v):    181(ptr) Variable Function
+       537(f32v):    187(ptr) Variable Function
+         548(bv):    251(ptr) Variable Function
+             483:  161(ivec2) Load 482(i64v)
+             484:  166(ivec2) Bitcast 483
+                              Store 481(u64v) 484
+             486:  161(ivec2) Load 482(i64v)
+             487:  192(fvec2) ConvertSToF 486
+                              Store 485(f64v) 487
+             488:  166(ivec2) Load 481(u64v)
+             489:  192(fvec2) ConvertUToF 488
+                              Store 485(f64v) 489
+             491:  161(ivec2) Load 482(i64v)
+             492:  134(ivec2) SConvert 491
+                              Store 490(i8v) 492
+             493:  166(ivec2) Load 481(u64v)
+             494:  134(ivec2) UConvert 493
+             495:  134(ivec2) Bitcast 494
+                              Store 490(i8v) 495
+             497:  161(ivec2) Load 482(i64v)
+             498:  139(ivec2) SConvert 497
+                              Store 496(i16v) 498
+             499:  166(ivec2) Load 481(u64v)
+             500:  139(ivec2) UConvert 499
+             501:  139(ivec2) Bitcast 500
+                              Store 496(i16v) 501
+             503:  161(ivec2) Load 482(i64v)
+             504:  147(ivec2) SConvert 503
+                              Store 502(i32v) 504
+             505:  166(ivec2) Load 481(u64v)
+             506:  147(ivec2) UConvert 505
+             507:  147(ivec2) Bitcast 506
+                              Store 502(i32v) 507
+             508:  166(ivec2) Load 481(u64v)
+             509:  161(ivec2) Bitcast 508
+                              Store 482(i64v) 509
+             511:  161(ivec2) Load 482(i64v)
+             512:  134(ivec2) SConvert 511
+             513:  131(ivec2) Bitcast 512
+                              Store 510(u8v) 513
+             514:  166(ivec2) Load 481(u64v)
+             515:  131(ivec2) UConvert 514
+                              Store 510(u8v) 515
+             517:  161(ivec2) Load 482(i64v)
+             518:  139(ivec2) SConvert 517
+             519:  220(ivec2) Bitcast 518
+                              Store 516(u16v) 519
+             520:  166(ivec2) Load 481(u64v)
+             521:  220(ivec2) UConvert 520
+                              Store 516(u16v) 521
+             523:  161(ivec2) Load 482(i64v)
+             524:  147(ivec2) SConvert 523
+             525:  155(ivec2) Bitcast 524
+                              Store 522(u32v) 525
+             526:  166(ivec2) Load 481(u64v)
+             527:  155(ivec2) UConvert 526
+                              Store 522(u32v) 527
+             528:  161(ivec2) Load 482(i64v)
+             529:  166(ivec2) Bitcast 528
+                              Store 481(u64v) 529
+             530:  166(ivec2) Load 481(u64v)
+             531:     38(int) CompositeExtract 530 0
+             532:     38(int) CompositeExtract 530 1
+             533:  166(ivec2) CompositeConstruct 531 532
+                              Store 481(u64v) 533
+             535:  161(ivec2) Load 482(i64v)
+             536:  180(fvec2) ConvertSToF 535
+                              Store 534(f16v) 536
+             538:  161(ivec2) Load 482(i64v)
+             539:  186(fvec2) ConvertSToF 538
+                              Store 537(f32v) 539
+             540:  161(ivec2) Load 482(i64v)
+             541:  192(fvec2) ConvertSToF 540
+                              Store 485(f64v) 541
+             542:  166(ivec2) Load 481(u64v)
+             543:  180(fvec2) ConvertUToF 542
+                              Store 534(f16v) 543
+             544:  166(ivec2) Load 481(u64v)
+             545:  186(fvec2) ConvertUToF 544
+                              Store 537(f32v) 545
+             546:  166(ivec2) Load 481(u64v)
+             547:  192(fvec2) ConvertUToF 546
+                              Store 485(f64v) 547
+             549:  250(bvec2) Load 548(bv)
+             554:  161(ivec2) Select 549 553 552
+                              Store 482(i64v) 554
+             555:  250(bvec2) Load 548(bv)
+             560:  166(ivec2) Select 555 559 558
+                              Store 481(u64v) 560
+             561:  161(ivec2) Load 482(i64v)
+             562:  250(bvec2) INotEqual 561 558
+                              Store 548(bv) 562
+             563:  166(ivec2) Load 481(u64v)
+             564:  250(bvec2) INotEqual 563 558
+                              Store 548(bv) 564
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.float32.frag.out b/Test/baseResults/spv.float32.frag.out
new file mode 100644
index 0000000..fc9d3d9
--- /dev/null
+++ b/Test/baseResults/spv.float32.frag.out
@@ -0,0 +1,800 @@
+spv.float32.frag
+// Module Version 10300
+// Generated by (magic number): 80005
+// Id's are bound by 530
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Float64
+                              Capability Int64
+                              Capability Int16
+                              Capability Int8
+                              Capability DerivativeControl
+                              Capability InterpolationFunction
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 468
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float16"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float32"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int16"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int32"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int8"
+                              Name 4  "main"
+                              Name 6  "literal("
+                              Name 8  "operators("
+                              Name 10  "typeCast("
+                              Name 12  "builtinAngleTrigFuncs("
+                              Name 14  "builtinExpFuncs("
+                              Name 16  "builtinCommonFuncs("
+                              Name 18  "builtinGeometryFuncs("
+                              Name 20  "builtinMatrixFuncs("
+                              Name 22  "builtinVecRelFuncs("
+                              Name 24  "builtinFragProcFuncs("
+                              Name 29  "f32v"
+                              Name 40  "f32v"
+                              Name 62  "f32m"
+                              Name 85  "f32"
+                              Name 109  "b"
+                              Name 152  "f64v"
+                              Name 155  "f32v"
+                              Name 160  "bv"
+                              Name 175  "f16v"
+                              Name 183  "i8v"
+                              Name 189  "i16v"
+                              Name 195  "i32v"
+                              Name 201  "i64v"
+                              Name 204  "u8v"
+                              Name 210  "u16v"
+                              Name 215  "u32v"
+                              Name 221  "u64v"
+                              Name 226  "f32v2"
+                              Name 227  "f32v1"
+                              Name 259  "f32v2"
+                              Name 260  "f32v1"
+                              Name 276  "f32v2"
+                              Name 277  "f32v1"
+                              Name 298  "f32"
+                              Name 302  "f32v3"
+                              Name 342  "bv"
+                              Name 363  "b"
+                              Name 373  "iv"
+                              Name 374  "ResType"
+                              Name 381  "f32"
+                              Name 382  "f32v1"
+                              Name 386  "f32v2"
+                              Name 392  "f32v3"
+                              Name 411  "f32m3"
+                              Name 412  "f32m1"
+                              Name 414  "f32m2"
+                              Name 423  "f32v1"
+                              Name 425  "f32v2"
+                              Name 430  "f32m4"
+                              Name 433  "f32"
+                              Name 436  "f32m5"
+                              Name 441  "f32m6"
+                              Name 442  "f32m7"
+                              Name 445  "bv"
+                              Name 446  "f32v1"
+                              Name 448  "f32v2"
+                              Name 466  "f32v"
+                              Name 468  "if32v"
+                              Name 517  "S"
+                              MemberName 517(S) 0  "x"
+                              MemberName 517(S) 1  "y"
+                              MemberName 517(S) 2  "z"
+                              Name 519  "B1"
+                              MemberName 519(B1) 0  "a"
+                              MemberName 519(B1) 1  "b"
+                              MemberName 519(B1) 2  "c"
+                              MemberName 519(B1) 3  "d"
+                              MemberName 519(B1) 4  "e"
+                              MemberName 519(B1) 5  "f"
+                              MemberName 519(B1) 6  "g"
+                              MemberName 519(B1) 7  "h"
+                              Name 521  ""
+                              Name 522  "sf16"
+                              Name 523  "sf"
+                              Name 524  "sd"
+                              Decorate 515 ArrayStride 16
+                              Decorate 516 ArrayStride 32
+                              MemberDecorate 517(S) 0 Offset 0
+                              MemberDecorate 517(S) 1 Offset 8
+                              MemberDecorate 517(S) 2 Offset 16
+                              Decorate 518 ArrayStride 32
+                              MemberDecorate 519(B1) 0 Offset 0
+                              MemberDecorate 519(B1) 1 Offset 8
+                              MemberDecorate 519(B1) 2 Offset 16
+                              MemberDecorate 519(B1) 3 Offset 32
+                              MemberDecorate 519(B1) 4 ColMajor
+                              MemberDecorate 519(B1) 4 Offset 64
+                              MemberDecorate 519(B1) 4 MatrixStride 16
+                              MemberDecorate 519(B1) 5 ColMajor
+                              MemberDecorate 519(B1) 5 Offset 96
+                              MemberDecorate 519(B1) 5 MatrixStride 16
+                              MemberDecorate 519(B1) 6 Offset 160
+                              MemberDecorate 519(B1) 7 Offset 192
+                              Decorate 519(B1) Block
+                              Decorate 521 DescriptorSet 0
+                              Decorate 522(sf16) SpecId 100
+                              Decorate 523(sf) SpecId 101
+                              Decorate 524(sd) SpecId 102
+               2:             TypeVoid
+               3:             TypeFunction 2
+              26:             TypeFloat 32
+              27:             TypeVector 26(float) 2
+              28:             TypePointer Function 27(fvec2)
+              30:   26(float) Constant 897988541
+              31:             TypeInt 32 0
+              32:     31(int) Constant 0
+              33:             TypePointer Function 26(float)
+              35:   26(float) Constant 3196059648
+              36:   26(float) Constant 1022739087
+              37:   27(fvec2) ConstantComposite 35 36
+              54:   26(float) Constant 1065353216
+              60:             TypeMatrix 27(fvec2) 2
+              61:             TypePointer Function 60
+              88:     31(int) Constant 1
+             107:             TypeBool
+             108:             TypePointer Function 107(bool)
+             149:             TypeFloat 64
+             150:             TypeVector 149(float) 3
+             151:             TypePointer Function 150(fvec3)
+             153:             TypeVector 26(float) 3
+             154:             TypePointer Function 153(fvec3)
+             158:             TypeVector 107(bool) 3
+             159:             TypePointer Function 158(bvec3)
+             162:   26(float) Constant 0
+             163:  153(fvec3) ConstantComposite 162 162 162
+             164:  153(fvec3) ConstantComposite 54 54 54
+             172:             TypeFloat 16
+             173:             TypeVector 172(float) 3
+             174:             TypePointer Function 173(fvec3)
+             180:             TypeInt 8 1
+             181:             TypeVector 180(int) 3
+             182:             TypePointer Function 181(ivec3)
+             186:             TypeInt 16 1
+             187:             TypeVector 186(int) 3
+             188:             TypePointer Function 187(ivec3)
+             192:             TypeInt 32 1
+             193:             TypeVector 192(int) 3
+             194:             TypePointer Function 193(ivec3)
+             198:             TypeInt 64 1
+             199:             TypeVector 198(int) 3
+             200:             TypePointer Function 199(ivec3)
+             207:             TypeInt 16 0
+             208:             TypeVector 207(int) 3
+             209:             TypePointer Function 208(ivec3)
+             213:             TypeVector 31(int) 3
+             214:             TypePointer Function 213(ivec3)
+             218:             TypeInt 64 0
+             219:             TypeVector 218(int) 3
+             220:             TypePointer Function 219(ivec3)
+             224:             TypeVector 26(float) 4
+             225:             TypePointer Function 224(fvec4)
+    374(ResType):             TypeStruct 153(fvec3) 193(ivec3)
+             409:             TypeMatrix 153(fvec3) 2
+             410:             TypePointer Function 409
+             428:             TypeMatrix 27(fvec2) 3
+             429:             TypePointer Function 428
+             434:             TypeMatrix 153(fvec3) 3
+             435:             TypePointer Function 434
+             439:             TypeMatrix 224(fvec4) 4
+             440:             TypePointer Function 439
+             467:             TypePointer Input 153(fvec3)
+      468(if32v):    467(ptr) Variable Input
+             469:             TypePointer Input 26(float)
+             506:    192(int) Constant 1
+             511:   26(float) Constant 1056964608
+             512:   27(fvec2) ConstantComposite 511 511
+             514:     31(int) Constant 2
+             515:             TypeArray 26(float) 514
+             516:             TypeArray 409 514
+          517(S):             TypeStruct 26(float) 27(fvec2) 153(fvec3)
+             518:             TypeArray 517(S) 514
+         519(B1):             TypeStruct 26(float) 27(fvec2) 153(fvec3) 515 409 516 517(S) 518
+             520:             TypePointer Uniform 519(B1)
+             521:    520(ptr) Variable Uniform
+       522(sf16):  172(float) SpecConstant 12288
+         523(sf):   26(float) SpecConstant 1048576000
+         524(sd):  149(float) SpecConstant 0 1071644672
+             525:   26(float) SpecConstantOp 115 522(sf16)
+             526:   26(float) SpecConstantOp 115 522(sf16)
+             527:  149(float) SpecConstantOp 115 526
+             528:  172(float) SpecConstantOp 115 523(sf)
+             529:  172(float) SpecConstantOp 115 524(sd)
+         4(main):           2 Function None 3
+               5:             Label
+                              Return
+                              FunctionEnd
+     6(literal():           2 Function None 3
+               7:             Label
+        29(f32v):     28(ptr) Variable Function
+              34:     33(ptr) AccessChain 29(f32v) 32
+                              Store 34 30
+              38:   27(fvec2) Load 29(f32v)
+              39:   27(fvec2) FAdd 38 37
+                              Store 29(f32v) 39
+                              Return
+                              FunctionEnd
+   8(operators():           2 Function None 3
+               9:             Label
+        40(f32v):     28(ptr) Variable Function
+        62(f32m):     61(ptr) Variable Function
+         85(f32):     33(ptr) Variable Function
+          109(b):    108(ptr) Variable Function
+              41:   27(fvec2) Load 40(f32v)
+              42:   27(fvec2) Load 40(f32v)
+              43:   27(fvec2) FAdd 42 41
+                              Store 40(f32v) 43
+              44:   27(fvec2) Load 40(f32v)
+              45:   27(fvec2) Load 40(f32v)
+              46:   27(fvec2) FSub 45 44
+                              Store 40(f32v) 46
+              47:   27(fvec2) Load 40(f32v)
+              48:   27(fvec2) Load 40(f32v)
+              49:   27(fvec2) FMul 48 47
+                              Store 40(f32v) 49
+              50:   27(fvec2) Load 40(f32v)
+              51:   27(fvec2) Load 40(f32v)
+              52:   27(fvec2) FDiv 51 50
+                              Store 40(f32v) 52
+              53:   27(fvec2) Load 40(f32v)
+              55:   27(fvec2) CompositeConstruct 54 54
+              56:   27(fvec2) FAdd 53 55
+                              Store 40(f32v) 56
+              57:   27(fvec2) Load 40(f32v)
+              58:   27(fvec2) CompositeConstruct 54 54
+              59:   27(fvec2) FSub 57 58
+                              Store 40(f32v) 59
+              63:          60 Load 62(f32m)
+              64:   27(fvec2) CompositeConstruct 54 54
+              65:   27(fvec2) CompositeExtract 63 0
+              66:   27(fvec2) FAdd 65 64
+              67:   27(fvec2) CompositeExtract 63 1
+              68:   27(fvec2) FAdd 67 64
+              69:          60 CompositeConstruct 66 68
+                              Store 62(f32m) 69
+              70:          60 Load 62(f32m)
+              71:   27(fvec2) CompositeConstruct 54 54
+              72:   27(fvec2) CompositeExtract 70 0
+              73:   27(fvec2) FSub 72 71
+              74:   27(fvec2) CompositeExtract 70 1
+              75:   27(fvec2) FSub 74 71
+              76:          60 CompositeConstruct 73 75
+                              Store 62(f32m) 76
+              77:   27(fvec2) Load 40(f32v)
+              78:   27(fvec2) FNegate 77
+                              Store 40(f32v) 78
+              79:          60 Load 62(f32m)
+              80:   27(fvec2) CompositeExtract 79 0
+              81:   27(fvec2) FNegate 80
+              82:   27(fvec2) CompositeExtract 79 1
+              83:   27(fvec2) FNegate 82
+              84:          60 CompositeConstruct 81 83
+                              Store 62(f32m) 84
+              86:     33(ptr) AccessChain 40(f32v) 32
+              87:   26(float) Load 86
+              89:     33(ptr) AccessChain 40(f32v) 88
+              90:   26(float) Load 89
+              91:   26(float) FAdd 87 90
+                              Store 85(f32) 91
+              92:     33(ptr) AccessChain 40(f32v) 32
+              93:   26(float) Load 92
+              94:     33(ptr) AccessChain 40(f32v) 88
+              95:   26(float) Load 94
+              96:   26(float) FSub 93 95
+                              Store 85(f32) 96
+              97:     33(ptr) AccessChain 40(f32v) 32
+              98:   26(float) Load 97
+              99:     33(ptr) AccessChain 40(f32v) 88
+             100:   26(float) Load 99
+             101:   26(float) FMul 98 100
+                              Store 85(f32) 101
+             102:     33(ptr) AccessChain 40(f32v) 32
+             103:   26(float) Load 102
+             104:     33(ptr) AccessChain 40(f32v) 88
+             105:   26(float) Load 104
+             106:   26(float) FDiv 103 105
+                              Store 85(f32) 106
+             110:     33(ptr) AccessChain 40(f32v) 32
+             111:   26(float) Load 110
+             112:   26(float) Load 85(f32)
+             113:   107(bool) FOrdNotEqual 111 112
+                              Store 109(b) 113
+             114:     33(ptr) AccessChain 40(f32v) 88
+             115:   26(float) Load 114
+             116:   26(float) Load 85(f32)
+             117:   107(bool) FOrdEqual 115 116
+                              Store 109(b) 117
+             118:     33(ptr) AccessChain 40(f32v) 32
+             119:   26(float) Load 118
+             120:   26(float) Load 85(f32)
+             121:   107(bool) FOrdGreaterThan 119 120
+                              Store 109(b) 121
+             122:     33(ptr) AccessChain 40(f32v) 88
+             123:   26(float) Load 122
+             124:   26(float) Load 85(f32)
+             125:   107(bool) FOrdLessThan 123 124
+                              Store 109(b) 125
+             126:     33(ptr) AccessChain 40(f32v) 32
+             127:   26(float) Load 126
+             128:   26(float) Load 85(f32)
+             129:   107(bool) FOrdGreaterThanEqual 127 128
+                              Store 109(b) 129
+             130:     33(ptr) AccessChain 40(f32v) 88
+             131:   26(float) Load 130
+             132:   26(float) Load 85(f32)
+             133:   107(bool) FOrdLessThanEqual 131 132
+                              Store 109(b) 133
+             134:   27(fvec2) Load 40(f32v)
+             135:   26(float) Load 85(f32)
+             136:   27(fvec2) VectorTimesScalar 134 135
+                              Store 40(f32v) 136
+             137:          60 Load 62(f32m)
+             138:   26(float) Load 85(f32)
+             139:          60 MatrixTimesScalar 137 138
+                              Store 62(f32m) 139
+             140:          60 Load 62(f32m)
+             141:   27(fvec2) Load 40(f32v)
+             142:   27(fvec2) MatrixTimesVector 140 141
+                              Store 40(f32v) 142
+             143:   27(fvec2) Load 40(f32v)
+             144:          60 Load 62(f32m)
+             145:   27(fvec2) VectorTimesMatrix 143 144
+                              Store 40(f32v) 145
+             146:          60 Load 62(f32m)
+             147:          60 Load 62(f32m)
+             148:          60 MatrixTimesMatrix 146 147
+                              Store 62(f32m) 148
+                              Return
+                              FunctionEnd
+   10(typeCast():           2 Function None 3
+              11:             Label
+       152(f64v):    151(ptr) Variable Function
+       155(f32v):    154(ptr) Variable Function
+         160(bv):    159(ptr) Variable Function
+       175(f16v):    174(ptr) Variable Function
+        183(i8v):    182(ptr) Variable Function
+       189(i16v):    188(ptr) Variable Function
+       195(i32v):    194(ptr) Variable Function
+       201(i64v):    200(ptr) Variable Function
+        204(u8v):    182(ptr) Variable Function
+       210(u16v):    209(ptr) Variable Function
+       215(u32v):    214(ptr) Variable Function
+       221(u64v):    220(ptr) Variable Function
+             156:  153(fvec3) Load 155(f32v)
+             157:  150(fvec3) FConvert 156
+                              Store 152(f64v) 157
+             161:  158(bvec3) Load 160(bv)
+             165:  153(fvec3) Select 161 164 163
+                              Store 155(f32v) 165
+             166:  153(fvec3) Load 155(f32v)
+             167:  158(bvec3) FOrdNotEqual 166 163
+                              Store 160(bv) 167
+             168:  150(fvec3) Load 152(f64v)
+             169:  153(fvec3) FConvert 168
+                              Store 155(f32v) 169
+             170:  153(fvec3) Load 155(f32v)
+             171:  150(fvec3) FConvert 170
+                              Store 152(f64v) 171
+             176:  173(fvec3) Load 175(f16v)
+             177:  153(fvec3) FConvert 176
+                              Store 155(f32v) 177
+             178:  153(fvec3) Load 155(f32v)
+             179:  173(fvec3) FConvert 178
+                              Store 175(f16v) 179
+             184:  153(fvec3) Load 155(f32v)
+             185:  181(ivec3) ConvertFToS 184
+                              Store 183(i8v) 185
+             190:  153(fvec3) Load 155(f32v)
+             191:  187(ivec3) ConvertFToS 190
+                              Store 189(i16v) 191
+             196:  153(fvec3) Load 155(f32v)
+             197:  193(ivec3) ConvertFToS 196
+                              Store 195(i32v) 197
+             202:  153(fvec3) Load 155(f32v)
+             203:  199(ivec3) ConvertFToS 202
+                              Store 201(i64v) 203
+             205:  153(fvec3) Load 155(f32v)
+             206:  181(ivec3) ConvertFToS 205
+                              Store 204(u8v) 206
+             211:  153(fvec3) Load 155(f32v)
+             212:  208(ivec3) ConvertFToU 211
+                              Store 210(u16v) 212
+             216:  153(fvec3) Load 155(f32v)
+             217:  213(ivec3) ConvertFToU 216
+                              Store 215(u32v) 217
+             222:  153(fvec3) Load 155(f32v)
+             223:  219(ivec3) ConvertFToU 222
+                              Store 221(u64v) 223
+                              Return
+                              FunctionEnd
+12(builtinAngleTrigFuncs():           2 Function None 3
+              13:             Label
+      226(f32v2):    225(ptr) Variable Function
+      227(f32v1):    225(ptr) Variable Function
+             228:  224(fvec4) Load 227(f32v1)
+             229:  224(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 228
+                              Store 226(f32v2) 229
+             230:  224(fvec4) Load 227(f32v1)
+             231:  224(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 230
+                              Store 226(f32v2) 231
+             232:  224(fvec4) Load 227(f32v1)
+             233:  224(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 232
+                              Store 226(f32v2) 233
+             234:  224(fvec4) Load 227(f32v1)
+             235:  224(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 234
+                              Store 226(f32v2) 235
+             236:  224(fvec4) Load 227(f32v1)
+             237:  224(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 236
+                              Store 226(f32v2) 237
+             238:  224(fvec4) Load 227(f32v1)
+             239:  224(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 238
+                              Store 226(f32v2) 239
+             240:  224(fvec4) Load 227(f32v1)
+             241:  224(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 240
+                              Store 226(f32v2) 241
+             242:  224(fvec4) Load 227(f32v1)
+             243:  224(fvec4) Load 226(f32v2)
+             244:  224(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 242 243
+                              Store 226(f32v2) 244
+             245:  224(fvec4) Load 227(f32v1)
+             246:  224(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 245
+                              Store 226(f32v2) 246
+             247:  224(fvec4) Load 227(f32v1)
+             248:  224(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 247
+                              Store 226(f32v2) 248
+             249:  224(fvec4) Load 227(f32v1)
+             250:  224(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 249
+                              Store 226(f32v2) 250
+             251:  224(fvec4) Load 227(f32v1)
+             252:  224(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 251
+                              Store 226(f32v2) 252
+             253:  224(fvec4) Load 227(f32v1)
+             254:  224(fvec4) ExtInst 1(GLSL.std.450) 22(Asinh) 253
+                              Store 226(f32v2) 254
+             255:  224(fvec4) Load 227(f32v1)
+             256:  224(fvec4) ExtInst 1(GLSL.std.450) 23(Acosh) 255
+                              Store 226(f32v2) 256
+             257:  224(fvec4) Load 227(f32v1)
+             258:  224(fvec4) ExtInst 1(GLSL.std.450) 24(Atanh) 257
+                              Store 226(f32v2) 258
+                              Return
+                              FunctionEnd
+14(builtinExpFuncs():           2 Function None 3
+              15:             Label
+      259(f32v2):     28(ptr) Variable Function
+      260(f32v1):     28(ptr) Variable Function
+             261:   27(fvec2) Load 260(f32v1)
+             262:   27(fvec2) Load 259(f32v2)
+             263:   27(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 261 262
+                              Store 259(f32v2) 263
+             264:   27(fvec2) Load 260(f32v1)
+             265:   27(fvec2) ExtInst 1(GLSL.std.450) 27(Exp) 264
+                              Store 259(f32v2) 265
+             266:   27(fvec2) Load 260(f32v1)
+             267:   27(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 266
+                              Store 259(f32v2) 267
+             268:   27(fvec2) Load 260(f32v1)
+             269:   27(fvec2) ExtInst 1(GLSL.std.450) 29(Exp2) 268
+                              Store 259(f32v2) 269
+             270:   27(fvec2) Load 260(f32v1)
+             271:   27(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 270
+                              Store 259(f32v2) 271
+             272:   27(fvec2) Load 260(f32v1)
+             273:   27(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 272
+                              Store 259(f32v2) 273
+             274:   27(fvec2) Load 260(f32v1)
+             275:   27(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 274
+                              Store 259(f32v2) 275
+                              Return
+                              FunctionEnd
+16(builtinCommonFuncs():           2 Function None 3
+              17:             Label
+      276(f32v2):    154(ptr) Variable Function
+      277(f32v1):    154(ptr) Variable Function
+        298(f32):     33(ptr) Variable Function
+      302(f32v3):    154(ptr) Variable Function
+         342(bv):    159(ptr) Variable Function
+          363(b):    108(ptr) Variable Function
+         373(iv):    194(ptr) Variable Function
+             278:  153(fvec3) Load 277(f32v1)
+             279:  153(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 278
+                              Store 276(f32v2) 279
+             280:  153(fvec3) Load 277(f32v1)
+             281:  153(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 280
+                              Store 276(f32v2) 281
+             282:  153(fvec3) Load 277(f32v1)
+             283:  153(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 282
+                              Store 276(f32v2) 283
+             284:  153(fvec3) Load 277(f32v1)
+             285:  153(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 284
+                              Store 276(f32v2) 285
+             286:  153(fvec3) Load 277(f32v1)
+             287:  153(fvec3) ExtInst 1(GLSL.std.450) 1(Round) 286
+                              Store 276(f32v2) 287
+             288:  153(fvec3) Load 277(f32v1)
+             289:  153(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 288
+                              Store 276(f32v2) 289
+             290:  153(fvec3) Load 277(f32v1)
+             291:  153(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 290
+                              Store 276(f32v2) 291
+             292:  153(fvec3) Load 277(f32v1)
+             293:  153(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 292
+                              Store 276(f32v2) 293
+             294:  153(fvec3) Load 277(f32v1)
+             295:  153(fvec3) Load 276(f32v2)
+             296:  153(fvec3) FMod 294 295
+                              Store 276(f32v2) 296
+             297:  153(fvec3) Load 277(f32v1)
+             299:   26(float) Load 298(f32)
+             300:  153(fvec3) CompositeConstruct 299 299 299
+             301:  153(fvec3) FMod 297 300
+                              Store 276(f32v2) 301
+             303:  153(fvec3) Load 277(f32v1)
+             304:  153(fvec3) ExtInst 1(GLSL.std.450) 35(Modf) 303 276(f32v2)
+                              Store 302(f32v3) 304
+             305:  153(fvec3) Load 277(f32v1)
+             306:  153(fvec3) Load 276(f32v2)
+             307:  153(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 305 306
+                              Store 302(f32v3) 307
+             308:  153(fvec3) Load 277(f32v1)
+             309:   26(float) Load 298(f32)
+             310:  153(fvec3) CompositeConstruct 309 309 309
+             311:  153(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 308 310
+                              Store 302(f32v3) 311
+             312:  153(fvec3) Load 277(f32v1)
+             313:  153(fvec3) Load 276(f32v2)
+             314:  153(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 312 313
+                              Store 302(f32v3) 314
+             315:  153(fvec3) Load 277(f32v1)
+             316:   26(float) Load 298(f32)
+             317:  153(fvec3) CompositeConstruct 316 316 316
+             318:  153(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 315 317
+                              Store 302(f32v3) 318
+             319:  153(fvec3) Load 277(f32v1)
+             320:   26(float) Load 298(f32)
+             321:     33(ptr) AccessChain 276(f32v2) 32
+             322:   26(float) Load 321
+             323:  153(fvec3) CompositeConstruct 320 320 320
+             324:  153(fvec3) CompositeConstruct 322 322 322
+             325:  153(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 319 323 324
+                              Store 302(f32v3) 325
+             326:  153(fvec3) Load 277(f32v1)
+             327:  153(fvec3) Load 276(f32v2)
+             328:   26(float) Load 298(f32)
+             329:  153(fvec3) CompositeConstruct 328 328 328
+             330:  153(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 326 327 329
+                              Store 302(f32v3) 330
+             331:  153(fvec3) Load 277(f32v1)
+             332:  153(fvec3) Load 276(f32v2)
+             333:   26(float) Load 298(f32)
+             334:  153(fvec3) CompositeConstruct 333 333 333
+             335:  153(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 331 332 334
+                              Store 302(f32v3) 335
+             336:  153(fvec3) Load 277(f32v1)
+             337:  153(fvec3) Load 276(f32v2)
+             338:  153(fvec3) Load 302(f32v3)
+             339:  153(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 336 337 338
+                              Store 302(f32v3) 339
+             340:  153(fvec3) Load 277(f32v1)
+             341:  153(fvec3) Load 276(f32v2)
+             343:  158(bvec3) Load 342(bv)
+             344:  153(fvec3) Select 343 341 340
+                              Store 302(f32v3) 344
+             345:  153(fvec3) Load 277(f32v1)
+             346:  153(fvec3) Load 276(f32v2)
+             347:  153(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 345 346
+                              Store 302(f32v3) 347
+             348:   26(float) Load 298(f32)
+             349:  153(fvec3) Load 302(f32v3)
+             350:  153(fvec3) CompositeConstruct 348 348 348
+             351:  153(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 350 349
+                              Store 302(f32v3) 351
+             352:  153(fvec3) Load 277(f32v1)
+             353:  153(fvec3) Load 276(f32v2)
+             354:  153(fvec3) Load 302(f32v3)
+             355:  153(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 352 353 354
+                              Store 302(f32v3) 355
+             356:   26(float) Load 298(f32)
+             357:     33(ptr) AccessChain 277(f32v1) 32
+             358:   26(float) Load 357
+             359:  153(fvec3) Load 276(f32v2)
+             360:  153(fvec3) CompositeConstruct 356 356 356
+             361:  153(fvec3) CompositeConstruct 358 358 358
+             362:  153(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 360 361 359
+                              Store 302(f32v3) 362
+             364:   26(float) Load 298(f32)
+             365:   107(bool) IsNan 364
+                              Store 363(b) 365
+             366:  153(fvec3) Load 277(f32v1)
+             367:  158(bvec3) IsInf 366
+                              Store 342(bv) 367
+             368:  153(fvec3) Load 277(f32v1)
+             369:  153(fvec3) Load 276(f32v2)
+             370:  153(fvec3) Load 302(f32v3)
+             371:  153(fvec3) ExtInst 1(GLSL.std.450) 50(Fma) 368 369 370
+                              Store 302(f32v3) 371
+             372:  153(fvec3) Load 277(f32v1)
+             375:374(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 372
+             376:  193(ivec3) CompositeExtract 375 1
+                              Store 373(iv) 376
+             377:  153(fvec3) CompositeExtract 375 0
+                              Store 276(f32v2) 377
+             378:  153(fvec3) Load 277(f32v1)
+             379:  193(ivec3) Load 373(iv)
+             380:  153(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 378 379
+                              Store 276(f32v2) 380
+                              Return
+                              FunctionEnd
+18(builtinGeometryFuncs():           2 Function None 3
+              19:             Label
+        381(f32):     33(ptr) Variable Function
+      382(f32v1):    154(ptr) Variable Function
+      386(f32v2):    154(ptr) Variable Function
+      392(f32v3):    154(ptr) Variable Function
+             383:  153(fvec3) Load 382(f32v1)
+             384:   26(float) ExtInst 1(GLSL.std.450) 66(Length) 383
+                              Store 381(f32) 384
+             385:  153(fvec3) Load 382(f32v1)
+             387:  153(fvec3) Load 386(f32v2)
+             388:   26(float) ExtInst 1(GLSL.std.450) 67(Distance) 385 387
+                              Store 381(f32) 388
+             389:  153(fvec3) Load 382(f32v1)
+             390:  153(fvec3) Load 386(f32v2)
+             391:   26(float) Dot 389 390
+                              Store 381(f32) 391
+             393:  153(fvec3) Load 382(f32v1)
+             394:  153(fvec3) Load 386(f32v2)
+             395:  153(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 393 394
+                              Store 392(f32v3) 395
+             396:  153(fvec3) Load 382(f32v1)
+             397:  153(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 396
+                              Store 386(f32v2) 397
+             398:  153(fvec3) Load 382(f32v1)
+             399:  153(fvec3) Load 386(f32v2)
+             400:  153(fvec3) Load 392(f32v3)
+             401:  153(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 398 399 400
+                              Store 392(f32v3) 401
+             402:  153(fvec3) Load 382(f32v1)
+             403:  153(fvec3) Load 386(f32v2)
+             404:  153(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 402 403
+                              Store 392(f32v3) 404
+             405:  153(fvec3) Load 382(f32v1)
+             406:  153(fvec3) Load 386(f32v2)
+             407:   26(float) Load 381(f32)
+             408:  153(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 405 406 407
+                              Store 392(f32v3) 408
+                              Return
+                              FunctionEnd
+20(builtinMatrixFuncs():           2 Function None 3
+              21:             Label
+      411(f32m3):    410(ptr) Variable Function
+      412(f32m1):    410(ptr) Variable Function
+      414(f32m2):    410(ptr) Variable Function
+      423(f32v1):    154(ptr) Variable Function
+      425(f32v2):     28(ptr) Variable Function
+      430(f32m4):    429(ptr) Variable Function
+        433(f32):     33(ptr) Variable Function
+      436(f32m5):    435(ptr) Variable Function
+      441(f32m6):    440(ptr) Variable Function
+      442(f32m7):    440(ptr) Variable Function
+             413:         409 Load 412(f32m1)
+             415:         409 Load 414(f32m2)
+             416:  153(fvec3) CompositeExtract 413 0
+             417:  153(fvec3) CompositeExtract 415 0
+             418:  153(fvec3) FMul 416 417
+             419:  153(fvec3) CompositeExtract 413 1
+             420:  153(fvec3) CompositeExtract 415 1
+             421:  153(fvec3) FMul 419 420
+             422:         409 CompositeConstruct 418 421
+                              Store 411(f32m3) 422
+             424:  153(fvec3) Load 423(f32v1)
+             426:   27(fvec2) Load 425(f32v2)
+             427:         409 OuterProduct 424 426
+                              Store 412(f32m1) 427
+             431:         409 Load 412(f32m1)
+             432:         428 Transpose 431
+                              Store 430(f32m4) 432
+             437:         434 Load 436(f32m5)
+             438:   26(float) ExtInst 1(GLSL.std.450) 33(Determinant) 437
+                              Store 433(f32) 438
+             443:         439 Load 442(f32m7)
+             444:         439 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 443
+                              Store 441(f32m6) 444
+                              Return
+                              FunctionEnd
+22(builtinVecRelFuncs():           2 Function None 3
+              23:             Label
+         445(bv):    159(ptr) Variable Function
+      446(f32v1):    154(ptr) Variable Function
+      448(f32v2):    154(ptr) Variable Function
+             447:  153(fvec3) Load 446(f32v1)
+             449:  153(fvec3) Load 448(f32v2)
+             450:  158(bvec3) FOrdLessThan 447 449
+                              Store 445(bv) 450
+             451:  153(fvec3) Load 446(f32v1)
+             452:  153(fvec3) Load 448(f32v2)
+             453:  158(bvec3) FOrdLessThanEqual 451 452
+                              Store 445(bv) 453
+             454:  153(fvec3) Load 446(f32v1)
+             455:  153(fvec3) Load 448(f32v2)
+             456:  158(bvec3) FOrdGreaterThan 454 455
+                              Store 445(bv) 456
+             457:  153(fvec3) Load 446(f32v1)
+             458:  153(fvec3) Load 448(f32v2)
+             459:  158(bvec3) FOrdGreaterThanEqual 457 458
+                              Store 445(bv) 459
+             460:  153(fvec3) Load 446(f32v1)
+             461:  153(fvec3) Load 448(f32v2)
+             462:  158(bvec3) FOrdEqual 460 461
+                              Store 445(bv) 462
+             463:  153(fvec3) Load 446(f32v1)
+             464:  153(fvec3) Load 448(f32v2)
+             465:  158(bvec3) FOrdNotEqual 463 464
+                              Store 445(bv) 465
+                              Return
+                              FunctionEnd
+24(builtinFragProcFuncs():           2 Function None 3
+              25:             Label
+       466(f32v):    154(ptr) Variable Function
+             470:    469(ptr) AccessChain 468(if32v) 32
+             471:   26(float) Load 470
+             472:   26(float) DPdx 471
+             473:     33(ptr) AccessChain 466(f32v) 32
+                              Store 473 472
+             474:    469(ptr) AccessChain 468(if32v) 88
+             475:   26(float) Load 474
+             476:   26(float) DPdy 475
+             477:     33(ptr) AccessChain 466(f32v) 88
+                              Store 477 476
+             478:  153(fvec3) Load 468(if32v)
+             479:   27(fvec2) VectorShuffle 478 478 0 1
+             480:   27(fvec2) DPdxFine 479
+             481:  153(fvec3) Load 466(f32v)
+             482:  153(fvec3) VectorShuffle 481 480 3 4 2
+                              Store 466(f32v) 482
+             483:  153(fvec3) Load 468(if32v)
+             484:   27(fvec2) VectorShuffle 483 483 0 1
+             485:   27(fvec2) DPdyFine 484
+             486:  153(fvec3) Load 466(f32v)
+             487:  153(fvec3) VectorShuffle 486 485 3 4 2
+                              Store 466(f32v) 487
+             488:  153(fvec3) Load 468(if32v)
+             489:  153(fvec3) DPdxCoarse 488
+                              Store 466(f32v) 489
+             490:  153(fvec3) Load 468(if32v)
+             491:  153(fvec3) DPdxCoarse 490
+                              Store 466(f32v) 491
+             492:    469(ptr) AccessChain 468(if32v) 32
+             493:   26(float) Load 492
+             494:   26(float) Fwidth 493
+             495:     33(ptr) AccessChain 466(f32v) 32
+                              Store 495 494
+             496:  153(fvec3) Load 468(if32v)
+             497:   27(fvec2) VectorShuffle 496 496 0 1
+             498:   27(fvec2) FwidthFine 497
+             499:  153(fvec3) Load 466(f32v)
+             500:  153(fvec3) VectorShuffle 499 498 3 4 2
+                              Store 466(f32v) 500
+             501:  153(fvec3) Load 468(if32v)
+             502:  153(fvec3) FwidthCoarse 501
+                              Store 466(f32v) 502
+             503:    469(ptr) AccessChain 468(if32v) 32
+             504:   26(float) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 503
+             505:     33(ptr) AccessChain 466(f32v) 32
+                              Store 505 504
+             507:  153(fvec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 468(if32v) 506
+             508:   27(fvec2) VectorShuffle 507 507 0 1
+             509:  153(fvec3) Load 466(f32v)
+             510:  153(fvec3) VectorShuffle 509 508 3 4 2
+                              Store 466(f32v) 510
+             513:  153(fvec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 468(if32v) 512
+                              Store 466(f32v) 513
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.float64.frag.out b/Test/baseResults/spv.float64.frag.out
new file mode 100644
index 0000000..768de05
--- /dev/null
+++ b/Test/baseResults/spv.float64.frag.out
@@ -0,0 +1,788 @@
+spv.float64.frag
+// Module Version 10300
+// Generated by (magic number): 80005
+// Id's are bound by 521
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Float64
+                              Capability Int64
+                              Capability Int16
+                              Capability Int8
+                              Capability DerivativeControl
+                              Capability InterpolationFunction
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 458
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float16"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float32"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int16"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int32"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int8"
+                              Name 4  "main"
+                              Name 6  "literal("
+                              Name 8  "operators("
+                              Name 10  "typeCast("
+                              Name 12  "builtinAngleTrigFuncs("
+                              Name 14  "builtinExpFuncs("
+                              Name 16  "builtinCommonFuncs("
+                              Name 18  "builtinGeometryFuncs("
+                              Name 20  "builtinMatrixFuncs("
+                              Name 22  "builtinVecRelFuncs("
+                              Name 24  "builtinFragProcFuncs("
+                              Name 29  "f64v"
+                              Name 40  "f64v"
+                              Name 62  "f64m"
+                              Name 85  "f64"
+                              Name 109  "b"
+                              Name 151  "f64v"
+                              Name 154  "bv"
+                              Name 165  "f16v"
+                              Name 173  "i8v"
+                              Name 179  "i16v"
+                              Name 185  "i32v"
+                              Name 191  "i64v"
+                              Name 194  "u8v"
+                              Name 200  "u16v"
+                              Name 205  "u32v"
+                              Name 211  "u64v"
+                              Name 216  "f64v2"
+                              Name 217  "f64v1"
+                              Name 249  "f64v2"
+                              Name 250  "f64v1"
+                              Name 266  "f64v2"
+                              Name 267  "f64v1"
+                              Name 288  "f64"
+                              Name 292  "f64v3"
+                              Name 332  "bv"
+                              Name 353  "b"
+                              Name 363  "iv"
+                              Name 364  "ResType"
+                              Name 371  "f64"
+                              Name 372  "f64v1"
+                              Name 376  "f64v2"
+                              Name 382  "f64v3"
+                              Name 401  "f64m3"
+                              Name 402  "f64m1"
+                              Name 404  "f64m2"
+                              Name 413  "f64v1"
+                              Name 415  "f64v2"
+                              Name 420  "f64m4"
+                              Name 423  "f64"
+                              Name 426  "f64m5"
+                              Name 431  "f64m6"
+                              Name 432  "f64m7"
+                              Name 435  "bv"
+                              Name 436  "f64v1"
+                              Name 438  "f64v2"
+                              Name 456  "f64v"
+                              Name 458  "if64v"
+                              Name 507  "S"
+                              MemberName 507(S) 0  "x"
+                              MemberName 507(S) 1  "y"
+                              MemberName 507(S) 2  "z"
+                              Name 509  "B1"
+                              MemberName 509(B1) 0  "a"
+                              MemberName 509(B1) 1  "b"
+                              MemberName 509(B1) 2  "c"
+                              MemberName 509(B1) 3  "d"
+                              MemberName 509(B1) 4  "e"
+                              MemberName 509(B1) 5  "f"
+                              MemberName 509(B1) 6  "g"
+                              MemberName 509(B1) 7  "h"
+                              Name 511  ""
+                              Name 512  "sf16"
+                              Name 514  "sf"
+                              Name 515  "sd"
+                              Decorate 458(if64v) Flat
+                              Decorate 505 ArrayStride 16
+                              Decorate 506 ArrayStride 64
+                              MemberDecorate 507(S) 0 Offset 0
+                              MemberDecorate 507(S) 1 Offset 16
+                              MemberDecorate 507(S) 2 Offset 32
+                              Decorate 508 ArrayStride 64
+                              MemberDecorate 509(B1) 0 Offset 0
+                              MemberDecorate 509(B1) 1 Offset 16
+                              MemberDecorate 509(B1) 2 Offset 32
+                              MemberDecorate 509(B1) 3 Offset 64
+                              MemberDecorate 509(B1) 4 ColMajor
+                              MemberDecorate 509(B1) 4 Offset 96
+                              MemberDecorate 509(B1) 4 MatrixStride 32
+                              MemberDecorate 509(B1) 5 ColMajor
+                              MemberDecorate 509(B1) 5 Offset 160
+                              MemberDecorate 509(B1) 5 MatrixStride 32
+                              MemberDecorate 509(B1) 6 Offset 288
+                              MemberDecorate 509(B1) 7 Offset 352
+                              Decorate 509(B1) Block
+                              Decorate 511 DescriptorSet 0
+                              Decorate 512(sf16) SpecId 100
+                              Decorate 514(sf) SpecId 101
+                              Decorate 515(sd) SpecId 102
+               2:             TypeVoid
+               3:             TypeFunction 2
+              26:             TypeFloat 64
+              27:             TypeVector 26(float) 2
+              28:             TypePointer Function 27(fvec2)
+              30:   26(float) Constant 2696277389 1051772663
+              31:             TypeInt 32 0
+              32:     31(int) Constant 0
+              33:             TypePointer Function 26(float)
+              35:   26(float) Constant 0 3218079744
+              36:   26(float) Constant 3951369912 1067366481
+              37:   27(fvec2) ConstantComposite 35 36
+              54:   26(float) Constant 0 1072693248
+              60:             TypeMatrix 27(fvec2) 2
+              61:             TypePointer Function 60
+              88:     31(int) Constant 1
+             107:             TypeBool
+             108:             TypePointer Function 107(bool)
+             149:             TypeVector 26(float) 3
+             150:             TypePointer Function 149(fvec3)
+             152:             TypeVector 107(bool) 3
+             153:             TypePointer Function 152(bvec3)
+             156:   26(float) Constant 0 0
+             157:  149(fvec3) ConstantComposite 156 156 156
+             158:  149(fvec3) ConstantComposite 54 54 54
+             162:             TypeFloat 16
+             163:             TypeVector 162(float) 3
+             164:             TypePointer Function 163(fvec3)
+             170:             TypeInt 8 1
+             171:             TypeVector 170(int) 3
+             172:             TypePointer Function 171(ivec3)
+             176:             TypeInt 16 1
+             177:             TypeVector 176(int) 3
+             178:             TypePointer Function 177(ivec3)
+             182:             TypeInt 32 1
+             183:             TypeVector 182(int) 3
+             184:             TypePointer Function 183(ivec3)
+             188:             TypeInt 64 1
+             189:             TypeVector 188(int) 3
+             190:             TypePointer Function 189(ivec3)
+             197:             TypeInt 16 0
+             198:             TypeVector 197(int) 3
+             199:             TypePointer Function 198(ivec3)
+             203:             TypeVector 31(int) 3
+             204:             TypePointer Function 203(ivec3)
+             208:             TypeInt 64 0
+             209:             TypeVector 208(int) 3
+             210:             TypePointer Function 209(ivec3)
+             214:             TypeVector 26(float) 4
+             215:             TypePointer Function 214(fvec4)
+    364(ResType):             TypeStruct 149(fvec3) 183(ivec3)
+             399:             TypeMatrix 149(fvec3) 2
+             400:             TypePointer Function 399
+             418:             TypeMatrix 27(fvec2) 3
+             419:             TypePointer Function 418
+             424:             TypeMatrix 149(fvec3) 3
+             425:             TypePointer Function 424
+             429:             TypeMatrix 214(fvec4) 4
+             430:             TypePointer Function 429
+             457:             TypePointer Input 149(fvec3)
+      458(if64v):    457(ptr) Variable Input
+             459:             TypePointer Input 26(float)
+             496:    182(int) Constant 1
+             501:   26(float) Constant 0 1071644672
+             502:   27(fvec2) ConstantComposite 501 501
+             504:     31(int) Constant 2
+             505:             TypeArray 26(float) 504
+             506:             TypeArray 399 504
+          507(S):             TypeStruct 26(float) 27(fvec2) 149(fvec3)
+             508:             TypeArray 507(S) 504
+         509(B1):             TypeStruct 26(float) 27(fvec2) 149(fvec3) 505 399 506 507(S) 508
+             510:             TypePointer Uniform 509(B1)
+             511:    510(ptr) Variable Uniform
+       512(sf16):  162(float) SpecConstant 12288
+             513:             TypeFloat 32
+         514(sf):  513(float) SpecConstant 1048576000
+         515(sd):   26(float) SpecConstant 0 1071644672
+             516:  513(float) SpecConstantOp 115 512(sf16)
+             517:  513(float) SpecConstantOp 115 512(sf16)
+             518:   26(float) SpecConstantOp 115 517
+             519:  162(float) SpecConstantOp 115 514(sf)
+             520:  162(float) SpecConstantOp 115 515(sd)
+         4(main):           2 Function None 3
+               5:             Label
+                              Return
+                              FunctionEnd
+     6(literal():           2 Function None 3
+               7:             Label
+        29(f64v):     28(ptr) Variable Function
+              34:     33(ptr) AccessChain 29(f64v) 32
+                              Store 34 30
+              38:   27(fvec2) Load 29(f64v)
+              39:   27(fvec2) FAdd 38 37
+                              Store 29(f64v) 39
+                              Return
+                              FunctionEnd
+   8(operators():           2 Function None 3
+               9:             Label
+        40(f64v):     28(ptr) Variable Function
+        62(f64m):     61(ptr) Variable Function
+         85(f64):     33(ptr) Variable Function
+          109(b):    108(ptr) Variable Function
+              41:   27(fvec2) Load 40(f64v)
+              42:   27(fvec2) Load 40(f64v)
+              43:   27(fvec2) FAdd 42 41
+                              Store 40(f64v) 43
+              44:   27(fvec2) Load 40(f64v)
+              45:   27(fvec2) Load 40(f64v)
+              46:   27(fvec2) FSub 45 44
+                              Store 40(f64v) 46
+              47:   27(fvec2) Load 40(f64v)
+              48:   27(fvec2) Load 40(f64v)
+              49:   27(fvec2) FMul 48 47
+                              Store 40(f64v) 49
+              50:   27(fvec2) Load 40(f64v)
+              51:   27(fvec2) Load 40(f64v)
+              52:   27(fvec2) FDiv 51 50
+                              Store 40(f64v) 52
+              53:   27(fvec2) Load 40(f64v)
+              55:   27(fvec2) CompositeConstruct 54 54
+              56:   27(fvec2) FAdd 53 55
+                              Store 40(f64v) 56
+              57:   27(fvec2) Load 40(f64v)
+              58:   27(fvec2) CompositeConstruct 54 54
+              59:   27(fvec2) FSub 57 58
+                              Store 40(f64v) 59
+              63:          60 Load 62(f64m)
+              64:   27(fvec2) CompositeConstruct 54 54
+              65:   27(fvec2) CompositeExtract 63 0
+              66:   27(fvec2) FAdd 65 64
+              67:   27(fvec2) CompositeExtract 63 1
+              68:   27(fvec2) FAdd 67 64
+              69:          60 CompositeConstruct 66 68
+                              Store 62(f64m) 69
+              70:          60 Load 62(f64m)
+              71:   27(fvec2) CompositeConstruct 54 54
+              72:   27(fvec2) CompositeExtract 70 0
+              73:   27(fvec2) FSub 72 71
+              74:   27(fvec2) CompositeExtract 70 1
+              75:   27(fvec2) FSub 74 71
+              76:          60 CompositeConstruct 73 75
+                              Store 62(f64m) 76
+              77:   27(fvec2) Load 40(f64v)
+              78:   27(fvec2) FNegate 77
+                              Store 40(f64v) 78
+              79:          60 Load 62(f64m)
+              80:   27(fvec2) CompositeExtract 79 0
+              81:   27(fvec2) FNegate 80
+              82:   27(fvec2) CompositeExtract 79 1
+              83:   27(fvec2) FNegate 82
+              84:          60 CompositeConstruct 81 83
+                              Store 62(f64m) 84
+              86:     33(ptr) AccessChain 40(f64v) 32
+              87:   26(float) Load 86
+              89:     33(ptr) AccessChain 40(f64v) 88
+              90:   26(float) Load 89
+              91:   26(float) FAdd 87 90
+                              Store 85(f64) 91
+              92:     33(ptr) AccessChain 40(f64v) 32
+              93:   26(float) Load 92
+              94:     33(ptr) AccessChain 40(f64v) 88
+              95:   26(float) Load 94
+              96:   26(float) FSub 93 95
+                              Store 85(f64) 96
+              97:     33(ptr) AccessChain 40(f64v) 32
+              98:   26(float) Load 97
+              99:     33(ptr) AccessChain 40(f64v) 88
+             100:   26(float) Load 99
+             101:   26(float) FMul 98 100
+                              Store 85(f64) 101
+             102:     33(ptr) AccessChain 40(f64v) 32
+             103:   26(float) Load 102
+             104:     33(ptr) AccessChain 40(f64v) 88
+             105:   26(float) Load 104
+             106:   26(float) FDiv 103 105
+                              Store 85(f64) 106
+             110:     33(ptr) AccessChain 40(f64v) 32
+             111:   26(float) Load 110
+             112:   26(float) Load 85(f64)
+             113:   107(bool) FOrdNotEqual 111 112
+                              Store 109(b) 113
+             114:     33(ptr) AccessChain 40(f64v) 88
+             115:   26(float) Load 114
+             116:   26(float) Load 85(f64)
+             117:   107(bool) FOrdEqual 115 116
+                              Store 109(b) 117
+             118:     33(ptr) AccessChain 40(f64v) 32
+             119:   26(float) Load 118
+             120:   26(float) Load 85(f64)
+             121:   107(bool) FOrdGreaterThan 119 120
+                              Store 109(b) 121
+             122:     33(ptr) AccessChain 40(f64v) 88
+             123:   26(float) Load 122
+             124:   26(float) Load 85(f64)
+             125:   107(bool) FOrdLessThan 123 124
+                              Store 109(b) 125
+             126:     33(ptr) AccessChain 40(f64v) 32
+             127:   26(float) Load 126
+             128:   26(float) Load 85(f64)
+             129:   107(bool) FOrdGreaterThanEqual 127 128
+                              Store 109(b) 129
+             130:     33(ptr) AccessChain 40(f64v) 88
+             131:   26(float) Load 130
+             132:   26(float) Load 85(f64)
+             133:   107(bool) FOrdLessThanEqual 131 132
+                              Store 109(b) 133
+             134:   27(fvec2) Load 40(f64v)
+             135:   26(float) Load 85(f64)
+             136:   27(fvec2) VectorTimesScalar 134 135
+                              Store 40(f64v) 136
+             137:          60 Load 62(f64m)
+             138:   26(float) Load 85(f64)
+             139:          60 MatrixTimesScalar 137 138
+                              Store 62(f64m) 139
+             140:          60 Load 62(f64m)
+             141:   27(fvec2) Load 40(f64v)
+             142:   27(fvec2) MatrixTimesVector 140 141
+                              Store 40(f64v) 142
+             143:   27(fvec2) Load 40(f64v)
+             144:          60 Load 62(f64m)
+             145:   27(fvec2) VectorTimesMatrix 143 144
+                              Store 40(f64v) 145
+             146:          60 Load 62(f64m)
+             147:          60 Load 62(f64m)
+             148:          60 MatrixTimesMatrix 146 147
+                              Store 62(f64m) 148
+                              Return
+                              FunctionEnd
+   10(typeCast():           2 Function None 3
+              11:             Label
+       151(f64v):    150(ptr) Variable Function
+         154(bv):    153(ptr) Variable Function
+       165(f16v):    164(ptr) Variable Function
+        173(i8v):    172(ptr) Variable Function
+       179(i16v):    178(ptr) Variable Function
+       185(i32v):    184(ptr) Variable Function
+       191(i64v):    190(ptr) Variable Function
+        194(u8v):    172(ptr) Variable Function
+       200(u16v):    199(ptr) Variable Function
+       205(u32v):    204(ptr) Variable Function
+       211(u64v):    210(ptr) Variable Function
+             155:  152(bvec3) Load 154(bv)
+             159:  149(fvec3) Select 155 158 157
+                              Store 151(f64v) 159
+             160:  149(fvec3) Load 151(f64v)
+             161:  152(bvec3) FOrdNotEqual 160 157
+                              Store 154(bv) 161
+             166:  163(fvec3) Load 165(f16v)
+             167:  149(fvec3) FConvert 166
+                              Store 151(f64v) 167
+             168:  149(fvec3) Load 151(f64v)
+             169:  163(fvec3) FConvert 168
+                              Store 165(f16v) 169
+             174:  149(fvec3) Load 151(f64v)
+             175:  171(ivec3) ConvertFToS 174
+                              Store 173(i8v) 175
+             180:  149(fvec3) Load 151(f64v)
+             181:  177(ivec3) ConvertFToS 180
+                              Store 179(i16v) 181
+             186:  149(fvec3) Load 151(f64v)
+             187:  183(ivec3) ConvertFToS 186
+                              Store 185(i32v) 187
+             192:  149(fvec3) Load 151(f64v)
+             193:  189(ivec3) ConvertFToS 192
+                              Store 191(i64v) 193
+             195:  149(fvec3) Load 151(f64v)
+             196:  171(ivec3) ConvertFToS 195
+                              Store 194(u8v) 196
+             201:  149(fvec3) Load 151(f64v)
+             202:  198(ivec3) ConvertFToU 201
+                              Store 200(u16v) 202
+             206:  149(fvec3) Load 151(f64v)
+             207:  203(ivec3) ConvertFToU 206
+                              Store 205(u32v) 207
+             212:  149(fvec3) Load 151(f64v)
+             213:  209(ivec3) ConvertFToU 212
+                              Store 211(u64v) 213
+                              Return
+                              FunctionEnd
+12(builtinAngleTrigFuncs():           2 Function None 3
+              13:             Label
+      216(f64v2):    215(ptr) Variable Function
+      217(f64v1):    215(ptr) Variable Function
+             218:  214(fvec4) Load 217(f64v1)
+             219:  214(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 218
+                              Store 216(f64v2) 219
+             220:  214(fvec4) Load 217(f64v1)
+             221:  214(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 220
+                              Store 216(f64v2) 221
+             222:  214(fvec4) Load 217(f64v1)
+             223:  214(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 222
+                              Store 216(f64v2) 223
+             224:  214(fvec4) Load 217(f64v1)
+             225:  214(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 224
+                              Store 216(f64v2) 225
+             226:  214(fvec4) Load 217(f64v1)
+             227:  214(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 226
+                              Store 216(f64v2) 227
+             228:  214(fvec4) Load 217(f64v1)
+             229:  214(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 228
+                              Store 216(f64v2) 229
+             230:  214(fvec4) Load 217(f64v1)
+             231:  214(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 230
+                              Store 216(f64v2) 231
+             232:  214(fvec4) Load 217(f64v1)
+             233:  214(fvec4) Load 216(f64v2)
+             234:  214(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 232 233
+                              Store 216(f64v2) 234
+             235:  214(fvec4) Load 217(f64v1)
+             236:  214(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 235
+                              Store 216(f64v2) 236
+             237:  214(fvec4) Load 217(f64v1)
+             238:  214(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 237
+                              Store 216(f64v2) 238
+             239:  214(fvec4) Load 217(f64v1)
+             240:  214(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 239
+                              Store 216(f64v2) 240
+             241:  214(fvec4) Load 217(f64v1)
+             242:  214(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 241
+                              Store 216(f64v2) 242
+             243:  214(fvec4) Load 217(f64v1)
+             244:  214(fvec4) ExtInst 1(GLSL.std.450) 22(Asinh) 243
+                              Store 216(f64v2) 244
+             245:  214(fvec4) Load 217(f64v1)
+             246:  214(fvec4) ExtInst 1(GLSL.std.450) 23(Acosh) 245
+                              Store 216(f64v2) 246
+             247:  214(fvec4) Load 217(f64v1)
+             248:  214(fvec4) ExtInst 1(GLSL.std.450) 24(Atanh) 247
+                              Store 216(f64v2) 248
+                              Return
+                              FunctionEnd
+14(builtinExpFuncs():           2 Function None 3
+              15:             Label
+      249(f64v2):     28(ptr) Variable Function
+      250(f64v1):     28(ptr) Variable Function
+             251:   27(fvec2) Load 250(f64v1)
+             252:   27(fvec2) Load 249(f64v2)
+             253:   27(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 251 252
+                              Store 249(f64v2) 253
+             254:   27(fvec2) Load 250(f64v1)
+             255:   27(fvec2) ExtInst 1(GLSL.std.450) 27(Exp) 254
+                              Store 249(f64v2) 255
+             256:   27(fvec2) Load 250(f64v1)
+             257:   27(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 256
+                              Store 249(f64v2) 257
+             258:   27(fvec2) Load 250(f64v1)
+             259:   27(fvec2) ExtInst 1(GLSL.std.450) 29(Exp2) 258
+                              Store 249(f64v2) 259
+             260:   27(fvec2) Load 250(f64v1)
+             261:   27(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 260
+                              Store 249(f64v2) 261
+             262:   27(fvec2) Load 250(f64v1)
+             263:   27(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 262
+                              Store 249(f64v2) 263
+             264:   27(fvec2) Load 250(f64v1)
+             265:   27(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 264
+                              Store 249(f64v2) 265
+                              Return
+                              FunctionEnd
+16(builtinCommonFuncs():           2 Function None 3
+              17:             Label
+      266(f64v2):    150(ptr) Variable Function
+      267(f64v1):    150(ptr) Variable Function
+        288(f64):     33(ptr) Variable Function
+      292(f64v3):    150(ptr) Variable Function
+         332(bv):    153(ptr) Variable Function
+          353(b):    108(ptr) Variable Function
+         363(iv):    184(ptr) Variable Function
+             268:  149(fvec3) Load 267(f64v1)
+             269:  149(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 268
+                              Store 266(f64v2) 269
+             270:  149(fvec3) Load 267(f64v1)
+             271:  149(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 270
+                              Store 266(f64v2) 271
+             272:  149(fvec3) Load 267(f64v1)
+             273:  149(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 272
+                              Store 266(f64v2) 273
+             274:  149(fvec3) Load 267(f64v1)
+             275:  149(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 274
+                              Store 266(f64v2) 275
+             276:  149(fvec3) Load 267(f64v1)
+             277:  149(fvec3) ExtInst 1(GLSL.std.450) 1(Round) 276
+                              Store 266(f64v2) 277
+             278:  149(fvec3) Load 267(f64v1)
+             279:  149(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 278
+                              Store 266(f64v2) 279
+             280:  149(fvec3) Load 267(f64v1)
+             281:  149(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 280
+                              Store 266(f64v2) 281
+             282:  149(fvec3) Load 267(f64v1)
+             283:  149(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 282
+                              Store 266(f64v2) 283
+             284:  149(fvec3) Load 267(f64v1)
+             285:  149(fvec3) Load 266(f64v2)
+             286:  149(fvec3) FMod 284 285
+                              Store 266(f64v2) 286
+             287:  149(fvec3) Load 267(f64v1)
+             289:   26(float) Load 288(f64)
+             290:  149(fvec3) CompositeConstruct 289 289 289
+             291:  149(fvec3) FMod 287 290
+                              Store 266(f64v2) 291
+             293:  149(fvec3) Load 267(f64v1)
+             294:  149(fvec3) ExtInst 1(GLSL.std.450) 35(Modf) 293 266(f64v2)
+                              Store 292(f64v3) 294
+             295:  149(fvec3) Load 267(f64v1)
+             296:  149(fvec3) Load 266(f64v2)
+             297:  149(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 295 296
+                              Store 292(f64v3) 297
+             298:  149(fvec3) Load 267(f64v1)
+             299:   26(float) Load 288(f64)
+             300:  149(fvec3) CompositeConstruct 299 299 299
+             301:  149(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 298 300
+                              Store 292(f64v3) 301
+             302:  149(fvec3) Load 267(f64v1)
+             303:  149(fvec3) Load 266(f64v2)
+             304:  149(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 302 303
+                              Store 292(f64v3) 304
+             305:  149(fvec3) Load 267(f64v1)
+             306:   26(float) Load 288(f64)
+             307:  149(fvec3) CompositeConstruct 306 306 306
+             308:  149(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 305 307
+                              Store 292(f64v3) 308
+             309:  149(fvec3) Load 267(f64v1)
+             310:   26(float) Load 288(f64)
+             311:     33(ptr) AccessChain 266(f64v2) 32
+             312:   26(float) Load 311
+             313:  149(fvec3) CompositeConstruct 310 310 310
+             314:  149(fvec3) CompositeConstruct 312 312 312
+             315:  149(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 309 313 314
+                              Store 292(f64v3) 315
+             316:  149(fvec3) Load 267(f64v1)
+             317:  149(fvec3) Load 266(f64v2)
+             318:   26(float) Load 288(f64)
+             319:  149(fvec3) CompositeConstruct 318 318 318
+             320:  149(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 316 317 319
+                              Store 292(f64v3) 320
+             321:  149(fvec3) Load 267(f64v1)
+             322:  149(fvec3) Load 266(f64v2)
+             323:   26(float) Load 288(f64)
+             324:  149(fvec3) CompositeConstruct 323 323 323
+             325:  149(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 321 322 324
+                              Store 292(f64v3) 325
+             326:  149(fvec3) Load 267(f64v1)
+             327:  149(fvec3) Load 266(f64v2)
+             328:  149(fvec3) Load 292(f64v3)
+             329:  149(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 326 327 328
+                              Store 292(f64v3) 329
+             330:  149(fvec3) Load 267(f64v1)
+             331:  149(fvec3) Load 266(f64v2)
+             333:  152(bvec3) Load 332(bv)
+             334:  149(fvec3) Select 333 331 330
+                              Store 292(f64v3) 334
+             335:  149(fvec3) Load 267(f64v1)
+             336:  149(fvec3) Load 266(f64v2)
+             337:  149(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 335 336
+                              Store 292(f64v3) 337
+             338:   26(float) Load 288(f64)
+             339:  149(fvec3) Load 292(f64v3)
+             340:  149(fvec3) CompositeConstruct 338 338 338
+             341:  149(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 340 339
+                              Store 292(f64v3) 341
+             342:  149(fvec3) Load 267(f64v1)
+             343:  149(fvec3) Load 266(f64v2)
+             344:  149(fvec3) Load 292(f64v3)
+             345:  149(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 342 343 344
+                              Store 292(f64v3) 345
+             346:   26(float) Load 288(f64)
+             347:     33(ptr) AccessChain 267(f64v1) 32
+             348:   26(float) Load 347
+             349:  149(fvec3) Load 266(f64v2)
+             350:  149(fvec3) CompositeConstruct 346 346 346
+             351:  149(fvec3) CompositeConstruct 348 348 348
+             352:  149(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 350 351 349
+                              Store 292(f64v3) 352
+             354:   26(float) Load 288(f64)
+             355:   107(bool) IsNan 354
+                              Store 353(b) 355
+             356:  149(fvec3) Load 267(f64v1)
+             357:  152(bvec3) IsInf 356
+                              Store 332(bv) 357
+             358:  149(fvec3) Load 267(f64v1)
+             359:  149(fvec3) Load 266(f64v2)
+             360:  149(fvec3) Load 292(f64v3)
+             361:  149(fvec3) ExtInst 1(GLSL.std.450) 50(Fma) 358 359 360
+                              Store 292(f64v3) 361
+             362:  149(fvec3) Load 267(f64v1)
+             365:364(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 362
+             366:  183(ivec3) CompositeExtract 365 1
+                              Store 363(iv) 366
+             367:  149(fvec3) CompositeExtract 365 0
+                              Store 266(f64v2) 367
+             368:  149(fvec3) Load 267(f64v1)
+             369:  183(ivec3) Load 363(iv)
+             370:  149(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 368 369
+                              Store 266(f64v2) 370
+                              Return
+                              FunctionEnd
+18(builtinGeometryFuncs():           2 Function None 3
+              19:             Label
+        371(f64):     33(ptr) Variable Function
+      372(f64v1):    150(ptr) Variable Function
+      376(f64v2):    150(ptr) Variable Function
+      382(f64v3):    150(ptr) Variable Function
+             373:  149(fvec3) Load 372(f64v1)
+             374:   26(float) ExtInst 1(GLSL.std.450) 66(Length) 373
+                              Store 371(f64) 374
+             375:  149(fvec3) Load 372(f64v1)
+             377:  149(fvec3) Load 376(f64v2)
+             378:   26(float) ExtInst 1(GLSL.std.450) 67(Distance) 375 377
+                              Store 371(f64) 378
+             379:  149(fvec3) Load 372(f64v1)
+             380:  149(fvec3) Load 376(f64v2)
+             381:   26(float) Dot 379 380
+                              Store 371(f64) 381
+             383:  149(fvec3) Load 372(f64v1)
+             384:  149(fvec3) Load 376(f64v2)
+             385:  149(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 383 384
+                              Store 382(f64v3) 385
+             386:  149(fvec3) Load 372(f64v1)
+             387:  149(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 386
+                              Store 376(f64v2) 387
+             388:  149(fvec3) Load 372(f64v1)
+             389:  149(fvec3) Load 376(f64v2)
+             390:  149(fvec3) Load 382(f64v3)
+             391:  149(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 388 389 390
+                              Store 382(f64v3) 391
+             392:  149(fvec3) Load 372(f64v1)
+             393:  149(fvec3) Load 376(f64v2)
+             394:  149(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 392 393
+                              Store 382(f64v3) 394
+             395:  149(fvec3) Load 372(f64v1)
+             396:  149(fvec3) Load 376(f64v2)
+             397:   26(float) Load 371(f64)
+             398:  149(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 395 396 397
+                              Store 382(f64v3) 398
+                              Return
+                              FunctionEnd
+20(builtinMatrixFuncs():           2 Function None 3
+              21:             Label
+      401(f64m3):    400(ptr) Variable Function
+      402(f64m1):    400(ptr) Variable Function
+      404(f64m2):    400(ptr) Variable Function
+      413(f64v1):    150(ptr) Variable Function
+      415(f64v2):     28(ptr) Variable Function
+      420(f64m4):    419(ptr) Variable Function
+        423(f64):     33(ptr) Variable Function
+      426(f64m5):    425(ptr) Variable Function
+      431(f64m6):    430(ptr) Variable Function
+      432(f64m7):    430(ptr) Variable Function
+             403:         399 Load 402(f64m1)
+             405:         399 Load 404(f64m2)
+             406:  149(fvec3) CompositeExtract 403 0
+             407:  149(fvec3) CompositeExtract 405 0
+             408:  149(fvec3) FMul 406 407
+             409:  149(fvec3) CompositeExtract 403 1
+             410:  149(fvec3) CompositeExtract 405 1
+             411:  149(fvec3) FMul 409 410
+             412:         399 CompositeConstruct 408 411
+                              Store 401(f64m3) 412
+             414:  149(fvec3) Load 413(f64v1)
+             416:   27(fvec2) Load 415(f64v2)
+             417:         399 OuterProduct 414 416
+                              Store 402(f64m1) 417
+             421:         399 Load 402(f64m1)
+             422:         418 Transpose 421
+                              Store 420(f64m4) 422
+             427:         424 Load 426(f64m5)
+             428:   26(float) ExtInst 1(GLSL.std.450) 33(Determinant) 427
+                              Store 423(f64) 428
+             433:         429 Load 432(f64m7)
+             434:         429 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 433
+                              Store 431(f64m6) 434
+                              Return
+                              FunctionEnd
+22(builtinVecRelFuncs():           2 Function None 3
+              23:             Label
+         435(bv):    153(ptr) Variable Function
+      436(f64v1):    150(ptr) Variable Function
+      438(f64v2):    150(ptr) Variable Function
+             437:  149(fvec3) Load 436(f64v1)
+             439:  149(fvec3) Load 438(f64v2)
+             440:  152(bvec3) FOrdLessThan 437 439
+                              Store 435(bv) 440
+             441:  149(fvec3) Load 436(f64v1)
+             442:  149(fvec3) Load 438(f64v2)
+             443:  152(bvec3) FOrdLessThanEqual 441 442
+                              Store 435(bv) 443
+             444:  149(fvec3) Load 436(f64v1)
+             445:  149(fvec3) Load 438(f64v2)
+             446:  152(bvec3) FOrdGreaterThan 444 445
+                              Store 435(bv) 446
+             447:  149(fvec3) Load 436(f64v1)
+             448:  149(fvec3) Load 438(f64v2)
+             449:  152(bvec3) FOrdGreaterThanEqual 447 448
+                              Store 435(bv) 449
+             450:  149(fvec3) Load 436(f64v1)
+             451:  149(fvec3) Load 438(f64v2)
+             452:  152(bvec3) FOrdEqual 450 451
+                              Store 435(bv) 452
+             453:  149(fvec3) Load 436(f64v1)
+             454:  149(fvec3) Load 438(f64v2)
+             455:  152(bvec3) FOrdNotEqual 453 454
+                              Store 435(bv) 455
+                              Return
+                              FunctionEnd
+24(builtinFragProcFuncs():           2 Function None 3
+              25:             Label
+       456(f64v):    150(ptr) Variable Function
+             460:    459(ptr) AccessChain 458(if64v) 32
+             461:   26(float) Load 460
+             462:   26(float) DPdx 461
+             463:     33(ptr) AccessChain 456(f64v) 32
+                              Store 463 462
+             464:    459(ptr) AccessChain 458(if64v) 88
+             465:   26(float) Load 464
+             466:   26(float) DPdy 465
+             467:     33(ptr) AccessChain 456(f64v) 88
+                              Store 467 466
+             468:  149(fvec3) Load 458(if64v)
+             469:   27(fvec2) VectorShuffle 468 468 0 1
+             470:   27(fvec2) DPdxFine 469
+             471:  149(fvec3) Load 456(f64v)
+             472:  149(fvec3) VectorShuffle 471 470 3 4 2
+                              Store 456(f64v) 472
+             473:  149(fvec3) Load 458(if64v)
+             474:   27(fvec2) VectorShuffle 473 473 0 1
+             475:   27(fvec2) DPdyFine 474
+             476:  149(fvec3) Load 456(f64v)
+             477:  149(fvec3) VectorShuffle 476 475 3 4 2
+                              Store 456(f64v) 477
+             478:  149(fvec3) Load 458(if64v)
+             479:  149(fvec3) DPdxCoarse 478
+                              Store 456(f64v) 479
+             480:  149(fvec3) Load 458(if64v)
+             481:  149(fvec3) DPdxCoarse 480
+                              Store 456(f64v) 481
+             482:    459(ptr) AccessChain 458(if64v) 32
+             483:   26(float) Load 482
+             484:   26(float) Fwidth 483
+             485:     33(ptr) AccessChain 456(f64v) 32
+                              Store 485 484
+             486:  149(fvec3) Load 458(if64v)
+             487:   27(fvec2) VectorShuffle 486 486 0 1
+             488:   27(fvec2) FwidthFine 487
+             489:  149(fvec3) Load 456(f64v)
+             490:  149(fvec3) VectorShuffle 489 488 3 4 2
+                              Store 456(f64v) 490
+             491:  149(fvec3) Load 458(if64v)
+             492:  149(fvec3) FwidthCoarse 491
+                              Store 456(f64v) 492
+             493:    459(ptr) AccessChain 458(if64v) 32
+             494:   26(float) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 493
+             495:     33(ptr) AccessChain 456(f64v) 32
+                              Store 495 494
+             497:  149(fvec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 458(if64v) 496
+             498:   27(fvec2) VectorShuffle 497 497 0 1
+             499:  149(fvec3) Load 456(f64v)
+             500:  149(fvec3) VectorShuffle 499 498 3 4 2
+                              Store 456(f64v) 500
+             503:  149(fvec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 458(if64v) 502
+                              Store 456(f64v) 503
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.int16.amd.frag.out b/Test/baseResults/spv.int16.amd.frag.out
new file mode 100644
index 0000000..466bb6a
--- /dev/null
+++ b/Test/baseResults/spv.int16.amd.frag.out
@@ -0,0 +1,778 @@
+spv.int16.amd.frag
+// Module Version 10000
+// Generated by (magic number): 80005
+// Id's are bound by 560
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Float64
+                              Capability Int64
+                              Capability Int16
+                              Capability StorageUniform16
+                              Capability StorageInputOutput16
+                              Extension  "SPV_AMD_gpu_shader_half_float"
+                              Extension  "SPV_AMD_gpu_shader_int16"
+                              Extension  "SPV_KHR_16bit_storage"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 519 521
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_AMD_gpu_shader_half_float"
+                              SourceExtension  "GL_AMD_gpu_shader_int16"
+                              SourceExtension  "GL_ARB_gpu_shader_int64"
+                              Name 4  "main"
+                              Name 6  "literal("
+                              Name 8  "operators("
+                              Name 10  "typeCast("
+                              Name 12  "builtinFuncs("
+                              Name 16  "u16"
+                              Name 25  "Uniforms"
+                              MemberName 25(Uniforms) 0  "i"
+                              Name 27  ""
+                              Name 34  "indexable"
+                              Name 45  "indexable"
+                              Name 51  "u16v"
+                              Name 57  "i16"
+                              Name 70  "u16"
+                              Name 127  "b"
+                              Name 148  "u"
+                              Name 159  "i"
+                              Name 189  "i16v"
+                              Name 192  "bv"
+                              Name 200  "u16v"
+                              Name 213  "iv"
+                              Name 226  "uv"
+                              Name 240  "fv"
+                              Name 252  "dv"
+                              Name 264  "f16v"
+                              Name 276  "i64v"
+                              Name 290  "u64v"
+                              Name 305  "i16v"
+                              Name 311  "i16"
+                              Name 319  "u16v"
+                              Name 321  "u16"
+                              Name 393  "f16v"
+                              Name 396  "exp"
+                              Name 397  "ResType"
+                              Name 418  "packi"
+                              Name 423  "packu"
+                              Name 432  "packi64"
+                              Name 441  "packu64"
+                              Name 450  "bv"
+                              Name 515  "Block"
+                              MemberName 515(Block) 0  "i16v"
+                              MemberName 515(Block) 1  "u16"
+                              Name 517  "block"
+                              Name 519  "iu16v"
+                              Name 521  "ii16"
+                              Name 522  "si64"
+                              Name 523  "su64"
+                              Name 524  "si"
+                              Name 525  "su"
+                              Name 526  "sb"
+                              Name 527  "si16"
+                              Name 528  "su16"
+                              MemberDecorate 25(Uniforms) 0 Offset 0
+                              Decorate 25(Uniforms) Block
+                              Decorate 27 DescriptorSet 0
+                              Decorate 27 Binding 0
+                              MemberDecorate 515(Block) 0 Offset 0
+                              MemberDecorate 515(Block) 1 Offset 6
+                              Decorate 515(Block) Block
+                              Decorate 517(block) DescriptorSet 0
+                              Decorate 517(block) Binding 1
+                              Decorate 519(iu16v) Flat
+                              Decorate 519(iu16v) Location 0
+                              Decorate 521(ii16) Flat
+                              Decorate 521(ii16) Location 1
+                              Decorate 522(si64) SpecId 100
+                              Decorate 523(su64) SpecId 101
+                              Decorate 524(si) SpecId 102
+                              Decorate 525(su) SpecId 103
+                              Decorate 526(sb) SpecId 104
+                              Decorate 527(si16) SpecId 105
+                              Decorate 528(su16) SpecId 106
+               2:             TypeVoid
+               3:             TypeFunction 2
+              14:             TypeInt 16 0
+              15:             TypePointer Function 14(int)
+              17:             TypeInt 16 1
+              18:             TypeInt 32 0
+              19:     18(int) Constant 3
+              20:             TypeArray 17(int) 19
+              21:     17(int) Constant 273
+              22:     17(int) Constant 4294967294
+              23:     17(int) Constant 256
+              24:          20 ConstantComposite 21 22 23
+    25(Uniforms):             TypeStruct 18(int)
+              26:             TypePointer Uniform 25(Uniforms)
+              27:     26(ptr) Variable Uniform
+              28:             TypeInt 32 1
+              29:     28(int) Constant 0
+              30:             TypePointer Uniform 18(int)
+              33:             TypePointer Function 20
+              35:             TypePointer Function 17(int)
+              39:             TypeArray 14(int) 19
+              40:     14(int) Constant 65535
+              41:          39 ConstantComposite 40 40 40
+              44:             TypePointer Function 39
+              49:             TypeVector 14(int) 3
+              50:             TypePointer Function 49(ivec3)
+              53:     17(int) Constant 1
+              54:             TypeVector 17(int) 3
+             111:     18(int) Constant 1
+             117:     18(int) Constant 2
+             125:             TypeBool
+             126:             TypePointer Function 125(bool)
+             128:     18(int) Constant 0
+             147:             TypePointer Function 18(int)
+             158:             TypePointer Function 28(int)
+             187:             TypeVector 17(int) 2
+             188:             TypePointer Function 187(ivec2)
+             190:             TypeVector 125(bool) 2
+             191:             TypePointer Function 190(bvec2)
+             194:     17(int) Constant 0
+             195:  187(ivec2) ConstantComposite 194 194
+             196:  187(ivec2) ConstantComposite 53 53
+             198:             TypeVector 14(int) 2
+             199:             TypePointer Function 198(ivec2)
+             202:     14(int) Constant 0
+             203:     14(int) Constant 1
+             204:  198(ivec2) ConstantComposite 202 202
+             205:  198(ivec2) ConstantComposite 203 203
+             211:             TypeVector 28(int) 2
+             212:             TypePointer Function 211(ivec2)
+             224:             TypeVector 18(int) 2
+             225:             TypePointer Function 224(ivec2)
+             237:             TypeFloat 32
+             238:             TypeVector 237(float) 2
+             239:             TypePointer Function 238(fvec2)
+             249:             TypeFloat 64
+             250:             TypeVector 249(float) 2
+             251:             TypePointer Function 250(fvec2)
+             261:             TypeFloat 16
+             262:             TypeVector 261(float) 2
+             263:             TypePointer Function 262(fvec2)
+             273:             TypeInt 64 1
+             274:             TypeVector 273(int) 2
+             275:             TypePointer Function 274(ivec2)
+             287:             TypeInt 64 0
+             288:             TypeVector 287(int) 2
+             289:             TypePointer Function 288(ivec2)
+             316:     17(int) Constant 4294967295
+             317:  187(ivec2) ConstantComposite 316 316
+             326:   49(ivec3) ConstantComposite 202 202 202
+             368:   125(bool) ConstantTrue
+             375:   125(bool) ConstantFalse
+             376:  190(bvec2) ConstantComposite 375 375
+             388:             TypeVector 125(bool) 3
+             389:  388(bvec3) ConstantComposite 375 375 375
+             391:             TypeVector 261(float) 3
+             392:             TypePointer Function 391(fvec3)
+             395:             TypePointer Function 54(ivec3)
+    397(ResType):             TypeStruct 391(fvec3) 54(ivec3)
+             407:             TypePointer Function 261(float)
+             431:             TypePointer Function 273(int)
+             434:             TypeVector 17(int) 4
+             440:             TypePointer Function 287(int)
+             443:             TypeVector 14(int) 4
+             449:             TypePointer Function 388(bvec3)
+      515(Block):             TypeStruct 54(ivec3) 14(int)
+             516:             TypePointer Uniform 515(Block)
+      517(block):    516(ptr) Variable Uniform
+             518:             TypePointer Input 49(ivec3)
+      519(iu16v):    518(ptr) Variable Input
+             520:             TypePointer Input 17(int)
+       521(ii16):    520(ptr) Variable Input
+       522(si64):    273(int) SpecConstant 4294967286 4294967295
+       523(su64):    287(int) SpecConstant 20 0
+         524(si):     28(int) SpecConstant 4294967291
+         525(su):     18(int) SpecConstant 4
+         526(sb):   125(bool) SpecConstantTrue
+       527(si16):     17(int) SpecConstant 4294967291
+       528(su16):     14(int) SpecConstant 4
+             529:   125(bool) SpecConstantOp 171 527(si16) 202
+             530:   125(bool) SpecConstantOp 171 528(su16) 202
+             531:     17(int) SpecConstantOp 169 526(sb) 53 194
+             532:     14(int) SpecConstantOp 169 526(sb) 203 202
+             533:     28(int) SpecConstantOp 114 527(si16)
+             534:     28(int) SpecConstantOp 113 528(su16)
+             535:     28(int) SpecConstantOp 128 534 128
+             536:     17(int) SpecConstantOp 114 524(si)
+             537:     17(int) SpecConstantOp 114 524(si)
+             538:     14(int) SpecConstantOp 128 537 202
+             539:     28(int) SpecConstantOp 114 527(si16)
+             540:     18(int) SpecConstantOp 128 539 128
+             541:     18(int) SpecConstantOp 113 528(su16)
+             542:     17(int) SpecConstantOp 113 525(su)
+             543:     17(int) SpecConstantOp 128 542 202
+             544:     14(int) SpecConstantOp 113 525(su)
+             545:    273(int) SpecConstantOp 114 527(si16)
+             546:    273(int) SpecConstantOp 113 528(su16)
+             547:    287(int) Constant 0 0
+             548:    273(int) SpecConstantOp 128 546 547
+             549:     17(int) SpecConstantOp 114 522(si64)
+             550:     17(int) SpecConstantOp 114 522(si64)
+             551:     14(int) SpecConstantOp 128 550 202
+             552:    273(int) SpecConstantOp 114 527(si16)
+             553:    287(int) SpecConstantOp 128 552 547
+             554:    287(int) SpecConstantOp 113 528(su16)
+             555:     17(int) SpecConstantOp 113 523(su64)
+             556:     17(int) SpecConstantOp 128 555 202
+             557:     14(int) SpecConstantOp 113 523(su64)
+             558:     14(int) SpecConstantOp 128 527(si16) 202
+             559:     17(int) SpecConstantOp 128 528(su16) 202
+         4(main):           2 Function None 3
+               5:             Label
+             511:           2 FunctionCall 6(literal()
+             512:           2 FunctionCall 8(operators()
+             513:           2 FunctionCall 10(typeCast()
+             514:           2 FunctionCall 12(builtinFuncs()
+                              Return
+                              FunctionEnd
+     6(literal():           2 Function None 3
+               7:             Label
+         16(u16):     15(ptr) Variable Function
+   34(indexable):     33(ptr) Variable Function
+   45(indexable):     44(ptr) Variable Function
+              31:     30(ptr) AccessChain 27 29
+              32:     18(int) Load 31
+                              Store 34(indexable) 24
+              36:     35(ptr) AccessChain 34(indexable) 32
+              37:     17(int) Load 36
+              38:     14(int) Bitcast 37
+              42:     30(ptr) AccessChain 27 29
+              43:     18(int) Load 42
+                              Store 45(indexable) 41
+              46:     15(ptr) AccessChain 45(indexable) 43
+              47:     14(int) Load 46
+              48:     14(int) IAdd 38 47
+                              Store 16(u16) 48
+                              Return
+                              FunctionEnd
+   8(operators():           2 Function None 3
+               9:             Label
+        51(u16v):     50(ptr) Variable Function
+         57(i16):     35(ptr) Variable Function
+         70(u16):     15(ptr) Variable Function
+          127(b):    126(ptr) Variable Function
+          148(u):    147(ptr) Variable Function
+          159(i):    158(ptr) Variable Function
+              52:   49(ivec3) Load 51(u16v)
+              55:   54(ivec3) CompositeConstruct 53 53 53
+              56:   49(ivec3) IAdd 52 55
+                              Store 51(u16v) 56
+              58:     17(int) Load 57(i16)
+              59:     17(int) ISub 58 53
+                              Store 57(i16) 59
+              60:     17(int) Load 57(i16)
+              61:     17(int) IAdd 60 53
+                              Store 57(i16) 61
+              62:   49(ivec3) Load 51(u16v)
+              63:   54(ivec3) CompositeConstruct 53 53 53
+              64:   49(ivec3) ISub 62 63
+                              Store 51(u16v) 64
+              65:   49(ivec3) Load 51(u16v)
+              66:   49(ivec3) Not 65
+                              Store 51(u16v) 66
+              67:     17(int) Load 57(i16)
+                              Store 57(i16) 67
+              68:   49(ivec3) Load 51(u16v)
+              69:   49(ivec3) SNegate 68
+                              Store 51(u16v) 69
+              71:     17(int) Load 57(i16)
+              72:     14(int) Bitcast 71
+              73:     14(int) Load 70(u16)
+              74:     14(int) IAdd 73 72
+                              Store 70(u16) 74
+              75:   49(ivec3) Load 51(u16v)
+              76:   49(ivec3) Load 51(u16v)
+              77:   49(ivec3) ISub 76 75
+                              Store 51(u16v) 77
+              78:     17(int) Load 57(i16)
+              79:     17(int) Load 57(i16)
+              80:     17(int) IMul 79 78
+                              Store 57(i16) 80
+              81:   49(ivec3) Load 51(u16v)
+              82:   49(ivec3) Load 51(u16v)
+              83:   49(ivec3) UDiv 82 81
+                              Store 51(u16v) 83
+              84:     17(int) Load 57(i16)
+              85:     14(int) Bitcast 84
+              86:   49(ivec3) Load 51(u16v)
+              87:   49(ivec3) CompositeConstruct 85 85 85
+              88:   49(ivec3) UMod 86 87
+                              Store 51(u16v) 88
+              89:   49(ivec3) Load 51(u16v)
+              90:   49(ivec3) Load 51(u16v)
+              91:   49(ivec3) IAdd 89 90
+                              Store 51(u16v) 91
+              92:     17(int) Load 57(i16)
+              93:     14(int) Bitcast 92
+              94:     14(int) Load 70(u16)
+              95:     14(int) ISub 93 94
+                              Store 70(u16) 95
+              96:   49(ivec3) Load 51(u16v)
+              97:     17(int) Load 57(i16)
+              98:     14(int) Bitcast 97
+              99:   49(ivec3) CompositeConstruct 98 98 98
+             100:   49(ivec3) IMul 96 99
+                              Store 51(u16v) 100
+             101:     17(int) Load 57(i16)
+             102:     17(int) Load 57(i16)
+             103:     17(int) IMul 101 102
+                              Store 57(i16) 103
+             104:     17(int) Load 57(i16)
+             105:     17(int) Load 57(i16)
+             106:     17(int) SMod 104 105
+                              Store 57(i16) 106
+             107:     17(int) Load 57(i16)
+             108:   49(ivec3) Load 51(u16v)
+             109:   54(ivec3) CompositeConstruct 107 107 107
+             110:   49(ivec3) ShiftLeftLogical 108 109
+                              Store 51(u16v) 110
+             112:     15(ptr) AccessChain 51(u16v) 111
+             113:     14(int) Load 112
+             114:     17(int) Load 57(i16)
+             115:     17(int) ShiftRightArithmetic 114 113
+                              Store 57(i16) 115
+             116:     17(int) Load 57(i16)
+             118:     15(ptr) AccessChain 51(u16v) 117
+             119:     14(int) Load 118
+             120:     17(int) ShiftLeftLogical 116 119
+                              Store 57(i16) 120
+             121:   49(ivec3) Load 51(u16v)
+             122:     17(int) Load 57(i16)
+             123:   54(ivec3) CompositeConstruct 122 122 122
+             124:   49(ivec3) ShiftLeftLogical 121 123
+                              Store 51(u16v) 124
+             129:     15(ptr) AccessChain 51(u16v) 128
+             130:     14(int) Load 129
+             131:     17(int) Load 57(i16)
+             132:     14(int) Bitcast 131
+             133:   125(bool) INotEqual 130 132
+                              Store 127(b) 133
+             134:     17(int) Load 57(i16)
+             135:     14(int) Bitcast 134
+             136:     15(ptr) AccessChain 51(u16v) 128
+             137:     14(int) Load 136
+             138:   125(bool) IEqual 135 137
+                              Store 127(b) 138
+             139:     15(ptr) AccessChain 51(u16v) 128
+             140:     14(int) Load 139
+             141:     15(ptr) AccessChain 51(u16v) 111
+             142:     14(int) Load 141
+             143:   125(bool) UGreaterThan 140 142
+                              Store 127(b) 143
+             144:     17(int) Load 57(i16)
+             145:     28(int) SConvert 144
+             146:     18(int) Bitcast 145
+             149:     18(int) Load 148(u)
+             150:   125(bool) ULessThan 146 149
+                              Store 127(b) 150
+             151:     15(ptr) AccessChain 51(u16v) 111
+             152:     14(int) Load 151
+             153:     15(ptr) AccessChain 51(u16v) 128
+             154:     14(int) Load 153
+             155:   125(bool) UGreaterThanEqual 152 154
+                              Store 127(b) 155
+             156:     17(int) Load 57(i16)
+             157:     28(int) SConvert 156
+             160:     28(int) Load 159(i)
+             161:   125(bool) SLessThanEqual 157 160
+                              Store 127(b) 161
+             162:     17(int) Load 57(i16)
+             163:     14(int) Bitcast 162
+             164:   49(ivec3) Load 51(u16v)
+             165:   49(ivec3) CompositeConstruct 163 163 163
+             166:   49(ivec3) BitwiseOr 164 165
+                              Store 51(u16v) 166
+             167:     17(int) Load 57(i16)
+             168:     14(int) Bitcast 167
+             169:     14(int) Load 70(u16)
+             170:     14(int) BitwiseOr 168 169
+                              Store 70(u16) 170
+             171:     17(int) Load 57(i16)
+             172:     17(int) Load 57(i16)
+             173:     17(int) BitwiseAnd 172 171
+                              Store 57(i16) 173
+             174:   49(ivec3) Load 51(u16v)
+             175:   49(ivec3) Load 51(u16v)
+             176:   49(ivec3) BitwiseAnd 174 175
+                              Store 51(u16v) 176
+             177:     17(int) Load 57(i16)
+             178:     14(int) Bitcast 177
+             179:   49(ivec3) Load 51(u16v)
+             180:   49(ivec3) CompositeConstruct 178 178 178
+             181:   49(ivec3) BitwiseXor 179 180
+                              Store 51(u16v) 181
+             182:   49(ivec3) Load 51(u16v)
+             183:     17(int) Load 57(i16)
+             184:     14(int) Bitcast 183
+             185:   49(ivec3) CompositeConstruct 184 184 184
+             186:   49(ivec3) BitwiseXor 182 185
+                              Store 51(u16v) 186
+                              Return
+                              FunctionEnd
+   10(typeCast():           2 Function None 3
+              11:             Label
+       189(i16v):    188(ptr) Variable Function
+         192(bv):    191(ptr) Variable Function
+       200(u16v):    199(ptr) Variable Function
+         213(iv):    212(ptr) Variable Function
+         226(uv):    225(ptr) Variable Function
+         240(fv):    239(ptr) Variable Function
+         252(dv):    251(ptr) Variable Function
+       264(f16v):    263(ptr) Variable Function
+       276(i64v):    275(ptr) Variable Function
+       290(u64v):    289(ptr) Variable Function
+             193:  190(bvec2) Load 192(bv)
+             197:  187(ivec2) Select 193 196 195
+                              Store 189(i16v) 197
+             201:  190(bvec2) Load 192(bv)
+             206:  198(ivec2) Select 201 205 204
+                              Store 200(u16v) 206
+             207:  187(ivec2) Load 189(i16v)
+             208:  190(bvec2) INotEqual 207 204
+                              Store 192(bv) 208
+             209:  198(ivec2) Load 200(u16v)
+             210:  190(bvec2) INotEqual 209 204
+                              Store 192(bv) 210
+             214:  211(ivec2) Load 213(iv)
+             215:  187(ivec2) SConvert 214
+                              Store 189(i16v) 215
+             216:  211(ivec2) Load 213(iv)
+             217:  187(ivec2) SConvert 216
+             218:  198(ivec2) Bitcast 217
+                              Store 200(u16v) 218
+             219:  187(ivec2) Load 189(i16v)
+             220:  211(ivec2) SConvert 219
+                              Store 213(iv) 220
+             221:  198(ivec2) Load 200(u16v)
+             222:  211(ivec2) UConvert 221
+             223:  211(ivec2) Bitcast 222
+                              Store 213(iv) 223
+             227:  224(ivec2) Load 226(uv)
+             228:  187(ivec2) UConvert 227
+             229:  187(ivec2) Bitcast 228
+                              Store 189(i16v) 229
+             230:  224(ivec2) Load 226(uv)
+             231:  198(ivec2) UConvert 230
+                              Store 200(u16v) 231
+             232:  187(ivec2) Load 189(i16v)
+             233:  211(ivec2) SConvert 232
+             234:  224(ivec2) Bitcast 233
+                              Store 226(uv) 234
+             235:  198(ivec2) Load 200(u16v)
+             236:  224(ivec2) UConvert 235
+                              Store 226(uv) 236
+             241:  238(fvec2) Load 240(fv)
+             242:  187(ivec2) ConvertFToS 241
+                              Store 189(i16v) 242
+             243:  238(fvec2) Load 240(fv)
+             244:  198(ivec2) ConvertFToU 243
+                              Store 200(u16v) 244
+             245:  187(ivec2) Load 189(i16v)
+             246:  238(fvec2) ConvertSToF 245
+                              Store 240(fv) 246
+             247:  198(ivec2) Load 200(u16v)
+             248:  238(fvec2) ConvertUToF 247
+                              Store 240(fv) 248
+             253:  250(fvec2) Load 252(dv)
+             254:  187(ivec2) ConvertFToS 253
+                              Store 189(i16v) 254
+             255:  250(fvec2) Load 252(dv)
+             256:  198(ivec2) ConvertFToU 255
+                              Store 200(u16v) 256
+             257:  187(ivec2) Load 189(i16v)
+             258:  250(fvec2) ConvertSToF 257
+                              Store 252(dv) 258
+             259:  198(ivec2) Load 200(u16v)
+             260:  250(fvec2) ConvertUToF 259
+                              Store 252(dv) 260
+             265:  262(fvec2) Load 264(f16v)
+             266:  187(ivec2) ConvertFToS 265
+                              Store 189(i16v) 266
+             267:  262(fvec2) Load 264(f16v)
+             268:  198(ivec2) ConvertFToU 267
+                              Store 200(u16v) 268
+             269:  187(ivec2) Load 189(i16v)
+             270:  262(fvec2) ConvertSToF 269
+                              Store 264(f16v) 270
+             271:  198(ivec2) Load 200(u16v)
+             272:  262(fvec2) ConvertUToF 271
+                              Store 264(f16v) 272
+             277:  274(ivec2) Load 276(i64v)
+             278:  187(ivec2) SConvert 277
+                              Store 189(i16v) 278
+             279:  274(ivec2) Load 276(i64v)
+             280:  187(ivec2) SConvert 279
+             281:  198(ivec2) Bitcast 280
+                              Store 200(u16v) 281
+             282:  187(ivec2) Load 189(i16v)
+             283:  274(ivec2) SConvert 282
+                              Store 276(i64v) 283
+             284:  198(ivec2) Load 200(u16v)
+             285:  274(ivec2) UConvert 284
+             286:  274(ivec2) Bitcast 285
+                              Store 276(i64v) 286
+             291:  288(ivec2) Load 290(u64v)
+             292:  187(ivec2) UConvert 291
+             293:  187(ivec2) Bitcast 292
+                              Store 189(i16v) 293
+             294:  288(ivec2) Load 290(u64v)
+             295:  198(ivec2) UConvert 294
+                              Store 200(u16v) 295
+             296:  187(ivec2) Load 189(i16v)
+             297:  274(ivec2) SConvert 296
+             298:  288(ivec2) Bitcast 297
+                              Store 290(u64v) 298
+             299:  198(ivec2) Load 200(u16v)
+             300:  288(ivec2) UConvert 299
+                              Store 290(u64v) 300
+             301:  198(ivec2) Load 200(u16v)
+             302:  187(ivec2) Bitcast 301
+                              Store 189(i16v) 302
+             303:  187(ivec2) Load 189(i16v)
+             304:  198(ivec2) Bitcast 303
+                              Store 200(u16v) 304
+                              Return
+                              FunctionEnd
+12(builtinFuncs():           2 Function None 3
+              13:             Label
+       305(i16v):    188(ptr) Variable Function
+        311(i16):     35(ptr) Variable Function
+       319(u16v):     50(ptr) Variable Function
+        321(u16):     15(ptr) Variable Function
+       393(f16v):    392(ptr) Variable Function
+        396(exp):    395(ptr) Variable Function
+      418(packi):    158(ptr) Variable Function
+      423(packu):    147(ptr) Variable Function
+    432(packi64):    431(ptr) Variable Function
+    441(packu64):    440(ptr) Variable Function
+         450(bv):    449(ptr) Variable Function
+             306:  187(ivec2) Load 305(i16v)
+             307:  187(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 306
+                              Store 305(i16v) 307
+             308:  187(ivec2) Load 305(i16v)
+             309:  187(ivec2) ExtInst 1(GLSL.std.450) 7(SSign) 308
+                              Store 305(i16v) 309
+             310:  187(ivec2) Load 305(i16v)
+             312:     17(int) Load 311(i16)
+             313:  187(ivec2) CompositeConstruct 312 312
+             314:  187(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 310 313
+                              Store 305(i16v) 314
+             315:  187(ivec2) Load 305(i16v)
+             318:  187(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 315 317
+                              Store 305(i16v) 318
+             320:   49(ivec3) Load 319(u16v)
+             322:     14(int) Load 321(u16)
+             323:   49(ivec3) CompositeConstruct 322 322 322
+             324:   49(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 320 323
+                              Store 319(u16v) 324
+             325:   49(ivec3) Load 319(u16v)
+             327:   49(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 325 326
+                              Store 319(u16v) 327
+             328:  187(ivec2) Load 305(i16v)
+             329:     17(int) Load 311(i16)
+             330:  187(ivec2) CompositeConstruct 329 329
+             331:  187(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 328 330
+                              Store 305(i16v) 331
+             332:  187(ivec2) Load 305(i16v)
+             333:  187(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 332 317
+                              Store 305(i16v) 333
+             334:   49(ivec3) Load 319(u16v)
+             335:     14(int) Load 321(u16)
+             336:   49(ivec3) CompositeConstruct 335 335 335
+             337:   49(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 334 336
+                              Store 319(u16v) 337
+             338:   49(ivec3) Load 319(u16v)
+             339:   49(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 338 326
+                              Store 319(u16v) 339
+             340:  187(ivec2) Load 305(i16v)
+             341:     17(int) Load 311(i16)
+             342:     17(int) SNegate 341
+             343:     17(int) Load 311(i16)
+             344:  187(ivec2) CompositeConstruct 342 342
+             345:  187(ivec2) CompositeConstruct 343 343
+             346:  187(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 340 344 345
+                              Store 305(i16v) 346
+             347:  187(ivec2) Load 305(i16v)
+             348:  187(ivec2) Load 305(i16v)
+             349:  187(ivec2) SNegate 348
+             350:  187(ivec2) Load 305(i16v)
+             351:  187(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 347 349 350
+                              Store 305(i16v) 351
+             352:   49(ivec3) Load 319(u16v)
+             353:     14(int) Load 321(u16)
+             354:     14(int) SNegate 353
+             355:     14(int) Load 321(u16)
+             356:   49(ivec3) CompositeConstruct 354 354 354
+             357:   49(ivec3) CompositeConstruct 355 355 355
+             358:   49(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 352 356 357
+                              Store 319(u16v) 358
+             359:   49(ivec3) Load 319(u16v)
+             360:   49(ivec3) Load 319(u16v)
+             361:   49(ivec3) SNegate 360
+             362:   49(ivec3) Load 319(u16v)
+             363:   49(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 359 361 362
+                              Store 319(u16v) 363
+             364:     35(ptr) AccessChain 305(i16v) 128
+             365:     17(int) Load 364
+             366:     35(ptr) AccessChain 305(i16v) 111
+             367:     17(int) Load 366
+             369:     17(int) Select 368 367 365
+                              Store 311(i16) 369
+             370:     17(int) Load 311(i16)
+             371:  187(ivec2) CompositeConstruct 370 370
+             372:     17(int) Load 311(i16)
+             373:     17(int) SNegate 372
+             374:  187(ivec2) CompositeConstruct 373 373
+             377:  187(ivec2) Select 376 374 371
+                              Store 305(i16v) 377
+             378:     15(ptr) AccessChain 319(u16v) 128
+             379:     14(int) Load 378
+             380:     15(ptr) AccessChain 319(u16v) 111
+             381:     14(int) Load 380
+             382:     14(int) Select 368 381 379
+                              Store 321(u16) 382
+             383:     14(int) Load 321(u16)
+             384:   49(ivec3) CompositeConstruct 383 383 383
+             385:     14(int) Load 321(u16)
+             386:     14(int) SNegate 385
+             387:   49(ivec3) CompositeConstruct 386 386 386
+             390:   49(ivec3) Select 389 387 384
+                              Store 319(u16v) 390
+             394:  391(fvec3) Load 393(f16v)
+             398:397(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 394
+             399:   54(ivec3) CompositeExtract 398 1
+                              Store 396(exp) 399
+             400:  391(fvec3) CompositeExtract 398 0
+                              Store 393(f16v) 400
+             401:  391(fvec3) Load 393(f16v)
+             402:   54(ivec3) Load 396(exp)
+             403:  391(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 401 402
+                              Store 393(f16v) 403
+             404:  391(fvec3) Load 393(f16v)
+             405:  262(fvec2) VectorShuffle 404 404 0 1
+             406:  187(ivec2) Bitcast 405
+                              Store 305(i16v) 406
+             408:    407(ptr) AccessChain 393(f16v) 117
+             409:  261(float) Load 408
+             410:     14(int) Bitcast 409
+             411:     15(ptr) AccessChain 319(u16v) 128
+                              Store 411 410
+             412:  187(ivec2) Load 305(i16v)
+             413:  262(fvec2) Bitcast 412
+             414:  391(fvec3) Load 393(f16v)
+             415:  391(fvec3) VectorShuffle 414 413 3 4 2
+                              Store 393(f16v) 415
+             416:   49(ivec3) Load 319(u16v)
+             417:  391(fvec3) Bitcast 416
+                              Store 393(f16v) 417
+             419:  187(ivec2) Load 305(i16v)
+             420:     28(int) Bitcast 419
+                              Store 418(packi) 420
+             421:     28(int) Load 418(packi)
+             422:  187(ivec2) Bitcast 421
+                              Store 305(i16v) 422
+             424:   49(ivec3) Load 319(u16v)
+             425:  198(ivec2) VectorShuffle 424 424 0 1
+             426:     18(int) Bitcast 425
+                              Store 423(packu) 426
+             427:     18(int) Load 423(packu)
+             428:  198(ivec2) Bitcast 427
+             429:   49(ivec3) Load 319(u16v)
+             430:   49(ivec3) VectorShuffle 429 428 3 4 2
+                              Store 319(u16v) 430
+             433:     17(int) Load 311(i16)
+             435:  434(ivec4) CompositeConstruct 433 433 433 433
+             436:    273(int) Bitcast 435
+                              Store 432(packi64) 436
+             437:    273(int) Load 432(packi64)
+             438:  434(ivec4) Bitcast 437
+             439:  187(ivec2) VectorShuffle 438 438 0 1
+                              Store 305(i16v) 439
+             442:     14(int) Load 321(u16)
+             444:  443(ivec4) CompositeConstruct 442 442 442 442
+             445:    287(int) Bitcast 444
+                              Store 441(packu64) 445
+             446:    287(int) Load 441(packu64)
+             447:  443(ivec4) Bitcast 446
+             448:   49(ivec3) VectorShuffle 447 447 0 1 2
+                              Store 319(u16v) 448
+             451:   49(ivec3) Load 319(u16v)
+             452:     14(int) Load 321(u16)
+             453:   49(ivec3) CompositeConstruct 452 452 452
+             454:  388(bvec3) ULessThan 451 453
+                              Store 450(bv) 454
+             455:  187(ivec2) Load 305(i16v)
+             456:     17(int) Load 311(i16)
+             457:  187(ivec2) CompositeConstruct 456 456
+             458:  190(bvec2) SLessThan 455 457
+             459:  388(bvec3) Load 450(bv)
+             460:  388(bvec3) VectorShuffle 459 458 3 4 2
+                              Store 450(bv) 460
+             461:   49(ivec3) Load 319(u16v)
+             462:     14(int) Load 321(u16)
+             463:   49(ivec3) CompositeConstruct 462 462 462
+             464:  388(bvec3) ULessThanEqual 461 463
+                              Store 450(bv) 464
+             465:  187(ivec2) Load 305(i16v)
+             466:     17(int) Load 311(i16)
+             467:  187(ivec2) CompositeConstruct 466 466
+             468:  190(bvec2) SLessThanEqual 465 467
+             469:  388(bvec3) Load 450(bv)
+             470:  388(bvec3) VectorShuffle 469 468 3 4 2
+                              Store 450(bv) 470
+             471:   49(ivec3) Load 319(u16v)
+             472:     14(int) Load 321(u16)
+             473:   49(ivec3) CompositeConstruct 472 472 472
+             474:  388(bvec3) UGreaterThan 471 473
+                              Store 450(bv) 474
+             475:  187(ivec2) Load 305(i16v)
+             476:     17(int) Load 311(i16)
+             477:  187(ivec2) CompositeConstruct 476 476
+             478:  190(bvec2) SGreaterThan 475 477
+             479:  388(bvec3) Load 450(bv)
+             480:  388(bvec3) VectorShuffle 479 478 3 4 2
+                              Store 450(bv) 480
+             481:   49(ivec3) Load 319(u16v)
+             482:     14(int) Load 321(u16)
+             483:   49(ivec3) CompositeConstruct 482 482 482
+             484:  388(bvec3) UGreaterThanEqual 481 483
+                              Store 450(bv) 484
+             485:  187(ivec2) Load 305(i16v)
+             486:     17(int) Load 311(i16)
+             487:  187(ivec2) CompositeConstruct 486 486
+             488:  190(bvec2) SGreaterThanEqual 485 487
+             489:  388(bvec3) Load 450(bv)
+             490:  388(bvec3) VectorShuffle 489 488 3 4 2
+                              Store 450(bv) 490
+             491:   49(ivec3) Load 319(u16v)
+             492:     14(int) Load 321(u16)
+             493:   49(ivec3) CompositeConstruct 492 492 492
+             494:  388(bvec3) IEqual 491 493
+                              Store 450(bv) 494
+             495:  187(ivec2) Load 305(i16v)
+             496:     17(int) Load 311(i16)
+             497:  187(ivec2) CompositeConstruct 496 496
+             498:  190(bvec2) IEqual 495 497
+             499:  388(bvec3) Load 450(bv)
+             500:  388(bvec3) VectorShuffle 499 498 3 4 2
+                              Store 450(bv) 500
+             501:   49(ivec3) Load 319(u16v)
+             502:     14(int) Load 321(u16)
+             503:   49(ivec3) CompositeConstruct 502 502 502
+             504:  388(bvec3) INotEqual 501 503
+                              Store 450(bv) 504
+             505:  187(ivec2) Load 305(i16v)
+             506:     17(int) Load 311(i16)
+             507:  187(ivec2) CompositeConstruct 506 506
+             508:  190(bvec2) INotEqual 505 507
+             509:  388(bvec3) Load 450(bv)
+             510:  388(bvec3) VectorShuffle 509 508 3 4 2
+                              Store 450(bv) 510
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.int16.frag.out b/Test/baseResults/spv.int16.frag.out
index 3cb8af8..e5f3e7f 100644
--- a/Test/baseResults/spv.int16.frag.out
+++ b/Test/baseResults/spv.int16.frag.out
@@ -1,779 +1,746 @@
 spv.int16.frag
 // Module Version 10000
 // Generated by (magic number): 80005
-// Id's are bound by 561
+// Id's are bound by 525
 
                               Capability Shader
                               Capability Float16
                               Capability Float64
                               Capability Int64
                               Capability Int16
+                              Capability Int8
                               Capability StorageUniform16
-                              Capability StorageInputOutput16
                               Extension  "SPV_AMD_gpu_shader_half_float"
                               Extension  "SPV_AMD_gpu_shader_int16"
                               Extension  "SPV_KHR_16bit_storage"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 520 522
+                              EntryPoint Fragment 4  "main"
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 450
-                              SourceExtension  "GL_AMD_gpu_shader_half_float"
-                              SourceExtension  "GL_AMD_gpu_shader_int16"
-                              SourceExtension  "GL_ARB_gpu_shader_int64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float16"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float32"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int16"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int32"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int8"
                               Name 4  "main"
                               Name 6  "literal("
-                              Name 8  "operators("
-                              Name 10  "typeCast("
+                              Name 8  "typeCast16("
+                              Name 10  "operators("
                               Name 12  "builtinFuncs("
-                              Name 16  "u16"
-                              Name 25  "Uniforms"
-                              MemberName 25(Uniforms) 0  "i"
-                              Name 27  ""
-                              Name 34  "indexable"
-                              Name 45  "indexable"
-                              Name 51  "u16v"
-                              Name 57  "i16"
-                              Name 70  "u16"
-                              Name 108  "i"
-                              Name 130  "b"
-                              Name 151  "u"
-                              Name 190  "i16v"
-                              Name 193  "bv"
-                              Name 201  "u16v"
-                              Name 214  "iv"
+                              Name 16  "i16"
+                              Name 24  "Uniforms"
+                              MemberName 24(Uniforms) 0  "index"
+                              Name 26  ""
+                              Name 33  "indexable"
+                              Name 38  "u16"
+                              Name 46  "indexable"
+                              Name 51  "i32v"
+                              Name 54  "i16v"
+                              Name 59  "u16v"
+                              Name 67  "u32v"
+                              Name 74  "i64v"
+                              Name 80  "u64v"
+                              Name 94  "f16v"
+                              Name 100  "f32v"
+                              Name 106  "f64v"
+                              Name 154  "i8v"
+                              Name 163  "u8v"
+                              Name 176  "bv"
+                              Name 195  "u16v"
+                              Name 200  "i16"
+                              Name 220  "i"
                               Name 227  "uv"
-                              Name 241  "fv"
-                              Name 253  "dv"
-                              Name 265  "f16v"
-                              Name 277  "i64v"
-                              Name 291  "u64v"
-                              Name 306  "i16v"
-                              Name 312  "i16"
-                              Name 320  "u16v"
-                              Name 322  "u16"
-                              Name 394  "f16v"
-                              Name 397  "exp"
-                              Name 398  "ResType"
-                              Name 419  "packi"
-                              Name 424  "packu"
-                              Name 433  "packi64"
-                              Name 442  "packu64"
-                              Name 451  "bv"
-                              Name 516  "Block"
-                              MemberName 516(Block) 0  "i16v"
-                              MemberName 516(Block) 1  "u16"
-                              Name 518  "block"
-                              Name 520  "iu16v"
-                              Name 522  "ii16"
-                              Name 523  "si64"
-                              Name 524  "su64"
-                              Name 525  "si"
-                              Name 526  "su"
-                              Name 527  "sb"
-                              Name 528  "si16"
-                              Name 529  "su16"
-                              MemberDecorate 25(Uniforms) 0 Offset 0
-                              Decorate 25(Uniforms) Block
-                              Decorate 27 DescriptorSet 0
-                              Decorate 27 Binding 0
-                              MemberDecorate 516(Block) 0 Offset 0
-                              MemberDecorate 516(Block) 1 Offset 6
-                              Decorate 516(Block) Block
-                              Decorate 518(block) DescriptorSet 0
-                              Decorate 518(block) Binding 1
-                              Decorate 520(iu16v) Flat
-                              Decorate 520(iu16v) Location 0
-                              Decorate 522(ii16) Flat
-                              Decorate 522(ii16) Location 1
-                              Decorate 523(si64) SpecId 100
-                              Decorate 524(su64) SpecId 101
-                              Decorate 525(si) SpecId 102
-                              Decorate 526(su) SpecId 103
-                              Decorate 527(sb) SpecId 104
-                              Decorate 528(si16) SpecId 105
-                              Decorate 529(su16) SpecId 106
+                              Name 243  "i64"
+                              Name 283  "b"
+                              Name 345  "i16v"
+                              Name 348  "i16"
+                              Name 358  "u16v"
+                              Name 360  "u16"
+                              Name 430  "i32"
+                              Name 433  "i64"
+                              Name 436  "i16v4"
+                              Name 439  "u32"
+                              Name 440  "u16v2"
+                              Name 444  "u64"
+                              Name 447  "u16v4"
+                              Name 459  "bv"
+                              Name 520  "Block"
+                              MemberName 520(Block) 0  "i16"
+                              MemberName 520(Block) 1  "i16v2"
+                              MemberName 520(Block) 2  "i16v3"
+                              MemberName 520(Block) 3  "i16v4"
+                              MemberName 520(Block) 4  "u16"
+                              MemberName 520(Block) 5  "u16v2"
+                              MemberName 520(Block) 6  "u16v3"
+                              MemberName 520(Block) 7  "u16v4"
+                              Name 522  "block"
+                              Name 523  "si16"
+                              Name 524  "su16"
+                              MemberDecorate 24(Uniforms) 0 Offset 0
+                              Decorate 24(Uniforms) Block
+                              Decorate 26 DescriptorSet 0
+                              Decorate 26 Binding 0
+                              MemberDecorate 520(Block) 0 Offset 0
+                              MemberDecorate 520(Block) 1 Offset 4
+                              MemberDecorate 520(Block) 2 Offset 8
+                              MemberDecorate 520(Block) 3 Offset 16
+                              MemberDecorate 520(Block) 4 Offset 24
+                              MemberDecorate 520(Block) 5 Offset 28
+                              MemberDecorate 520(Block) 6 Offset 32
+                              MemberDecorate 520(Block) 7 Offset 40
+                              Decorate 520(Block) Block
+                              Decorate 522(block) DescriptorSet 0
+                              Decorate 522(block) Binding 1
+                              Decorate 523(si16) SpecId 100
+                              Decorate 524(su16) SpecId 101
                2:             TypeVoid
                3:             TypeFunction 2
-              14:             TypeInt 16 0
+              14:             TypeInt 16 1
               15:             TypePointer Function 14(int)
-              17:             TypeInt 16 1
-              18:             TypeInt 32 0
-              19:     18(int) Constant 3
-              20:             TypeArray 17(int) 19
-              21:     17(int) Constant 273
-              22:     17(int) Constant 65534
-              23:     17(int) Constant 256
-              24:          20 ConstantComposite 21 22 23
-    25(Uniforms):             TypeStruct 18(int)
-              26:             TypePointer Uniform 25(Uniforms)
-              27:     26(ptr) Variable Uniform
-              28:             TypeInt 32 1
-              29:     28(int) Constant 0
-              30:             TypePointer Uniform 18(int)
-              33:             TypePointer Function 20
-              35:             TypePointer Function 17(int)
-              39:             TypeArray 14(int) 19
-              40:     14(int) Constant 65535
-              41:          39 ConstantComposite 40 40 40
-              44:             TypePointer Function 39
-              49:             TypeVector 14(int) 3
-              50:             TypePointer Function 49(ivec3)
-              53:     17(int) Constant 1
-              54:             TypeVector 17(int) 3
-             107:             TypePointer Function 28(int)
-             111:             TypeVector 28(int) 3
-             114:     18(int) Constant 1
-             120:     18(int) Constant 2
-             128:             TypeBool
-             129:             TypePointer Function 128(bool)
-             131:     18(int) Constant 0
-             150:             TypePointer Function 18(int)
-             188:             TypeVector 17(int) 2
-             189:             TypePointer Function 188(ivec2)
-             191:             TypeVector 128(bool) 2
-             192:             TypePointer Function 191(bvec2)
-             195:     17(int) Constant 0
-             196:  188(ivec2) ConstantComposite 195 195
-             197:  188(ivec2) ConstantComposite 53 53
-             199:             TypeVector 14(int) 2
-             200:             TypePointer Function 199(ivec2)
-             203:     14(int) Constant 0
-             204:     14(int) Constant 1
-             205:  199(ivec2) ConstantComposite 203 203
-             206:  199(ivec2) ConstantComposite 204 204
-             212:             TypeVector 28(int) 2
-             213:             TypePointer Function 212(ivec2)
-             223:             TypeVector 18(int) 2
-             226:             TypePointer Function 223(ivec2)
-             238:             TypeFloat 32
-             239:             TypeVector 238(float) 2
-             240:             TypePointer Function 239(fvec2)
-             250:             TypeFloat 64
-             251:             TypeVector 250(float) 2
-             252:             TypePointer Function 251(fvec2)
-             262:             TypeFloat 16
-             263:             TypeVector 262(float) 2
-             264:             TypePointer Function 263(fvec2)
-             274:             TypeInt 64 1
-             275:             TypeVector 274(int) 2
-             276:             TypePointer Function 275(ivec2)
-             286:             TypeInt 64 0
-             287:             TypeVector 286(int) 2
-             290:             TypePointer Function 287(ivec2)
-             317:     17(int) Constant 65535
-             318:  188(ivec2) ConstantComposite 317 317
-             327:   49(ivec3) ConstantComposite 203 203 203
-             369:   128(bool) ConstantTrue
-             376:   128(bool) ConstantFalse
-             377:  191(bvec2) ConstantComposite 376 376
-             389:             TypeVector 128(bool) 3
-             390:  389(bvec3) ConstantComposite 376 376 376
-             392:             TypeVector 262(float) 3
-             393:             TypePointer Function 392(fvec3)
-             396:             TypePointer Function 54(ivec3)
-    398(ResType):             TypeStruct 392(fvec3) 54(ivec3)
-             408:             TypePointer Function 262(float)
-             432:             TypePointer Function 274(int)
-             435:             TypeVector 17(int) 4
-             441:             TypePointer Function 286(int)
-             444:             TypeVector 14(int) 4
-             450:             TypePointer Function 389(bvec3)
-      516(Block):             TypeStruct 54(ivec3) 14(int)
-             517:             TypePointer Uniform 516(Block)
-      518(block):    517(ptr) Variable Uniform
-             519:             TypePointer Input 49(ivec3)
-      520(iu16v):    519(ptr) Variable Input
-             521:             TypePointer Input 17(int)
-       522(ii16):    521(ptr) Variable Input
-       523(si64):    274(int) SpecConstant 4294967286 4294967295
-       524(su64):    286(int) SpecConstant 20 0
-         525(si):     28(int) SpecConstant 4294967291
-         526(su):     18(int) SpecConstant 4
-         527(sb):   128(bool) SpecConstantTrue
-       528(si16):     17(int) SpecConstant 65531
-       529(su16):     14(int) SpecConstant 4
-             530:   128(bool) SpecConstantOp 171 528(si16) 203
-             531:   128(bool) SpecConstantOp 171 529(su16) 203
-             532:     17(int) SpecConstantOp 169 527(sb) 53 195
-             533:     14(int) SpecConstantOp 169 527(sb) 204 203
-             534:     28(int) SpecConstantOp 114 528(si16)
-             535:     18(int) SpecConstantOp 113 529(su16)
-             536:     28(int) SpecConstantOp 128 535 131
-             537:     17(int) SpecConstantOp 114 525(si)
-             538:     17(int) SpecConstantOp 114 525(si)
-             539:     14(int) SpecConstantOp 128 538 203
-             540:     28(int) SpecConstantOp 114 528(si16)
-             541:     18(int) SpecConstantOp 128 540 131
-             542:     18(int) SpecConstantOp 113 529(su16)
-             543:     14(int) SpecConstantOp 113 526(su)
-             544:     17(int) SpecConstantOp 128 543 203
-             545:     14(int) SpecConstantOp 113 526(su)
-             546:    274(int) SpecConstantOp 114 528(si16)
-             547:    286(int) SpecConstantOp 113 529(su16)
-             548:    286(int) Constant 0 0
-             549:    274(int) SpecConstantOp 128 547 548
-             550:     17(int) SpecConstantOp 114 523(si64)
-             551:     17(int) SpecConstantOp 114 523(si64)
-             552:     14(int) SpecConstantOp 128 551 203
-             553:    274(int) SpecConstantOp 114 528(si16)
-             554:    286(int) SpecConstantOp 128 553 548
-             555:    286(int) SpecConstantOp 113 529(su16)
-             556:     14(int) SpecConstantOp 113 524(su64)
-             557:     17(int) SpecConstantOp 128 556 203
-             558:     14(int) SpecConstantOp 113 524(su64)
-             559:     14(int) SpecConstantOp 128 528(si16) 203
-             560:     17(int) SpecConstantOp 128 529(su16) 203
+              17:             TypeInt 32 0
+              18:     17(int) Constant 3
+              19:             TypeArray 14(int) 18
+              20:     14(int) Constant 4294962927
+              21:     14(int) Constant 4294967295
+              22:     14(int) Constant 16384
+              23:          19 ConstantComposite 20 21 22
+    24(Uniforms):             TypeStruct 17(int)
+              25:             TypePointer Uniform 24(Uniforms)
+              26:     25(ptr) Variable Uniform
+              27:             TypeInt 32 1
+              28:     27(int) Constant 0
+              29:             TypePointer Uniform 17(int)
+              32:             TypePointer Function 19
+              36:             TypeInt 16 0
+              37:             TypePointer Function 36(int)
+              39:             TypeArray 36(int) 18
+              40:     36(int) Constant 65535
+              41:     36(int) Constant 32767
+              42:          39 ConstantComposite 40 40 41
+              45:             TypePointer Function 39
+              49:             TypeVector 27(int) 2
+              50:             TypePointer Function 49(ivec2)
+              52:             TypeVector 14(int) 2
+              53:             TypePointer Function 52(ivec2)
+              57:             TypeVector 36(int) 2
+              58:             TypePointer Function 57(ivec2)
+              65:             TypeVector 17(int) 2
+              66:             TypePointer Function 65(ivec2)
+              71:             TypeInt 64 1
+              72:             TypeVector 71(int) 2
+              73:             TypePointer Function 72(ivec2)
+              77:             TypeInt 64 0
+              78:             TypeVector 77(int) 2
+              79:             TypePointer Function 78(ivec2)
+              91:             TypeFloat 16
+              92:             TypeVector 91(float) 2
+              93:             TypePointer Function 92(fvec2)
+              97:             TypeFloat 32
+              98:             TypeVector 97(float) 2
+              99:             TypePointer Function 98(fvec2)
+             103:             TypeFloat 64
+             104:             TypeVector 103(float) 2
+             105:             TypePointer Function 104(fvec2)
+             151:             TypeInt 8 1
+             152:             TypeVector 151(int) 2
+             153:             TypePointer Function 152(ivec2)
+             160:             TypeInt 8 0
+             161:             TypeVector 160(int) 2
+             162:             TypePointer Function 161(ivec2)
+             173:             TypeBool
+             174:             TypeVector 173(bool) 2
+             175:             TypePointer Function 174(bvec2)
+             178:     14(int) Constant 0
+             179:     14(int) Constant 1
+             180:   52(ivec2) ConstantComposite 178 178
+             181:   52(ivec2) ConstantComposite 179 179
+             184:     36(int) Constant 0
+             185:     36(int) Constant 1
+             186:   57(ivec2) ConstantComposite 184 184
+             187:   57(ivec2) ConstantComposite 185 185
+             193:             TypeVector 36(int) 3
+             194:             TypePointer Function 193(ivec3)
+             197:             TypeVector 14(int) 3
+             219:             TypePointer Function 27(int)
+             225:             TypeVector 17(int) 3
+             226:             TypePointer Function 225(ivec3)
+             242:             TypePointer Function 71(int)
+             264:     17(int) Constant 1
+             270:     17(int) Constant 2
+             275:             TypeVector 27(int) 3
+             282:             TypePointer Function 173(bool)
+             284:     17(int) Constant 0
+             298:             TypePointer Function 17(int)
+             356:   52(ivec2) ConstantComposite 21 21
+             365:  193(ivec3) ConstantComposite 184 184 184
+             407:   173(bool) ConstantTrue
+             414:   173(bool) ConstantFalse
+             415:  174(bvec2) ConstantComposite 414 414
+             427:             TypeVector 173(bool) 3
+             428:  427(bvec3) ConstantComposite 414 414 414
+             434:             TypeVector 14(int) 4
+             435:             TypePointer Function 434(ivec4)
+             443:             TypePointer Function 77(int)
+             445:             TypeVector 36(int) 4
+             446:             TypePointer Function 445(ivec4)
+             458:             TypePointer Function 427(bvec3)
+      520(Block):             TypeStruct 14(int) 52(ivec2) 197(ivec3) 434(ivec4) 36(int) 57(ivec2) 193(ivec3) 445(ivec4)
+             521:             TypePointer Uniform 520(Block)
+      522(block):    521(ptr) Variable Uniform
+       523(si16):     14(int) SpecConstant 4294967286
+       524(su16):     36(int) SpecConstant 20
          4(main):           2 Function None 3
                5:             Label
-             512:           2 FunctionCall 6(literal()
-             513:           2 FunctionCall 8(operators()
-             514:           2 FunctionCall 10(typeCast()
-             515:           2 FunctionCall 12(builtinFuncs()
                               Return
                               FunctionEnd
      6(literal():           2 Function None 3
                7:             Label
-         16(u16):     15(ptr) Variable Function
-   34(indexable):     33(ptr) Variable Function
-   45(indexable):     44(ptr) Variable Function
-              31:     30(ptr) AccessChain 27 29
-              32:     18(int) Load 31
-                              Store 34(indexable) 24
-              36:     35(ptr) AccessChain 34(indexable) 32
-              37:     17(int) Load 36
-              38:     14(int) Bitcast 37
-              42:     30(ptr) AccessChain 27 29
-              43:     18(int) Load 42
-                              Store 45(indexable) 41
-              46:     15(ptr) AccessChain 45(indexable) 43
-              47:     14(int) Load 46
-              48:     14(int) IAdd 38 47
-                              Store 16(u16) 48
+         16(i16):     15(ptr) Variable Function
+   33(indexable):     32(ptr) Variable Function
+         38(u16):     37(ptr) Variable Function
+   46(indexable):     45(ptr) Variable Function
+              30:     29(ptr) AccessChain 26 28
+              31:     17(int) Load 30
+                              Store 33(indexable) 23
+              34:     15(ptr) AccessChain 33(indexable) 31
+              35:     14(int) Load 34
+                              Store 16(i16) 35
+              43:     29(ptr) AccessChain 26 28
+              44:     17(int) Load 43
+                              Store 46(indexable) 42
+              47:     37(ptr) AccessChain 46(indexable) 44
+              48:     36(int) Load 47
+                              Store 38(u16) 48
                               Return
                               FunctionEnd
-   8(operators():           2 Function None 3
+  8(typeCast16():           2 Function None 3
                9:             Label
-        51(u16v):     50(ptr) Variable Function
-         57(i16):     35(ptr) Variable Function
-         70(u16):     15(ptr) Variable Function
-          108(i):    107(ptr) Variable Function
-          130(b):    129(ptr) Variable Function
-          151(u):    150(ptr) Variable Function
-              52:   49(ivec3) Load 51(u16v)
-              55:   54(ivec3) CompositeConstruct 53 53 53
-              56:   49(ivec3) IAdd 52 55
-                              Store 51(u16v) 56
-              58:     17(int) Load 57(i16)
-              59:     17(int) ISub 58 53
-                              Store 57(i16) 59
-              60:     17(int) Load 57(i16)
-              61:     17(int) IAdd 60 53
-                              Store 57(i16) 61
-              62:   49(ivec3) Load 51(u16v)
-              63:   54(ivec3) CompositeConstruct 53 53 53
-              64:   49(ivec3) ISub 62 63
-                              Store 51(u16v) 64
-              65:   49(ivec3) Load 51(u16v)
-              66:   49(ivec3) Not 65
-                              Store 51(u16v) 66
-              67:     17(int) Load 57(i16)
-                              Store 57(i16) 67
-              68:   49(ivec3) Load 51(u16v)
-              69:   49(ivec3) SNegate 68
-                              Store 51(u16v) 69
-              71:     17(int) Load 57(i16)
-              72:     14(int) Bitcast 71
-              73:     14(int) Load 70(u16)
-              74:     14(int) IAdd 73 72
-                              Store 70(u16) 74
-              75:   49(ivec3) Load 51(u16v)
-              76:   49(ivec3) Load 51(u16v)
-              77:   49(ivec3) ISub 76 75
-                              Store 51(u16v) 77
-              78:     17(int) Load 57(i16)
-              79:     17(int) Load 57(i16)
-              80:     17(int) IMul 79 78
-                              Store 57(i16) 80
-              81:   49(ivec3) Load 51(u16v)
-              82:   49(ivec3) Load 51(u16v)
-              83:   49(ivec3) UDiv 82 81
-                              Store 51(u16v) 83
-              84:     17(int) Load 57(i16)
-              85:     14(int) Bitcast 84
-              86:   49(ivec3) Load 51(u16v)
-              87:   49(ivec3) CompositeConstruct 85 85 85
-              88:   49(ivec3) UMod 86 87
-                              Store 51(u16v) 88
-              89:   49(ivec3) Load 51(u16v)
-              90:   49(ivec3) Load 51(u16v)
-              91:   49(ivec3) IAdd 89 90
-                              Store 51(u16v) 91
-              92:     17(int) Load 57(i16)
-              93:     14(int) Bitcast 92
-              94:     14(int) Load 70(u16)
-              95:     14(int) ISub 93 94
-                              Store 70(u16) 95
-              96:   49(ivec3) Load 51(u16v)
-              97:     17(int) Load 57(i16)
-              98:     14(int) Bitcast 97
-              99:   49(ivec3) CompositeConstruct 98 98 98
-             100:   49(ivec3) IMul 96 99
-                              Store 51(u16v) 100
-             101:     17(int) Load 57(i16)
-             102:     17(int) Load 57(i16)
-             103:     17(int) IMul 101 102
-                              Store 57(i16) 103
-             104:     17(int) Load 57(i16)
-             105:     17(int) Load 57(i16)
-             106:     17(int) SMod 104 105
-                              Store 57(i16) 106
-             109:     28(int) Load 108(i)
-             110:   49(ivec3) Load 51(u16v)
-             112:  111(ivec3) CompositeConstruct 109 109 109
-             113:   49(ivec3) ShiftLeftLogical 110 112
-                              Store 51(u16v) 113
-             115:     15(ptr) AccessChain 51(u16v) 114
-             116:     14(int) Load 115
-             117:     17(int) Load 57(i16)
-             118:     17(int) ShiftRightArithmetic 117 116
-                              Store 57(i16) 118
-             119:     17(int) Load 57(i16)
-             121:     15(ptr) AccessChain 51(u16v) 120
-             122:     14(int) Load 121
-             123:     17(int) ShiftLeftLogical 119 122
-                              Store 57(i16) 123
-             124:   49(ivec3) Load 51(u16v)
-             125:     17(int) Load 57(i16)
-             126:   54(ivec3) CompositeConstruct 125 125 125
-             127:   49(ivec3) ShiftLeftLogical 124 126
-                              Store 51(u16v) 127
-             132:     15(ptr) AccessChain 51(u16v) 131
-             133:     14(int) Load 132
-             134:     17(int) Load 57(i16)
-             135:     14(int) Bitcast 134
-             136:   128(bool) INotEqual 133 135
-                              Store 130(b) 136
-             137:     17(int) Load 57(i16)
-             138:     14(int) Bitcast 137
-             139:     15(ptr) AccessChain 51(u16v) 131
-             140:     14(int) Load 139
-             141:   128(bool) IEqual 138 140
-                              Store 130(b) 141
-             142:     15(ptr) AccessChain 51(u16v) 131
-             143:     14(int) Load 142
-             144:     15(ptr) AccessChain 51(u16v) 114
-             145:     14(int) Load 144
-             146:   128(bool) UGreaterThan 143 145
-                              Store 130(b) 146
-             147:     17(int) Load 57(i16)
-             148:     28(int) SConvert 147
-             149:     18(int) Bitcast 148
-             152:     18(int) Load 151(u)
-             153:   128(bool) ULessThan 149 152
-                              Store 130(b) 153
-             154:     15(ptr) AccessChain 51(u16v) 114
-             155:     14(int) Load 154
-             156:     15(ptr) AccessChain 51(u16v) 131
-             157:     14(int) Load 156
-             158:   128(bool) UGreaterThanEqual 155 157
-                              Store 130(b) 158
-             159:     17(int) Load 57(i16)
-             160:     28(int) SConvert 159
-             161:     28(int) Load 108(i)
-             162:   128(bool) SLessThanEqual 160 161
-                              Store 130(b) 162
-             163:     17(int) Load 57(i16)
-             164:     14(int) Bitcast 163
-             165:   49(ivec3) Load 51(u16v)
-             166:   49(ivec3) CompositeConstruct 164 164 164
-             167:   49(ivec3) BitwiseOr 165 166
-                              Store 51(u16v) 167
-             168:     17(int) Load 57(i16)
-             169:     14(int) Bitcast 168
-             170:     14(int) Load 70(u16)
-             171:     14(int) BitwiseOr 169 170
-                              Store 70(u16) 171
-             172:     17(int) Load 57(i16)
-             173:     17(int) Load 57(i16)
-             174:     17(int) BitwiseAnd 173 172
-                              Store 57(i16) 174
-             175:   49(ivec3) Load 51(u16v)
-             176:   49(ivec3) Load 51(u16v)
-             177:   49(ivec3) BitwiseAnd 175 176
-                              Store 51(u16v) 177
-             178:     17(int) Load 57(i16)
-             179:     14(int) Bitcast 178
-             180:   49(ivec3) Load 51(u16v)
-             181:   49(ivec3) CompositeConstruct 179 179 179
-             182:   49(ivec3) BitwiseXor 180 181
-                              Store 51(u16v) 182
-             183:   49(ivec3) Load 51(u16v)
-             184:     17(int) Load 57(i16)
-             185:     14(int) Bitcast 184
-             186:   49(ivec3) CompositeConstruct 185 185 185
-             187:   49(ivec3) BitwiseXor 183 186
-                              Store 51(u16v) 187
+        51(i32v):     50(ptr) Variable Function
+        54(i16v):     53(ptr) Variable Function
+        59(u16v):     58(ptr) Variable Function
+        67(u32v):     66(ptr) Variable Function
+        74(i64v):     73(ptr) Variable Function
+        80(u64v):     79(ptr) Variable Function
+        94(f16v):     93(ptr) Variable Function
+       100(f32v):     99(ptr) Variable Function
+       106(f64v):    105(ptr) Variable Function
+        154(i8v):    153(ptr) Variable Function
+        163(u8v):    162(ptr) Variable Function
+         176(bv):    175(ptr) Variable Function
+              55:   52(ivec2) Load 54(i16v)
+              56:   49(ivec2) SConvert 55
+                              Store 51(i32v) 56
+              60:   57(ivec2) Load 59(u16v)
+              61:   49(ivec2) UConvert 60
+              62:   49(ivec2) Bitcast 61
+                              Store 51(i32v) 62
+              63:   52(ivec2) Load 54(i16v)
+              64:   57(ivec2) Bitcast 63
+                              Store 59(u16v) 64
+              68:   52(ivec2) Load 54(i16v)
+              69:   49(ivec2) SConvert 68
+              70:   65(ivec2) Bitcast 69
+                              Store 67(u32v) 70
+              75:   52(ivec2) Load 54(i16v)
+              76:   72(ivec2) SConvert 75
+                              Store 74(i64v) 76
+              81:   52(ivec2) Load 54(i16v)
+              82:   72(ivec2) SConvert 81
+              83:   78(ivec2) Bitcast 82
+                              Store 80(u64v) 83
+              84:   57(ivec2) Load 59(u16v)
+              85:   65(ivec2) UConvert 84
+                              Store 67(u32v) 85
+              86:   57(ivec2) Load 59(u16v)
+              87:   72(ivec2) UConvert 86
+              88:   72(ivec2) Bitcast 87
+                              Store 74(i64v) 88
+              89:   57(ivec2) Load 59(u16v)
+              90:   78(ivec2) UConvert 89
+                              Store 80(u64v) 90
+              95:   52(ivec2) Load 54(i16v)
+              96:   92(fvec2) ConvertSToF 95
+                              Store 94(f16v) 96
+             101:   52(ivec2) Load 54(i16v)
+             102:   98(fvec2) ConvertSToF 101
+                              Store 100(f32v) 102
+             107:   52(ivec2) Load 54(i16v)
+             108:  104(fvec2) ConvertSToF 107
+                              Store 106(f64v) 108
+             109:   57(ivec2) Load 59(u16v)
+             110:   92(fvec2) ConvertUToF 109
+                              Store 94(f16v) 110
+             111:   57(ivec2) Load 59(u16v)
+             112:   98(fvec2) ConvertUToF 111
+                              Store 100(f32v) 112
+             113:   57(ivec2) Load 59(u16v)
+             114:  104(fvec2) ConvertUToF 113
+                              Store 106(f64v) 114
+             115:   52(ivec2) Load 54(i16v)
+             116:   49(ivec2) SConvert 115
+                              Store 51(i32v) 116
+             117:   57(ivec2) Load 59(u16v)
+             118:   49(ivec2) UConvert 117
+             119:   49(ivec2) Bitcast 118
+                              Store 51(i32v) 119
+             120:   52(ivec2) Load 54(i16v)
+             121:   57(ivec2) Bitcast 120
+                              Store 59(u16v) 121
+             122:   52(ivec2) Load 54(i16v)
+             123:   49(ivec2) SConvert 122
+             124:   65(ivec2) Bitcast 123
+                              Store 67(u32v) 124
+             125:   52(ivec2) Load 54(i16v)
+             126:   72(ivec2) SConvert 125
+                              Store 74(i64v) 126
+             127:   52(ivec2) Load 54(i16v)
+             128:   72(ivec2) SConvert 127
+             129:   78(ivec2) Bitcast 128
+                              Store 80(u64v) 129
+             130:   57(ivec2) Load 59(u16v)
+             131:   65(ivec2) UConvert 130
+                              Store 67(u32v) 131
+             132:   57(ivec2) Load 59(u16v)
+             133:   72(ivec2) UConvert 132
+             134:   72(ivec2) Bitcast 133
+                              Store 74(i64v) 134
+             135:   57(ivec2) Load 59(u16v)
+             136:   72(ivec2) UConvert 135
+             137:   72(ivec2) Bitcast 136
+             138:   78(ivec2) Bitcast 137
+                              Store 80(u64v) 138
+             139:   52(ivec2) Load 54(i16v)
+             140:   92(fvec2) ConvertSToF 139
+                              Store 94(f16v) 140
+             141:   52(ivec2) Load 54(i16v)
+             142:   98(fvec2) ConvertSToF 141
+                              Store 100(f32v) 142
+             143:   52(ivec2) Load 54(i16v)
+             144:  104(fvec2) ConvertSToF 143
+                              Store 106(f64v) 144
+             145:   57(ivec2) Load 59(u16v)
+             146:   92(fvec2) ConvertUToF 145
+                              Store 94(f16v) 146
+             147:   57(ivec2) Load 59(u16v)
+             148:   98(fvec2) ConvertUToF 147
+                              Store 100(f32v) 148
+             149:   57(ivec2) Load 59(u16v)
+             150:  104(fvec2) ConvertUToF 149
+                              Store 106(f64v) 150
+             155:   52(ivec2) Load 54(i16v)
+             156:  152(ivec2) SConvert 155
+                              Store 154(i8v) 156
+             157:   57(ivec2) Load 59(u16v)
+             158:  152(ivec2) UConvert 157
+             159:  152(ivec2) Bitcast 158
+                              Store 154(i8v) 159
+             164:   52(ivec2) Load 54(i16v)
+             165:  152(ivec2) SConvert 164
+             166:  161(ivec2) Bitcast 165
+                              Store 163(u8v) 166
+             167:   57(ivec2) Load 59(u16v)
+             168:  161(ivec2) UConvert 167
+                              Store 163(u8v) 168
+             169:   57(ivec2) Load 59(u16v)
+             170:  161(ivec2) UConvert 169
+             171:   52(ivec2) UConvert 170
+             172:   52(ivec2) Bitcast 171
+                              Store 54(i16v) 172
+             177:  174(bvec2) Load 176(bv)
+             182:   52(ivec2) Select 177 181 180
+                              Store 54(i16v) 182
+             183:  174(bvec2) Load 176(bv)
+             188:   57(ivec2) Select 183 187 186
+                              Store 59(u16v) 188
+             189:   52(ivec2) Load 54(i16v)
+             190:  174(bvec2) INotEqual 189 186
+                              Store 176(bv) 190
+             191:   57(ivec2) Load 59(u16v)
+             192:  174(bvec2) INotEqual 191 186
+                              Store 176(bv) 192
                               Return
                               FunctionEnd
-   10(typeCast():           2 Function None 3
+  10(operators():           2 Function None 3
               11:             Label
-       190(i16v):    189(ptr) Variable Function
-         193(bv):    192(ptr) Variable Function
-       201(u16v):    200(ptr) Variable Function
-         214(iv):    213(ptr) Variable Function
+       195(u16v):    194(ptr) Variable Function
+        200(i16):     15(ptr) Variable Function
+          220(i):    219(ptr) Variable Function
          227(uv):    226(ptr) Variable Function
-         241(fv):    240(ptr) Variable Function
-         253(dv):    252(ptr) Variable Function
-       265(f16v):    264(ptr) Variable Function
-       277(i64v):    276(ptr) Variable Function
-       291(u64v):    290(ptr) Variable Function
-             194:  191(bvec2) Load 193(bv)
-             198:  188(ivec2) Select 194 197 196
-                              Store 190(i16v) 198
-             202:  191(bvec2) Load 193(bv)
-             207:  199(ivec2) Select 202 206 205
-                              Store 201(u16v) 207
-             208:  188(ivec2) Load 190(i16v)
-             209:  191(bvec2) INotEqual 208 205
-                              Store 193(bv) 209
-             210:  199(ivec2) Load 201(u16v)
-             211:  191(bvec2) INotEqual 210 205
-                              Store 193(bv) 211
-             215:  212(ivec2) Load 214(iv)
-             216:  188(ivec2) SConvert 215
-                              Store 190(i16v) 216
-             217:  212(ivec2) Load 214(iv)
-             218:  188(ivec2) SConvert 217
-             219:  199(ivec2) Bitcast 218
-                              Store 201(u16v) 219
-             220:  188(ivec2) Load 190(i16v)
-             221:  212(ivec2) SConvert 220
-                              Store 214(iv) 221
-             222:  199(ivec2) Load 201(u16v)
-             224:  223(ivec2) UConvert 222
-             225:  212(ivec2) Bitcast 224
-                              Store 214(iv) 225
-             228:  223(ivec2) Load 227(uv)
-             229:  199(ivec2) UConvert 228
-             230:  188(ivec2) Bitcast 229
-                              Store 190(i16v) 230
-             231:  223(ivec2) Load 227(uv)
-             232:  199(ivec2) UConvert 231
-                              Store 201(u16v) 232
-             233:  188(ivec2) Load 190(i16v)
-             234:  212(ivec2) SConvert 233
-             235:  223(ivec2) Bitcast 234
-                              Store 227(uv) 235
-             236:  199(ivec2) Load 201(u16v)
-             237:  223(ivec2) UConvert 236
+        243(i64):    242(ptr) Variable Function
+          283(b):    282(ptr) Variable Function
+             196:  193(ivec3) Load 195(u16v)
+             198:  197(ivec3) CompositeConstruct 179 179 179
+             199:  193(ivec3) IAdd 196 198
+                              Store 195(u16v) 199
+             201:     14(int) Load 200(i16)
+             202:     14(int) ISub 201 179
+                              Store 200(i16) 202
+             203:     14(int) Load 200(i16)
+             204:     14(int) IAdd 203 179
+                              Store 200(i16) 204
+             205:  193(ivec3) Load 195(u16v)
+             206:  197(ivec3) CompositeConstruct 179 179 179
+             207:  193(ivec3) ISub 205 206
+                              Store 195(u16v) 207
+             208:  193(ivec3) Load 195(u16v)
+             209:  193(ivec3) Not 208
+                              Store 195(u16v) 209
+             210:     14(int) Load 200(i16)
+                              Store 200(i16) 210
+             211:  193(ivec3) Load 195(u16v)
+             212:  193(ivec3) SNegate 211
+                              Store 195(u16v) 212
+             213:     14(int) Load 200(i16)
+             214:     14(int) Load 200(i16)
+             215:     14(int) IAdd 214 213
+                              Store 200(i16) 215
+             216:  193(ivec3) Load 195(u16v)
+             217:  193(ivec3) Load 195(u16v)
+             218:  193(ivec3) ISub 217 216
+                              Store 195(u16v) 218
+             221:     14(int) Load 200(i16)
+             222:     27(int) SConvert 221
+             223:     27(int) Load 220(i)
+             224:     27(int) IMul 223 222
+                              Store 220(i) 224
+             228:  193(ivec3) Load 195(u16v)
+             229:  225(ivec3) UConvert 228
+             230:  225(ivec3) Load 227(uv)
+             231:  225(ivec3) UDiv 230 229
+                              Store 227(uv) 231
+             232:     14(int) Load 200(i16)
+             233:     27(int) SConvert 232
+             234:     17(int) Bitcast 233
+             235:  225(ivec3) Load 227(uv)
+             236:  225(ivec3) CompositeConstruct 234 234 234
+             237:  225(ivec3) UMod 235 236
                               Store 227(uv) 237
-             242:  239(fvec2) Load 241(fv)
-             243:  188(ivec2) ConvertFToS 242
-                              Store 190(i16v) 243
-             244:  239(fvec2) Load 241(fv)
-             245:  199(ivec2) ConvertFToU 244
-                              Store 201(u16v) 245
-             246:  188(ivec2) Load 190(i16v)
-             247:  239(fvec2) ConvertSToF 246
-                              Store 241(fv) 247
-             248:  199(ivec2) Load 201(u16v)
-             249:  239(fvec2) ConvertUToF 248
-                              Store 241(fv) 249
-             254:  251(fvec2) Load 253(dv)
-             255:  188(ivec2) ConvertFToS 254
-                              Store 190(i16v) 255
-             256:  251(fvec2) Load 253(dv)
-             257:  199(ivec2) ConvertFToU 256
-                              Store 201(u16v) 257
-             258:  188(ivec2) Load 190(i16v)
-             259:  251(fvec2) ConvertSToF 258
-                              Store 253(dv) 259
-             260:  199(ivec2) Load 201(u16v)
-             261:  251(fvec2) ConvertUToF 260
-                              Store 253(dv) 261
-             266:  263(fvec2) Load 265(f16v)
-             267:  188(ivec2) ConvertFToS 266
-                              Store 190(i16v) 267
-             268:  263(fvec2) Load 265(f16v)
-             269:  199(ivec2) ConvertFToU 268
-                              Store 201(u16v) 269
-             270:  188(ivec2) Load 190(i16v)
-             271:  263(fvec2) ConvertSToF 270
-                              Store 265(f16v) 271
-             272:  199(ivec2) Load 201(u16v)
-             273:  263(fvec2) ConvertUToF 272
-                              Store 265(f16v) 273
-             278:  275(ivec2) Load 277(i64v)
-             279:  188(ivec2) SConvert 278
-                              Store 190(i16v) 279
-             280:  275(ivec2) Load 277(i64v)
-             281:  188(ivec2) SConvert 280
-             282:  199(ivec2) Bitcast 281
-                              Store 201(u16v) 282
-             283:  188(ivec2) Load 190(i16v)
-             284:  275(ivec2) SConvert 283
-                              Store 277(i64v) 284
-             285:  199(ivec2) Load 201(u16v)
-             288:  287(ivec2) UConvert 285
-             289:  275(ivec2) Bitcast 288
-                              Store 277(i64v) 289
-             292:  287(ivec2) Load 291(u64v)
-             293:  199(ivec2) UConvert 292
-             294:  188(ivec2) Bitcast 293
-                              Store 190(i16v) 294
-             295:  287(ivec2) Load 291(u64v)
-             296:  199(ivec2) UConvert 295
-                              Store 201(u16v) 296
-             297:  188(ivec2) Load 190(i16v)
-             298:  275(ivec2) SConvert 297
-             299:  287(ivec2) Bitcast 298
-                              Store 291(u64v) 299
-             300:  199(ivec2) Load 201(u16v)
-             301:  287(ivec2) UConvert 300
-                              Store 291(u64v) 301
-             302:  199(ivec2) Load 201(u16v)
-             303:  188(ivec2) Bitcast 302
-                              Store 190(i16v) 303
-             304:  188(ivec2) Load 190(i16v)
-             305:  199(ivec2) Bitcast 304
-                              Store 201(u16v) 305
+             238:  193(ivec3) Load 195(u16v)
+             239:  225(ivec3) UConvert 238
+             240:  225(ivec3) Load 227(uv)
+             241:  225(ivec3) IAdd 239 240
+                              Store 227(uv) 241
+             244:     14(int) Load 200(i16)
+             245:     71(int) SConvert 244
+             246:     71(int) Load 243(i64)
+             247:     71(int) ISub 245 246
+                              Store 243(i64) 247
+             248:  193(ivec3) Load 195(u16v)
+             249:  225(ivec3) UConvert 248
+             250:  225(ivec3) Load 227(uv)
+             251:  225(ivec3) IMul 249 250
+                              Store 227(uv) 251
+             252:     14(int) Load 200(i16)
+             253:     71(int) SConvert 252
+             254:     71(int) Load 243(i64)
+             255:     71(int) IMul 253 254
+                              Store 243(i64) 255
+             256:     14(int) Load 200(i16)
+             257:     27(int) SConvert 256
+             258:     27(int) Load 220(i)
+             259:     27(int) SMod 257 258
+                              Store 220(i) 259
+             260:     14(int) Load 200(i16)
+             261:  193(ivec3) Load 195(u16v)
+             262:  197(ivec3) CompositeConstruct 260 260 260
+             263:  193(ivec3) ShiftLeftLogical 261 262
+                              Store 195(u16v) 263
+             265:     37(ptr) AccessChain 195(u16v) 264
+             266:     36(int) Load 265
+             267:     14(int) Load 200(i16)
+             268:     14(int) ShiftRightArithmetic 267 266
+                              Store 200(i16) 268
+             269:     14(int) Load 200(i16)
+             271:     37(ptr) AccessChain 195(u16v) 270
+             272:     36(int) Load 271
+             273:     14(int) ShiftLeftLogical 269 272
+                              Store 200(i16) 273
+             274:  193(ivec3) Load 195(u16v)
+             276:  275(ivec3) UConvert 274
+             277:  275(ivec3) Bitcast 276
+             278:     27(int) Load 220(i)
+             279:  275(ivec3) CompositeConstruct 278 278 278
+             280:  275(ivec3) ShiftLeftLogical 277 279
+             281:  225(ivec3) Bitcast 280
+                              Store 227(uv) 281
+             285:     37(ptr) AccessChain 195(u16v) 284
+             286:     36(int) Load 285
+             287:     14(int) Load 200(i16)
+             288:     36(int) Bitcast 287
+             289:   173(bool) INotEqual 286 288
+                              Store 283(b) 289
+             290:     14(int) Load 200(i16)
+             291:     36(int) Bitcast 290
+             292:     37(ptr) AccessChain 195(u16v) 284
+             293:     36(int) Load 292
+             294:   173(bool) IEqual 291 293
+                              Store 283(b) 294
+             295:     37(ptr) AccessChain 195(u16v) 284
+             296:     36(int) Load 295
+             297:     17(int) UConvert 296
+             299:    298(ptr) AccessChain 227(uv) 264
+             300:     17(int) Load 299
+             301:   173(bool) UGreaterThan 297 300
+                              Store 283(b) 301
+             302:     14(int) Load 200(i16)
+             303:     27(int) SConvert 302
+             304:     27(int) Load 220(i)
+             305:   173(bool) SLessThan 303 304
+                              Store 283(b) 305
+             306:     37(ptr) AccessChain 195(u16v) 264
+             307:     36(int) Load 306
+             308:     17(int) UConvert 307
+             309:    298(ptr) AccessChain 227(uv) 284
+             310:     17(int) Load 309
+             311:   173(bool) UGreaterThanEqual 308 310
+                              Store 283(b) 311
+             312:     14(int) Load 200(i16)
+             313:     27(int) SConvert 312
+             314:     27(int) Load 220(i)
+             315:   173(bool) SLessThanEqual 313 314
+                              Store 283(b) 315
+             316:     14(int) Load 200(i16)
+             317:     27(int) SConvert 316
+             318:     17(int) Bitcast 317
+             319:  225(ivec3) Load 227(uv)
+             320:  225(ivec3) CompositeConstruct 318 318 318
+             321:  225(ivec3) BitwiseOr 319 320
+                              Store 227(uv) 321
+             322:     14(int) Load 200(i16)
+             323:     27(int) SConvert 322
+             324:     27(int) Load 220(i)
+             325:     27(int) BitwiseOr 323 324
+                              Store 220(i) 325
+             326:     14(int) Load 200(i16)
+             327:     71(int) SConvert 326
+             328:     71(int) Load 243(i64)
+             329:     71(int) BitwiseAnd 328 327
+                              Store 243(i64) 329
+             330:  193(ivec3) Load 195(u16v)
+             331:  225(ivec3) UConvert 330
+             332:  225(ivec3) Load 227(uv)
+             333:  225(ivec3) BitwiseAnd 331 332
+                              Store 227(uv) 333
+             334:     14(int) Load 200(i16)
+             335:     27(int) SConvert 334
+             336:     17(int) Bitcast 335
+             337:  225(ivec3) Load 227(uv)
+             338:  225(ivec3) CompositeConstruct 336 336 336
+             339:  225(ivec3) BitwiseXor 337 338
+                              Store 227(uv) 339
+             340:  193(ivec3) Load 195(u16v)
+             341:     14(int) Load 200(i16)
+             342:     36(int) Bitcast 341
+             343:  193(ivec3) CompositeConstruct 342 342 342
+             344:  193(ivec3) BitwiseXor 340 343
+                              Store 195(u16v) 344
                               Return
                               FunctionEnd
 12(builtinFuncs():           2 Function None 3
               13:             Label
-       306(i16v):    189(ptr) Variable Function
-        312(i16):     35(ptr) Variable Function
-       320(u16v):     50(ptr) Variable Function
-        322(u16):     15(ptr) Variable Function
-       394(f16v):    393(ptr) Variable Function
-        397(exp):    396(ptr) Variable Function
-      419(packi):    107(ptr) Variable Function
-      424(packu):    150(ptr) Variable Function
-    433(packi64):    432(ptr) Variable Function
-    442(packu64):    441(ptr) Variable Function
-         451(bv):    450(ptr) Variable Function
-             307:  188(ivec2) Load 306(i16v)
-             308:  188(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 307
-                              Store 306(i16v) 308
-             309:  188(ivec2) Load 306(i16v)
-             310:  188(ivec2) ExtInst 1(GLSL.std.450) 7(SSign) 309
-                              Store 306(i16v) 310
-             311:  188(ivec2) Load 306(i16v)
-             313:     17(int) Load 312(i16)
-             314:  188(ivec2) CompositeConstruct 313 313
-             315:  188(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 311 314
-                              Store 306(i16v) 315
-             316:  188(ivec2) Load 306(i16v)
-             319:  188(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 316 318
-                              Store 306(i16v) 319
-             321:   49(ivec3) Load 320(u16v)
-             323:     14(int) Load 322(u16)
-             324:   49(ivec3) CompositeConstruct 323 323 323
-             325:   49(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 321 324
-                              Store 320(u16v) 325
-             326:   49(ivec3) Load 320(u16v)
-             328:   49(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 326 327
-                              Store 320(u16v) 328
-             329:  188(ivec2) Load 306(i16v)
-             330:     17(int) Load 312(i16)
-             331:  188(ivec2) CompositeConstruct 330 330
-             332:  188(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 329 331
-                              Store 306(i16v) 332
-             333:  188(ivec2) Load 306(i16v)
-             334:  188(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 333 318
-                              Store 306(i16v) 334
-             335:   49(ivec3) Load 320(u16v)
-             336:     14(int) Load 322(u16)
-             337:   49(ivec3) CompositeConstruct 336 336 336
-             338:   49(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 335 337
-                              Store 320(u16v) 338
-             339:   49(ivec3) Load 320(u16v)
-             340:   49(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 339 327
-                              Store 320(u16v) 340
-             341:  188(ivec2) Load 306(i16v)
-             342:     17(int) Load 312(i16)
-             343:     17(int) SNegate 342
-             344:     17(int) Load 312(i16)
-             345:  188(ivec2) CompositeConstruct 343 343
-             346:  188(ivec2) CompositeConstruct 344 344
-             347:  188(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 341 345 346
-                              Store 306(i16v) 347
-             348:  188(ivec2) Load 306(i16v)
-             349:  188(ivec2) Load 306(i16v)
-             350:  188(ivec2) SNegate 349
-             351:  188(ivec2) Load 306(i16v)
-             352:  188(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 348 350 351
-                              Store 306(i16v) 352
-             353:   49(ivec3) Load 320(u16v)
-             354:     14(int) Load 322(u16)
-             355:     14(int) SNegate 354
-             356:     14(int) Load 322(u16)
-             357:   49(ivec3) CompositeConstruct 355 355 355
-             358:   49(ivec3) CompositeConstruct 356 356 356
-             359:   49(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 353 357 358
-                              Store 320(u16v) 359
-             360:   49(ivec3) Load 320(u16v)
-             361:   49(ivec3) Load 320(u16v)
-             362:   49(ivec3) SNegate 361
-             363:   49(ivec3) Load 320(u16v)
-             364:   49(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 360 362 363
-                              Store 320(u16v) 364
-             365:     35(ptr) AccessChain 306(i16v) 131
-             366:     17(int) Load 365
-             367:     35(ptr) AccessChain 306(i16v) 114
-             368:     17(int) Load 367
-             370:     17(int) Select 369 368 366
-                              Store 312(i16) 370
-             371:     17(int) Load 312(i16)
-             372:  188(ivec2) CompositeConstruct 371 371
-             373:     17(int) Load 312(i16)
-             374:     17(int) SNegate 373
-             375:  188(ivec2) CompositeConstruct 374 374
-             378:  188(ivec2) Select 377 375 372
-                              Store 306(i16v) 378
-             379:     15(ptr) AccessChain 320(u16v) 131
-             380:     14(int) Load 379
-             381:     15(ptr) AccessChain 320(u16v) 114
-             382:     14(int) Load 381
-             383:     14(int) Select 369 382 380
-                              Store 322(u16) 383
-             384:     14(int) Load 322(u16)
-             385:   49(ivec3) CompositeConstruct 384 384 384
-             386:     14(int) Load 322(u16)
-             387:     14(int) SNegate 386
-             388:   49(ivec3) CompositeConstruct 387 387 387
-             391:   49(ivec3) Select 390 388 385
-                              Store 320(u16v) 391
-             395:  392(fvec3) Load 394(f16v)
-             399:398(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 395
-             400:   54(ivec3) CompositeExtract 399 1
-                              Store 397(exp) 400
-             401:  392(fvec3) CompositeExtract 399 0
-                              Store 394(f16v) 401
-             402:  392(fvec3) Load 394(f16v)
-             403:   54(ivec3) Load 397(exp)
-             404:  392(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 402 403
-                              Store 394(f16v) 404
-             405:  392(fvec3) Load 394(f16v)
-             406:  263(fvec2) VectorShuffle 405 405 0 1
-             407:  188(ivec2) Bitcast 406
-                              Store 306(i16v) 407
-             409:    408(ptr) AccessChain 394(f16v) 120
-             410:  262(float) Load 409
-             411:     14(int) Bitcast 410
-             412:     15(ptr) AccessChain 320(u16v) 131
-                              Store 412 411
-             413:  188(ivec2) Load 306(i16v)
-             414:  263(fvec2) Bitcast 413
-             415:  392(fvec3) Load 394(f16v)
-             416:  392(fvec3) VectorShuffle 415 414 3 4 2
-                              Store 394(f16v) 416
-             417:   49(ivec3) Load 320(u16v)
-             418:  392(fvec3) Bitcast 417
-                              Store 394(f16v) 418
-             420:  188(ivec2) Load 306(i16v)
-             421:     28(int) Bitcast 420
-                              Store 419(packi) 421
-             422:     28(int) Load 419(packi)
-             423:  188(ivec2) Bitcast 422
-                              Store 306(i16v) 423
-             425:   49(ivec3) Load 320(u16v)
-             426:  199(ivec2) VectorShuffle 425 425 0 1
-             427:     18(int) Bitcast 426
-                              Store 424(packu) 427
-             428:     18(int) Load 424(packu)
-             429:  199(ivec2) Bitcast 428
-             430:   49(ivec3) Load 320(u16v)
-             431:   49(ivec3) VectorShuffle 430 429 3 4 2
-                              Store 320(u16v) 431
-             434:     17(int) Load 312(i16)
-             436:  435(ivec4) CompositeConstruct 434 434 434 434
-             437:    274(int) Bitcast 436
-                              Store 433(packi64) 437
-             438:    274(int) Load 433(packi64)
-             439:  435(ivec4) Bitcast 438
-             440:  188(ivec2) VectorShuffle 439 439 0 1
-                              Store 306(i16v) 440
-             443:     14(int) Load 322(u16)
-             445:  444(ivec4) CompositeConstruct 443 443 443 443
-             446:    286(int) Bitcast 445
-                              Store 442(packu64) 446
-             447:    286(int) Load 442(packu64)
-             448:  444(ivec4) Bitcast 447
-             449:   49(ivec3) VectorShuffle 448 448 0 1 2
-                              Store 320(u16v) 449
-             452:   49(ivec3) Load 320(u16v)
-             453:     14(int) Load 322(u16)
-             454:   49(ivec3) CompositeConstruct 453 453 453
-             455:  389(bvec3) ULessThan 452 454
-                              Store 451(bv) 455
-             456:  188(ivec2) Load 306(i16v)
-             457:     17(int) Load 312(i16)
-             458:  188(ivec2) CompositeConstruct 457 457
-             459:  191(bvec2) SLessThan 456 458
-             460:  389(bvec3) Load 451(bv)
-             461:  389(bvec3) VectorShuffle 460 459 3 4 2
-                              Store 451(bv) 461
-             462:   49(ivec3) Load 320(u16v)
-             463:     14(int) Load 322(u16)
-             464:   49(ivec3) CompositeConstruct 463 463 463
-             465:  389(bvec3) ULessThanEqual 462 464
-                              Store 451(bv) 465
-             466:  188(ivec2) Load 306(i16v)
-             467:     17(int) Load 312(i16)
-             468:  188(ivec2) CompositeConstruct 467 467
-             469:  191(bvec2) SLessThanEqual 466 468
-             470:  389(bvec3) Load 451(bv)
-             471:  389(bvec3) VectorShuffle 470 469 3 4 2
-                              Store 451(bv) 471
-             472:   49(ivec3) Load 320(u16v)
-             473:     14(int) Load 322(u16)
-             474:   49(ivec3) CompositeConstruct 473 473 473
-             475:  389(bvec3) UGreaterThan 472 474
-                              Store 451(bv) 475
-             476:  188(ivec2) Load 306(i16v)
-             477:     17(int) Load 312(i16)
-             478:  188(ivec2) CompositeConstruct 477 477
-             479:  191(bvec2) SGreaterThan 476 478
-             480:  389(bvec3) Load 451(bv)
-             481:  389(bvec3) VectorShuffle 480 479 3 4 2
-                              Store 451(bv) 481
-             482:   49(ivec3) Load 320(u16v)
-             483:     14(int) Load 322(u16)
-             484:   49(ivec3) CompositeConstruct 483 483 483
-             485:  389(bvec3) UGreaterThanEqual 482 484
-                              Store 451(bv) 485
-             486:  188(ivec2) Load 306(i16v)
-             487:     17(int) Load 312(i16)
-             488:  188(ivec2) CompositeConstruct 487 487
-             489:  191(bvec2) SGreaterThanEqual 486 488
-             490:  389(bvec3) Load 451(bv)
-             491:  389(bvec3) VectorShuffle 490 489 3 4 2
-                              Store 451(bv) 491
-             492:   49(ivec3) Load 320(u16v)
-             493:     14(int) Load 322(u16)
-             494:   49(ivec3) CompositeConstruct 493 493 493
-             495:  389(bvec3) IEqual 492 494
-                              Store 451(bv) 495
-             496:  188(ivec2) Load 306(i16v)
-             497:     17(int) Load 312(i16)
-             498:  188(ivec2) CompositeConstruct 497 497
-             499:  191(bvec2) IEqual 496 498
-             500:  389(bvec3) Load 451(bv)
-             501:  389(bvec3) VectorShuffle 500 499 3 4 2
-                              Store 451(bv) 501
-             502:   49(ivec3) Load 320(u16v)
-             503:     14(int) Load 322(u16)
-             504:   49(ivec3) CompositeConstruct 503 503 503
-             505:  389(bvec3) INotEqual 502 504
-                              Store 451(bv) 505
-             506:  188(ivec2) Load 306(i16v)
-             507:     17(int) Load 312(i16)
-             508:  188(ivec2) CompositeConstruct 507 507
-             509:  191(bvec2) INotEqual 506 508
-             510:  389(bvec3) Load 451(bv)
-             511:  389(bvec3) VectorShuffle 510 509 3 4 2
-                              Store 451(bv) 511
+       345(i16v):     53(ptr) Variable Function
+        348(i16):     15(ptr) Variable Function
+       358(u16v):    194(ptr) Variable Function
+        360(u16):     37(ptr) Variable Function
+        430(i32):    219(ptr) Variable Function
+        433(i64):    242(ptr) Variable Function
+      436(i16v4):    435(ptr) Variable Function
+        439(u32):    298(ptr) Variable Function
+      440(u16v2):     58(ptr) Variable Function
+        444(u64):    443(ptr) Variable Function
+      447(u16v4):    446(ptr) Variable Function
+         459(bv):    458(ptr) Variable Function
+             346:   52(ivec2) Load 345(i16v)
+             347:   52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 346
+                              Store 345(i16v) 347
+             349:     14(int) Load 348(i16)
+             350:     14(int) ExtInst 1(GLSL.std.450) 7(SSign) 349
+                              Store 348(i16) 350
+             351:   52(ivec2) Load 345(i16v)
+             352:     14(int) Load 348(i16)
+             353:   52(ivec2) CompositeConstruct 352 352
+             354:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 351 353
+                              Store 345(i16v) 354
+             355:   52(ivec2) Load 345(i16v)
+             357:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 355 356
+                              Store 345(i16v) 357
+             359:  193(ivec3) Load 358(u16v)
+             361:     36(int) Load 360(u16)
+             362:  193(ivec3) CompositeConstruct 361 361 361
+             363:  193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 359 362
+                              Store 358(u16v) 363
+             364:  193(ivec3) Load 358(u16v)
+             366:  193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 364 365
+                              Store 358(u16v) 366
+             367:   52(ivec2) Load 345(i16v)
+             368:     14(int) Load 348(i16)
+             369:   52(ivec2) CompositeConstruct 368 368
+             370:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 367 369
+                              Store 345(i16v) 370
+             371:   52(ivec2) Load 345(i16v)
+             372:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 371 356
+                              Store 345(i16v) 372
+             373:  193(ivec3) Load 358(u16v)
+             374:     36(int) Load 360(u16)
+             375:  193(ivec3) CompositeConstruct 374 374 374
+             376:  193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 373 375
+                              Store 358(u16v) 376
+             377:  193(ivec3) Load 358(u16v)
+             378:  193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 377 365
+                              Store 358(u16v) 378
+             379:   52(ivec2) Load 345(i16v)
+             380:     14(int) Load 348(i16)
+             381:     14(int) SNegate 380
+             382:     14(int) Load 348(i16)
+             383:   52(ivec2) CompositeConstruct 381 381
+             384:   52(ivec2) CompositeConstruct 382 382
+             385:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 379 383 384
+                              Store 345(i16v) 385
+             386:   52(ivec2) Load 345(i16v)
+             387:   52(ivec2) Load 345(i16v)
+             388:   52(ivec2) SNegate 387
+             389:   52(ivec2) Load 345(i16v)
+             390:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 386 388 389
+                              Store 345(i16v) 390
+             391:  193(ivec3) Load 358(u16v)
+             392:     36(int) Load 360(u16)
+             393:     36(int) SNegate 392
+             394:     36(int) Load 360(u16)
+             395:  193(ivec3) CompositeConstruct 393 393 393
+             396:  193(ivec3) CompositeConstruct 394 394 394
+             397:  193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 391 395 396
+                              Store 358(u16v) 397
+             398:  193(ivec3) Load 358(u16v)
+             399:  193(ivec3) Load 358(u16v)
+             400:  193(ivec3) SNegate 399
+             401:  193(ivec3) Load 358(u16v)
+             402:  193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 398 400 401
+                              Store 358(u16v) 402
+             403:     15(ptr) AccessChain 345(i16v) 284
+             404:     14(int) Load 403
+             405:     15(ptr) AccessChain 345(i16v) 264
+             406:     14(int) Load 405
+             408:     14(int) Select 407 406 404
+                              Store 348(i16) 408
+             409:     14(int) Load 348(i16)
+             410:   52(ivec2) CompositeConstruct 409 409
+             411:     14(int) Load 348(i16)
+             412:     14(int) SNegate 411
+             413:   52(ivec2) CompositeConstruct 412 412
+             416:   52(ivec2) Select 415 413 410
+                              Store 345(i16v) 416
+             417:     37(ptr) AccessChain 358(u16v) 284
+             418:     36(int) Load 417
+             419:     37(ptr) AccessChain 358(u16v) 264
+             420:     36(int) Load 419
+             421:     36(int) Select 407 420 418
+                              Store 360(u16) 421
+             422:     36(int) Load 360(u16)
+             423:  193(ivec3) CompositeConstruct 422 422 422
+             424:     36(int) Load 360(u16)
+             425:     36(int) SNegate 424
+             426:  193(ivec3) CompositeConstruct 425 425 425
+             429:  193(ivec3) Select 428 426 423
+                              Store 358(u16v) 429
+             431:   52(ivec2) Load 345(i16v)
+             432:     27(int) Bitcast 431
+                              Store 430(i32) 432
+             437:  434(ivec4) Load 436(i16v4)
+             438:     71(int) Bitcast 437
+                              Store 433(i64) 438
+             441:   57(ivec2) Load 440(u16v2)
+             442:     17(int) Bitcast 441
+                              Store 439(u32) 442
+             448:  445(ivec4) Load 447(u16v4)
+             449:     77(int) Bitcast 448
+                              Store 444(u64) 449
+             450:     27(int) Load 430(i32)
+             451:   52(ivec2) Bitcast 450
+                              Store 345(i16v) 451
+             452:     71(int) Load 433(i64)
+             453:  434(ivec4) Bitcast 452
+                              Store 436(i16v4) 453
+             454:     17(int) Load 439(u32)
+             455:   57(ivec2) Bitcast 454
+                              Store 440(u16v2) 455
+             456:     77(int) Load 444(u64)
+             457:  445(ivec4) Bitcast 456
+                              Store 447(u16v4) 457
+             460:  193(ivec3) Load 358(u16v)
+             461:     36(int) Load 360(u16)
+             462:  193(ivec3) CompositeConstruct 461 461 461
+             463:  427(bvec3) ULessThan 460 462
+                              Store 459(bv) 463
+             464:   52(ivec2) Load 345(i16v)
+             465:     14(int) Load 348(i16)
+             466:   52(ivec2) CompositeConstruct 465 465
+             467:  174(bvec2) SLessThan 464 466
+             468:  427(bvec3) Load 459(bv)
+             469:  427(bvec3) VectorShuffle 468 467 3 4 2
+                              Store 459(bv) 469
+             470:  193(ivec3) Load 358(u16v)
+             471:     36(int) Load 360(u16)
+             472:  193(ivec3) CompositeConstruct 471 471 471
+             473:  427(bvec3) ULessThanEqual 470 472
+                              Store 459(bv) 473
+             474:   52(ivec2) Load 345(i16v)
+             475:     14(int) Load 348(i16)
+             476:   52(ivec2) CompositeConstruct 475 475
+             477:  174(bvec2) SLessThanEqual 474 476
+             478:  427(bvec3) Load 459(bv)
+             479:  427(bvec3) VectorShuffle 478 477 3 4 2
+                              Store 459(bv) 479
+             480:  193(ivec3) Load 358(u16v)
+             481:     36(int) Load 360(u16)
+             482:  193(ivec3) CompositeConstruct 481 481 481
+             483:  427(bvec3) UGreaterThan 480 482
+                              Store 459(bv) 483
+             484:   52(ivec2) Load 345(i16v)
+             485:     14(int) Load 348(i16)
+             486:   52(ivec2) CompositeConstruct 485 485
+             487:  174(bvec2) SGreaterThan 484 486
+             488:  427(bvec3) Load 459(bv)
+             489:  427(bvec3) VectorShuffle 488 487 3 4 2
+                              Store 459(bv) 489
+             490:  193(ivec3) Load 358(u16v)
+             491:     36(int) Load 360(u16)
+             492:  193(ivec3) CompositeConstruct 491 491 491
+             493:  427(bvec3) UGreaterThanEqual 490 492
+                              Store 459(bv) 493
+             494:   52(ivec2) Load 345(i16v)
+             495:     14(int) Load 348(i16)
+             496:   52(ivec2) CompositeConstruct 495 495
+             497:  174(bvec2) SGreaterThanEqual 494 496
+             498:  427(bvec3) Load 459(bv)
+             499:  427(bvec3) VectorShuffle 498 497 3 4 2
+                              Store 459(bv) 499
+             500:  193(ivec3) Load 358(u16v)
+             501:     36(int) Load 360(u16)
+             502:  193(ivec3) CompositeConstruct 501 501 501
+             503:  427(bvec3) IEqual 500 502
+                              Store 459(bv) 503
+             504:   52(ivec2) Load 345(i16v)
+             505:     14(int) Load 348(i16)
+             506:   52(ivec2) CompositeConstruct 505 505
+             507:  174(bvec2) IEqual 504 506
+             508:  427(bvec3) Load 459(bv)
+             509:  427(bvec3) VectorShuffle 508 507 3 4 2
+                              Store 459(bv) 509
+             510:  193(ivec3) Load 358(u16v)
+             511:     36(int) Load 360(u16)
+             512:  193(ivec3) CompositeConstruct 511 511 511
+             513:  427(bvec3) INotEqual 510 512
+                              Store 459(bv) 513
+             514:   52(ivec2) Load 345(i16v)
+             515:     14(int) Load 348(i16)
+             516:   52(ivec2) CompositeConstruct 515 515
+             517:  174(bvec2) INotEqual 514 516
+             518:  427(bvec3) Load 459(bv)
+             519:  427(bvec3) VectorShuffle 518 517 3 4 2
+                              Store 459(bv) 519
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.int32.frag.out b/Test/baseResults/spv.int32.frag.out
new file mode 100644
index 0000000..1a433f5
--- /dev/null
+++ b/Test/baseResults/spv.int32.frag.out
@@ -0,0 +1,714 @@
+spv.int32.frag
+// Module Version 10300
+// Generated by (magic number): 80005
+// Id's are bound by 495
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Float64
+                              Capability Int64
+                              Capability Int16
+                              Capability Int8
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float16"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float32"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int16"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int32"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int8"
+                              Name 4  "main"
+                              Name 6  "literal("
+                              Name 8  "typeCast32("
+                              Name 10  "operators("
+                              Name 12  "builtinFuncs("
+                              Name 16  "u32Max"
+                              Name 20  "i32"
+                              Name 27  "Uniforms"
+                              MemberName 27(Uniforms) 0  "index"
+                              Name 29  ""
+                              Name 35  "indexable"
+                              Name 39  "u32"
+                              Name 46  "indexable"
+                              Name 51  "u32v"
+                              Name 54  "i32v"
+                              Name 60  "i64v"
+                              Name 66  "u64v"
+                              Name 78  "f32v"
+                              Name 84  "f64v"
+                              Name 94  "i8v"
+                              Name 103  "i16v"
+                              Name 123  "u8v"
+                              Name 132  "u16v"
+                              Name 152  "f16v"
+                              Name 168  "bv"
+                              Name 186  "u32v"
+                              Name 191  "i32"
+                              Name 210  "i"
+                              Name 214  "uv"
+                              Name 227  "i64"
+                              Name 262  "b"
+                              Name 314  "i32v"
+                              Name 317  "i32"
+                              Name 327  "u32v"
+                              Name 329  "u32"
+                              Name 401  "i8v4"
+                              Name 404  "i16v2"
+                              Name 409  "u8v4"
+                              Name 412  "u16v2"
+                              Name 415  "i64"
+                              Name 418  "u32v2"
+                              Name 420  "u64"
+                              Name 424  "bv"
+                              Name 487  "Block"
+                              MemberName 487(Block) 0  "i32"
+                              MemberName 487(Block) 1  "i32v2"
+                              MemberName 487(Block) 2  "i32v3"
+                              MemberName 487(Block) 3  "i32v4"
+                              MemberName 487(Block) 4  "u32"
+                              MemberName 487(Block) 5  "u32v2"
+                              MemberName 487(Block) 6  "u32v3"
+                              MemberName 487(Block) 7  "u32v4"
+                              Name 489  "block"
+                              Name 490  "si32"
+                              Name 491  "su32"
+                              Name 492  "si"
+                              Name 493  "su"
+                              Name 494  "sb"
+                              MemberDecorate 27(Uniforms) 0 Offset 0
+                              Decorate 27(Uniforms) Block
+                              Decorate 29 DescriptorSet 0
+                              Decorate 29 Binding 0
+                              MemberDecorate 487(Block) 0 Offset 0
+                              MemberDecorate 487(Block) 1 Offset 8
+                              MemberDecorate 487(Block) 2 Offset 16
+                              MemberDecorate 487(Block) 3 Offset 32
+                              MemberDecorate 487(Block) 4 Offset 48
+                              MemberDecorate 487(Block) 5 Offset 56
+                              MemberDecorate 487(Block) 6 Offset 64
+                              MemberDecorate 487(Block) 7 Offset 80
+                              Decorate 487(Block) Block
+                              Decorate 489(block) DescriptorSet 0
+                              Decorate 489(block) Binding 1
+                              Decorate 490(si32) SpecId 100
+                              Decorate 491(su32) SpecId 101
+                              Decorate 492(si) SpecId 102
+                              Decorate 493(su) SpecId 103
+                              Decorate 494(sb) SpecId 104
+               2:             TypeVoid
+               3:             TypeFunction 2
+              14:             TypeInt 32 0
+              15:             TypePointer Private 14(int)
+      16(u32Max):     15(ptr) Variable Private
+              17:     14(int) Constant 4294967295
+              18:             TypeInt 32 1
+              19:             TypePointer Function 18(int)
+              21:     14(int) Constant 3
+              22:             TypeArray 18(int) 21
+              23:     18(int) Constant 4008636143
+              24:     18(int) Constant 4294967295
+              25:     18(int) Constant 536870912
+              26:          22 ConstantComposite 23 24 25
+    27(Uniforms):             TypeStruct 14(int)
+              28:             TypePointer Uniform 27(Uniforms)
+              29:     28(ptr) Variable Uniform
+              30:     18(int) Constant 0
+              31:             TypePointer Uniform 14(int)
+              34:             TypePointer Function 22
+              38:             TypePointer Function 14(int)
+              40:             TypeArray 14(int) 21
+              41:     14(int) Constant 2147483647
+              42:          40 ConstantComposite 17 17 41
+              45:             TypePointer Function 40
+              49:             TypeVector 14(int) 2
+              50:             TypePointer Function 49(ivec2)
+              52:             TypeVector 18(int) 2
+              53:             TypePointer Function 52(ivec2)
+              57:             TypeInt 64 1
+              58:             TypeVector 57(int) 2
+              59:             TypePointer Function 58(ivec2)
+              63:             TypeInt 64 0
+              64:             TypeVector 63(int) 2
+              65:             TypePointer Function 64(ivec2)
+              75:             TypeFloat 32
+              76:             TypeVector 75(float) 2
+              77:             TypePointer Function 76(fvec2)
+              81:             TypeFloat 64
+              82:             TypeVector 81(float) 2
+              83:             TypePointer Function 82(fvec2)
+              91:             TypeInt 8 1
+              92:             TypeVector 91(int) 2
+              93:             TypePointer Function 92(ivec2)
+             100:             TypeInt 16 1
+             101:             TypeVector 100(int) 2
+             102:             TypePointer Function 101(ivec2)
+             120:             TypeInt 8 0
+             121:             TypeVector 120(int) 2
+             122:             TypePointer Function 121(ivec2)
+             129:             TypeInt 16 0
+             130:             TypeVector 129(int) 2
+             131:             TypePointer Function 130(ivec2)
+             149:             TypeFloat 16
+             150:             TypeVector 149(float) 2
+             151:             TypePointer Function 150(fvec2)
+             165:             TypeBool
+             166:             TypeVector 165(bool) 2
+             167:             TypePointer Function 166(bvec2)
+             170:     18(int) Constant 1
+             171:   52(ivec2) ConstantComposite 30 30
+             172:   52(ivec2) ConstantComposite 170 170
+             175:     14(int) Constant 0
+             176:     14(int) Constant 1
+             177:   49(ivec2) ConstantComposite 175 175
+             178:   49(ivec2) ConstantComposite 176 176
+             184:             TypeVector 14(int) 3
+             185:             TypePointer Function 184(ivec3)
+             188:             TypeVector 18(int) 3
+             226:             TypePointer Function 57(int)
+             251:     14(int) Constant 2
+             261:             TypePointer Function 165(bool)
+             325:   52(ivec2) ConstantComposite 24 24
+             334:  184(ivec3) ConstantComposite 175 175 175
+             376:   165(bool) ConstantTrue
+             383:   165(bool) ConstantFalse
+             384:  166(bvec2) ConstantComposite 383 383
+             396:             TypeVector 165(bool) 3
+             397:  396(bvec3) ConstantComposite 383 383 383
+             399:             TypeVector 91(int) 4
+             400:             TypePointer Function 399(ivec4)
+             407:             TypeVector 120(int) 4
+             408:             TypePointer Function 407(ivec4)
+             419:             TypePointer Function 63(int)
+             423:             TypePointer Function 396(bvec3)
+             485:             TypeVector 18(int) 4
+             486:             TypeVector 14(int) 4
+      487(Block):             TypeStruct 18(int) 52(ivec2) 188(ivec3) 485(ivec4) 14(int) 49(ivec2) 184(ivec3) 486(ivec4)
+             488:             TypePointer Uniform 487(Block)
+      489(block):    488(ptr) Variable Uniform
+       490(si32):     18(int) SpecConstant 4294967286
+       491(su32):     14(int) SpecConstant 20
+         492(si):     18(int) SpecConstant 4294967291
+         493(su):     14(int) SpecConstant 4
+         494(sb):   165(bool) SpecConstantTrue
+         4(main):           2 Function None 3
+               5:             Label
+                              Store 16(u32Max) 17
+                              Return
+                              FunctionEnd
+     6(literal():           2 Function None 3
+               7:             Label
+         20(i32):     19(ptr) Variable Function
+   35(indexable):     34(ptr) Variable Function
+         39(u32):     38(ptr) Variable Function
+   46(indexable):     45(ptr) Variable Function
+              32:     31(ptr) AccessChain 29 30
+              33:     14(int) Load 32
+                              Store 35(indexable) 26
+              36:     19(ptr) AccessChain 35(indexable) 33
+              37:     18(int) Load 36
+                              Store 20(i32) 37
+              43:     31(ptr) AccessChain 29 30
+              44:     14(int) Load 43
+                              Store 46(indexable) 42
+              47:     38(ptr) AccessChain 46(indexable) 44
+              48:     14(int) Load 47
+                              Store 39(u32) 48
+                              Return
+                              FunctionEnd
+  8(typeCast32():           2 Function None 3
+               9:             Label
+        51(u32v):     50(ptr) Variable Function
+        54(i32v):     53(ptr) Variable Function
+        60(i64v):     59(ptr) Variable Function
+        66(u64v):     65(ptr) Variable Function
+        78(f32v):     77(ptr) Variable Function
+        84(f64v):     83(ptr) Variable Function
+         94(i8v):     93(ptr) Variable Function
+       103(i16v):    102(ptr) Variable Function
+        123(u8v):    122(ptr) Variable Function
+       132(u16v):    131(ptr) Variable Function
+       152(f16v):    151(ptr) Variable Function
+         168(bv):    167(ptr) Variable Function
+              55:   52(ivec2) Load 54(i32v)
+              56:   49(ivec2) Bitcast 55
+                              Store 51(u32v) 56
+              61:   52(ivec2) Load 54(i32v)
+              62:   58(ivec2) SConvert 61
+                              Store 60(i64v) 62
+              67:   52(ivec2) Load 54(i32v)
+              68:   58(ivec2) SConvert 67
+              69:   64(ivec2) Bitcast 68
+                              Store 66(u64v) 69
+              70:   49(ivec2) Load 51(u32v)
+              71:   58(ivec2) UConvert 70
+              72:   58(ivec2) Bitcast 71
+                              Store 60(i64v) 72
+              73:   49(ivec2) Load 51(u32v)
+              74:   64(ivec2) UConvert 73
+                              Store 66(u64v) 74
+              79:   52(ivec2) Load 54(i32v)
+              80:   76(fvec2) ConvertSToF 79
+                              Store 78(f32v) 80
+              85:   52(ivec2) Load 54(i32v)
+              86:   82(fvec2) ConvertSToF 85
+                              Store 84(f64v) 86
+              87:   49(ivec2) Load 51(u32v)
+              88:   76(fvec2) ConvertUToF 87
+                              Store 78(f32v) 88
+              89:   49(ivec2) Load 51(u32v)
+              90:   82(fvec2) ConvertUToF 89
+                              Store 84(f64v) 90
+              95:   52(ivec2) Load 54(i32v)
+              96:   92(ivec2) SConvert 95
+                              Store 94(i8v) 96
+              97:   49(ivec2) Load 51(u32v)
+              98:   92(ivec2) UConvert 97
+              99:   92(ivec2) Bitcast 98
+                              Store 94(i8v) 99
+             104:   52(ivec2) Load 54(i32v)
+             105:  101(ivec2) SConvert 104
+                              Store 103(i16v) 105
+             106:   49(ivec2) Load 51(u32v)
+             107:  101(ivec2) UConvert 106
+             108:  101(ivec2) Bitcast 107
+                              Store 103(i16v) 108
+             109:   52(ivec2) Load 54(i32v)
+             110:     18(int) CompositeExtract 109 0
+             111:     18(int) CompositeExtract 109 1
+             112:   52(ivec2) CompositeConstruct 110 111
+                              Store 54(i32v) 112
+             113:   49(ivec2) Load 51(u32v)
+             114:   52(ivec2) Bitcast 113
+                              Store 54(i32v) 114
+             115:   52(ivec2) Load 54(i32v)
+             116:   58(ivec2) SConvert 115
+                              Store 60(i64v) 116
+             117:   49(ivec2) Load 51(u32v)
+             118:   58(ivec2) UConvert 117
+             119:   58(ivec2) Bitcast 118
+                              Store 60(i64v) 119
+             124:   52(ivec2) Load 54(i32v)
+             125:   92(ivec2) SConvert 124
+             126:  121(ivec2) Bitcast 125
+                              Store 123(u8v) 126
+             127:   49(ivec2) Load 51(u32v)
+             128:  121(ivec2) UConvert 127
+                              Store 123(u8v) 128
+             133:   52(ivec2) Load 54(i32v)
+             134:  101(ivec2) SConvert 133
+             135:  130(ivec2) Bitcast 134
+                              Store 132(u16v) 135
+             136:   49(ivec2) Load 51(u32v)
+             137:  130(ivec2) UConvert 136
+                              Store 132(u16v) 137
+             138:   52(ivec2) Load 54(i32v)
+             139:   49(ivec2) Bitcast 138
+                              Store 51(u32v) 139
+             140:   49(ivec2) Load 51(u32v)
+             141:     14(int) CompositeExtract 140 0
+             142:     14(int) CompositeExtract 140 1
+             143:   49(ivec2) CompositeConstruct 141 142
+                              Store 51(u32v) 143
+             144:   52(ivec2) Load 54(i32v)
+             145:   58(ivec2) SConvert 144
+             146:   64(ivec2) Bitcast 145
+                              Store 66(u64v) 146
+             147:   49(ivec2) Load 51(u32v)
+             148:   64(ivec2) UConvert 147
+                              Store 66(u64v) 148
+             153:   52(ivec2) Load 54(i32v)
+             154:  150(fvec2) ConvertSToF 153
+                              Store 152(f16v) 154
+             155:   52(ivec2) Load 54(i32v)
+             156:   76(fvec2) ConvertSToF 155
+                              Store 78(f32v) 156
+             157:   52(ivec2) Load 54(i32v)
+             158:   82(fvec2) ConvertSToF 157
+                              Store 84(f64v) 158
+             159:   49(ivec2) Load 51(u32v)
+             160:  150(fvec2) ConvertUToF 159
+                              Store 152(f16v) 160
+             161:   49(ivec2) Load 51(u32v)
+             162:   76(fvec2) ConvertUToF 161
+                              Store 78(f32v) 162
+             163:   49(ivec2) Load 51(u32v)
+             164:   82(fvec2) ConvertUToF 163
+                              Store 84(f64v) 164
+             169:  166(bvec2) Load 168(bv)
+             173:   52(ivec2) Select 169 172 171
+                              Store 54(i32v) 173
+             174:  166(bvec2) Load 168(bv)
+             179:   49(ivec2) Select 174 178 177
+                              Store 51(u32v) 179
+             180:   52(ivec2) Load 54(i32v)
+             181:  166(bvec2) INotEqual 180 177
+                              Store 168(bv) 181
+             182:   49(ivec2) Load 51(u32v)
+             183:  166(bvec2) INotEqual 182 177
+                              Store 168(bv) 183
+                              Return
+                              FunctionEnd
+  10(operators():           2 Function None 3
+              11:             Label
+       186(u32v):    185(ptr) Variable Function
+        191(i32):     19(ptr) Variable Function
+          210(i):     19(ptr) Variable Function
+         214(uv):    185(ptr) Variable Function
+        227(i64):    226(ptr) Variable Function
+          262(b):    261(ptr) Variable Function
+             187:  184(ivec3) Load 186(u32v)
+             189:  188(ivec3) CompositeConstruct 170 170 170
+             190:  184(ivec3) IAdd 187 189
+                              Store 186(u32v) 190
+             192:     18(int) Load 191(i32)
+             193:     18(int) ISub 192 170
+                              Store 191(i32) 193
+             194:     18(int) Load 191(i32)
+             195:     18(int) IAdd 194 170
+                              Store 191(i32) 195
+             196:  184(ivec3) Load 186(u32v)
+             197:  188(ivec3) CompositeConstruct 170 170 170
+             198:  184(ivec3) ISub 196 197
+                              Store 186(u32v) 198
+             199:  184(ivec3) Load 186(u32v)
+             200:  184(ivec3) Not 199
+                              Store 186(u32v) 200
+             201:     18(int) Load 191(i32)
+                              Store 191(i32) 201
+             202:  184(ivec3) Load 186(u32v)
+             203:  184(ivec3) SNegate 202
+                              Store 186(u32v) 203
+             204:     18(int) Load 191(i32)
+             205:     18(int) Load 191(i32)
+             206:     18(int) IAdd 205 204
+                              Store 191(i32) 206
+             207:  184(ivec3) Load 186(u32v)
+             208:  184(ivec3) Load 186(u32v)
+             209:  184(ivec3) ISub 208 207
+                              Store 186(u32v) 209
+             211:     18(int) Load 191(i32)
+             212:     18(int) Load 210(i)
+             213:     18(int) IMul 212 211
+                              Store 210(i) 213
+             215:  184(ivec3) Load 186(u32v)
+             216:  184(ivec3) Load 214(uv)
+             217:  184(ivec3) UDiv 216 215
+                              Store 214(uv) 217
+             218:     18(int) Load 191(i32)
+             219:     14(int) Bitcast 218
+             220:  184(ivec3) Load 214(uv)
+             221:  184(ivec3) CompositeConstruct 219 219 219
+             222:  184(ivec3) UMod 220 221
+                              Store 214(uv) 222
+             223:  184(ivec3) Load 186(u32v)
+             224:  184(ivec3) Load 214(uv)
+             225:  184(ivec3) IAdd 223 224
+                              Store 214(uv) 225
+             228:     18(int) Load 191(i32)
+             229:     57(int) SConvert 228
+             230:     57(int) Load 227(i64)
+             231:     57(int) ISub 229 230
+                              Store 227(i64) 231
+             232:  184(ivec3) Load 186(u32v)
+             233:  184(ivec3) Load 214(uv)
+             234:  184(ivec3) IMul 232 233
+                              Store 214(uv) 234
+             235:     18(int) Load 191(i32)
+             236:     57(int) SConvert 235
+             237:     57(int) Load 227(i64)
+             238:     57(int) IMul 236 237
+                              Store 227(i64) 238
+             239:     18(int) Load 191(i32)
+             240:     18(int) Load 210(i)
+             241:     18(int) SMod 239 240
+                              Store 210(i) 241
+             242:     18(int) Load 191(i32)
+             243:  184(ivec3) Load 186(u32v)
+             244:  188(ivec3) CompositeConstruct 242 242 242
+             245:  184(ivec3) ShiftLeftLogical 243 244
+                              Store 186(u32v) 245
+             246:     38(ptr) AccessChain 186(u32v) 176
+             247:     14(int) Load 246
+             248:     18(int) Load 191(i32)
+             249:     18(int) ShiftRightArithmetic 248 247
+                              Store 191(i32) 249
+             250:     57(int) Load 227(i64)
+             252:     38(ptr) AccessChain 186(u32v) 251
+             253:     14(int) Load 252
+             254:     57(int) UConvert 253
+             255:     57(int) Bitcast 254
+             256:     57(int) ShiftLeftLogical 250 255
+                              Store 227(i64) 256
+             257:  184(ivec3) Load 186(u32v)
+             258:     18(int) Load 210(i)
+             259:  188(ivec3) CompositeConstruct 258 258 258
+             260:  184(ivec3) ShiftLeftLogical 257 259
+                              Store 214(uv) 260
+             263:     38(ptr) AccessChain 186(u32v) 175
+             264:     14(int) Load 263
+             265:     18(int) Load 191(i32)
+             266:     14(int) Bitcast 265
+             267:   165(bool) INotEqual 264 266
+                              Store 262(b) 267
+             268:     18(int) Load 191(i32)
+             269:     14(int) Bitcast 268
+             270:     38(ptr) AccessChain 186(u32v) 175
+             271:     14(int) Load 270
+             272:   165(bool) IEqual 269 271
+                              Store 262(b) 272
+             273:     38(ptr) AccessChain 186(u32v) 175
+             274:     14(int) Load 273
+             275:     38(ptr) AccessChain 214(uv) 176
+             276:     14(int) Load 275
+             277:   165(bool) UGreaterThan 274 276
+                              Store 262(b) 277
+             278:     18(int) Load 191(i32)
+             279:     18(int) Load 210(i)
+             280:   165(bool) SLessThan 278 279
+                              Store 262(b) 280
+             281:     38(ptr) AccessChain 186(u32v) 176
+             282:     14(int) Load 281
+             283:     38(ptr) AccessChain 214(uv) 175
+             284:     14(int) Load 283
+             285:   165(bool) UGreaterThanEqual 282 284
+                              Store 262(b) 285
+             286:     18(int) Load 191(i32)
+             287:     18(int) Load 210(i)
+             288:   165(bool) SLessThanEqual 286 287
+                              Store 262(b) 288
+             289:     18(int) Load 191(i32)
+             290:     14(int) Bitcast 289
+             291:  184(ivec3) Load 214(uv)
+             292:  184(ivec3) CompositeConstruct 290 290 290
+             293:  184(ivec3) BitwiseOr 291 292
+                              Store 214(uv) 293
+             294:     18(int) Load 191(i32)
+             295:     18(int) Load 210(i)
+             296:     18(int) BitwiseOr 294 295
+                              Store 210(i) 296
+             297:     18(int) Load 191(i32)
+             298:     57(int) SConvert 297
+             299:     57(int) Load 227(i64)
+             300:     57(int) BitwiseAnd 299 298
+                              Store 227(i64) 300
+             301:  184(ivec3) Load 186(u32v)
+             302:  184(ivec3) Load 214(uv)
+             303:  184(ivec3) BitwiseAnd 301 302
+                              Store 214(uv) 303
+             304:     18(int) Load 191(i32)
+             305:     14(int) Bitcast 304
+             306:  184(ivec3) Load 214(uv)
+             307:  184(ivec3) CompositeConstruct 305 305 305
+             308:  184(ivec3) BitwiseXor 306 307
+                              Store 214(uv) 308
+             309:  184(ivec3) Load 186(u32v)
+             310:     18(int) Load 191(i32)
+             311:     14(int) Bitcast 310
+             312:  184(ivec3) CompositeConstruct 311 311 311
+             313:  184(ivec3) BitwiseXor 309 312
+                              Store 186(u32v) 313
+                              Return
+                              FunctionEnd
+12(builtinFuncs():           2 Function None 3
+              13:             Label
+       314(i32v):     53(ptr) Variable Function
+        317(i32):     19(ptr) Variable Function
+       327(u32v):    185(ptr) Variable Function
+        329(u32):     38(ptr) Variable Function
+       401(i8v4):    400(ptr) Variable Function
+      404(i16v2):    102(ptr) Variable Function
+       409(u8v4):    408(ptr) Variable Function
+      412(u16v2):    131(ptr) Variable Function
+        415(i64):    226(ptr) Variable Function
+      418(u32v2):     50(ptr) Variable Function
+        420(u64):    419(ptr) Variable Function
+         424(bv):    423(ptr) Variable Function
+             315:   52(ivec2) Load 314(i32v)
+             316:   52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 315
+                              Store 314(i32v) 316
+             318:     18(int) Load 317(i32)
+             319:     18(int) ExtInst 1(GLSL.std.450) 7(SSign) 318
+                              Store 317(i32) 319
+             320:   52(ivec2) Load 314(i32v)
+             321:     18(int) Load 317(i32)
+             322:   52(ivec2) CompositeConstruct 321 321
+             323:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 320 322
+                              Store 314(i32v) 323
+             324:   52(ivec2) Load 314(i32v)
+             326:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 324 325
+                              Store 314(i32v) 326
+             328:  184(ivec3) Load 327(u32v)
+             330:     14(int) Load 329(u32)
+             331:  184(ivec3) CompositeConstruct 330 330 330
+             332:  184(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 328 331
+                              Store 327(u32v) 332
+             333:  184(ivec3) Load 327(u32v)
+             335:  184(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 333 334
+                              Store 327(u32v) 335
+             336:   52(ivec2) Load 314(i32v)
+             337:     18(int) Load 317(i32)
+             338:   52(ivec2) CompositeConstruct 337 337
+             339:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 336 338
+                              Store 314(i32v) 339
+             340:   52(ivec2) Load 314(i32v)
+             341:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 340 325
+                              Store 314(i32v) 341
+             342:  184(ivec3) Load 327(u32v)
+             343:     14(int) Load 329(u32)
+             344:  184(ivec3) CompositeConstruct 343 343 343
+             345:  184(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 342 344
+                              Store 327(u32v) 345
+             346:  184(ivec3) Load 327(u32v)
+             347:  184(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 346 334
+                              Store 327(u32v) 347
+             348:   52(ivec2) Load 314(i32v)
+             349:     18(int) Load 317(i32)
+             350:     18(int) SNegate 349
+             351:     18(int) Load 317(i32)
+             352:   52(ivec2) CompositeConstruct 350 350
+             353:   52(ivec2) CompositeConstruct 351 351
+             354:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 348 352 353
+                              Store 314(i32v) 354
+             355:   52(ivec2) Load 314(i32v)
+             356:   52(ivec2) Load 314(i32v)
+             357:   52(ivec2) SNegate 356
+             358:   52(ivec2) Load 314(i32v)
+             359:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 355 357 358
+                              Store 314(i32v) 359
+             360:  184(ivec3) Load 327(u32v)
+             361:     14(int) Load 329(u32)
+             362:     14(int) SNegate 361
+             363:     14(int) Load 329(u32)
+             364:  184(ivec3) CompositeConstruct 362 362 362
+             365:  184(ivec3) CompositeConstruct 363 363 363
+             366:  184(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 360 364 365
+                              Store 327(u32v) 366
+             367:  184(ivec3) Load 327(u32v)
+             368:  184(ivec3) Load 327(u32v)
+             369:  184(ivec3) SNegate 368
+             370:  184(ivec3) Load 327(u32v)
+             371:  184(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 367 369 370
+                              Store 327(u32v) 371
+             372:     19(ptr) AccessChain 314(i32v) 175
+             373:     18(int) Load 372
+             374:     19(ptr) AccessChain 314(i32v) 176
+             375:     18(int) Load 374
+             377:     18(int) Select 376 375 373
+                              Store 317(i32) 377
+             378:     18(int) Load 317(i32)
+             379:   52(ivec2) CompositeConstruct 378 378
+             380:     18(int) Load 317(i32)
+             381:     18(int) SNegate 380
+             382:   52(ivec2) CompositeConstruct 381 381
+             385:   52(ivec2) Select 384 382 379
+                              Store 314(i32v) 385
+             386:     38(ptr) AccessChain 327(u32v) 175
+             387:     14(int) Load 386
+             388:     38(ptr) AccessChain 327(u32v) 176
+             389:     14(int) Load 388
+             390:     14(int) Select 376 389 387
+                              Store 329(u32) 390
+             391:     14(int) Load 329(u32)
+             392:  184(ivec3) CompositeConstruct 391 391 391
+             393:     14(int) Load 329(u32)
+             394:     14(int) SNegate 393
+             395:  184(ivec3) CompositeConstruct 394 394 394
+             398:  184(ivec3) Select 397 395 392
+                              Store 327(u32v) 398
+             402:  399(ivec4) Load 401(i8v4)
+             403:     18(int) Bitcast 402
+                              Store 317(i32) 403
+             405:  101(ivec2) Load 404(i16v2)
+             406:     18(int) Bitcast 405
+                              Store 317(i32) 406
+             410:  407(ivec4) Load 409(u8v4)
+             411:     14(int) Bitcast 410
+                              Store 329(u32) 411
+             413:  130(ivec2) Load 412(u16v2)
+             414:     14(int) Bitcast 413
+                              Store 329(u32) 414
+             416:     57(int) Load 415(i64)
+             417:   52(ivec2) Bitcast 416
+                              Store 314(i32v) 417
+             421:     63(int) Load 420(u64)
+             422:   49(ivec2) Bitcast 421
+                              Store 418(u32v2) 422
+             425:  184(ivec3) Load 327(u32v)
+             426:     14(int) Load 329(u32)
+             427:  184(ivec3) CompositeConstruct 426 426 426
+             428:  396(bvec3) ULessThan 425 427
+                              Store 424(bv) 428
+             429:   52(ivec2) Load 314(i32v)
+             430:     18(int) Load 317(i32)
+             431:   52(ivec2) CompositeConstruct 430 430
+             432:  166(bvec2) SLessThan 429 431
+             433:  396(bvec3) Load 424(bv)
+             434:  396(bvec3) VectorShuffle 433 432 3 4 2
+                              Store 424(bv) 434
+             435:  184(ivec3) Load 327(u32v)
+             436:     14(int) Load 329(u32)
+             437:  184(ivec3) CompositeConstruct 436 436 436
+             438:  396(bvec3) ULessThanEqual 435 437
+                              Store 424(bv) 438
+             439:   52(ivec2) Load 314(i32v)
+             440:     18(int) Load 317(i32)
+             441:   52(ivec2) CompositeConstruct 440 440
+             442:  166(bvec2) SLessThanEqual 439 441
+             443:  396(bvec3) Load 424(bv)
+             444:  396(bvec3) VectorShuffle 443 442 3 4 2
+                              Store 424(bv) 444
+             445:  184(ivec3) Load 327(u32v)
+             446:     14(int) Load 329(u32)
+             447:  184(ivec3) CompositeConstruct 446 446 446
+             448:  396(bvec3) UGreaterThan 445 447
+                              Store 424(bv) 448
+             449:   52(ivec2) Load 314(i32v)
+             450:     18(int) Load 317(i32)
+             451:   52(ivec2) CompositeConstruct 450 450
+             452:  166(bvec2) SGreaterThan 449 451
+             453:  396(bvec3) Load 424(bv)
+             454:  396(bvec3) VectorShuffle 453 452 3 4 2
+                              Store 424(bv) 454
+             455:  184(ivec3) Load 327(u32v)
+             456:     14(int) Load 329(u32)
+             457:  184(ivec3) CompositeConstruct 456 456 456
+             458:  396(bvec3) UGreaterThanEqual 455 457
+                              Store 424(bv) 458
+             459:   52(ivec2) Load 314(i32v)
+             460:     18(int) Load 317(i32)
+             461:   52(ivec2) CompositeConstruct 460 460
+             462:  166(bvec2) SGreaterThanEqual 459 461
+             463:  396(bvec3) Load 424(bv)
+             464:  396(bvec3) VectorShuffle 463 462 3 4 2
+                              Store 424(bv) 464
+             465:  184(ivec3) Load 327(u32v)
+             466:     14(int) Load 329(u32)
+             467:  184(ivec3) CompositeConstruct 466 466 466
+             468:  396(bvec3) IEqual 465 467
+                              Store 424(bv) 468
+             469:   52(ivec2) Load 314(i32v)
+             470:     18(int) Load 317(i32)
+             471:   52(ivec2) CompositeConstruct 470 470
+             472:  166(bvec2) IEqual 469 471
+             473:  396(bvec3) Load 424(bv)
+             474:  396(bvec3) VectorShuffle 473 472 3 4 2
+                              Store 424(bv) 474
+             475:  184(ivec3) Load 327(u32v)
+             476:     14(int) Load 329(u32)
+             477:  184(ivec3) CompositeConstruct 476 476 476
+             478:  396(bvec3) INotEqual 475 477
+                              Store 424(bv) 478
+             479:   52(ivec2) Load 314(i32v)
+             480:     18(int) Load 317(i32)
+             481:   52(ivec2) CompositeConstruct 480 480
+             482:  166(bvec2) INotEqual 479 481
+             483:  396(bvec3) Load 424(bv)
+             484:  396(bvec3) VectorShuffle 483 482 3 4 2
+                              Store 424(bv) 484
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.int64.frag.out b/Test/baseResults/spv.int64.frag.out
index d58d596..5e09dbd 100644
--- a/Test/baseResults/spv.int64.frag.out
+++ b/Test/baseResults/spv.int64.frag.out
@@ -1,7 +1,7 @@
 spv.int64.frag
 // Module Version 10000
 // Generated by (magic number): 80005
-// Id's are bound by 480
+// Id's are bound by 483
 
                               Capability Shader
                               Capability Float64
@@ -12,6 +12,7 @@
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 450
                               SourceExtension  "GL_ARB_gpu_shader_int64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int64"
                               Name 4  "main"
                               Name 6  "literal("
                               Name 8  "typeCast("
@@ -36,38 +37,38 @@
                               Name 139  "i64"
                               Name 159  "i"
                               Name 166  "uv"
-                              Name 218  "b"
-                              Name 278  "i64v"
-                              Name 281  "i64"
-                              Name 291  "u64v"
-                              Name 293  "u64"
-                              Name 365  "dv"
-                              Name 384  "iv"
-                              Name 389  "uv"
-                              Name 393  "bv"
-                              Name 454  "Block"
-                              MemberName 454(Block) 0  "i64v"
-                              MemberName 454(Block) 1  "u64"
-                              Name 456  "block"
-                              Name 457  "si64"
-                              Name 458  "su64"
-                              Name 459  "si"
-                              Name 460  "su"
-                              Name 461  "sb"
+                              Name 221  "b"
+                              Name 281  "i64v"
+                              Name 284  "i64"
+                              Name 294  "u64v"
+                              Name 296  "u64"
+                              Name 368  "dv"
+                              Name 387  "iv"
+                              Name 392  "uv"
+                              Name 396  "bv"
+                              Name 457  "Block"
+                              MemberName 457(Block) 0  "i64v"
+                              MemberName 457(Block) 1  "u64"
+                              Name 459  "block"
+                              Name 460  "si64"
+                              Name 461  "su64"
+                              Name 462  "si"
+                              Name 463  "su"
+                              Name 464  "sb"
                               MemberDecorate 28(Uniforms) 0 Offset 0
                               Decorate 28(Uniforms) Block
                               Decorate 30 DescriptorSet 0
                               Decorate 30 Binding 0
-                              MemberDecorate 454(Block) 0 Offset 0
-                              MemberDecorate 454(Block) 1 Offset 24
-                              Decorate 454(Block) Block
-                              Decorate 456(block) DescriptorSet 0
-                              Decorate 456(block) Binding 1
-                              Decorate 457(si64) SpecId 100
-                              Decorate 458(su64) SpecId 101
-                              Decorate 459(si) SpecId 102
-                              Decorate 460(su) SpecId 103
-                              Decorate 461(sb) SpecId 104
+                              MemberDecorate 457(Block) 0 Offset 0
+                              MemberDecorate 457(Block) 1 Offset 24
+                              Decorate 457(Block) Block
+                              Decorate 459(block) DescriptorSet 0
+                              Decorate 459(block) Binding 1
+                              Decorate 460(si64) SpecId 100
+                              Decorate 461(su64) SpecId 101
+                              Decorate 462(si) SpecId 102
+                              Decorate 463(su) SpecId 103
+                              Decorate 464(sb) SpecId 104
                2:             TypeVoid
                3:             TypeFunction 2
               14:             TypeInt 64 0
@@ -127,53 +128,52 @@
              158:             TypePointer Function 31(int)
              164:             TypeVector 21(int) 3
              165:             TypePointer Function 164(ivec3)
-             199:             TypeVector 31(int) 3
-             202:     21(int) Constant 1
-             203:             TypePointer Function 21(int)
-             209:     21(int) Constant 2
-             217:             TypePointer Function 55(bool)
-             219:     21(int) Constant 0
-             289:   52(ivec2) ConstantComposite 25 25
-             298:  132(ivec3) ConstantComposite 69 69 69
-             340:    55(bool) ConstantTrue
-             347:    55(bool) ConstantFalse
-             348:   56(bvec2) ConstantComposite 347 347
-             360:             TypeVector 55(bool) 3
-             361:  360(bvec3) ConstantComposite 347 347 347
-             363:             TypeVector 94(float) 3
-             364:             TypePointer Function 363(fvec3)
-             369:             TypePointer Function 94(float)
-             380:     31(int) Constant 1
-             381:     31(int) Constant 2
-             382:   74(ivec2) ConstantComposite 380 381
-             387:   81(ivec2) ConstantComposite 209 22
-             392:             TypePointer Function 360(bvec3)
-      454(Block):             TypeStruct 136(ivec3) 14(int)
-             455:             TypePointer Uniform 454(Block)
-      456(block):    455(ptr) Variable Uniform
-       457(si64):     18(int) SpecConstant 4294967286 4294967295
-       458(su64):     14(int) SpecConstant 20 0
-         459(si):     31(int) SpecConstant 4294967291
-         460(su):     21(int) SpecConstant 4
-         461(sb):    55(bool) SpecConstantTrue
-             462:    55(bool) SpecConstantOp 171 457(si64) 69
-             463:    55(bool) SpecConstantOp 171 458(su64) 69
-             464:     18(int) SpecConstantOp 169 461(sb) 61 60
-             465:     14(int) SpecConstantOp 169 461(sb) 70 69
-             466:     31(int) SpecConstantOp 114 457(si64)
-             467:     18(int) SpecConstantOp 114 459(si)
-             468:     21(int) SpecConstantOp 113 458(su64)
-             469:     14(int) SpecConstantOp 113 460(su)
-             470:     18(int) SpecConstantOp 128 458(su64) 69
-             471:     14(int) SpecConstantOp 128 457(si64) 69
-             472:     21(int) SpecConstantOp 113 458(su64)
-             473:     31(int) SpecConstantOp 128 472 219
-             474:     18(int) SpecConstantOp 114 459(si)
-             475:     14(int) SpecConstantOp 128 474 69
-             476:     31(int) SpecConstantOp 114 457(si64)
-             477:     21(int) SpecConstantOp 128 476 219
-             478:     14(int) SpecConstantOp 113 460(su)
-             479:     18(int) SpecConstantOp 128 478 69
+             203:     21(int) Constant 1
+             204:             TypePointer Function 21(int)
+             212:     21(int) Constant 2
+             220:             TypePointer Function 55(bool)
+             222:     21(int) Constant 0
+             292:   52(ivec2) ConstantComposite 25 25
+             301:  132(ivec3) ConstantComposite 69 69 69
+             343:    55(bool) ConstantTrue
+             350:    55(bool) ConstantFalse
+             351:   56(bvec2) ConstantComposite 350 350
+             363:             TypeVector 55(bool) 3
+             364:  363(bvec3) ConstantComposite 350 350 350
+             366:             TypeVector 94(float) 3
+             367:             TypePointer Function 366(fvec3)
+             372:             TypePointer Function 94(float)
+             383:     31(int) Constant 1
+             384:     31(int) Constant 2
+             385:   74(ivec2) ConstantComposite 383 384
+             390:   81(ivec2) ConstantComposite 212 22
+             395:             TypePointer Function 363(bvec3)
+      457(Block):             TypeStruct 136(ivec3) 14(int)
+             458:             TypePointer Uniform 457(Block)
+      459(block):    458(ptr) Variable Uniform
+       460(si64):     18(int) SpecConstant 4294967286 4294967295
+       461(su64):     14(int) SpecConstant 20 0
+         462(si):     31(int) SpecConstant 4294967291
+         463(su):     21(int) SpecConstant 4
+         464(sb):    55(bool) SpecConstantTrue
+             465:    55(bool) SpecConstantOp 171 460(si64) 69
+             466:    55(bool) SpecConstantOp 171 461(su64) 69
+             467:     18(int) SpecConstantOp 169 464(sb) 61 60
+             468:     14(int) SpecConstantOp 169 464(sb) 70 69
+             469:     31(int) SpecConstantOp 114 460(si64)
+             470:     18(int) SpecConstantOp 114 462(si)
+             471:     21(int) SpecConstantOp 113 461(su64)
+             472:     14(int) SpecConstantOp 113 463(su)
+             473:     18(int) SpecConstantOp 128 461(su64) 69
+             474:     14(int) SpecConstantOp 128 460(si64) 69
+             475:     31(int) SpecConstantOp 113 461(su64)
+             476:     31(int) SpecConstantOp 128 475 222
+             477:     18(int) SpecConstantOp 114 462(si)
+             478:     14(int) SpecConstantOp 128 477 69
+             479:     31(int) SpecConstantOp 114 460(si64)
+             480:     21(int) SpecConstantOp 128 479 222
+             481:     18(int) SpecConstantOp 113 463(su)
+             482:     18(int) SpecConstantOp 128 481 69
          4(main):           2 Function None 3
                5:             Label
                               Store 16(u64Max) 17
@@ -267,11 +267,11 @@
              122:   81(ivec2) Bitcast 121
                               Store 83(uv) 122
              123:   81(ivec2) Load 83(uv)
-             124:   65(ivec2) UConvert 123
+             124:   52(ivec2) UConvert 123
              125:   52(ivec2) Bitcast 124
                               Store 54(i64v) 125
              126:   65(ivec2) Load 67(u64v)
-             127:   81(ivec2) UConvert 126
+             127:   74(ivec2) UConvert 126
              128:   74(ivec2) Bitcast 127
                               Store 76(iv) 128
              129:   74(ivec2) Load 76(iv)
@@ -286,7 +286,7 @@
         139(i64):     19(ptr) Variable Function
           159(i):    158(ptr) Variable Function
          166(uv):    165(ptr) Variable Function
-          218(b):    217(ptr) Variable Function
+          221(b):    220(ptr) Variable Function
              135:  132(ivec3) Load 134(u64v)
              137:  136(ivec3) CompositeConstruct 61 61 61
              138:  132(ivec3) IAdd 135 137
@@ -360,297 +360,301 @@
              196:     18(int) SMod 193 195
                               Store 139(i64) 196
              197:     31(int) Load 159(i)
-             198:  132(ivec3) Load 134(u64v)
-             200:  199(ivec3) CompositeConstruct 197 197 197
-             201:  132(ivec3) ShiftLeftLogical 198 200
-                              Store 134(u64v) 201
-             204:    203(ptr) AccessChain 166(uv) 202
-             205:     21(int) Load 204
-             206:     18(int) Load 139(i64)
-             207:     18(int) ShiftRightArithmetic 206 205
-                              Store 139(i64) 207
-             208:     18(int) Load 139(i64)
-             210:     40(ptr) AccessChain 134(u64v) 209
-             211:     14(int) Load 210
-             212:     18(int) ShiftLeftLogical 208 211
-                              Store 139(i64) 212
-             213:  132(ivec3) Load 134(u64v)
-             214:     18(int) Load 139(i64)
-             215:  136(ivec3) CompositeConstruct 214 214 214
-             216:  132(ivec3) ShiftLeftLogical 213 215
-                              Store 134(u64v) 216
-             220:     40(ptr) AccessChain 134(u64v) 219
-             221:     14(int) Load 220
-             222:     18(int) Load 139(i64)
-             223:     14(int) Bitcast 222
-             224:    55(bool) INotEqual 221 223
-                              Store 218(b) 224
+             198:     18(int) SConvert 197
+             199:     14(int) Bitcast 198
+             200:  132(ivec3) Load 134(u64v)
+             201:  132(ivec3) CompositeConstruct 199 199 199
+             202:  132(ivec3) ShiftLeftLogical 200 201
+                              Store 134(u64v) 202
+             205:    204(ptr) AccessChain 166(uv) 203
+             206:     21(int) Load 205
+             207:     18(int) UConvert 206
+             208:     18(int) Bitcast 207
+             209:     18(int) Load 139(i64)
+             210:     18(int) ShiftRightArithmetic 209 208
+                              Store 139(i64) 210
+             211:     18(int) Load 139(i64)
+             213:     40(ptr) AccessChain 134(u64v) 212
+             214:     14(int) Load 213
+             215:     18(int) ShiftLeftLogical 211 214
+                              Store 139(i64) 215
+             216:  132(ivec3) Load 134(u64v)
+             217:     18(int) Load 139(i64)
+             218:  136(ivec3) CompositeConstruct 217 217 217
+             219:  132(ivec3) ShiftLeftLogical 216 218
+                              Store 134(u64v) 219
+             223:     40(ptr) AccessChain 134(u64v) 222
+             224:     14(int) Load 223
              225:     18(int) Load 139(i64)
              226:     14(int) Bitcast 225
-             227:     40(ptr) AccessChain 134(u64v) 219
-             228:     14(int) Load 227
-             229:    55(bool) IEqual 226 228
-                              Store 218(b) 229
-             230:     40(ptr) AccessChain 134(u64v) 219
+             227:    55(bool) INotEqual 224 226
+                              Store 221(b) 227
+             228:     18(int) Load 139(i64)
+             229:     14(int) Bitcast 228
+             230:     40(ptr) AccessChain 134(u64v) 222
              231:     14(int) Load 230
-             232:    203(ptr) AccessChain 166(uv) 202
-             233:     21(int) Load 232
-             234:     14(int) UConvert 233
-             235:    55(bool) UGreaterThan 231 234
-                              Store 218(b) 235
-             236:     18(int) Load 139(i64)
-             237:     31(int) Load 159(i)
-             238:     18(int) SConvert 237
-             239:    55(bool) SLessThan 236 238
-                              Store 218(b) 239
-             240:     40(ptr) AccessChain 134(u64v) 202
-             241:     14(int) Load 240
-             242:    203(ptr) AccessChain 166(uv) 219
-             243:     21(int) Load 242
-             244:     14(int) UConvert 243
-             245:    55(bool) UGreaterThanEqual 241 244
-                              Store 218(b) 245
-             246:     18(int) Load 139(i64)
-             247:     31(int) Load 159(i)
-             248:     18(int) SConvert 247
-             249:    55(bool) SLessThanEqual 246 248
-                              Store 218(b) 249
+             232:    55(bool) IEqual 229 231
+                              Store 221(b) 232
+             233:     40(ptr) AccessChain 134(u64v) 222
+             234:     14(int) Load 233
+             235:    204(ptr) AccessChain 166(uv) 203
+             236:     21(int) Load 235
+             237:     14(int) UConvert 236
+             238:    55(bool) UGreaterThan 234 237
+                              Store 221(b) 238
+             239:     18(int) Load 139(i64)
+             240:     31(int) Load 159(i)
+             241:     18(int) SConvert 240
+             242:    55(bool) SLessThan 239 241
+                              Store 221(b) 242
+             243:     40(ptr) AccessChain 134(u64v) 203
+             244:     14(int) Load 243
+             245:    204(ptr) AccessChain 166(uv) 222
+             246:     21(int) Load 245
+             247:     14(int) UConvert 246
+             248:    55(bool) UGreaterThanEqual 244 247
+                              Store 221(b) 248
+             249:     18(int) Load 139(i64)
              250:     31(int) Load 159(i)
              251:     18(int) SConvert 250
-             252:     14(int) Bitcast 251
-             253:  132(ivec3) Load 134(u64v)
-             254:  132(ivec3) CompositeConstruct 252 252 252
-             255:  132(ivec3) BitwiseOr 253 254
-                              Store 134(u64v) 255
-             256:     18(int) Load 139(i64)
-             257:     31(int) Load 159(i)
-             258:     18(int) SConvert 257
-             259:     18(int) BitwiseOr 256 258
-                              Store 139(i64) 259
+             252:    55(bool) SLessThanEqual 249 251
+                              Store 221(b) 252
+             253:     31(int) Load 159(i)
+             254:     18(int) SConvert 253
+             255:     14(int) Bitcast 254
+             256:  132(ivec3) Load 134(u64v)
+             257:  132(ivec3) CompositeConstruct 255 255 255
+             258:  132(ivec3) BitwiseOr 256 257
+                              Store 134(u64v) 258
+             259:     18(int) Load 139(i64)
              260:     31(int) Load 159(i)
              261:     18(int) SConvert 260
-             262:     18(int) Load 139(i64)
-             263:     18(int) BitwiseAnd 262 261
-                              Store 139(i64) 263
-             264:  132(ivec3) Load 134(u64v)
-             265:  164(ivec3) Load 166(uv)
-             266:  132(ivec3) UConvert 265
-             267:  132(ivec3) BitwiseAnd 264 266
-                              Store 134(u64v) 267
-             268:     18(int) Load 139(i64)
-             269:     14(int) Bitcast 268
-             270:  132(ivec3) Load 134(u64v)
-             271:  132(ivec3) CompositeConstruct 269 269 269
-             272:  132(ivec3) BitwiseXor 270 271
-                              Store 134(u64v) 272
+             262:     18(int) BitwiseOr 259 261
+                              Store 139(i64) 262
+             263:     31(int) Load 159(i)
+             264:     18(int) SConvert 263
+             265:     18(int) Load 139(i64)
+             266:     18(int) BitwiseAnd 265 264
+                              Store 139(i64) 266
+             267:  132(ivec3) Load 134(u64v)
+             268:  164(ivec3) Load 166(uv)
+             269:  132(ivec3) UConvert 268
+             270:  132(ivec3) BitwiseAnd 267 269
+                              Store 134(u64v) 270
+             271:     18(int) Load 139(i64)
+             272:     14(int) Bitcast 271
              273:  132(ivec3) Load 134(u64v)
-             274:     18(int) Load 139(i64)
-             275:     14(int) Bitcast 274
-             276:  132(ivec3) CompositeConstruct 275 275 275
-             277:  132(ivec3) BitwiseXor 273 276
-                              Store 134(u64v) 277
+             274:  132(ivec3) CompositeConstruct 272 272 272
+             275:  132(ivec3) BitwiseXor 273 274
+                              Store 134(u64v) 275
+             276:  132(ivec3) Load 134(u64v)
+             277:     18(int) Load 139(i64)
+             278:     14(int) Bitcast 277
+             279:  132(ivec3) CompositeConstruct 278 278 278
+             280:  132(ivec3) BitwiseXor 276 279
+                              Store 134(u64v) 280
                               Return
                               FunctionEnd
 12(builtinFuncs():           2 Function None 3
               13:             Label
-       278(i64v):     53(ptr) Variable Function
-        281(i64):     19(ptr) Variable Function
-       291(u64v):    133(ptr) Variable Function
-        293(u64):     40(ptr) Variable Function
-         365(dv):    364(ptr) Variable Function
-         384(iv):     75(ptr) Variable Function
-         389(uv):     82(ptr) Variable Function
-         393(bv):    392(ptr) Variable Function
-             279:   52(ivec2) Load 278(i64v)
-             280:   52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 279
-                              Store 278(i64v) 280
-             282:     18(int) Load 281(i64)
-             283:     18(int) ExtInst 1(GLSL.std.450) 7(SSign) 282
-                              Store 281(i64) 283
-             284:   52(ivec2) Load 278(i64v)
-             285:     18(int) Load 281(i64)
-             286:   52(ivec2) CompositeConstruct 285 285
-             287:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 284 286
-                              Store 278(i64v) 287
-             288:   52(ivec2) Load 278(i64v)
-             290:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 288 289
-                              Store 278(i64v) 290
-             292:  132(ivec3) Load 291(u64v)
-             294:     14(int) Load 293(u64)
-             295:  132(ivec3) CompositeConstruct 294 294 294
-             296:  132(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 292 295
-                              Store 291(u64v) 296
-             297:  132(ivec3) Load 291(u64v)
-             299:  132(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 297 298
-                              Store 291(u64v) 299
-             300:   52(ivec2) Load 278(i64v)
-             301:     18(int) Load 281(i64)
-             302:   52(ivec2) CompositeConstruct 301 301
-             303:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 300 302
-                              Store 278(i64v) 303
-             304:   52(ivec2) Load 278(i64v)
-             305:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 304 289
-                              Store 278(i64v) 305
-             306:  132(ivec3) Load 291(u64v)
-             307:     14(int) Load 293(u64)
-             308:  132(ivec3) CompositeConstruct 307 307 307
-             309:  132(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 306 308
-                              Store 291(u64v) 309
-             310:  132(ivec3) Load 291(u64v)
-             311:  132(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 310 298
-                              Store 291(u64v) 311
-             312:   52(ivec2) Load 278(i64v)
-             313:     18(int) Load 281(i64)
-             314:     18(int) SNegate 313
-             315:     18(int) Load 281(i64)
-             316:   52(ivec2) CompositeConstruct 314 314
-             317:   52(ivec2) CompositeConstruct 315 315
-             318:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 312 316 317
-                              Store 278(i64v) 318
-             319:   52(ivec2) Load 278(i64v)
-             320:   52(ivec2) Load 278(i64v)
-             321:   52(ivec2) SNegate 320
-             322:   52(ivec2) Load 278(i64v)
-             323:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 319 321 322
-                              Store 278(i64v) 323
-             324:  132(ivec3) Load 291(u64v)
-             325:     14(int) Load 293(u64)
-             326:     14(int) SNegate 325
-             327:     14(int) Load 293(u64)
-             328:  132(ivec3) CompositeConstruct 326 326 326
-             329:  132(ivec3) CompositeConstruct 327 327 327
-             330:  132(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 324 328 329
-                              Store 291(u64v) 330
-             331:  132(ivec3) Load 291(u64v)
-             332:  132(ivec3) Load 291(u64v)
-             333:  132(ivec3) SNegate 332
-             334:  132(ivec3) Load 291(u64v)
-             335:  132(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 331 333 334
-                              Store 291(u64v) 335
-             336:     19(ptr) AccessChain 278(i64v) 219
-             337:     18(int) Load 336
-             338:     19(ptr) AccessChain 278(i64v) 202
-             339:     18(int) Load 338
-             341:     18(int) Select 340 339 337
-                              Store 281(i64) 341
-             342:     18(int) Load 281(i64)
-             343:   52(ivec2) CompositeConstruct 342 342
-             344:     18(int) Load 281(i64)
-             345:     18(int) SNegate 344
+       281(i64v):     53(ptr) Variable Function
+        284(i64):     19(ptr) Variable Function
+       294(u64v):    133(ptr) Variable Function
+        296(u64):     40(ptr) Variable Function
+         368(dv):    367(ptr) Variable Function
+         387(iv):     75(ptr) Variable Function
+         392(uv):     82(ptr) Variable Function
+         396(bv):    395(ptr) Variable Function
+             282:   52(ivec2) Load 281(i64v)
+             283:   52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 282
+                              Store 281(i64v) 283
+             285:     18(int) Load 284(i64)
+             286:     18(int) ExtInst 1(GLSL.std.450) 7(SSign) 285
+                              Store 284(i64) 286
+             287:   52(ivec2) Load 281(i64v)
+             288:     18(int) Load 284(i64)
+             289:   52(ivec2) CompositeConstruct 288 288
+             290:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 287 289
+                              Store 281(i64v) 290
+             291:   52(ivec2) Load 281(i64v)
+             293:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 291 292
+                              Store 281(i64v) 293
+             295:  132(ivec3) Load 294(u64v)
+             297:     14(int) Load 296(u64)
+             298:  132(ivec3) CompositeConstruct 297 297 297
+             299:  132(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 295 298
+                              Store 294(u64v) 299
+             300:  132(ivec3) Load 294(u64v)
+             302:  132(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 300 301
+                              Store 294(u64v) 302
+             303:   52(ivec2) Load 281(i64v)
+             304:     18(int) Load 284(i64)
+             305:   52(ivec2) CompositeConstruct 304 304
+             306:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 303 305
+                              Store 281(i64v) 306
+             307:   52(ivec2) Load 281(i64v)
+             308:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 307 292
+                              Store 281(i64v) 308
+             309:  132(ivec3) Load 294(u64v)
+             310:     14(int) Load 296(u64)
+             311:  132(ivec3) CompositeConstruct 310 310 310
+             312:  132(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 309 311
+                              Store 294(u64v) 312
+             313:  132(ivec3) Load 294(u64v)
+             314:  132(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 313 301
+                              Store 294(u64v) 314
+             315:   52(ivec2) Load 281(i64v)
+             316:     18(int) Load 284(i64)
+             317:     18(int) SNegate 316
+             318:     18(int) Load 284(i64)
+             319:   52(ivec2) CompositeConstruct 317 317
+             320:   52(ivec2) CompositeConstruct 318 318
+             321:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 315 319 320
+                              Store 281(i64v) 321
+             322:   52(ivec2) Load 281(i64v)
+             323:   52(ivec2) Load 281(i64v)
+             324:   52(ivec2) SNegate 323
+             325:   52(ivec2) Load 281(i64v)
+             326:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 322 324 325
+                              Store 281(i64v) 326
+             327:  132(ivec3) Load 294(u64v)
+             328:     14(int) Load 296(u64)
+             329:     14(int) SNegate 328
+             330:     14(int) Load 296(u64)
+             331:  132(ivec3) CompositeConstruct 329 329 329
+             332:  132(ivec3) CompositeConstruct 330 330 330
+             333:  132(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 327 331 332
+                              Store 294(u64v) 333
+             334:  132(ivec3) Load 294(u64v)
+             335:  132(ivec3) Load 294(u64v)
+             336:  132(ivec3) SNegate 335
+             337:  132(ivec3) Load 294(u64v)
+             338:  132(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 334 336 337
+                              Store 294(u64v) 338
+             339:     19(ptr) AccessChain 281(i64v) 222
+             340:     18(int) Load 339
+             341:     19(ptr) AccessChain 281(i64v) 203
+             342:     18(int) Load 341
+             344:     18(int) Select 343 342 340
+                              Store 284(i64) 344
+             345:     18(int) Load 284(i64)
              346:   52(ivec2) CompositeConstruct 345 345
-             349:   52(ivec2) Select 348 346 343
-                              Store 278(i64v) 349
-             350:     40(ptr) AccessChain 291(u64v) 219
-             351:     14(int) Load 350
-             352:     40(ptr) AccessChain 291(u64v) 202
-             353:     14(int) Load 352
-             354:     14(int) Select 340 353 351
-                              Store 293(u64) 354
-             355:     14(int) Load 293(u64)
-             356:  132(ivec3) CompositeConstruct 355 355 355
-             357:     14(int) Load 293(u64)
-             358:     14(int) SNegate 357
+             347:     18(int) Load 284(i64)
+             348:     18(int) SNegate 347
+             349:   52(ivec2) CompositeConstruct 348 348
+             352:   52(ivec2) Select 351 349 346
+                              Store 281(i64v) 352
+             353:     40(ptr) AccessChain 294(u64v) 222
+             354:     14(int) Load 353
+             355:     40(ptr) AccessChain 294(u64v) 203
+             356:     14(int) Load 355
+             357:     14(int) Select 343 356 354
+                              Store 296(u64) 357
+             358:     14(int) Load 296(u64)
              359:  132(ivec3) CompositeConstruct 358 358 358
-             362:  132(ivec3) Select 361 359 356
-                              Store 291(u64v) 362
-             366:  363(fvec3) Load 365(dv)
-             367:   95(fvec2) VectorShuffle 366 366 0 1
-             368:   52(ivec2) Bitcast 367
-                              Store 278(i64v) 368
-             370:    369(ptr) AccessChain 365(dv) 209
-             371:   94(float) Load 370
-             372:     14(int) Bitcast 371
-             373:     40(ptr) AccessChain 291(u64v) 219
-                              Store 373 372
-             374:   52(ivec2) Load 278(i64v)
-             375:   95(fvec2) Bitcast 374
-             376:  363(fvec3) Load 365(dv)
-             377:  363(fvec3) VectorShuffle 376 375 3 4 2
-                              Store 365(dv) 377
-             378:  132(ivec3) Load 291(u64v)
-             379:  363(fvec3) Bitcast 378
-                              Store 365(dv) 379
-             383:     18(int) Bitcast 382
-                              Store 281(i64) 383
-             385:     18(int) Load 281(i64)
-             386:   74(ivec2) Bitcast 385
-                              Store 384(iv) 386
-             388:     14(int) Bitcast 387
-                              Store 293(u64) 388
-             390:     14(int) Load 293(u64)
-             391:   81(ivec2) Bitcast 390
-                              Store 389(uv) 391
-             394:  132(ivec3) Load 291(u64v)
-             395:     14(int) Load 293(u64)
-             396:  132(ivec3) CompositeConstruct 395 395 395
-             397:  360(bvec3) ULessThan 394 396
-                              Store 393(bv) 397
-             398:   52(ivec2) Load 278(i64v)
-             399:     18(int) Load 281(i64)
-             400:   52(ivec2) CompositeConstruct 399 399
-             401:   56(bvec2) SLessThan 398 400
-             402:  360(bvec3) Load 393(bv)
-             403:  360(bvec3) VectorShuffle 402 401 3 4 2
-                              Store 393(bv) 403
-             404:  132(ivec3) Load 291(u64v)
-             405:     14(int) Load 293(u64)
-             406:  132(ivec3) CompositeConstruct 405 405 405
-             407:  360(bvec3) ULessThanEqual 404 406
-                              Store 393(bv) 407
-             408:   52(ivec2) Load 278(i64v)
-             409:     18(int) Load 281(i64)
-             410:   52(ivec2) CompositeConstruct 409 409
-             411:   56(bvec2) SLessThanEqual 408 410
-             412:  360(bvec3) Load 393(bv)
-             413:  360(bvec3) VectorShuffle 412 411 3 4 2
-                              Store 393(bv) 413
-             414:  132(ivec3) Load 291(u64v)
-             415:     14(int) Load 293(u64)
-             416:  132(ivec3) CompositeConstruct 415 415 415
-             417:  360(bvec3) UGreaterThan 414 416
-                              Store 393(bv) 417
-             418:   52(ivec2) Load 278(i64v)
-             419:     18(int) Load 281(i64)
-             420:   52(ivec2) CompositeConstruct 419 419
-             421:   56(bvec2) SGreaterThan 418 420
-             422:  360(bvec3) Load 393(bv)
-             423:  360(bvec3) VectorShuffle 422 421 3 4 2
-                              Store 393(bv) 423
-             424:  132(ivec3) Load 291(u64v)
-             425:     14(int) Load 293(u64)
-             426:  132(ivec3) CompositeConstruct 425 425 425
-             427:  360(bvec3) UGreaterThanEqual 424 426
-                              Store 393(bv) 427
-             428:   52(ivec2) Load 278(i64v)
-             429:     18(int) Load 281(i64)
-             430:   52(ivec2) CompositeConstruct 429 429
-             431:   56(bvec2) SGreaterThanEqual 428 430
-             432:  360(bvec3) Load 393(bv)
-             433:  360(bvec3) VectorShuffle 432 431 3 4 2
-                              Store 393(bv) 433
-             434:  132(ivec3) Load 291(u64v)
-             435:     14(int) Load 293(u64)
-             436:  132(ivec3) CompositeConstruct 435 435 435
-             437:  360(bvec3) IEqual 434 436
-                              Store 393(bv) 437
-             438:   52(ivec2) Load 278(i64v)
-             439:     18(int) Load 281(i64)
-             440:   52(ivec2) CompositeConstruct 439 439
-             441:   56(bvec2) IEqual 438 440
-             442:  360(bvec3) Load 393(bv)
-             443:  360(bvec3) VectorShuffle 442 441 3 4 2
-                              Store 393(bv) 443
-             444:  132(ivec3) Load 291(u64v)
-             445:     14(int) Load 293(u64)
-             446:  132(ivec3) CompositeConstruct 445 445 445
-             447:  360(bvec3) INotEqual 444 446
-                              Store 393(bv) 447
-             448:   52(ivec2) Load 278(i64v)
-             449:     18(int) Load 281(i64)
-             450:   52(ivec2) CompositeConstruct 449 449
-             451:   56(bvec2) INotEqual 448 450
-             452:  360(bvec3) Load 393(bv)
-             453:  360(bvec3) VectorShuffle 452 451 3 4 2
-                              Store 393(bv) 453
+             360:     14(int) Load 296(u64)
+             361:     14(int) SNegate 360
+             362:  132(ivec3) CompositeConstruct 361 361 361
+             365:  132(ivec3) Select 364 362 359
+                              Store 294(u64v) 365
+             369:  366(fvec3) Load 368(dv)
+             370:   95(fvec2) VectorShuffle 369 369 0 1
+             371:   52(ivec2) Bitcast 370
+                              Store 281(i64v) 371
+             373:    372(ptr) AccessChain 368(dv) 212
+             374:   94(float) Load 373
+             375:     14(int) Bitcast 374
+             376:     40(ptr) AccessChain 294(u64v) 222
+                              Store 376 375
+             377:   52(ivec2) Load 281(i64v)
+             378:   95(fvec2) Bitcast 377
+             379:  366(fvec3) Load 368(dv)
+             380:  366(fvec3) VectorShuffle 379 378 3 4 2
+                              Store 368(dv) 380
+             381:  132(ivec3) Load 294(u64v)
+             382:  366(fvec3) Bitcast 381
+                              Store 368(dv) 382
+             386:     18(int) Bitcast 385
+                              Store 284(i64) 386
+             388:     18(int) Load 284(i64)
+             389:   74(ivec2) Bitcast 388
+                              Store 387(iv) 389
+             391:     14(int) Bitcast 390
+                              Store 296(u64) 391
+             393:     14(int) Load 296(u64)
+             394:   81(ivec2) Bitcast 393
+                              Store 392(uv) 394
+             397:  132(ivec3) Load 294(u64v)
+             398:     14(int) Load 296(u64)
+             399:  132(ivec3) CompositeConstruct 398 398 398
+             400:  363(bvec3) ULessThan 397 399
+                              Store 396(bv) 400
+             401:   52(ivec2) Load 281(i64v)
+             402:     18(int) Load 284(i64)
+             403:   52(ivec2) CompositeConstruct 402 402
+             404:   56(bvec2) SLessThan 401 403
+             405:  363(bvec3) Load 396(bv)
+             406:  363(bvec3) VectorShuffle 405 404 3 4 2
+                              Store 396(bv) 406
+             407:  132(ivec3) Load 294(u64v)
+             408:     14(int) Load 296(u64)
+             409:  132(ivec3) CompositeConstruct 408 408 408
+             410:  363(bvec3) ULessThanEqual 407 409
+                              Store 396(bv) 410
+             411:   52(ivec2) Load 281(i64v)
+             412:     18(int) Load 284(i64)
+             413:   52(ivec2) CompositeConstruct 412 412
+             414:   56(bvec2) SLessThanEqual 411 413
+             415:  363(bvec3) Load 396(bv)
+             416:  363(bvec3) VectorShuffle 415 414 3 4 2
+                              Store 396(bv) 416
+             417:  132(ivec3) Load 294(u64v)
+             418:     14(int) Load 296(u64)
+             419:  132(ivec3) CompositeConstruct 418 418 418
+             420:  363(bvec3) UGreaterThan 417 419
+                              Store 396(bv) 420
+             421:   52(ivec2) Load 281(i64v)
+             422:     18(int) Load 284(i64)
+             423:   52(ivec2) CompositeConstruct 422 422
+             424:   56(bvec2) SGreaterThan 421 423
+             425:  363(bvec3) Load 396(bv)
+             426:  363(bvec3) VectorShuffle 425 424 3 4 2
+                              Store 396(bv) 426
+             427:  132(ivec3) Load 294(u64v)
+             428:     14(int) Load 296(u64)
+             429:  132(ivec3) CompositeConstruct 428 428 428
+             430:  363(bvec3) UGreaterThanEqual 427 429
+                              Store 396(bv) 430
+             431:   52(ivec2) Load 281(i64v)
+             432:     18(int) Load 284(i64)
+             433:   52(ivec2) CompositeConstruct 432 432
+             434:   56(bvec2) SGreaterThanEqual 431 433
+             435:  363(bvec3) Load 396(bv)
+             436:  363(bvec3) VectorShuffle 435 434 3 4 2
+                              Store 396(bv) 436
+             437:  132(ivec3) Load 294(u64v)
+             438:     14(int) Load 296(u64)
+             439:  132(ivec3) CompositeConstruct 438 438 438
+             440:  363(bvec3) IEqual 437 439
+                              Store 396(bv) 440
+             441:   52(ivec2) Load 281(i64v)
+             442:     18(int) Load 284(i64)
+             443:   52(ivec2) CompositeConstruct 442 442
+             444:   56(bvec2) IEqual 441 443
+             445:  363(bvec3) Load 396(bv)
+             446:  363(bvec3) VectorShuffle 445 444 3 4 2
+                              Store 396(bv) 446
+             447:  132(ivec3) Load 294(u64v)
+             448:     14(int) Load 296(u64)
+             449:  132(ivec3) CompositeConstruct 448 448 448
+             450:  363(bvec3) INotEqual 447 449
+                              Store 396(bv) 450
+             451:   52(ivec2) Load 281(i64v)
+             452:     18(int) Load 284(i64)
+             453:   52(ivec2) CompositeConstruct 452 452
+             454:   56(bvec2) INotEqual 451 453
+             455:  363(bvec3) Load 396(bv)
+             456:  363(bvec3) VectorShuffle 455 454 3 4 2
+                              Store 396(bv) 456
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.int8.frag.out b/Test/baseResults/spv.int8.frag.out
new file mode 100644
index 0000000..1bfc439
--- /dev/null
+++ b/Test/baseResults/spv.int8.frag.out
@@ -0,0 +1,748 @@
+spv.int8.frag
+// Module Version 10300
+// Generated by (magic number): 80005
+// Id's are bound by 531
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Float64
+                              Capability Int64
+                              Capability Int16
+                              Capability Int8
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float16"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float32"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int16"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int32"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int8"
+                              Name 4  "main"
+                              Name 6  "literal("
+                              Name 8  "typeCast8("
+                              Name 10  "operators("
+                              Name 12  "builtinFuncs("
+                              Name 16  "i8"
+                              Name 24  "Uniforms"
+                              MemberName 24(Uniforms) 0  "index"
+                              Name 26  ""
+                              Name 33  "indexable"
+                              Name 38  "u8"
+                              Name 46  "indexable"
+                              Name 51  "u8v"
+                              Name 54  "i8v"
+                              Name 60  "i16v"
+                              Name 68  "i32v"
+                              Name 76  "u32v"
+                              Name 83  "i64v"
+                              Name 89  "u64v"
+                              Name 103  "f16v"
+                              Name 109  "f32v"
+                              Name 115  "f64v"
+                              Name 144  "u16v"
+                              Name 174  "bv"
+                              Name 192  "u8v"
+                              Name 196  "i8"
+                              Name 216  "i"
+                              Name 223  "uv"
+                              Name 242  "i16"
+                              Name 279  "b"
+                              Name 341  "i8v"
+                              Name 344  "i8"
+                              Name 354  "u8v"
+                              Name 356  "u8"
+                              Name 430  "i16"
+                              Name 433  "i32"
+                              Name 436  "i8v4"
+                              Name 440  "u16"
+                              Name 441  "u8v2"
+                              Name 444  "u32"
+                              Name 447  "u8v4"
+                              Name 459  "bv"
+                              Name 526  "Block"
+                              MemberName 526(Block) 0  "i8"
+                              MemberName 526(Block) 1  "i8v2"
+                              MemberName 526(Block) 2  "i8v3"
+                              MemberName 526(Block) 3  "i8v4"
+                              MemberName 526(Block) 4  "u8"
+                              MemberName 526(Block) 5  "u8v2"
+                              MemberName 526(Block) 6  "u8v3"
+                              MemberName 526(Block) 7  "u8v4"
+                              Name 528  "block"
+                              Name 529  "si8"
+                              Name 530  "su8"
+                              MemberDecorate 24(Uniforms) 0 Offset 0
+                              Decorate 24(Uniforms) Block
+                              Decorate 26 DescriptorSet 0
+                              Decorate 26 Binding 0
+                              MemberDecorate 526(Block) 0 Offset 0
+                              MemberDecorate 526(Block) 1 Offset 2
+                              MemberDecorate 526(Block) 2 Offset 4
+                              MemberDecorate 526(Block) 3 Offset 8
+                              MemberDecorate 526(Block) 4 Offset 12
+                              MemberDecorate 526(Block) 5 Offset 14
+                              MemberDecorate 526(Block) 6 Offset 16
+                              MemberDecorate 526(Block) 7 Offset 20
+                              Decorate 526(Block) Block
+                              Decorate 528(block) DescriptorSet 0
+                              Decorate 528(block) Binding 1
+                              Decorate 529(si8) SpecId 100
+                              Decorate 530(su8) SpecId 101
+               2:             TypeVoid
+               3:             TypeFunction 2
+              14:             TypeInt 8 1
+              15:             TypePointer Function 14(int)
+              17:             TypeInt 32 0
+              18:     17(int) Constant 3
+              19:             TypeArray 14(int) 18
+              20:     14(int) Constant 4294967279
+              21:     14(int) Constant 4294967295
+              22:     14(int) Constant 0
+              23:          19 ConstantComposite 20 21 22
+    24(Uniforms):             TypeStruct 17(int)
+              25:             TypePointer Uniform 24(Uniforms)
+              26:     25(ptr) Variable Uniform
+              27:             TypeInt 32 1
+              28:     27(int) Constant 0
+              29:             TypePointer Uniform 17(int)
+              32:             TypePointer Function 19
+              36:             TypeInt 8 0
+              37:             TypePointer Function 36(int)
+              39:             TypeArray 36(int) 18
+              40:     36(int) Constant 255
+              41:     36(int) Constant 127
+              42:          39 ConstantComposite 40 40 41
+              45:             TypePointer Function 39
+              49:             TypeVector 36(int) 2
+              50:             TypePointer Function 49(ivec2)
+              52:             TypeVector 14(int) 2
+              53:             TypePointer Function 52(ivec2)
+              57:             TypeInt 16 1
+              58:             TypeVector 57(int) 2
+              59:             TypePointer Function 58(ivec2)
+              66:             TypeVector 27(int) 2
+              67:             TypePointer Function 66(ivec2)
+              74:             TypeVector 17(int) 2
+              75:             TypePointer Function 74(ivec2)
+              80:             TypeInt 64 1
+              81:             TypeVector 80(int) 2
+              82:             TypePointer Function 81(ivec2)
+              86:             TypeInt 64 0
+              87:             TypeVector 86(int) 2
+              88:             TypePointer Function 87(ivec2)
+             100:             TypeFloat 16
+             101:             TypeVector 100(float) 2
+             102:             TypePointer Function 101(fvec2)
+             106:             TypeFloat 32
+             107:             TypeVector 106(float) 2
+             108:             TypePointer Function 107(fvec2)
+             112:             TypeFloat 64
+             113:             TypeVector 112(float) 2
+             114:             TypePointer Function 113(fvec2)
+             141:             TypeInt 16 0
+             142:             TypeVector 141(int) 2
+             143:             TypePointer Function 142(ivec2)
+             171:             TypeBool
+             172:             TypeVector 171(bool) 2
+             173:             TypePointer Function 172(bvec2)
+             176:     14(int) Constant 1
+             177:   52(ivec2) ConstantComposite 22 22
+             178:   52(ivec2) ConstantComposite 176 176
+             181:     36(int) Constant 0
+             182:     36(int) Constant 1
+             183:   49(ivec2) ConstantComposite 181 181
+             184:   49(ivec2) ConstantComposite 182 182
+             190:             TypeVector 14(int) 3
+             191:             TypePointer Function 190(ivec3)
+             215:             TypePointer Function 27(int)
+             221:             TypeVector 17(int) 3
+             222:             TypePointer Function 221(ivec3)
+             225:             TypeVector 27(int) 3
+             241:             TypePointer Function 57(int)
+             264:     17(int) Constant 1
+             270:     17(int) Constant 2
+             278:             TypePointer Function 171(bool)
+             280:     17(int) Constant 0
+             293:             TypePointer Function 17(int)
+             352:   52(ivec2) ConstantComposite 21 21
+             358:             TypeVector 36(int) 3
+             362:  190(ivec3) ConstantComposite 22 22 22
+             404:   171(bool) ConstantTrue
+             411:   171(bool) ConstantFalse
+             412:  172(bvec2) ConstantComposite 411 411
+             427:             TypeVector 171(bool) 3
+             428:  427(bvec3) ConstantComposite 411 411 411
+             434:             TypeVector 14(int) 4
+             435:             TypePointer Function 434(ivec4)
+             439:             TypePointer Function 141(int)
+             445:             TypeVector 36(int) 4
+             446:             TypePointer Function 445(ivec4)
+             458:             TypePointer Function 427(bvec3)
+      526(Block):             TypeStruct 14(int) 52(ivec2) 190(ivec3) 434(ivec4) 36(int) 49(ivec2) 190(ivec3) 445(ivec4)
+             527:             TypePointer Uniform 526(Block)
+      528(block):    527(ptr) Variable Uniform
+        529(si8):     14(int) SpecConstant 4294967286
+        530(su8):     36(int) SpecConstant 20
+         4(main):           2 Function None 3
+               5:             Label
+                              Return
+                              FunctionEnd
+     6(literal():           2 Function None 3
+               7:             Label
+          16(i8):     15(ptr) Variable Function
+   33(indexable):     32(ptr) Variable Function
+          38(u8):     37(ptr) Variable Function
+   46(indexable):     45(ptr) Variable Function
+              30:     29(ptr) AccessChain 26 28
+              31:     17(int) Load 30
+                              Store 33(indexable) 23
+              34:     15(ptr) AccessChain 33(indexable) 31
+              35:     14(int) Load 34
+                              Store 16(i8) 35
+              43:     29(ptr) AccessChain 26 28
+              44:     17(int) Load 43
+                              Store 46(indexable) 42
+              47:     37(ptr) AccessChain 46(indexable) 44
+              48:     36(int) Load 47
+                              Store 38(u8) 48
+                              Return
+                              FunctionEnd
+   8(typeCast8():           2 Function None 3
+               9:             Label
+         51(u8v):     50(ptr) Variable Function
+         54(i8v):     53(ptr) Variable Function
+        60(i16v):     59(ptr) Variable Function
+        68(i32v):     67(ptr) Variable Function
+        76(u32v):     75(ptr) Variable Function
+        83(i64v):     82(ptr) Variable Function
+        89(u64v):     88(ptr) Variable Function
+       103(f16v):    102(ptr) Variable Function
+       109(f32v):    108(ptr) Variable Function
+       115(f64v):    114(ptr) Variable Function
+       144(u16v):    143(ptr) Variable Function
+         174(bv):    173(ptr) Variable Function
+              55:   52(ivec2) Load 54(i8v)
+              56:   49(ivec2) Bitcast 55
+                              Store 51(u8v) 56
+              61:   52(ivec2) Load 54(i8v)
+              62:   58(ivec2) SConvert 61
+                              Store 60(i16v) 62
+              63:   49(ivec2) Load 51(u8v)
+              64:   58(ivec2) UConvert 63
+              65:   58(ivec2) Bitcast 64
+                              Store 60(i16v) 65
+              69:   52(ivec2) Load 54(i8v)
+              70:   66(ivec2) SConvert 69
+                              Store 68(i32v) 70
+              71:   49(ivec2) Load 51(u8v)
+              72:   66(ivec2) UConvert 71
+              73:   66(ivec2) Bitcast 72
+                              Store 68(i32v) 73
+              77:   52(ivec2) Load 54(i8v)
+              78:   66(ivec2) SConvert 77
+              79:   74(ivec2) Bitcast 78
+                              Store 76(u32v) 79
+              84:   52(ivec2) Load 54(i8v)
+              85:   81(ivec2) SConvert 84
+                              Store 83(i64v) 85
+              90:   52(ivec2) Load 54(i8v)
+              91:   81(ivec2) SConvert 90
+              92:   87(ivec2) Bitcast 91
+                              Store 89(u64v) 92
+              93:   49(ivec2) Load 51(u8v)
+              94:   74(ivec2) UConvert 93
+                              Store 76(u32v) 94
+              95:   49(ivec2) Load 51(u8v)
+              96:   81(ivec2) UConvert 95
+              97:   81(ivec2) Bitcast 96
+                              Store 83(i64v) 97
+              98:   49(ivec2) Load 51(u8v)
+              99:   87(ivec2) UConvert 98
+                              Store 89(u64v) 99
+             104:   52(ivec2) Load 54(i8v)
+             105:  101(fvec2) ConvertSToF 104
+                              Store 103(f16v) 105
+             110:   52(ivec2) Load 54(i8v)
+             111:  107(fvec2) ConvertSToF 110
+                              Store 109(f32v) 111
+             116:   52(ivec2) Load 54(i8v)
+             117:  113(fvec2) ConvertSToF 116
+                              Store 115(f64v) 117
+             118:   49(ivec2) Load 51(u8v)
+             119:  101(fvec2) ConvertUToF 118
+                              Store 103(f16v) 119
+             120:   49(ivec2) Load 51(u8v)
+             121:  107(fvec2) ConvertUToF 120
+                              Store 109(f32v) 121
+             122:   49(ivec2) Load 51(u8v)
+             123:  113(fvec2) ConvertUToF 122
+                              Store 115(f64v) 123
+             124:   49(ivec2) Load 51(u8v)
+             125:   52(ivec2) Bitcast 124
+                              Store 54(i8v) 125
+             126:   52(ivec2) Load 54(i8v)
+             127:   58(ivec2) SConvert 126
+                              Store 60(i16v) 127
+             128:   49(ivec2) Load 51(u8v)
+             129:   58(ivec2) UConvert 128
+             130:   58(ivec2) Bitcast 129
+                              Store 60(i16v) 130
+             131:   52(ivec2) Load 54(i8v)
+             132:   66(ivec2) SConvert 131
+                              Store 68(i32v) 132
+             133:   49(ivec2) Load 51(u8v)
+             134:   66(ivec2) UConvert 133
+             135:   66(ivec2) Bitcast 134
+                              Store 68(i32v) 135
+             136:   52(ivec2) Load 54(i8v)
+             137:   81(ivec2) SConvert 136
+                              Store 83(i64v) 137
+             138:   52(ivec2) Load 54(i8v)
+             139:   81(ivec2) SConvert 138
+             140:   87(ivec2) Bitcast 139
+                              Store 89(u64v) 140
+             145:   52(ivec2) Load 54(i8v)
+             146:   58(ivec2) SConvert 145
+             147:  142(ivec2) Bitcast 146
+                              Store 144(u16v) 147
+             148:   49(ivec2) Load 51(u8v)
+             149:  142(ivec2) UConvert 148
+                              Store 144(u16v) 149
+             150:   49(ivec2) Load 51(u8v)
+             151:   74(ivec2) UConvert 150
+                              Store 76(u32v) 151
+             152:   49(ivec2) Load 51(u8v)
+             153:   81(ivec2) UConvert 152
+             154:   81(ivec2) Bitcast 153
+                              Store 83(i64v) 154
+             155:   49(ivec2) Load 51(u8v)
+             156:   81(ivec2) UConvert 155
+             157:   81(ivec2) Bitcast 156
+             158:   87(ivec2) Bitcast 157
+                              Store 89(u64v) 158
+             159:   52(ivec2) Load 54(i8v)
+             160:  101(fvec2) ConvertSToF 159
+                              Store 103(f16v) 160
+             161:   52(ivec2) Load 54(i8v)
+             162:  107(fvec2) ConvertSToF 161
+                              Store 109(f32v) 162
+             163:   52(ivec2) Load 54(i8v)
+             164:  113(fvec2) ConvertSToF 163
+                              Store 115(f64v) 164
+             165:   49(ivec2) Load 51(u8v)
+             166:  101(fvec2) ConvertUToF 165
+                              Store 103(f16v) 166
+             167:   49(ivec2) Load 51(u8v)
+             168:  107(fvec2) ConvertUToF 167
+                              Store 109(f32v) 168
+             169:   49(ivec2) Load 51(u8v)
+             170:  113(fvec2) ConvertUToF 169
+                              Store 115(f64v) 170
+             175:  172(bvec2) Load 174(bv)
+             179:   52(ivec2) Select 175 178 177
+                              Store 54(i8v) 179
+             180:  172(bvec2) Load 174(bv)
+             185:   49(ivec2) Select 180 184 183
+                              Store 51(u8v) 185
+             186:   52(ivec2) Load 54(i8v)
+             187:  172(bvec2) INotEqual 186 183
+                              Store 174(bv) 187
+             188:   49(ivec2) Load 51(u8v)
+             189:  172(bvec2) INotEqual 188 183
+                              Store 174(bv) 189
+                              Return
+                              FunctionEnd
+  10(operators():           2 Function None 3
+              11:             Label
+        192(u8v):    191(ptr) Variable Function
+         196(i8):     15(ptr) Variable Function
+          216(i):    215(ptr) Variable Function
+         223(uv):    222(ptr) Variable Function
+        242(i16):    241(ptr) Variable Function
+          279(b):    278(ptr) Variable Function
+             193:  190(ivec3) Load 192(u8v)
+             194:  190(ivec3) CompositeConstruct 176 176 176
+             195:  190(ivec3) IAdd 193 194
+                              Store 192(u8v) 195
+             197:     14(int) Load 196(i8)
+             198:     14(int) ISub 197 176
+                              Store 196(i8) 198
+             199:     14(int) Load 196(i8)
+             200:     14(int) IAdd 199 176
+                              Store 196(i8) 200
+             201:  190(ivec3) Load 192(u8v)
+             202:  190(ivec3) CompositeConstruct 176 176 176
+             203:  190(ivec3) ISub 201 202
+                              Store 192(u8v) 203
+             204:  190(ivec3) Load 192(u8v)
+             205:  190(ivec3) Not 204
+                              Store 192(u8v) 205
+             206:     14(int) Load 196(i8)
+                              Store 196(i8) 206
+             207:  190(ivec3) Load 192(u8v)
+             208:  190(ivec3) SNegate 207
+                              Store 192(u8v) 208
+             209:     14(int) Load 196(i8)
+             210:     14(int) Load 196(i8)
+             211:     14(int) IAdd 210 209
+                              Store 196(i8) 211
+             212:  190(ivec3) Load 192(u8v)
+             213:  190(ivec3) Load 192(u8v)
+             214:  190(ivec3) ISub 213 212
+                              Store 192(u8v) 214
+             217:     14(int) Load 196(i8)
+             218:     27(int) SConvert 217
+             219:     27(int) Load 216(i)
+             220:     27(int) IMul 219 218
+                              Store 216(i) 220
+             224:  190(ivec3) Load 192(u8v)
+             226:  225(ivec3) SConvert 224
+             227:  221(ivec3) Bitcast 226
+             228:  221(ivec3) Load 223(uv)
+             229:  221(ivec3) UDiv 228 227
+                              Store 223(uv) 229
+             230:     14(int) Load 196(i8)
+             231:     27(int) SConvert 230
+             232:     17(int) Bitcast 231
+             233:  221(ivec3) Load 223(uv)
+             234:  221(ivec3) CompositeConstruct 232 232 232
+             235:  221(ivec3) UMod 233 234
+                              Store 223(uv) 235
+             236:  190(ivec3) Load 192(u8v)
+             237:  225(ivec3) SConvert 236
+             238:  221(ivec3) Bitcast 237
+             239:  221(ivec3) Load 223(uv)
+             240:  221(ivec3) IAdd 238 239
+                              Store 223(uv) 240
+             243:     14(int) Load 196(i8)
+             244:     57(int) SConvert 243
+             245:     57(int) Load 242(i16)
+             246:     57(int) ISub 244 245
+                              Store 242(i16) 246
+             247:  190(ivec3) Load 192(u8v)
+             248:  225(ivec3) SConvert 247
+             249:  221(ivec3) Bitcast 248
+             250:  221(ivec3) Load 223(uv)
+             251:  221(ivec3) IMul 249 250
+                              Store 223(uv) 251
+             252:     14(int) Load 196(i8)
+             253:     57(int) SConvert 252
+             254:     57(int) Load 242(i16)
+             255:     57(int) IMul 253 254
+                              Store 242(i16) 255
+             256:     14(int) Load 196(i8)
+             257:     27(int) SConvert 256
+             258:     27(int) Load 216(i)
+             259:     27(int) SMod 257 258
+                              Store 216(i) 259
+             260:     14(int) Load 196(i8)
+             261:  190(ivec3) Load 192(u8v)
+             262:  190(ivec3) CompositeConstruct 260 260 260
+             263:  190(ivec3) ShiftLeftLogical 261 262
+                              Store 192(u8v) 263
+             265:     15(ptr) AccessChain 192(u8v) 264
+             266:     14(int) Load 265
+             267:     14(int) Load 196(i8)
+             268:     14(int) ShiftRightArithmetic 267 266
+                              Store 196(i8) 268
+             269:     14(int) Load 196(i8)
+             271:     15(ptr) AccessChain 192(u8v) 270
+             272:     14(int) Load 271
+             273:     14(int) ShiftLeftLogical 269 272
+                              Store 196(i8) 273
+             274:  190(ivec3) Load 192(u8v)
+             275:     14(int) Load 196(i8)
+             276:  190(ivec3) CompositeConstruct 275 275 275
+             277:  190(ivec3) ShiftLeftLogical 274 276
+                              Store 192(u8v) 277
+             281:     15(ptr) AccessChain 192(u8v) 280
+             282:     14(int) Load 281
+             283:     14(int) Load 196(i8)
+             284:   171(bool) INotEqual 282 283
+                              Store 279(b) 284
+             285:     14(int) Load 196(i8)
+             286:     15(ptr) AccessChain 192(u8v) 280
+             287:     14(int) Load 286
+             288:   171(bool) IEqual 285 287
+                              Store 279(b) 288
+             289:     15(ptr) AccessChain 192(u8v) 280
+             290:     14(int) Load 289
+             291:     27(int) SConvert 290
+             292:     17(int) Bitcast 291
+             294:    293(ptr) AccessChain 223(uv) 264
+             295:     17(int) Load 294
+             296:   171(bool) UGreaterThan 292 295
+                              Store 279(b) 296
+             297:     14(int) Load 196(i8)
+             298:     27(int) SConvert 297
+             299:     27(int) Load 216(i)
+             300:   171(bool) SLessThan 298 299
+                              Store 279(b) 300
+             301:     15(ptr) AccessChain 192(u8v) 264
+             302:     14(int) Load 301
+             303:     27(int) SConvert 302
+             304:     17(int) Bitcast 303
+             305:    293(ptr) AccessChain 223(uv) 280
+             306:     17(int) Load 305
+             307:   171(bool) UGreaterThanEqual 304 306
+                              Store 279(b) 307
+             308:     14(int) Load 196(i8)
+             309:     27(int) SConvert 308
+             310:     27(int) Load 216(i)
+             311:   171(bool) SLessThanEqual 309 310
+                              Store 279(b) 311
+             312:     14(int) Load 196(i8)
+             313:     27(int) SConvert 312
+             314:     17(int) Bitcast 313
+             315:  221(ivec3) Load 223(uv)
+             316:  221(ivec3) CompositeConstruct 314 314 314
+             317:  221(ivec3) BitwiseOr 315 316
+                              Store 223(uv) 317
+             318:     14(int) Load 196(i8)
+             319:     27(int) SConvert 318
+             320:     27(int) Load 216(i)
+             321:     27(int) BitwiseOr 319 320
+                              Store 216(i) 321
+             322:     14(int) Load 196(i8)
+             323:     57(int) SConvert 322
+             324:     57(int) Load 242(i16)
+             325:     57(int) BitwiseAnd 324 323
+                              Store 242(i16) 325
+             326:  190(ivec3) Load 192(u8v)
+             327:  225(ivec3) SConvert 326
+             328:  221(ivec3) Bitcast 327
+             329:  221(ivec3) Load 223(uv)
+             330:  221(ivec3) BitwiseAnd 328 329
+                              Store 223(uv) 330
+             331:     14(int) Load 196(i8)
+             332:     27(int) SConvert 331
+             333:     17(int) Bitcast 332
+             334:  221(ivec3) Load 223(uv)
+             335:  221(ivec3) CompositeConstruct 333 333 333
+             336:  221(ivec3) BitwiseXor 334 335
+                              Store 223(uv) 336
+             337:  190(ivec3) Load 192(u8v)
+             338:     14(int) Load 196(i8)
+             339:  190(ivec3) CompositeConstruct 338 338 338
+             340:  190(ivec3) BitwiseXor 337 339
+                              Store 192(u8v) 340
+                              Return
+                              FunctionEnd
+12(builtinFuncs():           2 Function None 3
+              13:             Label
+        341(i8v):     53(ptr) Variable Function
+         344(i8):     15(ptr) Variable Function
+        354(u8v):    191(ptr) Variable Function
+         356(u8):     37(ptr) Variable Function
+        430(i16):    241(ptr) Variable Function
+        433(i32):    215(ptr) Variable Function
+       436(i8v4):    435(ptr) Variable Function
+        440(u16):    439(ptr) Variable Function
+       441(u8v2):     50(ptr) Variable Function
+        444(u32):    293(ptr) Variable Function
+       447(u8v4):    446(ptr) Variable Function
+         459(bv):    458(ptr) Variable Function
+             342:   52(ivec2) Load 341(i8v)
+             343:   52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 342
+                              Store 341(i8v) 343
+             345:     14(int) Load 344(i8)
+             346:     14(int) ExtInst 1(GLSL.std.450) 7(SSign) 345
+                              Store 344(i8) 346
+             347:   52(ivec2) Load 341(i8v)
+             348:     14(int) Load 344(i8)
+             349:   52(ivec2) CompositeConstruct 348 348
+             350:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 347 349
+                              Store 341(i8v) 350
+             351:   52(ivec2) Load 341(i8v)
+             353:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 351 352
+                              Store 341(i8v) 353
+             355:  190(ivec3) Load 354(u8v)
+             357:     36(int) Load 356(u8)
+             359:  358(ivec3) CompositeConstruct 357 357 357
+             360:  190(ivec3) ExtInst 1(GLSL.std.450) 39(SMin) 355 359
+                              Store 354(u8v) 360
+             361:  190(ivec3) Load 354(u8v)
+             363:  190(ivec3) ExtInst 1(GLSL.std.450) 39(SMin) 361 362
+                              Store 354(u8v) 363
+             364:   52(ivec2) Load 341(i8v)
+             365:     14(int) Load 344(i8)
+             366:   52(ivec2) CompositeConstruct 365 365
+             367:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 364 366
+                              Store 341(i8v) 367
+             368:   52(ivec2) Load 341(i8v)
+             369:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 368 352
+                              Store 341(i8v) 369
+             370:  190(ivec3) Load 354(u8v)
+             371:     36(int) Load 356(u8)
+             372:  358(ivec3) CompositeConstruct 371 371 371
+             373:  190(ivec3) ExtInst 1(GLSL.std.450) 42(SMax) 370 372
+                              Store 354(u8v) 373
+             374:  190(ivec3) Load 354(u8v)
+             375:  190(ivec3) ExtInst 1(GLSL.std.450) 42(SMax) 374 362
+                              Store 354(u8v) 375
+             376:   52(ivec2) Load 341(i8v)
+             377:     14(int) Load 344(i8)
+             378:     14(int) SNegate 377
+             379:     14(int) Load 344(i8)
+             380:   52(ivec2) CompositeConstruct 378 378
+             381:   52(ivec2) CompositeConstruct 379 379
+             382:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 376 380 381
+                              Store 341(i8v) 382
+             383:   52(ivec2) Load 341(i8v)
+             384:   52(ivec2) Load 341(i8v)
+             385:   52(ivec2) SNegate 384
+             386:   52(ivec2) Load 341(i8v)
+             387:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 383 385 386
+                              Store 341(i8v) 387
+             388:  190(ivec3) Load 354(u8v)
+             389:     36(int) Load 356(u8)
+             390:     36(int) SNegate 389
+             391:     36(int) Load 356(u8)
+             392:  358(ivec3) CompositeConstruct 390 390 390
+             393:  358(ivec3) CompositeConstruct 391 391 391
+             394:  190(ivec3) ExtInst 1(GLSL.std.450) 45(SClamp) 388 392 393
+                              Store 354(u8v) 394
+             395:  190(ivec3) Load 354(u8v)
+             396:  190(ivec3) Load 354(u8v)
+             397:  190(ivec3) SNegate 396
+             398:  190(ivec3) Load 354(u8v)
+             399:  190(ivec3) ExtInst 1(GLSL.std.450) 45(SClamp) 395 397 398
+                              Store 354(u8v) 399
+             400:     15(ptr) AccessChain 341(i8v) 280
+             401:     14(int) Load 400
+             402:     15(ptr) AccessChain 341(i8v) 264
+             403:     14(int) Load 402
+             405:     14(int) Select 404 403 401
+                              Store 344(i8) 405
+             406:     14(int) Load 344(i8)
+             407:   52(ivec2) CompositeConstruct 406 406
+             408:     14(int) Load 344(i8)
+             409:     14(int) SNegate 408
+             410:   52(ivec2) CompositeConstruct 409 409
+             413:   52(ivec2) Select 412 410 407
+                              Store 341(i8v) 413
+             414:     15(ptr) AccessChain 354(u8v) 280
+             415:     14(int) Load 414
+             416:     15(ptr) AccessChain 354(u8v) 264
+             417:     14(int) Load 416
+             418:     14(int) Select 404 417 415
+             419:     36(int) Bitcast 418
+                              Store 356(u8) 419
+             420:     36(int) Load 356(u8)
+             421:     14(int) Bitcast 420
+             422:  190(ivec3) CompositeConstruct 421 421 421
+             423:     36(int) Load 356(u8)
+             424:     36(int) SNegate 423
+             425:     14(int) Bitcast 424
+             426:  190(ivec3) CompositeConstruct 425 425 425
+             429:  190(ivec3) Select 428 426 422
+                              Store 354(u8v) 429
+             431:   52(ivec2) Load 341(i8v)
+             432:     57(int) Bitcast 431
+                              Store 430(i16) 432
+             437:  434(ivec4) Load 436(i8v4)
+             438:     27(int) Bitcast 437
+                              Store 433(i32) 438
+             442:   49(ivec2) Load 441(u8v2)
+             443:    141(int) Bitcast 442
+                              Store 440(u16) 443
+             448:  445(ivec4) Load 447(u8v4)
+             449:     17(int) Bitcast 448
+                              Store 444(u32) 449
+             450:     57(int) Load 430(i16)
+             451:   52(ivec2) Bitcast 450
+                              Store 341(i8v) 451
+             452:     27(int) Load 433(i32)
+             453:  434(ivec4) Bitcast 452
+                              Store 436(i8v4) 453
+             454:    141(int) Load 440(u16)
+             455:   49(ivec2) Bitcast 454
+                              Store 441(u8v2) 455
+             456:     17(int) Load 444(u32)
+             457:  445(ivec4) Bitcast 456
+                              Store 447(u8v4) 457
+             460:  190(ivec3) Load 354(u8v)
+             461:     36(int) Load 356(u8)
+             462:     14(int) Bitcast 461
+             463:  190(ivec3) CompositeConstruct 462 462 462
+             464:  427(bvec3) SLessThan 460 463
+                              Store 459(bv) 464
+             465:   52(ivec2) Load 341(i8v)
+             466:     14(int) Load 344(i8)
+             467:   52(ivec2) CompositeConstruct 466 466
+             468:  172(bvec2) SLessThan 465 467
+             469:  427(bvec3) Load 459(bv)
+             470:  427(bvec3) VectorShuffle 469 468 3 4 2
+                              Store 459(bv) 470
+             471:  190(ivec3) Load 354(u8v)
+             472:     36(int) Load 356(u8)
+             473:     14(int) Bitcast 472
+             474:  190(ivec3) CompositeConstruct 473 473 473
+             475:  427(bvec3) SLessThanEqual 471 474
+                              Store 459(bv) 475
+             476:   52(ivec2) Load 341(i8v)
+             477:     14(int) Load 344(i8)
+             478:   52(ivec2) CompositeConstruct 477 477
+             479:  172(bvec2) SLessThanEqual 476 478
+             480:  427(bvec3) Load 459(bv)
+             481:  427(bvec3) VectorShuffle 480 479 3 4 2
+                              Store 459(bv) 481
+             482:  190(ivec3) Load 354(u8v)
+             483:     36(int) Load 356(u8)
+             484:     14(int) Bitcast 483
+             485:  190(ivec3) CompositeConstruct 484 484 484
+             486:  427(bvec3) SGreaterThan 482 485
+                              Store 459(bv) 486
+             487:   52(ivec2) Load 341(i8v)
+             488:     14(int) Load 344(i8)
+             489:   52(ivec2) CompositeConstruct 488 488
+             490:  172(bvec2) SGreaterThan 487 489
+             491:  427(bvec3) Load 459(bv)
+             492:  427(bvec3) VectorShuffle 491 490 3 4 2
+                              Store 459(bv) 492
+             493:  190(ivec3) Load 354(u8v)
+             494:     36(int) Load 356(u8)
+             495:     14(int) Bitcast 494
+             496:  190(ivec3) CompositeConstruct 495 495 495
+             497:  427(bvec3) SGreaterThanEqual 493 496
+                              Store 459(bv) 497
+             498:   52(ivec2) Load 341(i8v)
+             499:     14(int) Load 344(i8)
+             500:   52(ivec2) CompositeConstruct 499 499
+             501:  172(bvec2) SGreaterThanEqual 498 500
+             502:  427(bvec3) Load 459(bv)
+             503:  427(bvec3) VectorShuffle 502 501 3 4 2
+                              Store 459(bv) 503
+             504:  190(ivec3) Load 354(u8v)
+             505:     36(int) Load 356(u8)
+             506:     14(int) Bitcast 505
+             507:  190(ivec3) CompositeConstruct 506 506 506
+             508:  427(bvec3) IEqual 504 507
+                              Store 459(bv) 508
+             509:   52(ivec2) Load 341(i8v)
+             510:     14(int) Load 344(i8)
+             511:   52(ivec2) CompositeConstruct 510 510
+             512:  172(bvec2) IEqual 509 511
+             513:  427(bvec3) Load 459(bv)
+             514:  427(bvec3) VectorShuffle 513 512 3 4 2
+                              Store 459(bv) 514
+             515:  190(ivec3) Load 354(u8v)
+             516:     36(int) Load 356(u8)
+             517:     14(int) Bitcast 516
+             518:  190(ivec3) CompositeConstruct 517 517 517
+             519:  427(bvec3) INotEqual 515 518
+                              Store 459(bv) 519
+             520:   52(ivec2) Load 341(i8v)
+             521:     14(int) Load 344(i8)
+             522:   52(ivec2) CompositeConstruct 521 521
+             523:  172(bvec2) INotEqual 520 522
+             524:  427(bvec3) Load 459(bv)
+             525:  427(bvec3) VectorShuffle 524 523 3 4 2
+                              Store 459(bv) 525
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.multiView.frag.out b/Test/baseResults/spv.multiView.frag.out
old mode 100755
new mode 100644
index 9dc2067..ef4ba20
--- a/Test/baseResults/spv.multiView.frag.out
+++ b/Test/baseResults/spv.multiView.frag.out
@@ -1,11 +1,10 @@
 spv.multiView.frag
-// Module Version 10000
+// Module Version 10300
 // Generated by (magic number): 80005
 // Id's are bound by 17
 
                               Capability Shader
                               Capability MultiView
-                              Extension  "SPV_KHR_multiview"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 9 12
diff --git a/Test/baseResults/spv.specConstant.vert.out b/Test/baseResults/spv.specConstant.vert.out
index 74ac82a..26d14ca 100644
--- a/Test/baseResults/spv.specConstant.vert.out
+++ b/Test/baseResults/spv.specConstant.vert.out
@@ -11,7 +11,7 @@
                               Source GLSL 400
                               Name 4  "main"
                               Name 9  "arraySize"
-                              Name 14  "foo(vf4[s1506];"
+                              Name 14  "foo(vf4[s2148];"
                               Name 13  "p"
                               Name 17  "builtin_spec_constant("
                               Name 20  "color"
@@ -102,10 +102,10 @@
                               Store 20(color) 46
               48:          10 Load 22(ucol)
                               Store 47(param) 48
-              49:           2 FunctionCall 14(foo(vf4[s1506];) 47(param)
+              49:           2 FunctionCall 14(foo(vf4[s2148];) 47(param)
                               Return
                               FunctionEnd
-14(foo(vf4[s1506];):           2 Function None 12
+14(foo(vf4[s2148];):           2 Function None 12
            13(p):     11(ptr) FunctionParameter
               15:             Label
               54:     24(ptr) AccessChain 53(dupUcol) 23
diff --git a/Test/baseResults/spv.subgroup.frag.out b/Test/baseResults/spv.subgroup.frag.out
new file mode 100644
index 0000000..4d9f502
--- /dev/null
+++ b/Test/baseResults/spv.subgroup.frag.out
@@ -0,0 +1,44 @@
+spv.subgroup.frag
+// Module Version 10300
+// Generated by (magic number): 80005
+// Id's are bound by 17
+
+                              Capability Shader
+                              Capability GroupNonUniform
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 9 11 13
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              Name 4  "main"
+                              Name 9  "data"
+                              Name 11  "gl_SubgroupSize"
+                              Name 13  "gl_SubgroupInvocationID"
+                              Decorate 9(data) Location 0
+                              Decorate 11(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 11(gl_SubgroupSize) Flat
+                              Decorate 11(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 12 RelaxedPrecision
+                              Decorate 13(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 13(gl_SubgroupInvocationID) Flat
+                              Decorate 13(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 14 RelaxedPrecision
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 4
+               8:             TypePointer Output 7(ivec4)
+         9(data):      8(ptr) Variable Output
+              10:             TypePointer Input 6(int)
+11(gl_SubgroupSize):     10(ptr) Variable Input
+13(gl_SubgroupInvocationID):     10(ptr) Variable Input
+              15:      6(int) Constant 0
+         4(main):           2 Function None 3
+               5:             Label
+              12:      6(int) Load 11(gl_SubgroupSize)
+              14:      6(int) Load 13(gl_SubgroupInvocationID)
+              16:    7(ivec4) CompositeConstruct 12 14 15 15
+                              Store 9(data) 16
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroup.geom.out b/Test/baseResults/spv.subgroup.geom.out
new file mode 100644
index 0000000..ec3a3b0
--- /dev/null
+++ b/Test/baseResults/spv.subgroup.geom.out
@@ -0,0 +1,62 @@
+spv.subgroup.geom
+// Module Version 10300
+// Generated by (magic number): 80005
+// Id's are bound by 26
+
+                              Capability Geometry
+                              Capability GroupNonUniform
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Geometry 4  "main" 15 18 20
+                              ExecutionMode 4 InputPoints
+                              ExecutionMode 4 Invocations 1
+                              ExecutionMode 4 OutputPoints
+                              ExecutionMode 4 OutputVertices 1
+                              Source GLSL 450
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              Name 4  "main"
+                              Name 9  "Output"
+                              MemberName 9(Output) 0  "result"
+                              Name 11  ""
+                              Name 15  "gl_PrimitiveIDIn"
+                              Name 18  "gl_SubgroupSize"
+                              Name 20  "gl_SubgroupInvocationID"
+                              Decorate 8 ArrayStride 16
+                              MemberDecorate 9(Output) 0 Offset 0
+                              Decorate 9(Output) BufferBlock
+                              Decorate 11 DescriptorSet 0
+                              Decorate 11 Binding 0
+                              Decorate 15(gl_PrimitiveIDIn) BuiltIn PrimitiveId
+                              Decorate 18(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 18(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 19 RelaxedPrecision
+                              Decorate 20(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 20(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 21 RelaxedPrecision
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 4
+               8:             TypeRuntimeArray 7(ivec4)
+       9(Output):             TypeStruct 8
+              10:             TypePointer Uniform 9(Output)
+              11:     10(ptr) Variable Uniform
+              12:             TypeInt 32 1
+              13:     12(int) Constant 0
+              14:             TypePointer Input 12(int)
+15(gl_PrimitiveIDIn):     14(ptr) Variable Input
+              17:             TypePointer Input 6(int)
+18(gl_SubgroupSize):     17(ptr) Variable Input
+20(gl_SubgroupInvocationID):     17(ptr) Variable Input
+              22:      6(int) Constant 0
+              24:             TypePointer Uniform 7(ivec4)
+         4(main):           2 Function None 3
+               5:             Label
+              16:     12(int) Load 15(gl_PrimitiveIDIn)
+              19:      6(int) Load 18(gl_SubgroupSize)
+              21:      6(int) Load 20(gl_SubgroupInvocationID)
+              23:    7(ivec4) CompositeConstruct 19 21 22 22
+              25:     24(ptr) AccessChain 11 13 16
+                              Store 25 23
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroup.tesc.out b/Test/baseResults/spv.subgroup.tesc.out
new file mode 100644
index 0000000..46ab8fc
--- /dev/null
+++ b/Test/baseResults/spv.subgroup.tesc.out
@@ -0,0 +1,59 @@
+spv.subgroup.tesc
+// Module Version 10300
+// Generated by (magic number): 80005
+// Id's are bound by 26
+
+                              Capability Tessellation
+                              Capability GroupNonUniform
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint TessellationControl 4  "main" 15 18 20
+                              ExecutionMode 4 OutputVertices 1
+                              Source GLSL 450
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              Name 4  "main"
+                              Name 9  "Output"
+                              MemberName 9(Output) 0  "result"
+                              Name 11  ""
+                              Name 15  "gl_PrimitiveID"
+                              Name 18  "gl_SubgroupSize"
+                              Name 20  "gl_SubgroupInvocationID"
+                              Decorate 8 ArrayStride 16
+                              MemberDecorate 9(Output) 0 Offset 0
+                              Decorate 9(Output) BufferBlock
+                              Decorate 11 DescriptorSet 0
+                              Decorate 11 Binding 0
+                              Decorate 15(gl_PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 18(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 18(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 19 RelaxedPrecision
+                              Decorate 20(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 20(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 21 RelaxedPrecision
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 4
+               8:             TypeRuntimeArray 7(ivec4)
+       9(Output):             TypeStruct 8
+              10:             TypePointer Uniform 9(Output)
+              11:     10(ptr) Variable Uniform
+              12:             TypeInt 32 1
+              13:     12(int) Constant 0
+              14:             TypePointer Input 12(int)
+15(gl_PrimitiveID):     14(ptr) Variable Input
+              17:             TypePointer Input 6(int)
+18(gl_SubgroupSize):     17(ptr) Variable Input
+20(gl_SubgroupInvocationID):     17(ptr) Variable Input
+              22:      6(int) Constant 0
+              24:             TypePointer Uniform 7(ivec4)
+         4(main):           2 Function None 3
+               5:             Label
+              16:     12(int) Load 15(gl_PrimitiveID)
+              19:      6(int) Load 18(gl_SubgroupSize)
+              21:      6(int) Load 20(gl_SubgroupInvocationID)
+              23:    7(ivec4) CompositeConstruct 19 21 22 22
+              25:     24(ptr) AccessChain 11 13 16
+                              Store 25 23
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroup.tese.out b/Test/baseResults/spv.subgroup.tese.out
new file mode 100644
index 0000000..c29ecfd
--- /dev/null
+++ b/Test/baseResults/spv.subgroup.tese.out
@@ -0,0 +1,61 @@
+spv.subgroup.tese
+// Module Version 10300
+// Generated by (magic number): 80005
+// Id's are bound by 26
+
+                              Capability Tessellation
+                              Capability GroupNonUniform
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint TessellationEvaluation 4  "main" 15 18 20
+                              ExecutionMode 4 Isolines
+                              ExecutionMode 4 SpacingEqual
+                              ExecutionMode 4 VertexOrderCcw
+                              Source GLSL 450
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              Name 4  "main"
+                              Name 9  "Output"
+                              MemberName 9(Output) 0  "result"
+                              Name 11  ""
+                              Name 15  "gl_PrimitiveID"
+                              Name 18  "gl_SubgroupSize"
+                              Name 20  "gl_SubgroupInvocationID"
+                              Decorate 8 ArrayStride 16
+                              MemberDecorate 9(Output) 0 Offset 0
+                              Decorate 9(Output) BufferBlock
+                              Decorate 11 DescriptorSet 0
+                              Decorate 11 Binding 0
+                              Decorate 15(gl_PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 18(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 18(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 19 RelaxedPrecision
+                              Decorate 20(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 20(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 21 RelaxedPrecision
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 4
+               8:             TypeRuntimeArray 7(ivec4)
+       9(Output):             TypeStruct 8
+              10:             TypePointer Uniform 9(Output)
+              11:     10(ptr) Variable Uniform
+              12:             TypeInt 32 1
+              13:     12(int) Constant 0
+              14:             TypePointer Input 12(int)
+15(gl_PrimitiveID):     14(ptr) Variable Input
+              17:             TypePointer Input 6(int)
+18(gl_SubgroupSize):     17(ptr) Variable Input
+20(gl_SubgroupInvocationID):     17(ptr) Variable Input
+              22:      6(int) Constant 0
+              24:             TypePointer Uniform 7(ivec4)
+         4(main):           2 Function None 3
+               5:             Label
+              16:     12(int) Load 15(gl_PrimitiveID)
+              19:      6(int) Load 18(gl_SubgroupSize)
+              21:      6(int) Load 20(gl_SubgroupInvocationID)
+              23:    7(ivec4) CompositeConstruct 19 21 22 22
+              25:     24(ptr) AccessChain 11 13 16
+                              Store 25 23
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroup.vert.out b/Test/baseResults/spv.subgroup.vert.out
new file mode 100644
index 0000000..b7514cc
--- /dev/null
+++ b/Test/baseResults/spv.subgroup.vert.out
@@ -0,0 +1,58 @@
+spv.subgroup.vert
+// Module Version 10300
+// Generated by (magic number): 80005
+// Id's are bound by 26
+
+                              Capability Shader
+                              Capability GroupNonUniform
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 15 18 20
+                              Source GLSL 450
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              Name 4  "main"
+                              Name 9  "Output"
+                              MemberName 9(Output) 0  "result"
+                              Name 11  ""
+                              Name 15  "gl_VertexIndex"
+                              Name 18  "gl_SubgroupSize"
+                              Name 20  "gl_SubgroupInvocationID"
+                              Decorate 8 ArrayStride 16
+                              MemberDecorate 9(Output) 0 Offset 0
+                              Decorate 9(Output) BufferBlock
+                              Decorate 11 DescriptorSet 0
+                              Decorate 11 Binding 0
+                              Decorate 15(gl_VertexIndex) BuiltIn VertexIndex
+                              Decorate 18(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 18(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 19 RelaxedPrecision
+                              Decorate 20(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 20(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 21 RelaxedPrecision
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 4
+               8:             TypeRuntimeArray 7(ivec4)
+       9(Output):             TypeStruct 8
+              10:             TypePointer Uniform 9(Output)
+              11:     10(ptr) Variable Uniform
+              12:             TypeInt 32 1
+              13:     12(int) Constant 0
+              14:             TypePointer Input 12(int)
+15(gl_VertexIndex):     14(ptr) Variable Input
+              17:             TypePointer Input 6(int)
+18(gl_SubgroupSize):     17(ptr) Variable Input
+20(gl_SubgroupInvocationID):     17(ptr) Variable Input
+              22:      6(int) Constant 0
+              24:             TypePointer Uniform 7(ivec4)
+         4(main):           2 Function None 3
+               5:             Label
+              16:     12(int) Load 15(gl_VertexIndex)
+              19:      6(int) Load 18(gl_SubgroupSize)
+              21:      6(int) Load 20(gl_SubgroupInvocationID)
+              23:    7(ivec4) CompositeConstruct 19 21 22 22
+              25:     24(ptr) AccessChain 11 13 16
+                              Store 25 23
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroupArithmetic.comp.out b/Test/baseResults/spv.subgroupArithmetic.comp.out
new file mode 100644
index 0000000..052c29f
--- /dev/null
+++ b/Test/baseResults/spv.subgroupArithmetic.comp.out
@@ -0,0 +1,2428 @@
+spv.subgroupArithmetic.comp
+// Module Version 10300
+// Generated by (magic number): 80005
+// Id's are bound by 2085
+
+                              Capability Shader
+                              Capability Float64
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformArithmetic
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 10 12
+                              ExecutionMode 4 LocalSize 8 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_KHR_shader_subgroup_arithmetic"
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              Name 4  "main"
+                              Name 8  "invocation"
+                              Name 10  "gl_SubgroupInvocationID"
+                              Name 12  "gl_SubgroupSize"
+                              Name 24  "Buffers"
+                              MemberName 24(Buffers) 0  "f4"
+                              MemberName 24(Buffers) 1  "i4"
+                              MemberName 24(Buffers) 2  "u4"
+                              MemberName 24(Buffers) 3  "d4"
+                              Name 27  "data"
+                              Decorate 10(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 10(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 11 RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 13 RelaxedPrecision
+                              Decorate 14 RelaxedPrecision
+                              Decorate 16 RelaxedPrecision
+                              MemberDecorate 24(Buffers) 0 Offset 0
+                              MemberDecorate 24(Buffers) 1 Offset 16
+                              MemberDecorate 24(Buffers) 2 Offset 32
+                              MemberDecorate 24(Buffers) 3 Offset 64
+                              Decorate 24(Buffers) BufferBlock
+                              Decorate 27(data) DescriptorSet 0
+                              Decorate 27(data) Binding 0
+                              Decorate 2084 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypePointer Input 6(int)
+10(gl_SubgroupInvocationID):      9(ptr) Variable Input
+12(gl_SubgroupSize):      9(ptr) Variable Input
+              15:      6(int) Constant 4
+              17:             TypeFloat 32
+              18:             TypeVector 17(float) 4
+              19:             TypeInt 32 1
+              20:             TypeVector 19(int) 4
+              21:             TypeVector 6(int) 4
+              22:             TypeFloat 64
+              23:             TypeVector 22(float) 4
+     24(Buffers):             TypeStruct 18(fvec4) 20(ivec4) 21(ivec4) 23(fvec4)
+              25:             TypeArray 24(Buffers) 15
+              26:             TypePointer Uniform 25
+        27(data):     26(ptr) Variable Uniform
+              29:     19(int) Constant 0
+              30:      6(int) Constant 0
+              31:             TypePointer Uniform 17(float)
+              34:      6(int) Constant 3
+              38:     19(int) Constant 1
+              39:             TypeVector 17(float) 2
+              40:             TypePointer Uniform 18(fvec4)
+              49:     19(int) Constant 2
+              50:             TypeVector 17(float) 3
+              59:     19(int) Constant 3
+              65:             TypePointer Uniform 19(int)
+              71:             TypeVector 19(int) 2
+              72:             TypePointer Uniform 20(ivec4)
+              81:             TypeVector 19(int) 3
+              95:             TypePointer Uniform 6(int)
+             101:             TypeVector 6(int) 2
+             102:             TypePointer Uniform 21(ivec4)
+             111:             TypeVector 6(int) 3
+             125:             TypePointer Uniform 22(float)
+             131:             TypeVector 22(float) 2
+             132:             TypePointer Uniform 23(fvec4)
+             141:             TypeVector 22(float) 3
+             521:             TypeBool
+             530:   71(ivec2) ConstantComposite 29 29
+             531:             TypeVector 521(bool) 2
+             534:   71(ivec2) ConstantComposite 38 38
+             543:   81(ivec3) ConstantComposite 29 29 29
+             544:             TypeVector 521(bool) 3
+             547:   81(ivec3) ConstantComposite 38 38 38
+             555:   20(ivec4) ConstantComposite 29 29 29 29
+             556:             TypeVector 521(bool) 4
+             559:   20(ivec4) ConstantComposite 38 38 38 38
+            2082:      6(int) Constant 8
+            2083:      6(int) Constant 1
+            2084:  111(ivec3) ConstantComposite 2082 2083 2083
+         4(main):           2 Function None 3
+               5:             Label
+   8(invocation):      7(ptr) Variable Function
+              11:      6(int) Load 10(gl_SubgroupInvocationID)
+              13:      6(int) Load 12(gl_SubgroupSize)
+              14:      6(int) IAdd 11 13
+              16:      6(int) UMod 14 15
+                              Store 8(invocation) 16
+              28:      6(int) Load 8(invocation)
+              32:     31(ptr) AccessChain 27(data) 29 29 30
+              33:   17(float) Load 32
+              35:   17(float) GroupNonUniformFAdd 34 Reduce 33
+              36:     31(ptr) AccessChain 27(data) 28 29 30
+                              Store 36 35
+              37:      6(int) Load 8(invocation)
+              41:     40(ptr) AccessChain 27(data) 38 29
+              42:   18(fvec4) Load 41
+              43:   39(fvec2) VectorShuffle 42 42 0 1
+              44:   39(fvec2) GroupNonUniformFAdd 34 Reduce 43
+              45:     40(ptr) AccessChain 27(data) 37 29
+              46:   18(fvec4) Load 45
+              47:   18(fvec4) VectorShuffle 46 44 4 5 2 3
+                              Store 45 47
+              48:      6(int) Load 8(invocation)
+              51:     40(ptr) AccessChain 27(data) 49 29
+              52:   18(fvec4) Load 51
+              53:   50(fvec3) VectorShuffle 52 52 0 1 2
+              54:   50(fvec3) GroupNonUniformFAdd 34 Reduce 53
+              55:     40(ptr) AccessChain 27(data) 48 29
+              56:   18(fvec4) Load 55
+              57:   18(fvec4) VectorShuffle 56 54 4 5 6 3
+                              Store 55 57
+              58:      6(int) Load 8(invocation)
+              60:     40(ptr) AccessChain 27(data) 59 29
+              61:   18(fvec4) Load 60
+              62:   18(fvec4) GroupNonUniformFAdd 34 Reduce 61
+              63:     40(ptr) AccessChain 27(data) 58 29
+                              Store 63 62
+              64:      6(int) Load 8(invocation)
+              66:     65(ptr) AccessChain 27(data) 29 38 30
+              67:     19(int) Load 66
+              68:     19(int) GroupNonUniformIAdd 34 Reduce 67
+              69:     65(ptr) AccessChain 27(data) 64 38 30
+                              Store 69 68
+              70:      6(int) Load 8(invocation)
+              73:     72(ptr) AccessChain 27(data) 38 38
+              74:   20(ivec4) Load 73
+              75:   71(ivec2) VectorShuffle 74 74 0 1
+              76:   71(ivec2) GroupNonUniformIAdd 34 Reduce 75
+              77:     72(ptr) AccessChain 27(data) 70 38
+              78:   20(ivec4) Load 77
+              79:   20(ivec4) VectorShuffle 78 76 4 5 2 3
+                              Store 77 79
+              80:      6(int) Load 8(invocation)
+              82:     72(ptr) AccessChain 27(data) 49 38
+              83:   20(ivec4) Load 82
+              84:   81(ivec3) VectorShuffle 83 83 0 1 2
+              85:   81(ivec3) GroupNonUniformIAdd 34 Reduce 84
+              86:     72(ptr) AccessChain 27(data) 80 38
+              87:   20(ivec4) Load 86
+              88:   20(ivec4) VectorShuffle 87 85 4 5 6 3
+                              Store 86 88
+              89:      6(int) Load 8(invocation)
+              90:     72(ptr) AccessChain 27(data) 59 38
+              91:   20(ivec4) Load 90
+              92:   20(ivec4) GroupNonUniformIAdd 34 Reduce 91
+              93:     72(ptr) AccessChain 27(data) 89 38
+                              Store 93 92
+              94:      6(int) Load 8(invocation)
+              96:     95(ptr) AccessChain 27(data) 29 49 30
+              97:      6(int) Load 96
+              98:      6(int) GroupNonUniformIAdd 34 Reduce 97
+              99:     95(ptr) AccessChain 27(data) 94 49 30
+                              Store 99 98
+             100:      6(int) Load 8(invocation)
+             103:    102(ptr) AccessChain 27(data) 38 49
+             104:   21(ivec4) Load 103
+             105:  101(ivec2) VectorShuffle 104 104 0 1
+             106:  101(ivec2) GroupNonUniformIAdd 34 Reduce 105
+             107:    102(ptr) AccessChain 27(data) 100 49
+             108:   21(ivec4) Load 107
+             109:   21(ivec4) VectorShuffle 108 106 4 5 2 3
+                              Store 107 109
+             110:      6(int) Load 8(invocation)
+             112:    102(ptr) AccessChain 27(data) 49 49
+             113:   21(ivec4) Load 112
+             114:  111(ivec3) VectorShuffle 113 113 0 1 2
+             115:  111(ivec3) GroupNonUniformIAdd 34 Reduce 114
+             116:    102(ptr) AccessChain 27(data) 110 49
+             117:   21(ivec4) Load 116
+             118:   21(ivec4) VectorShuffle 117 115 4 5 6 3
+                              Store 116 118
+             119:      6(int) Load 8(invocation)
+             120:    102(ptr) AccessChain 27(data) 59 49
+             121:   21(ivec4) Load 120
+             122:   21(ivec4) GroupNonUniformIAdd 34 Reduce 121
+             123:    102(ptr) AccessChain 27(data) 119 49
+                              Store 123 122
+             124:      6(int) Load 8(invocation)
+             126:    125(ptr) AccessChain 27(data) 29 59 30
+             127:   22(float) Load 126
+             128:   22(float) GroupNonUniformFAdd 34 Reduce 127
+             129:    125(ptr) AccessChain 27(data) 124 59 30
+                              Store 129 128
+             130:      6(int) Load 8(invocation)
+             133:    132(ptr) AccessChain 27(data) 38 59
+             134:   23(fvec4) Load 133
+             135:  131(fvec2) VectorShuffle 134 134 0 1
+             136:  131(fvec2) GroupNonUniformFAdd 34 Reduce 135
+             137:    132(ptr) AccessChain 27(data) 130 59
+             138:   23(fvec4) Load 137
+             139:   23(fvec4) VectorShuffle 138 136 4 5 2 3
+                              Store 137 139
+             140:      6(int) Load 8(invocation)
+             142:    132(ptr) AccessChain 27(data) 49 59
+             143:   23(fvec4) Load 142
+             144:  141(fvec3) VectorShuffle 143 143 0 1 2
+             145:  141(fvec3) GroupNonUniformFAdd 34 Reduce 144
+             146:    132(ptr) AccessChain 27(data) 140 59
+             147:   23(fvec4) Load 146
+             148:   23(fvec4) VectorShuffle 147 145 4 5 6 3
+                              Store 146 148
+             149:      6(int) Load 8(invocation)
+             150:    132(ptr) AccessChain 27(data) 59 59
+             151:   23(fvec4) Load 150
+             152:   23(fvec4) GroupNonUniformFAdd 34 Reduce 151
+             153:    132(ptr) AccessChain 27(data) 149 59
+                              Store 153 152
+             154:      6(int) Load 8(invocation)
+             155:     31(ptr) AccessChain 27(data) 29 29 30
+             156:   17(float) Load 155
+             157:   17(float) GroupNonUniformFMul 34 Reduce 156
+             158:     31(ptr) AccessChain 27(data) 154 29 30
+                              Store 158 157
+             159:      6(int) Load 8(invocation)
+             160:     40(ptr) AccessChain 27(data) 38 29
+             161:   18(fvec4) Load 160
+             162:   39(fvec2) VectorShuffle 161 161 0 1
+             163:   39(fvec2) GroupNonUniformFMul 34 Reduce 162
+             164:     40(ptr) AccessChain 27(data) 159 29
+             165:   18(fvec4) Load 164
+             166:   18(fvec4) VectorShuffle 165 163 4 5 2 3
+                              Store 164 166
+             167:      6(int) Load 8(invocation)
+             168:     40(ptr) AccessChain 27(data) 49 29
+             169:   18(fvec4) Load 168
+             170:   50(fvec3) VectorShuffle 169 169 0 1 2
+             171:   50(fvec3) GroupNonUniformFMul 34 Reduce 170
+             172:     40(ptr) AccessChain 27(data) 167 29
+             173:   18(fvec4) Load 172
+             174:   18(fvec4) VectorShuffle 173 171 4 5 6 3
+                              Store 172 174
+             175:      6(int) Load 8(invocation)
+             176:     40(ptr) AccessChain 27(data) 59 29
+             177:   18(fvec4) Load 176
+             178:   18(fvec4) GroupNonUniformFMul 34 Reduce 177
+             179:     40(ptr) AccessChain 27(data) 175 29
+                              Store 179 178
+             180:      6(int) Load 8(invocation)
+             181:     65(ptr) AccessChain 27(data) 29 38 30
+             182:     19(int) Load 181
+             183:     19(int) GroupNonUniformIMul 34 Reduce 182
+             184:     65(ptr) AccessChain 27(data) 180 38 30
+                              Store 184 183
+             185:      6(int) Load 8(invocation)
+             186:     72(ptr) AccessChain 27(data) 38 38
+             187:   20(ivec4) Load 186
+             188:   71(ivec2) VectorShuffle 187 187 0 1
+             189:   71(ivec2) GroupNonUniformIMul 34 Reduce 188
+             190:     72(ptr) AccessChain 27(data) 185 38
+             191:   20(ivec4) Load 190
+             192:   20(ivec4) VectorShuffle 191 189 4 5 2 3
+                              Store 190 192
+             193:      6(int) Load 8(invocation)
+             194:     72(ptr) AccessChain 27(data) 49 38
+             195:   20(ivec4) Load 194
+             196:   81(ivec3) VectorShuffle 195 195 0 1 2
+             197:   81(ivec3) GroupNonUniformIMul 34 Reduce 196
+             198:     72(ptr) AccessChain 27(data) 193 38
+             199:   20(ivec4) Load 198
+             200:   20(ivec4) VectorShuffle 199 197 4 5 6 3
+                              Store 198 200
+             201:      6(int) Load 8(invocation)
+             202:     72(ptr) AccessChain 27(data) 59 38
+             203:   20(ivec4) Load 202
+             204:   20(ivec4) GroupNonUniformIMul 34 Reduce 203
+             205:     72(ptr) AccessChain 27(data) 201 38
+                              Store 205 204
+             206:      6(int) Load 8(invocation)
+             207:     95(ptr) AccessChain 27(data) 29 49 30
+             208:      6(int) Load 207
+             209:      6(int) GroupNonUniformIMul 34 Reduce 208
+             210:     95(ptr) AccessChain 27(data) 206 49 30
+                              Store 210 209
+             211:      6(int) Load 8(invocation)
+             212:    102(ptr) AccessChain 27(data) 38 49
+             213:   21(ivec4) Load 212
+             214:  101(ivec2) VectorShuffle 213 213 0 1
+             215:  101(ivec2) GroupNonUniformIMul 34 Reduce 214
+             216:    102(ptr) AccessChain 27(data) 211 49
+             217:   21(ivec4) Load 216
+             218:   21(ivec4) VectorShuffle 217 215 4 5 2 3
+                              Store 216 218
+             219:      6(int) Load 8(invocation)
+             220:    102(ptr) AccessChain 27(data) 49 49
+             221:   21(ivec4) Load 220
+             222:  111(ivec3) VectorShuffle 221 221 0 1 2
+             223:  111(ivec3) GroupNonUniformIMul 34 Reduce 222
+             224:    102(ptr) AccessChain 27(data) 219 49
+             225:   21(ivec4) Load 224
+             226:   21(ivec4) VectorShuffle 225 223 4 5 6 3
+                              Store 224 226
+             227:      6(int) Load 8(invocation)
+             228:    102(ptr) AccessChain 27(data) 59 49
+             229:   21(ivec4) Load 228
+             230:   21(ivec4) GroupNonUniformIMul 34 Reduce 229
+             231:    102(ptr) AccessChain 27(data) 227 49
+                              Store 231 230
+             232:      6(int) Load 8(invocation)
+             233:    125(ptr) AccessChain 27(data) 29 59 30
+             234:   22(float) Load 233
+             235:   22(float) GroupNonUniformFMul 34 Reduce 234
+             236:    125(ptr) AccessChain 27(data) 232 59 30
+                              Store 236 235
+             237:      6(int) Load 8(invocation)
+             238:    132(ptr) AccessChain 27(data) 38 59
+             239:   23(fvec4) Load 238
+             240:  131(fvec2) VectorShuffle 239 239 0 1
+             241:  131(fvec2) GroupNonUniformFMul 34 Reduce 240
+             242:    132(ptr) AccessChain 27(data) 237 59
+             243:   23(fvec4) Load 242
+             244:   23(fvec4) VectorShuffle 243 241 4 5 2 3
+                              Store 242 244
+             245:      6(int) Load 8(invocation)
+             246:    132(ptr) AccessChain 27(data) 49 59
+             247:   23(fvec4) Load 246
+             248:  141(fvec3) VectorShuffle 247 247 0 1 2
+             249:  141(fvec3) GroupNonUniformFMul 34 Reduce 248
+             250:    132(ptr) AccessChain 27(data) 245 59
+             251:   23(fvec4) Load 250
+             252:   23(fvec4) VectorShuffle 251 249 4 5 6 3
+                              Store 250 252
+             253:      6(int) Load 8(invocation)
+             254:    132(ptr) AccessChain 27(data) 59 59
+             255:   23(fvec4) Load 254
+             256:   23(fvec4) GroupNonUniformFMul 34 Reduce 255
+             257:    132(ptr) AccessChain 27(data) 253 59
+                              Store 257 256
+             258:      6(int) Load 8(invocation)
+             259:     31(ptr) AccessChain 27(data) 29 29 30
+             260:   17(float) Load 259
+             261:   17(float) GroupNonUniformFMin 34 Reduce 260
+             262:     31(ptr) AccessChain 27(data) 258 29 30
+                              Store 262 261
+             263:      6(int) Load 8(invocation)
+             264:     40(ptr) AccessChain 27(data) 38 29
+             265:   18(fvec4) Load 264
+             266:   39(fvec2) VectorShuffle 265 265 0 1
+             267:   39(fvec2) GroupNonUniformFMin 34 Reduce 266
+             268:     40(ptr) AccessChain 27(data) 263 29
+             269:   18(fvec4) Load 268
+             270:   18(fvec4) VectorShuffle 269 267 4 5 2 3
+                              Store 268 270
+             271:      6(int) Load 8(invocation)
+             272:     40(ptr) AccessChain 27(data) 49 29
+             273:   18(fvec4) Load 272
+             274:   50(fvec3) VectorShuffle 273 273 0 1 2
+             275:   50(fvec3) GroupNonUniformFMin 34 Reduce 274
+             276:     40(ptr) AccessChain 27(data) 271 29
+             277:   18(fvec4) Load 276
+             278:   18(fvec4) VectorShuffle 277 275 4 5 6 3
+                              Store 276 278
+             279:      6(int) Load 8(invocation)
+             280:     40(ptr) AccessChain 27(data) 59 29
+             281:   18(fvec4) Load 280
+             282:   18(fvec4) GroupNonUniformFMin 34 Reduce 281
+             283:     40(ptr) AccessChain 27(data) 279 29
+                              Store 283 282
+             284:      6(int) Load 8(invocation)
+             285:     65(ptr) AccessChain 27(data) 29 38 30
+             286:     19(int) Load 285
+             287:     19(int) GroupNonUniformSMin 34 Reduce 286
+             288:     65(ptr) AccessChain 27(data) 284 38 30
+                              Store 288 287
+             289:      6(int) Load 8(invocation)
+             290:     72(ptr) AccessChain 27(data) 38 38
+             291:   20(ivec4) Load 290
+             292:   71(ivec2) VectorShuffle 291 291 0 1
+             293:   71(ivec2) GroupNonUniformSMin 34 Reduce 292
+             294:     72(ptr) AccessChain 27(data) 289 38
+             295:   20(ivec4) Load 294
+             296:   20(ivec4) VectorShuffle 295 293 4 5 2 3
+                              Store 294 296
+             297:      6(int) Load 8(invocation)
+             298:     72(ptr) AccessChain 27(data) 49 38
+             299:   20(ivec4) Load 298
+             300:   81(ivec3) VectorShuffle 299 299 0 1 2
+             301:   81(ivec3) GroupNonUniformSMin 34 Reduce 300
+             302:     72(ptr) AccessChain 27(data) 297 38
+             303:   20(ivec4) Load 302
+             304:   20(ivec4) VectorShuffle 303 301 4 5 6 3
+                              Store 302 304
+             305:      6(int) Load 8(invocation)
+             306:     72(ptr) AccessChain 27(data) 59 38
+             307:   20(ivec4) Load 306
+             308:   20(ivec4) GroupNonUniformSMin 34 Reduce 307
+             309:     72(ptr) AccessChain 27(data) 305 38
+                              Store 309 308
+             310:      6(int) Load 8(invocation)
+             311:     95(ptr) AccessChain 27(data) 29 49 30
+             312:      6(int) Load 311
+             313:      6(int) GroupNonUniformUMin 34 Reduce 312
+             314:     95(ptr) AccessChain 27(data) 310 49 30
+                              Store 314 313
+             315:      6(int) Load 8(invocation)
+             316:    102(ptr) AccessChain 27(data) 38 49
+             317:   21(ivec4) Load 316
+             318:  101(ivec2) VectorShuffle 317 317 0 1
+             319:  101(ivec2) GroupNonUniformUMin 34 Reduce 318
+             320:    102(ptr) AccessChain 27(data) 315 49
+             321:   21(ivec4) Load 320
+             322:   21(ivec4) VectorShuffle 321 319 4 5 2 3
+                              Store 320 322
+             323:      6(int) Load 8(invocation)
+             324:    102(ptr) AccessChain 27(data) 49 49
+             325:   21(ivec4) Load 324
+             326:  111(ivec3) VectorShuffle 325 325 0 1 2
+             327:  111(ivec3) GroupNonUniformUMin 34 Reduce 326
+             328:    102(ptr) AccessChain 27(data) 323 49
+             329:   21(ivec4) Load 328
+             330:   21(ivec4) VectorShuffle 329 327 4 5 6 3
+                              Store 328 330
+             331:      6(int) Load 8(invocation)
+             332:    102(ptr) AccessChain 27(data) 59 49
+             333:   21(ivec4) Load 332
+             334:   21(ivec4) GroupNonUniformUMin 34 Reduce 333
+             335:    102(ptr) AccessChain 27(data) 331 49
+                              Store 335 334
+             336:      6(int) Load 8(invocation)
+             337:    125(ptr) AccessChain 27(data) 29 59 30
+             338:   22(float) Load 337
+             339:   22(float) GroupNonUniformFMin 34 Reduce 338
+             340:    125(ptr) AccessChain 27(data) 336 59 30
+                              Store 340 339
+             341:      6(int) Load 8(invocation)
+             342:    132(ptr) AccessChain 27(data) 38 59
+             343:   23(fvec4) Load 342
+             344:  131(fvec2) VectorShuffle 343 343 0 1
+             345:  131(fvec2) GroupNonUniformFMin 34 Reduce 344
+             346:    132(ptr) AccessChain 27(data) 341 59
+             347:   23(fvec4) Load 346
+             348:   23(fvec4) VectorShuffle 347 345 4 5 2 3
+                              Store 346 348
+             349:      6(int) Load 8(invocation)
+             350:    132(ptr) AccessChain 27(data) 49 59
+             351:   23(fvec4) Load 350
+             352:  141(fvec3) VectorShuffle 351 351 0 1 2
+             353:  141(fvec3) GroupNonUniformFMin 34 Reduce 352
+             354:    132(ptr) AccessChain 27(data) 349 59
+             355:   23(fvec4) Load 354
+             356:   23(fvec4) VectorShuffle 355 353 4 5 6 3
+                              Store 354 356
+             357:      6(int) Load 8(invocation)
+             358:    132(ptr) AccessChain 27(data) 59 59
+             359:   23(fvec4) Load 358
+             360:   23(fvec4) GroupNonUniformFMin 34 Reduce 359
+             361:    132(ptr) AccessChain 27(data) 357 59
+                              Store 361 360
+             362:      6(int) Load 8(invocation)
+             363:     31(ptr) AccessChain 27(data) 29 29 30
+             364:   17(float) Load 363
+             365:   17(float) GroupNonUniformFMax 34 Reduce 364
+             366:     31(ptr) AccessChain 27(data) 362 29 30
+                              Store 366 365
+             367:      6(int) Load 8(invocation)
+             368:     40(ptr) AccessChain 27(data) 38 29
+             369:   18(fvec4) Load 368
+             370:   39(fvec2) VectorShuffle 369 369 0 1
+             371:   39(fvec2) GroupNonUniformFMax 34 Reduce 370
+             372:     40(ptr) AccessChain 27(data) 367 29
+             373:   18(fvec4) Load 372
+             374:   18(fvec4) VectorShuffle 373 371 4 5 2 3
+                              Store 372 374
+             375:      6(int) Load 8(invocation)
+             376:     40(ptr) AccessChain 27(data) 49 29
+             377:   18(fvec4) Load 376
+             378:   50(fvec3) VectorShuffle 377 377 0 1 2
+             379:   50(fvec3) GroupNonUniformFMax 34 Reduce 378
+             380:     40(ptr) AccessChain 27(data) 375 29
+             381:   18(fvec4) Load 380
+             382:   18(fvec4) VectorShuffle 381 379 4 5 6 3
+                              Store 380 382
+             383:      6(int) Load 8(invocation)
+             384:     40(ptr) AccessChain 27(data) 59 29
+             385:   18(fvec4) Load 384
+             386:   18(fvec4) GroupNonUniformFMax 34 Reduce 385
+             387:     40(ptr) AccessChain 27(data) 383 29
+                              Store 387 386
+             388:      6(int) Load 8(invocation)
+             389:     65(ptr) AccessChain 27(data) 29 38 30
+             390:     19(int) Load 389
+             391:     19(int) GroupNonUniformSMax 34 Reduce 390
+             392:     65(ptr) AccessChain 27(data) 388 38 30
+                              Store 392 391
+             393:      6(int) Load 8(invocation)
+             394:     72(ptr) AccessChain 27(data) 38 38
+             395:   20(ivec4) Load 394
+             396:   71(ivec2) VectorShuffle 395 395 0 1
+             397:   71(ivec2) GroupNonUniformSMax 34 Reduce 396
+             398:     72(ptr) AccessChain 27(data) 393 38
+             399:   20(ivec4) Load 398
+             400:   20(ivec4) VectorShuffle 399 397 4 5 2 3
+                              Store 398 400
+             401:      6(int) Load 8(invocation)
+             402:     72(ptr) AccessChain 27(data) 49 38
+             403:   20(ivec4) Load 402
+             404:   81(ivec3) VectorShuffle 403 403 0 1 2
+             405:   81(ivec3) GroupNonUniformSMax 34 Reduce 404
+             406:     72(ptr) AccessChain 27(data) 401 38
+             407:   20(ivec4) Load 406
+             408:   20(ivec4) VectorShuffle 407 405 4 5 6 3
+                              Store 406 408
+             409:      6(int) Load 8(invocation)
+             410:     72(ptr) AccessChain 27(data) 59 38
+             411:   20(ivec4) Load 410
+             412:   20(ivec4) GroupNonUniformSMax 34 Reduce 411
+             413:     72(ptr) AccessChain 27(data) 409 38
+                              Store 413 412
+             414:      6(int) Load 8(invocation)
+             415:     95(ptr) AccessChain 27(data) 29 49 30
+             416:      6(int) Load 415
+             417:      6(int) GroupNonUniformUMax 34 Reduce 416
+             418:     95(ptr) AccessChain 27(data) 414 49 30
+                              Store 418 417
+             419:      6(int) Load 8(invocation)
+             420:    102(ptr) AccessChain 27(data) 38 49
+             421:   21(ivec4) Load 420
+             422:  101(ivec2) VectorShuffle 421 421 0 1
+             423:  101(ivec2) GroupNonUniformUMax 34 Reduce 422
+             424:    102(ptr) AccessChain 27(data) 419 49
+             425:   21(ivec4) Load 424
+             426:   21(ivec4) VectorShuffle 425 423 4 5 2 3
+                              Store 424 426
+             427:      6(int) Load 8(invocation)
+             428:    102(ptr) AccessChain 27(data) 49 49
+             429:   21(ivec4) Load 428
+             430:  111(ivec3) VectorShuffle 429 429 0 1 2
+             431:  111(ivec3) GroupNonUniformUMax 34 Reduce 430
+             432:    102(ptr) AccessChain 27(data) 427 49
+             433:   21(ivec4) Load 432
+             434:   21(ivec4) VectorShuffle 433 431 4 5 6 3
+                              Store 432 434
+             435:      6(int) Load 8(invocation)
+             436:    102(ptr) AccessChain 27(data) 59 49
+             437:   21(ivec4) Load 436
+             438:   21(ivec4) GroupNonUniformUMax 34 Reduce 437
+             439:    102(ptr) AccessChain 27(data) 435 49
+                              Store 439 438
+             440:      6(int) Load 8(invocation)
+             441:    125(ptr) AccessChain 27(data) 29 59 30
+             442:   22(float) Load 441
+             443:   22(float) GroupNonUniformFMax 34 Reduce 442
+             444:    125(ptr) AccessChain 27(data) 440 59 30
+                              Store 444 443
+             445:      6(int) Load 8(invocation)
+             446:    132(ptr) AccessChain 27(data) 38 59
+             447:   23(fvec4) Load 446
+             448:  131(fvec2) VectorShuffle 447 447 0 1
+             449:  131(fvec2) GroupNonUniformFMax 34 Reduce 448
+             450:    132(ptr) AccessChain 27(data) 445 59
+             451:   23(fvec4) Load 450
+             452:   23(fvec4) VectorShuffle 451 449 4 5 2 3
+                              Store 450 452
+             453:      6(int) Load 8(invocation)
+             454:    132(ptr) AccessChain 27(data) 49 59
+             455:   23(fvec4) Load 454
+             456:  141(fvec3) VectorShuffle 455 455 0 1 2
+             457:  141(fvec3) GroupNonUniformFMax 34 Reduce 456
+             458:    132(ptr) AccessChain 27(data) 453 59
+             459:   23(fvec4) Load 458
+             460:   23(fvec4) VectorShuffle 459 457 4 5 6 3
+                              Store 458 460
+             461:      6(int) Load 8(invocation)
+             462:    132(ptr) AccessChain 27(data) 59 59
+             463:   23(fvec4) Load 462
+             464:   23(fvec4) GroupNonUniformFMax 34 Reduce 463
+             465:    132(ptr) AccessChain 27(data) 461 59
+                              Store 465 464
+             466:      6(int) Load 8(invocation)
+             467:     65(ptr) AccessChain 27(data) 29 38 30
+             468:     19(int) Load 467
+             469:     19(int) GroupNonUniformBitwiseAnd 34 Reduce 468
+             470:     65(ptr) AccessChain 27(data) 466 38 30
+                              Store 470 469
+             471:      6(int) Load 8(invocation)
+             472:     72(ptr) AccessChain 27(data) 38 38
+             473:   20(ivec4) Load 472
+             474:   71(ivec2) VectorShuffle 473 473 0 1
+             475:   71(ivec2) GroupNonUniformBitwiseAnd 34 Reduce 474
+             476:     72(ptr) AccessChain 27(data) 471 38
+             477:   20(ivec4) Load 476
+             478:   20(ivec4) VectorShuffle 477 475 4 5 2 3
+                              Store 476 478
+             479:      6(int) Load 8(invocation)
+             480:     72(ptr) AccessChain 27(data) 49 38
+             481:   20(ivec4) Load 480
+             482:   81(ivec3) VectorShuffle 481 481 0 1 2
+             483:   81(ivec3) GroupNonUniformBitwiseAnd 34 Reduce 482
+             484:     72(ptr) AccessChain 27(data) 479 38
+             485:   20(ivec4) Load 484
+             486:   20(ivec4) VectorShuffle 485 483 4 5 6 3
+                              Store 484 486
+             487:      6(int) Load 8(invocation)
+             488:     72(ptr) AccessChain 27(data) 59 38
+             489:   20(ivec4) Load 488
+             490:   20(ivec4) GroupNonUniformBitwiseAnd 34 Reduce 489
+             491:     72(ptr) AccessChain 27(data) 487 38
+                              Store 491 490
+             492:      6(int) Load 8(invocation)
+             493:     95(ptr) AccessChain 27(data) 29 49 30
+             494:      6(int) Load 493
+             495:      6(int) GroupNonUniformBitwiseAnd 34 Reduce 494
+             496:     95(ptr) AccessChain 27(data) 492 49 30
+                              Store 496 495
+             497:      6(int) Load 8(invocation)
+             498:    102(ptr) AccessChain 27(data) 38 49
+             499:   21(ivec4) Load 498
+             500:  101(ivec2) VectorShuffle 499 499 0 1
+             501:  101(ivec2) GroupNonUniformBitwiseAnd 34 Reduce 500
+             502:    102(ptr) AccessChain 27(data) 497 49
+             503:   21(ivec4) Load 502
+             504:   21(ivec4) VectorShuffle 503 501 4 5 2 3
+                              Store 502 504
+             505:      6(int) Load 8(invocation)
+             506:    102(ptr) AccessChain 27(data) 49 49
+             507:   21(ivec4) Load 506
+             508:  111(ivec3) VectorShuffle 507 507 0 1 2
+             509:  111(ivec3) GroupNonUniformBitwiseAnd 34 Reduce 508
+             510:    102(ptr) AccessChain 27(data) 505 49
+             511:   21(ivec4) Load 510
+             512:   21(ivec4) VectorShuffle 511 509 4 5 6 3
+                              Store 510 512
+             513:      6(int) Load 8(invocation)
+             514:    102(ptr) AccessChain 27(data) 59 49
+             515:   21(ivec4) Load 514
+             516:   21(ivec4) GroupNonUniformBitwiseAnd 34 Reduce 515
+             517:    102(ptr) AccessChain 27(data) 513 49
+                              Store 517 516
+             518:      6(int) Load 8(invocation)
+             519:     65(ptr) AccessChain 27(data) 29 38 30
+             520:     19(int) Load 519
+             522:   521(bool) SLessThan 520 29
+             523:   521(bool) GroupNonUniformLogicalAnd 34 Reduce 522
+             524:     19(int) Select 523 38 29
+             525:     65(ptr) AccessChain 27(data) 518 38 30
+                              Store 525 524
+             526:      6(int) Load 8(invocation)
+             527:     72(ptr) AccessChain 27(data) 38 38
+             528:   20(ivec4) Load 527
+             529:   71(ivec2) VectorShuffle 528 528 0 1
+             532:  531(bvec2) SLessThan 529 530
+             533:  531(bvec2) GroupNonUniformLogicalAnd 34 Reduce 532
+             535:   71(ivec2) Select 533 534 530
+             536:     72(ptr) AccessChain 27(data) 526 38
+             537:   20(ivec4) Load 536
+             538:   20(ivec4) VectorShuffle 537 535 4 5 2 3
+                              Store 536 538
+             539:      6(int) Load 8(invocation)
+             540:     72(ptr) AccessChain 27(data) 38 38
+             541:   20(ivec4) Load 540
+             542:   81(ivec3) VectorShuffle 541 541 0 1 2
+             545:  544(bvec3) SLessThan 542 543
+             546:  544(bvec3) GroupNonUniformLogicalAnd 34 Reduce 545
+             548:   81(ivec3) Select 546 547 543
+             549:     72(ptr) AccessChain 27(data) 539 38
+             550:   20(ivec4) Load 549
+             551:   20(ivec4) VectorShuffle 550 548 4 5 6 3
+                              Store 549 551
+             552:      6(int) Load 8(invocation)
+             553:     72(ptr) AccessChain 27(data) 38 38
+             554:   20(ivec4) Load 553
+             557:  556(bvec4) SLessThan 554 555
+             558:  556(bvec4) GroupNonUniformLogicalAnd 34 Reduce 557
+             560:   20(ivec4) Select 558 559 555
+             561:     72(ptr) AccessChain 27(data) 552 38
+                              Store 561 560
+             562:      6(int) Load 8(invocation)
+             563:     65(ptr) AccessChain 27(data) 29 38 30
+             564:     19(int) Load 563
+             565:     19(int) GroupNonUniformBitwiseOr 34 Reduce 564
+             566:     65(ptr) AccessChain 27(data) 562 38 30
+                              Store 566 565
+             567:      6(int) Load 8(invocation)
+             568:     72(ptr) AccessChain 27(data) 38 38
+             569:   20(ivec4) Load 568
+             570:   71(ivec2) VectorShuffle 569 569 0 1
+             571:   71(ivec2) GroupNonUniformBitwiseOr 34 Reduce 570
+             572:     72(ptr) AccessChain 27(data) 567 38
+             573:   20(ivec4) Load 572
+             574:   20(ivec4) VectorShuffle 573 571 4 5 2 3
+                              Store 572 574
+             575:      6(int) Load 8(invocation)
+             576:     72(ptr) AccessChain 27(data) 49 38
+             577:   20(ivec4) Load 576
+             578:   81(ivec3) VectorShuffle 577 577 0 1 2
+             579:   81(ivec3) GroupNonUniformBitwiseOr 34 Reduce 578
+             580:     72(ptr) AccessChain 27(data) 575 38
+             581:   20(ivec4) Load 580
+             582:   20(ivec4) VectorShuffle 581 579 4 5 6 3
+                              Store 580 582
+             583:      6(int) Load 8(invocation)
+             584:     72(ptr) AccessChain 27(data) 59 38
+             585:   20(ivec4) Load 584
+             586:   20(ivec4) GroupNonUniformBitwiseOr 34 Reduce 585
+             587:     72(ptr) AccessChain 27(data) 583 38
+                              Store 587 586
+             588:      6(int) Load 8(invocation)
+             589:     95(ptr) AccessChain 27(data) 29 49 30
+             590:      6(int) Load 589
+             591:      6(int) GroupNonUniformBitwiseOr 34 Reduce 590
+             592:     95(ptr) AccessChain 27(data) 588 49 30
+                              Store 592 591
+             593:      6(int) Load 8(invocation)
+             594:    102(ptr) AccessChain 27(data) 38 49
+             595:   21(ivec4) Load 594
+             596:  101(ivec2) VectorShuffle 595 595 0 1
+             597:  101(ivec2) GroupNonUniformBitwiseOr 34 Reduce 596
+             598:    102(ptr) AccessChain 27(data) 593 49
+             599:   21(ivec4) Load 598
+             600:   21(ivec4) VectorShuffle 599 597 4 5 2 3
+                              Store 598 600
+             601:      6(int) Load 8(invocation)
+             602:    102(ptr) AccessChain 27(data) 49 49
+             603:   21(ivec4) Load 602
+             604:  111(ivec3) VectorShuffle 603 603 0 1 2
+             605:  111(ivec3) GroupNonUniformBitwiseOr 34 Reduce 604
+             606:    102(ptr) AccessChain 27(data) 601 49
+             607:   21(ivec4) Load 606
+             608:   21(ivec4) VectorShuffle 607 605 4 5 6 3
+                              Store 606 608
+             609:      6(int) Load 8(invocation)
+             610:    102(ptr) AccessChain 27(data) 59 49
+             611:   21(ivec4) Load 610
+             612:   21(ivec4) GroupNonUniformBitwiseOr 34 Reduce 611
+             613:    102(ptr) AccessChain 27(data) 609 49
+                              Store 613 612
+             614:      6(int) Load 8(invocation)
+             615:     65(ptr) AccessChain 27(data) 29 38 30
+             616:     19(int) Load 615
+             617:   521(bool) SLessThan 616 29
+             618:   521(bool) GroupNonUniformLogicalOr 34 Reduce 617
+             619:     19(int) Select 618 38 29
+             620:     65(ptr) AccessChain 27(data) 614 38 30
+                              Store 620 619
+             621:      6(int) Load 8(invocation)
+             622:     72(ptr) AccessChain 27(data) 38 38
+             623:   20(ivec4) Load 622
+             624:   71(ivec2) VectorShuffle 623 623 0 1
+             625:  531(bvec2) SLessThan 624 530
+             626:  531(bvec2) GroupNonUniformLogicalOr 34 Reduce 625
+             627:   71(ivec2) Select 626 534 530
+             628:     72(ptr) AccessChain 27(data) 621 38
+             629:   20(ivec4) Load 628
+             630:   20(ivec4) VectorShuffle 629 627 4 5 2 3
+                              Store 628 630
+             631:      6(int) Load 8(invocation)
+             632:     72(ptr) AccessChain 27(data) 38 38
+             633:   20(ivec4) Load 632
+             634:   81(ivec3) VectorShuffle 633 633 0 1 2
+             635:  544(bvec3) SLessThan 634 543
+             636:  544(bvec3) GroupNonUniformLogicalOr 34 Reduce 635
+             637:   81(ivec3) Select 636 547 543
+             638:     72(ptr) AccessChain 27(data) 631 38
+             639:   20(ivec4) Load 638
+             640:   20(ivec4) VectorShuffle 639 637 4 5 6 3
+                              Store 638 640
+             641:      6(int) Load 8(invocation)
+             642:     72(ptr) AccessChain 27(data) 38 38
+             643:   20(ivec4) Load 642
+             644:  556(bvec4) SLessThan 643 555
+             645:  556(bvec4) GroupNonUniformLogicalOr 34 Reduce 644
+             646:   20(ivec4) Select 645 559 555
+             647:     72(ptr) AccessChain 27(data) 641 38
+                              Store 647 646
+             648:      6(int) Load 8(invocation)
+             649:     65(ptr) AccessChain 27(data) 29 38 30
+             650:     19(int) Load 649
+             651:     19(int) GroupNonUniformBitwiseXor 34 Reduce 650
+             652:     65(ptr) AccessChain 27(data) 648 38 30
+                              Store 652 651
+             653:      6(int) Load 8(invocation)
+             654:     72(ptr) AccessChain 27(data) 38 38
+             655:   20(ivec4) Load 654
+             656:   71(ivec2) VectorShuffle 655 655 0 1
+             657:   71(ivec2) GroupNonUniformBitwiseXor 34 Reduce 656
+             658:     72(ptr) AccessChain 27(data) 653 38
+             659:   20(ivec4) Load 658
+             660:   20(ivec4) VectorShuffle 659 657 4 5 2 3
+                              Store 658 660
+             661:      6(int) Load 8(invocation)
+             662:     72(ptr) AccessChain 27(data) 49 38
+             663:   20(ivec4) Load 662
+             664:   81(ivec3) VectorShuffle 663 663 0 1 2
+             665:   81(ivec3) GroupNonUniformBitwiseXor 34 Reduce 664
+             666:     72(ptr) AccessChain 27(data) 661 38
+             667:   20(ivec4) Load 666
+             668:   20(ivec4) VectorShuffle 667 665 4 5 6 3
+                              Store 666 668
+             669:      6(int) Load 8(invocation)
+             670:     72(ptr) AccessChain 27(data) 59 38
+             671:   20(ivec4) Load 670
+             672:   20(ivec4) GroupNonUniformBitwiseXor 34 Reduce 671
+             673:     72(ptr) AccessChain 27(data) 669 38
+                              Store 673 672
+             674:      6(int) Load 8(invocation)
+             675:     95(ptr) AccessChain 27(data) 29 49 30
+             676:      6(int) Load 675
+             677:      6(int) GroupNonUniformBitwiseXor 34 Reduce 676
+             678:     95(ptr) AccessChain 27(data) 674 49 30
+                              Store 678 677
+             679:      6(int) Load 8(invocation)
+             680:    102(ptr) AccessChain 27(data) 38 49
+             681:   21(ivec4) Load 680
+             682:  101(ivec2) VectorShuffle 681 681 0 1
+             683:  101(ivec2) GroupNonUniformBitwiseXor 34 Reduce 682
+             684:    102(ptr) AccessChain 27(data) 679 49
+             685:   21(ivec4) Load 684
+             686:   21(ivec4) VectorShuffle 685 683 4 5 2 3
+                              Store 684 686
+             687:      6(int) Load 8(invocation)
+             688:    102(ptr) AccessChain 27(data) 49 49
+             689:   21(ivec4) Load 688
+             690:  111(ivec3) VectorShuffle 689 689 0 1 2
+             691:  111(ivec3) GroupNonUniformBitwiseXor 34 Reduce 690
+             692:    102(ptr) AccessChain 27(data) 687 49
+             693:   21(ivec4) Load 692
+             694:   21(ivec4) VectorShuffle 693 691 4 5 6 3
+                              Store 692 694
+             695:      6(int) Load 8(invocation)
+             696:    102(ptr) AccessChain 27(data) 59 49
+             697:   21(ivec4) Load 696
+             698:   21(ivec4) GroupNonUniformBitwiseXor 34 Reduce 697
+             699:    102(ptr) AccessChain 27(data) 695 49
+                              Store 699 698
+             700:      6(int) Load 8(invocation)
+             701:     65(ptr) AccessChain 27(data) 29 38 30
+             702:     19(int) Load 701
+             703:   521(bool) SLessThan 702 29
+             704:   521(bool) GroupNonUniformLogicalXor 34 Reduce 703
+             705:     19(int) Select 704 38 29
+             706:     65(ptr) AccessChain 27(data) 700 38 30
+                              Store 706 705
+             707:      6(int) Load 8(invocation)
+             708:     72(ptr) AccessChain 27(data) 38 38
+             709:   20(ivec4) Load 708
+             710:   71(ivec2) VectorShuffle 709 709 0 1
+             711:  531(bvec2) SLessThan 710 530
+             712:  531(bvec2) GroupNonUniformLogicalXor 34 Reduce 711
+             713:   71(ivec2) Select 712 534 530
+             714:     72(ptr) AccessChain 27(data) 707 38
+             715:   20(ivec4) Load 714
+             716:   20(ivec4) VectorShuffle 715 713 4 5 2 3
+                              Store 714 716
+             717:      6(int) Load 8(invocation)
+             718:     72(ptr) AccessChain 27(data) 38 38
+             719:   20(ivec4) Load 718
+             720:   81(ivec3) VectorShuffle 719 719 0 1 2
+             721:  544(bvec3) SLessThan 720 543
+             722:  544(bvec3) GroupNonUniformLogicalXor 34 Reduce 721
+             723:   81(ivec3) Select 722 547 543
+             724:     72(ptr) AccessChain 27(data) 717 38
+             725:   20(ivec4) Load 724
+             726:   20(ivec4) VectorShuffle 725 723 4 5 6 3
+                              Store 724 726
+             727:      6(int) Load 8(invocation)
+             728:     72(ptr) AccessChain 27(data) 38 38
+             729:   20(ivec4) Load 728
+             730:  556(bvec4) SLessThan 729 555
+             731:  556(bvec4) GroupNonUniformLogicalXor 34 Reduce 730
+             732:   20(ivec4) Select 731 559 555
+             733:     72(ptr) AccessChain 27(data) 727 38
+                              Store 733 732
+             734:      6(int) Load 8(invocation)
+             735:     31(ptr) AccessChain 27(data) 29 29 30
+             736:   17(float) Load 735
+             737:   17(float) GroupNonUniformFAdd 34 InclusiveScan 736
+             738:     31(ptr) AccessChain 27(data) 734 29 30
+                              Store 738 737
+             739:      6(int) Load 8(invocation)
+             740:     40(ptr) AccessChain 27(data) 38 29
+             741:   18(fvec4) Load 740
+             742:   39(fvec2) VectorShuffle 741 741 0 1
+             743:   39(fvec2) GroupNonUniformFAdd 34 InclusiveScan 742
+             744:     40(ptr) AccessChain 27(data) 739 29
+             745:   18(fvec4) Load 744
+             746:   18(fvec4) VectorShuffle 745 743 4 5 2 3
+                              Store 744 746
+             747:      6(int) Load 8(invocation)
+             748:     40(ptr) AccessChain 27(data) 49 29
+             749:   18(fvec4) Load 748
+             750:   50(fvec3) VectorShuffle 749 749 0 1 2
+             751:   50(fvec3) GroupNonUniformFAdd 34 InclusiveScan 750
+             752:     40(ptr) AccessChain 27(data) 747 29
+             753:   18(fvec4) Load 752
+             754:   18(fvec4) VectorShuffle 753 751 4 5 6 3
+                              Store 752 754
+             755:      6(int) Load 8(invocation)
+             756:     40(ptr) AccessChain 27(data) 59 29
+             757:   18(fvec4) Load 756
+             758:   18(fvec4) GroupNonUniformFAdd 34 InclusiveScan 757
+             759:     40(ptr) AccessChain 27(data) 755 29
+                              Store 759 758
+             760:      6(int) Load 8(invocation)
+             761:     65(ptr) AccessChain 27(data) 29 38 30
+             762:     19(int) Load 761
+             763:     19(int) GroupNonUniformIAdd 34 InclusiveScan 762
+             764:     65(ptr) AccessChain 27(data) 760 38 30
+                              Store 764 763
+             765:      6(int) Load 8(invocation)
+             766:     72(ptr) AccessChain 27(data) 38 38
+             767:   20(ivec4) Load 766
+             768:   71(ivec2) VectorShuffle 767 767 0 1
+             769:   71(ivec2) GroupNonUniformIAdd 34 InclusiveScan 768
+             770:     72(ptr) AccessChain 27(data) 765 38
+             771:   20(ivec4) Load 770
+             772:   20(ivec4) VectorShuffle 771 769 4 5 2 3
+                              Store 770 772
+             773:      6(int) Load 8(invocation)
+             774:     72(ptr) AccessChain 27(data) 49 38
+             775:   20(ivec4) Load 774
+             776:   81(ivec3) VectorShuffle 775 775 0 1 2
+             777:   81(ivec3) GroupNonUniformIAdd 34 InclusiveScan 776
+             778:     72(ptr) AccessChain 27(data) 773 38
+             779:   20(ivec4) Load 778
+             780:   20(ivec4) VectorShuffle 779 777 4 5 6 3
+                              Store 778 780
+             781:      6(int) Load 8(invocation)
+             782:     72(ptr) AccessChain 27(data) 59 38
+             783:   20(ivec4) Load 782
+             784:   20(ivec4) GroupNonUniformIAdd 34 InclusiveScan 783
+             785:     72(ptr) AccessChain 27(data) 781 38
+                              Store 785 784
+             786:      6(int) Load 8(invocation)
+             787:     95(ptr) AccessChain 27(data) 29 49 30
+             788:      6(int) Load 787
+             789:      6(int) GroupNonUniformIAdd 34 InclusiveScan 788
+             790:     95(ptr) AccessChain 27(data) 786 49 30
+                              Store 790 789
+             791:      6(int) Load 8(invocation)
+             792:    102(ptr) AccessChain 27(data) 38 49
+             793:   21(ivec4) Load 792
+             794:  101(ivec2) VectorShuffle 793 793 0 1
+             795:  101(ivec2) GroupNonUniformIAdd 34 InclusiveScan 794
+             796:    102(ptr) AccessChain 27(data) 791 49
+             797:   21(ivec4) Load 796
+             798:   21(ivec4) VectorShuffle 797 795 4 5 2 3
+                              Store 796 798
+             799:      6(int) Load 8(invocation)
+             800:    102(ptr) AccessChain 27(data) 49 49
+             801:   21(ivec4) Load 800
+             802:  111(ivec3) VectorShuffle 801 801 0 1 2
+             803:  111(ivec3) GroupNonUniformIAdd 34 InclusiveScan 802
+             804:    102(ptr) AccessChain 27(data) 799 49
+             805:   21(ivec4) Load 804
+             806:   21(ivec4) VectorShuffle 805 803 4 5 6 3
+                              Store 804 806
+             807:      6(int) Load 8(invocation)
+             808:    102(ptr) AccessChain 27(data) 59 49
+             809:   21(ivec4) Load 808
+             810:   21(ivec4) GroupNonUniformIAdd 34 InclusiveScan 809
+             811:    102(ptr) AccessChain 27(data) 807 49
+                              Store 811 810
+             812:      6(int) Load 8(invocation)
+             813:    125(ptr) AccessChain 27(data) 29 59 30
+             814:   22(float) Load 813
+             815:   22(float) GroupNonUniformFAdd 34 InclusiveScan 814
+             816:    125(ptr) AccessChain 27(data) 812 59 30
+                              Store 816 815
+             817:      6(int) Load 8(invocation)
+             818:    132(ptr) AccessChain 27(data) 38 59
+             819:   23(fvec4) Load 818
+             820:  131(fvec2) VectorShuffle 819 819 0 1
+             821:  131(fvec2) GroupNonUniformFAdd 34 InclusiveScan 820
+             822:    132(ptr) AccessChain 27(data) 817 59
+             823:   23(fvec4) Load 822
+             824:   23(fvec4) VectorShuffle 823 821 4 5 2 3
+                              Store 822 824
+             825:      6(int) Load 8(invocation)
+             826:    132(ptr) AccessChain 27(data) 49 59
+             827:   23(fvec4) Load 826
+             828:  141(fvec3) VectorShuffle 827 827 0 1 2
+             829:  141(fvec3) GroupNonUniformFAdd 34 InclusiveScan 828
+             830:    132(ptr) AccessChain 27(data) 825 59
+             831:   23(fvec4) Load 830
+             832:   23(fvec4) VectorShuffle 831 829 4 5 6 3
+                              Store 830 832
+             833:      6(int) Load 8(invocation)
+             834:    132(ptr) AccessChain 27(data) 59 59
+             835:   23(fvec4) Load 834
+             836:   23(fvec4) GroupNonUniformFAdd 34 InclusiveScan 835
+             837:    132(ptr) AccessChain 27(data) 833 59
+                              Store 837 836
+             838:      6(int) Load 8(invocation)
+             839:     31(ptr) AccessChain 27(data) 29 29 30
+             840:   17(float) Load 839
+             841:   17(float) GroupNonUniformFMul 34 InclusiveScan 840
+             842:     31(ptr) AccessChain 27(data) 838 29 30
+                              Store 842 841
+             843:      6(int) Load 8(invocation)
+             844:     40(ptr) AccessChain 27(data) 38 29
+             845:   18(fvec4) Load 844
+             846:   39(fvec2) VectorShuffle 845 845 0 1
+             847:   39(fvec2) GroupNonUniformFMul 34 InclusiveScan 846
+             848:     40(ptr) AccessChain 27(data) 843 29
+             849:   18(fvec4) Load 848
+             850:   18(fvec4) VectorShuffle 849 847 4 5 2 3
+                              Store 848 850
+             851:      6(int) Load 8(invocation)
+             852:     40(ptr) AccessChain 27(data) 49 29
+             853:   18(fvec4) Load 852
+             854:   50(fvec3) VectorShuffle 853 853 0 1 2
+             855:   50(fvec3) GroupNonUniformFMul 34 InclusiveScan 854
+             856:     40(ptr) AccessChain 27(data) 851 29
+             857:   18(fvec4) Load 856
+             858:   18(fvec4) VectorShuffle 857 855 4 5 6 3
+                              Store 856 858
+             859:      6(int) Load 8(invocation)
+             860:     40(ptr) AccessChain 27(data) 59 29
+             861:   18(fvec4) Load 860
+             862:   18(fvec4) GroupNonUniformFMul 34 InclusiveScan 861
+             863:     40(ptr) AccessChain 27(data) 859 29
+                              Store 863 862
+             864:      6(int) Load 8(invocation)
+             865:     65(ptr) AccessChain 27(data) 29 38 30
+             866:     19(int) Load 865
+             867:     19(int) GroupNonUniformIMul 34 InclusiveScan 866
+             868:     65(ptr) AccessChain 27(data) 864 38 30
+                              Store 868 867
+             869:      6(int) Load 8(invocation)
+             870:     72(ptr) AccessChain 27(data) 38 38
+             871:   20(ivec4) Load 870
+             872:   71(ivec2) VectorShuffle 871 871 0 1
+             873:   71(ivec2) GroupNonUniformIMul 34 InclusiveScan 872
+             874:     72(ptr) AccessChain 27(data) 869 38
+             875:   20(ivec4) Load 874
+             876:   20(ivec4) VectorShuffle 875 873 4 5 2 3
+                              Store 874 876
+             877:      6(int) Load 8(invocation)
+             878:     72(ptr) AccessChain 27(data) 49 38
+             879:   20(ivec4) Load 878
+             880:   81(ivec3) VectorShuffle 879 879 0 1 2
+             881:   81(ivec3) GroupNonUniformIMul 34 InclusiveScan 880
+             882:     72(ptr) AccessChain 27(data) 877 38
+             883:   20(ivec4) Load 882
+             884:   20(ivec4) VectorShuffle 883 881 4 5 6 3
+                              Store 882 884
+             885:      6(int) Load 8(invocation)
+             886:     72(ptr) AccessChain 27(data) 59 38
+             887:   20(ivec4) Load 886
+             888:   20(ivec4) GroupNonUniformIMul 34 InclusiveScan 887
+             889:     72(ptr) AccessChain 27(data) 885 38
+                              Store 889 888
+             890:      6(int) Load 8(invocation)
+             891:     95(ptr) AccessChain 27(data) 29 49 30
+             892:      6(int) Load 891
+             893:      6(int) GroupNonUniformIMul 34 InclusiveScan 892
+             894:     95(ptr) AccessChain 27(data) 890 49 30
+                              Store 894 893
+             895:      6(int) Load 8(invocation)
+             896:    102(ptr) AccessChain 27(data) 38 49
+             897:   21(ivec4) Load 896
+             898:  101(ivec2) VectorShuffle 897 897 0 1
+             899:  101(ivec2) GroupNonUniformIMul 34 InclusiveScan 898
+             900:    102(ptr) AccessChain 27(data) 895 49
+             901:   21(ivec4) Load 900
+             902:   21(ivec4) VectorShuffle 901 899 4 5 2 3
+                              Store 900 902
+             903:      6(int) Load 8(invocation)
+             904:    102(ptr) AccessChain 27(data) 49 49
+             905:   21(ivec4) Load 904
+             906:  111(ivec3) VectorShuffle 905 905 0 1 2
+             907:  111(ivec3) GroupNonUniformIMul 34 InclusiveScan 906
+             908:    102(ptr) AccessChain 27(data) 903 49
+             909:   21(ivec4) Load 908
+             910:   21(ivec4) VectorShuffle 909 907 4 5 6 3
+                              Store 908 910
+             911:      6(int) Load 8(invocation)
+             912:    102(ptr) AccessChain 27(data) 59 49
+             913:   21(ivec4) Load 912
+             914:   21(ivec4) GroupNonUniformIMul 34 InclusiveScan 913
+             915:    102(ptr) AccessChain 27(data) 911 49
+                              Store 915 914
+             916:      6(int) Load 8(invocation)
+             917:    125(ptr) AccessChain 27(data) 29 59 30
+             918:   22(float) Load 917
+             919:   22(float) GroupNonUniformFMul 34 InclusiveScan 918
+             920:    125(ptr) AccessChain 27(data) 916 59 30
+                              Store 920 919
+             921:      6(int) Load 8(invocation)
+             922:    132(ptr) AccessChain 27(data) 38 59
+             923:   23(fvec4) Load 922
+             924:  131(fvec2) VectorShuffle 923 923 0 1
+             925:  131(fvec2) GroupNonUniformFMul 34 InclusiveScan 924
+             926:    132(ptr) AccessChain 27(data) 921 59
+             927:   23(fvec4) Load 926
+             928:   23(fvec4) VectorShuffle 927 925 4 5 2 3
+                              Store 926 928
+             929:      6(int) Load 8(invocation)
+             930:    132(ptr) AccessChain 27(data) 49 59
+             931:   23(fvec4) Load 930
+             932:  141(fvec3) VectorShuffle 931 931 0 1 2
+             933:  141(fvec3) GroupNonUniformFMul 34 InclusiveScan 932
+             934:    132(ptr) AccessChain 27(data) 929 59
+             935:   23(fvec4) Load 934
+             936:   23(fvec4) VectorShuffle 935 933 4 5 6 3
+                              Store 934 936
+             937:      6(int) Load 8(invocation)
+             938:    132(ptr) AccessChain 27(data) 59 59
+             939:   23(fvec4) Load 938
+             940:   23(fvec4) GroupNonUniformFMul 34 InclusiveScan 939
+             941:    132(ptr) AccessChain 27(data) 937 59
+                              Store 941 940
+             942:      6(int) Load 8(invocation)
+             943:     31(ptr) AccessChain 27(data) 29 29 30
+             944:   17(float) Load 943
+             945:   17(float) GroupNonUniformFMin 34 InclusiveScan 944
+             946:     31(ptr) AccessChain 27(data) 942 29 30
+                              Store 946 945
+             947:      6(int) Load 8(invocation)
+             948:     40(ptr) AccessChain 27(data) 38 29
+             949:   18(fvec4) Load 948
+             950:   39(fvec2) VectorShuffle 949 949 0 1
+             951:   39(fvec2) GroupNonUniformFMin 34 InclusiveScan 950
+             952:     40(ptr) AccessChain 27(data) 947 29
+             953:   18(fvec4) Load 952
+             954:   18(fvec4) VectorShuffle 953 951 4 5 2 3
+                              Store 952 954
+             955:      6(int) Load 8(invocation)
+             956:     40(ptr) AccessChain 27(data) 49 29
+             957:   18(fvec4) Load 956
+             958:   50(fvec3) VectorShuffle 957 957 0 1 2
+             959:   50(fvec3) GroupNonUniformFMin 34 InclusiveScan 958
+             960:     40(ptr) AccessChain 27(data) 955 29
+             961:   18(fvec4) Load 960
+             962:   18(fvec4) VectorShuffle 961 959 4 5 6 3
+                              Store 960 962
+             963:      6(int) Load 8(invocation)
+             964:     40(ptr) AccessChain 27(data) 59 29
+             965:   18(fvec4) Load 964
+             966:   18(fvec4) GroupNonUniformFMin 34 InclusiveScan 965
+             967:     40(ptr) AccessChain 27(data) 963 29
+                              Store 967 966
+             968:      6(int) Load 8(invocation)
+             969:     65(ptr) AccessChain 27(data) 29 38 30
+             970:     19(int) Load 969
+             971:     19(int) GroupNonUniformSMin 34 InclusiveScan 970
+             972:     65(ptr) AccessChain 27(data) 968 38 30
+                              Store 972 971
+             973:      6(int) Load 8(invocation)
+             974:     72(ptr) AccessChain 27(data) 38 38
+             975:   20(ivec4) Load 974
+             976:   71(ivec2) VectorShuffle 975 975 0 1
+             977:   71(ivec2) GroupNonUniformSMin 34 InclusiveScan 976
+             978:     72(ptr) AccessChain 27(data) 973 38
+             979:   20(ivec4) Load 978
+             980:   20(ivec4) VectorShuffle 979 977 4 5 2 3
+                              Store 978 980
+             981:      6(int) Load 8(invocation)
+             982:     72(ptr) AccessChain 27(data) 49 38
+             983:   20(ivec4) Load 982
+             984:   81(ivec3) VectorShuffle 983 983 0 1 2
+             985:   81(ivec3) GroupNonUniformSMin 34 InclusiveScan 984
+             986:     72(ptr) AccessChain 27(data) 981 38
+             987:   20(ivec4) Load 986
+             988:   20(ivec4) VectorShuffle 987 985 4 5 6 3
+                              Store 986 988
+             989:      6(int) Load 8(invocation)
+             990:     72(ptr) AccessChain 27(data) 59 38
+             991:   20(ivec4) Load 990
+             992:   20(ivec4) GroupNonUniformSMin 34 InclusiveScan 991
+             993:     72(ptr) AccessChain 27(data) 989 38
+                              Store 993 992
+             994:      6(int) Load 8(invocation)
+             995:     95(ptr) AccessChain 27(data) 29 49 30
+             996:      6(int) Load 995
+             997:      6(int) GroupNonUniformUMin 34 InclusiveScan 996
+             998:     95(ptr) AccessChain 27(data) 994 49 30
+                              Store 998 997
+             999:      6(int) Load 8(invocation)
+            1000:    102(ptr) AccessChain 27(data) 38 49
+            1001:   21(ivec4) Load 1000
+            1002:  101(ivec2) VectorShuffle 1001 1001 0 1
+            1003:  101(ivec2) GroupNonUniformUMin 34 InclusiveScan 1002
+            1004:    102(ptr) AccessChain 27(data) 999 49
+            1005:   21(ivec4) Load 1004
+            1006:   21(ivec4) VectorShuffle 1005 1003 4 5 2 3
+                              Store 1004 1006
+            1007:      6(int) Load 8(invocation)
+            1008:    102(ptr) AccessChain 27(data) 49 49
+            1009:   21(ivec4) Load 1008
+            1010:  111(ivec3) VectorShuffle 1009 1009 0 1 2
+            1011:  111(ivec3) GroupNonUniformUMin 34 InclusiveScan 1010
+            1012:    102(ptr) AccessChain 27(data) 1007 49
+            1013:   21(ivec4) Load 1012
+            1014:   21(ivec4) VectorShuffle 1013 1011 4 5 6 3
+                              Store 1012 1014
+            1015:      6(int) Load 8(invocation)
+            1016:    102(ptr) AccessChain 27(data) 59 49
+            1017:   21(ivec4) Load 1016
+            1018:   21(ivec4) GroupNonUniformUMin 34 InclusiveScan 1017
+            1019:    102(ptr) AccessChain 27(data) 1015 49
+                              Store 1019 1018
+            1020:      6(int) Load 8(invocation)
+            1021:    125(ptr) AccessChain 27(data) 29 59 30
+            1022:   22(float) Load 1021
+            1023:   22(float) GroupNonUniformFMin 34 InclusiveScan 1022
+            1024:    125(ptr) AccessChain 27(data) 1020 59 30
+                              Store 1024 1023
+            1025:      6(int) Load 8(invocation)
+            1026:    132(ptr) AccessChain 27(data) 38 59
+            1027:   23(fvec4) Load 1026
+            1028:  131(fvec2) VectorShuffle 1027 1027 0 1
+            1029:  131(fvec2) GroupNonUniformFMin 34 InclusiveScan 1028
+            1030:    132(ptr) AccessChain 27(data) 1025 59
+            1031:   23(fvec4) Load 1030
+            1032:   23(fvec4) VectorShuffle 1031 1029 4 5 2 3
+                              Store 1030 1032
+            1033:      6(int) Load 8(invocation)
+            1034:    132(ptr) AccessChain 27(data) 49 59
+            1035:   23(fvec4) Load 1034
+            1036:  141(fvec3) VectorShuffle 1035 1035 0 1 2
+            1037:  141(fvec3) GroupNonUniformFMin 34 InclusiveScan 1036
+            1038:    132(ptr) AccessChain 27(data) 1033 59
+            1039:   23(fvec4) Load 1038
+            1040:   23(fvec4) VectorShuffle 1039 1037 4 5 6 3
+                              Store 1038 1040
+            1041:      6(int) Load 8(invocation)
+            1042:    132(ptr) AccessChain 27(data) 59 59
+            1043:   23(fvec4) Load 1042
+            1044:   23(fvec4) GroupNonUniformFMin 34 InclusiveScan 1043
+            1045:    132(ptr) AccessChain 27(data) 1041 59
+                              Store 1045 1044
+            1046:      6(int) Load 8(invocation)
+            1047:     31(ptr) AccessChain 27(data) 29 29 30
+            1048:   17(float) Load 1047
+            1049:   17(float) GroupNonUniformFMax 34 InclusiveScan 1048
+            1050:     31(ptr) AccessChain 27(data) 1046 29 30
+                              Store 1050 1049
+            1051:      6(int) Load 8(invocation)
+            1052:     40(ptr) AccessChain 27(data) 38 29
+            1053:   18(fvec4) Load 1052
+            1054:   39(fvec2) VectorShuffle 1053 1053 0 1
+            1055:   39(fvec2) GroupNonUniformFMax 34 InclusiveScan 1054
+            1056:     40(ptr) AccessChain 27(data) 1051 29
+            1057:   18(fvec4) Load 1056
+            1058:   18(fvec4) VectorShuffle 1057 1055 4 5 2 3
+                              Store 1056 1058
+            1059:      6(int) Load 8(invocation)
+            1060:     40(ptr) AccessChain 27(data) 49 29
+            1061:   18(fvec4) Load 1060
+            1062:   50(fvec3) VectorShuffle 1061 1061 0 1 2
+            1063:   50(fvec3) GroupNonUniformFMax 34 InclusiveScan 1062
+            1064:     40(ptr) AccessChain 27(data) 1059 29
+            1065:   18(fvec4) Load 1064
+            1066:   18(fvec4) VectorShuffle 1065 1063 4 5 6 3
+                              Store 1064 1066
+            1067:      6(int) Load 8(invocation)
+            1068:     40(ptr) AccessChain 27(data) 59 29
+            1069:   18(fvec4) Load 1068
+            1070:   18(fvec4) GroupNonUniformFMax 34 InclusiveScan 1069
+            1071:     40(ptr) AccessChain 27(data) 1067 29
+                              Store 1071 1070
+            1072:      6(int) Load 8(invocation)
+            1073:     65(ptr) AccessChain 27(data) 29 38 30
+            1074:     19(int) Load 1073
+            1075:     19(int) GroupNonUniformSMax 34 InclusiveScan 1074
+            1076:     65(ptr) AccessChain 27(data) 1072 38 30
+                              Store 1076 1075
+            1077:      6(int) Load 8(invocation)
+            1078:     72(ptr) AccessChain 27(data) 38 38
+            1079:   20(ivec4) Load 1078
+            1080:   71(ivec2) VectorShuffle 1079 1079 0 1
+            1081:   71(ivec2) GroupNonUniformSMax 34 InclusiveScan 1080
+            1082:     72(ptr) AccessChain 27(data) 1077 38
+            1083:   20(ivec4) Load 1082
+            1084:   20(ivec4) VectorShuffle 1083 1081 4 5 2 3
+                              Store 1082 1084
+            1085:      6(int) Load 8(invocation)
+            1086:     72(ptr) AccessChain 27(data) 49 38
+            1087:   20(ivec4) Load 1086
+            1088:   81(ivec3) VectorShuffle 1087 1087 0 1 2
+            1089:   81(ivec3) GroupNonUniformSMax 34 InclusiveScan 1088
+            1090:     72(ptr) AccessChain 27(data) 1085 38
+            1091:   20(ivec4) Load 1090
+            1092:   20(ivec4) VectorShuffle 1091 1089 4 5 6 3
+                              Store 1090 1092
+            1093:      6(int) Load 8(invocation)
+            1094:     72(ptr) AccessChain 27(data) 59 38
+            1095:   20(ivec4) Load 1094
+            1096:   20(ivec4) GroupNonUniformSMax 34 InclusiveScan 1095
+            1097:     72(ptr) AccessChain 27(data) 1093 38
+                              Store 1097 1096
+            1098:      6(int) Load 8(invocation)
+            1099:     95(ptr) AccessChain 27(data) 29 49 30
+            1100:      6(int) Load 1099
+            1101:      6(int) GroupNonUniformUMax 34 InclusiveScan 1100
+            1102:     95(ptr) AccessChain 27(data) 1098 49 30
+                              Store 1102 1101
+            1103:      6(int) Load 8(invocation)
+            1104:    102(ptr) AccessChain 27(data) 38 49
+            1105:   21(ivec4) Load 1104
+            1106:  101(ivec2) VectorShuffle 1105 1105 0 1
+            1107:  101(ivec2) GroupNonUniformUMax 34 InclusiveScan 1106
+            1108:    102(ptr) AccessChain 27(data) 1103 49
+            1109:   21(ivec4) Load 1108
+            1110:   21(ivec4) VectorShuffle 1109 1107 4 5 2 3
+                              Store 1108 1110
+            1111:      6(int) Load 8(invocation)
+            1112:    102(ptr) AccessChain 27(data) 49 49
+            1113:   21(ivec4) Load 1112
+            1114:  111(ivec3) VectorShuffle 1113 1113 0 1 2
+            1115:  111(ivec3) GroupNonUniformUMax 34 InclusiveScan 1114
+            1116:    102(ptr) AccessChain 27(data) 1111 49
+            1117:   21(ivec4) Load 1116
+            1118:   21(ivec4) VectorShuffle 1117 1115 4 5 6 3
+                              Store 1116 1118
+            1119:      6(int) Load 8(invocation)
+            1120:    102(ptr) AccessChain 27(data) 59 49
+            1121:   21(ivec4) Load 1120
+            1122:   21(ivec4) GroupNonUniformUMax 34 InclusiveScan 1121
+            1123:    102(ptr) AccessChain 27(data) 1119 49
+                              Store 1123 1122
+            1124:      6(int) Load 8(invocation)
+            1125:    125(ptr) AccessChain 27(data) 29 59 30
+            1126:   22(float) Load 1125
+            1127:   22(float) GroupNonUniformFMax 34 InclusiveScan 1126
+            1128:    125(ptr) AccessChain 27(data) 1124 59 30
+                              Store 1128 1127
+            1129:      6(int) Load 8(invocation)
+            1130:    132(ptr) AccessChain 27(data) 38 59
+            1131:   23(fvec4) Load 1130
+            1132:  131(fvec2) VectorShuffle 1131 1131 0 1
+            1133:  131(fvec2) GroupNonUniformFMax 34 InclusiveScan 1132
+            1134:    132(ptr) AccessChain 27(data) 1129 59
+            1135:   23(fvec4) Load 1134
+            1136:   23(fvec4) VectorShuffle 1135 1133 4 5 2 3
+                              Store 1134 1136
+            1137:      6(int) Load 8(invocation)
+            1138:    132(ptr) AccessChain 27(data) 49 59
+            1139:   23(fvec4) Load 1138
+            1140:  141(fvec3) VectorShuffle 1139 1139 0 1 2
+            1141:  141(fvec3) GroupNonUniformFMax 34 InclusiveScan 1140
+            1142:    132(ptr) AccessChain 27(data) 1137 59
+            1143:   23(fvec4) Load 1142
+            1144:   23(fvec4) VectorShuffle 1143 1141 4 5 6 3
+                              Store 1142 1144
+            1145:      6(int) Load 8(invocation)
+            1146:    132(ptr) AccessChain 27(data) 59 59
+            1147:   23(fvec4) Load 1146
+            1148:   23(fvec4) GroupNonUniformFMax 34 InclusiveScan 1147
+            1149:    132(ptr) AccessChain 27(data) 1145 59
+                              Store 1149 1148
+            1150:      6(int) Load 8(invocation)
+            1151:     65(ptr) AccessChain 27(data) 29 38 30
+            1152:     19(int) Load 1151
+            1153:     19(int) GroupNonUniformBitwiseAnd 34 InclusiveScan 1152
+            1154:     65(ptr) AccessChain 27(data) 1150 38 30
+                              Store 1154 1153
+            1155:      6(int) Load 8(invocation)
+            1156:     72(ptr) AccessChain 27(data) 38 38
+            1157:   20(ivec4) Load 1156
+            1158:   71(ivec2) VectorShuffle 1157 1157 0 1
+            1159:   71(ivec2) GroupNonUniformBitwiseAnd 34 InclusiveScan 1158
+            1160:     72(ptr) AccessChain 27(data) 1155 38
+            1161:   20(ivec4) Load 1160
+            1162:   20(ivec4) VectorShuffle 1161 1159 4 5 2 3
+                              Store 1160 1162
+            1163:      6(int) Load 8(invocation)
+            1164:     72(ptr) AccessChain 27(data) 49 38
+            1165:   20(ivec4) Load 1164
+            1166:   81(ivec3) VectorShuffle 1165 1165 0 1 2
+            1167:   81(ivec3) GroupNonUniformBitwiseAnd 34 InclusiveScan 1166
+            1168:     72(ptr) AccessChain 27(data) 1163 38
+            1169:   20(ivec4) Load 1168
+            1170:   20(ivec4) VectorShuffle 1169 1167 4 5 6 3
+                              Store 1168 1170
+            1171:      6(int) Load 8(invocation)
+            1172:     72(ptr) AccessChain 27(data) 59 38
+            1173:   20(ivec4) Load 1172
+            1174:   20(ivec4) GroupNonUniformBitwiseAnd 34 InclusiveScan 1173
+            1175:     72(ptr) AccessChain 27(data) 1171 38
+                              Store 1175 1174
+            1176:      6(int) Load 8(invocation)
+            1177:     95(ptr) AccessChain 27(data) 29 49 30
+            1178:      6(int) Load 1177
+            1179:      6(int) GroupNonUniformBitwiseAnd 34 InclusiveScan 1178
+            1180:     95(ptr) AccessChain 27(data) 1176 49 30
+                              Store 1180 1179
+            1181:      6(int) Load 8(invocation)
+            1182:    102(ptr) AccessChain 27(data) 38 49
+            1183:   21(ivec4) Load 1182
+            1184:  101(ivec2) VectorShuffle 1183 1183 0 1
+            1185:  101(ivec2) GroupNonUniformBitwiseAnd 34 InclusiveScan 1184
+            1186:    102(ptr) AccessChain 27(data) 1181 49
+            1187:   21(ivec4) Load 1186
+            1188:   21(ivec4) VectorShuffle 1187 1185 4 5 2 3
+                              Store 1186 1188
+            1189:      6(int) Load 8(invocation)
+            1190:    102(ptr) AccessChain 27(data) 49 49
+            1191:   21(ivec4) Load 1190
+            1192:  111(ivec3) VectorShuffle 1191 1191 0 1 2
+            1193:  111(ivec3) GroupNonUniformBitwiseAnd 34 InclusiveScan 1192
+            1194:    102(ptr) AccessChain 27(data) 1189 49
+            1195:   21(ivec4) Load 1194
+            1196:   21(ivec4) VectorShuffle 1195 1193 4 5 6 3
+                              Store 1194 1196
+            1197:      6(int) Load 8(invocation)
+            1198:    102(ptr) AccessChain 27(data) 59 49
+            1199:   21(ivec4) Load 1198
+            1200:   21(ivec4) GroupNonUniformBitwiseAnd 34 InclusiveScan 1199
+            1201:    102(ptr) AccessChain 27(data) 1197 49
+                              Store 1201 1200
+            1202:      6(int) Load 8(invocation)
+            1203:     65(ptr) AccessChain 27(data) 29 38 30
+            1204:     19(int) Load 1203
+            1205:   521(bool) SLessThan 1204 29
+            1206:   521(bool) GroupNonUniformLogicalAnd 34 InclusiveScan 1205
+            1207:     19(int) Select 1206 38 29
+            1208:     65(ptr) AccessChain 27(data) 1202 38 30
+                              Store 1208 1207
+            1209:      6(int) Load 8(invocation)
+            1210:     72(ptr) AccessChain 27(data) 38 38
+            1211:   20(ivec4) Load 1210
+            1212:   71(ivec2) VectorShuffle 1211 1211 0 1
+            1213:  531(bvec2) SLessThan 1212 530
+            1214:  531(bvec2) GroupNonUniformLogicalAnd 34 InclusiveScan 1213
+            1215:   71(ivec2) Select 1214 534 530
+            1216:     72(ptr) AccessChain 27(data) 1209 38
+            1217:   20(ivec4) Load 1216
+            1218:   20(ivec4) VectorShuffle 1217 1215 4 5 2 3
+                              Store 1216 1218
+            1219:      6(int) Load 8(invocation)
+            1220:     72(ptr) AccessChain 27(data) 38 38
+            1221:   20(ivec4) Load 1220
+            1222:   81(ivec3) VectorShuffle 1221 1221 0 1 2
+            1223:  544(bvec3) SLessThan 1222 543
+            1224:  544(bvec3) GroupNonUniformLogicalAnd 34 InclusiveScan 1223
+            1225:   81(ivec3) Select 1224 547 543
+            1226:     72(ptr) AccessChain 27(data) 1219 38
+            1227:   20(ivec4) Load 1226
+            1228:   20(ivec4) VectorShuffle 1227 1225 4 5 6 3
+                              Store 1226 1228
+            1229:      6(int) Load 8(invocation)
+            1230:     72(ptr) AccessChain 27(data) 38 38
+            1231:   20(ivec4) Load 1230
+            1232:  556(bvec4) SLessThan 1231 555
+            1233:  556(bvec4) GroupNonUniformLogicalAnd 34 InclusiveScan 1232
+            1234:   20(ivec4) Select 1233 559 555
+            1235:     72(ptr) AccessChain 27(data) 1229 38
+                              Store 1235 1234
+            1236:      6(int) Load 8(invocation)
+            1237:     65(ptr) AccessChain 27(data) 29 38 30
+            1238:     19(int) Load 1237
+            1239:     19(int) GroupNonUniformBitwiseOr 34 InclusiveScan 1238
+            1240:     65(ptr) AccessChain 27(data) 1236 38 30
+                              Store 1240 1239
+            1241:      6(int) Load 8(invocation)
+            1242:     72(ptr) AccessChain 27(data) 38 38
+            1243:   20(ivec4) Load 1242
+            1244:   71(ivec2) VectorShuffle 1243 1243 0 1
+            1245:   71(ivec2) GroupNonUniformBitwiseOr 34 InclusiveScan 1244
+            1246:     72(ptr) AccessChain 27(data) 1241 38
+            1247:   20(ivec4) Load 1246
+            1248:   20(ivec4) VectorShuffle 1247 1245 4 5 2 3
+                              Store 1246 1248
+            1249:      6(int) Load 8(invocation)
+            1250:     72(ptr) AccessChain 27(data) 49 38
+            1251:   20(ivec4) Load 1250
+            1252:   81(ivec3) VectorShuffle 1251 1251 0 1 2
+            1253:   81(ivec3) GroupNonUniformBitwiseOr 34 InclusiveScan 1252
+            1254:     72(ptr) AccessChain 27(data) 1249 38
+            1255:   20(ivec4) Load 1254
+            1256:   20(ivec4) VectorShuffle 1255 1253 4 5 6 3
+                              Store 1254 1256
+            1257:      6(int) Load 8(invocation)
+            1258:     72(ptr) AccessChain 27(data) 59 38
+            1259:   20(ivec4) Load 1258
+            1260:   20(ivec4) GroupNonUniformBitwiseOr 34 InclusiveScan 1259
+            1261:     72(ptr) AccessChain 27(data) 1257 38
+                              Store 1261 1260
+            1262:      6(int) Load 8(invocation)
+            1263:     95(ptr) AccessChain 27(data) 29 49 30
+            1264:      6(int) Load 1263
+            1265:      6(int) GroupNonUniformBitwiseOr 34 InclusiveScan 1264
+            1266:     95(ptr) AccessChain 27(data) 1262 49 30
+                              Store 1266 1265
+            1267:      6(int) Load 8(invocation)
+            1268:    102(ptr) AccessChain 27(data) 38 49
+            1269:   21(ivec4) Load 1268
+            1270:  101(ivec2) VectorShuffle 1269 1269 0 1
+            1271:  101(ivec2) GroupNonUniformBitwiseOr 34 InclusiveScan 1270
+            1272:    102(ptr) AccessChain 27(data) 1267 49
+            1273:   21(ivec4) Load 1272
+            1274:   21(ivec4) VectorShuffle 1273 1271 4 5 2 3
+                              Store 1272 1274
+            1275:      6(int) Load 8(invocation)
+            1276:    102(ptr) AccessChain 27(data) 49 49
+            1277:   21(ivec4) Load 1276
+            1278:  111(ivec3) VectorShuffle 1277 1277 0 1 2
+            1279:  111(ivec3) GroupNonUniformBitwiseOr 34 InclusiveScan 1278
+            1280:    102(ptr) AccessChain 27(data) 1275 49
+            1281:   21(ivec4) Load 1280
+            1282:   21(ivec4) VectorShuffle 1281 1279 4 5 6 3
+                              Store 1280 1282
+            1283:      6(int) Load 8(invocation)
+            1284:    102(ptr) AccessChain 27(data) 59 49
+            1285:   21(ivec4) Load 1284
+            1286:   21(ivec4) GroupNonUniformBitwiseOr 34 InclusiveScan 1285
+            1287:    102(ptr) AccessChain 27(data) 1283 49
+                              Store 1287 1286
+            1288:      6(int) Load 8(invocation)
+            1289:     65(ptr) AccessChain 27(data) 29 38 30
+            1290:     19(int) Load 1289
+            1291:   521(bool) SLessThan 1290 29
+            1292:   521(bool) GroupNonUniformLogicalOr 34 InclusiveScan 1291
+            1293:     19(int) Select 1292 38 29
+            1294:     65(ptr) AccessChain 27(data) 1288 38 30
+                              Store 1294 1293
+            1295:      6(int) Load 8(invocation)
+            1296:     72(ptr) AccessChain 27(data) 38 38
+            1297:   20(ivec4) Load 1296
+            1298:   71(ivec2) VectorShuffle 1297 1297 0 1
+            1299:  531(bvec2) SLessThan 1298 530
+            1300:  531(bvec2) GroupNonUniformLogicalOr 34 InclusiveScan 1299
+            1301:   71(ivec2) Select 1300 534 530
+            1302:     72(ptr) AccessChain 27(data) 1295 38
+            1303:   20(ivec4) Load 1302
+            1304:   20(ivec4) VectorShuffle 1303 1301 4 5 2 3
+                              Store 1302 1304
+            1305:      6(int) Load 8(invocation)
+            1306:     72(ptr) AccessChain 27(data) 38 38
+            1307:   20(ivec4) Load 1306
+            1308:   81(ivec3) VectorShuffle 1307 1307 0 1 2
+            1309:  544(bvec3) SLessThan 1308 543
+            1310:  544(bvec3) GroupNonUniformLogicalOr 34 InclusiveScan 1309
+            1311:   81(ivec3) Select 1310 547 543
+            1312:     72(ptr) AccessChain 27(data) 1305 38
+            1313:   20(ivec4) Load 1312
+            1314:   20(ivec4) VectorShuffle 1313 1311 4 5 6 3
+                              Store 1312 1314
+            1315:      6(int) Load 8(invocation)
+            1316:     72(ptr) AccessChain 27(data) 38 38
+            1317:   20(ivec4) Load 1316
+            1318:  556(bvec4) SLessThan 1317 555
+            1319:  556(bvec4) GroupNonUniformLogicalOr 34 InclusiveScan 1318
+            1320:   20(ivec4) Select 1319 559 555
+            1321:     72(ptr) AccessChain 27(data) 1315 38
+                              Store 1321 1320
+            1322:      6(int) Load 8(invocation)
+            1323:     65(ptr) AccessChain 27(data) 29 38 30
+            1324:     19(int) Load 1323
+            1325:     19(int) GroupNonUniformBitwiseXor 34 InclusiveScan 1324
+            1326:     65(ptr) AccessChain 27(data) 1322 38 30
+                              Store 1326 1325
+            1327:      6(int) Load 8(invocation)
+            1328:     72(ptr) AccessChain 27(data) 38 38
+            1329:   20(ivec4) Load 1328
+            1330:   71(ivec2) VectorShuffle 1329 1329 0 1
+            1331:   71(ivec2) GroupNonUniformBitwiseXor 34 InclusiveScan 1330
+            1332:     72(ptr) AccessChain 27(data) 1327 38
+            1333:   20(ivec4) Load 1332
+            1334:   20(ivec4) VectorShuffle 1333 1331 4 5 2 3
+                              Store 1332 1334
+            1335:      6(int) Load 8(invocation)
+            1336:     72(ptr) AccessChain 27(data) 49 38
+            1337:   20(ivec4) Load 1336
+            1338:   81(ivec3) VectorShuffle 1337 1337 0 1 2
+            1339:   81(ivec3) GroupNonUniformBitwiseXor 34 InclusiveScan 1338
+            1340:     72(ptr) AccessChain 27(data) 1335 38
+            1341:   20(ivec4) Load 1340
+            1342:   20(ivec4) VectorShuffle 1341 1339 4 5 6 3
+                              Store 1340 1342
+            1343:      6(int) Load 8(invocation)
+            1344:     72(ptr) AccessChain 27(data) 59 38
+            1345:   20(ivec4) Load 1344
+            1346:   20(ivec4) GroupNonUniformBitwiseXor 34 InclusiveScan 1345
+            1347:     72(ptr) AccessChain 27(data) 1343 38
+                              Store 1347 1346
+            1348:      6(int) Load 8(invocation)
+            1349:     95(ptr) AccessChain 27(data) 29 49 30
+            1350:      6(int) Load 1349
+            1351:      6(int) GroupNonUniformBitwiseXor 34 InclusiveScan 1350
+            1352:     95(ptr) AccessChain 27(data) 1348 49 30
+                              Store 1352 1351
+            1353:      6(int) Load 8(invocation)
+            1354:    102(ptr) AccessChain 27(data) 38 49
+            1355:   21(ivec4) Load 1354
+            1356:  101(ivec2) VectorShuffle 1355 1355 0 1
+            1357:  101(ivec2) GroupNonUniformBitwiseXor 34 InclusiveScan 1356
+            1358:    102(ptr) AccessChain 27(data) 1353 49
+            1359:   21(ivec4) Load 1358
+            1360:   21(ivec4) VectorShuffle 1359 1357 4 5 2 3
+                              Store 1358 1360
+            1361:      6(int) Load 8(invocation)
+            1362:    102(ptr) AccessChain 27(data) 49 49
+            1363:   21(ivec4) Load 1362
+            1364:  111(ivec3) VectorShuffle 1363 1363 0 1 2
+            1365:  111(ivec3) GroupNonUniformBitwiseXor 34 InclusiveScan 1364
+            1366:    102(ptr) AccessChain 27(data) 1361 49
+            1367:   21(ivec4) Load 1366
+            1368:   21(ivec4) VectorShuffle 1367 1365 4 5 6 3
+                              Store 1366 1368
+            1369:      6(int) Load 8(invocation)
+            1370:    102(ptr) AccessChain 27(data) 59 49
+            1371:   21(ivec4) Load 1370
+            1372:   21(ivec4) GroupNonUniformBitwiseXor 34 InclusiveScan 1371
+            1373:    102(ptr) AccessChain 27(data) 1369 49
+                              Store 1373 1372
+            1374:      6(int) Load 8(invocation)
+            1375:     65(ptr) AccessChain 27(data) 29 38 30
+            1376:     19(int) Load 1375
+            1377:   521(bool) SLessThan 1376 29
+            1378:   521(bool) GroupNonUniformLogicalXor 34 InclusiveScan 1377
+            1379:     19(int) Select 1378 38 29
+            1380:     65(ptr) AccessChain 27(data) 1374 38 30
+                              Store 1380 1379
+            1381:      6(int) Load 8(invocation)
+            1382:     72(ptr) AccessChain 27(data) 38 38
+            1383:   20(ivec4) Load 1382
+            1384:   71(ivec2) VectorShuffle 1383 1383 0 1
+            1385:  531(bvec2) SLessThan 1384 530
+            1386:  531(bvec2) GroupNonUniformLogicalXor 34 InclusiveScan 1385
+            1387:   71(ivec2) Select 1386 534 530
+            1388:     72(ptr) AccessChain 27(data) 1381 38
+            1389:   20(ivec4) Load 1388
+            1390:   20(ivec4) VectorShuffle 1389 1387 4 5 2 3
+                              Store 1388 1390
+            1391:      6(int) Load 8(invocation)
+            1392:     72(ptr) AccessChain 27(data) 38 38
+            1393:   20(ivec4) Load 1392
+            1394:   81(ivec3) VectorShuffle 1393 1393 0 1 2
+            1395:  544(bvec3) SLessThan 1394 543
+            1396:  544(bvec3) GroupNonUniformLogicalXor 34 InclusiveScan 1395
+            1397:   81(ivec3) Select 1396 547 543
+            1398:     72(ptr) AccessChain 27(data) 1391 38
+            1399:   20(ivec4) Load 1398
+            1400:   20(ivec4) VectorShuffle 1399 1397 4 5 6 3
+                              Store 1398 1400
+            1401:      6(int) Load 8(invocation)
+            1402:     72(ptr) AccessChain 27(data) 38 38
+            1403:   20(ivec4) Load 1402
+            1404:  556(bvec4) SLessThan 1403 555
+            1405:  556(bvec4) GroupNonUniformLogicalXor 34 InclusiveScan 1404
+            1406:   20(ivec4) Select 1405 559 555
+            1407:     72(ptr) AccessChain 27(data) 1401 38
+                              Store 1407 1406
+            1408:      6(int) Load 8(invocation)
+            1409:     31(ptr) AccessChain 27(data) 29 29 30
+            1410:   17(float) Load 1409
+            1411:   17(float) GroupNonUniformFAdd 34 ExclusiveScan 1410
+            1412:     31(ptr) AccessChain 27(data) 1408 29 30
+                              Store 1412 1411
+            1413:      6(int) Load 8(invocation)
+            1414:     40(ptr) AccessChain 27(data) 38 29
+            1415:   18(fvec4) Load 1414
+            1416:   39(fvec2) VectorShuffle 1415 1415 0 1
+            1417:   39(fvec2) GroupNonUniformFAdd 34 ExclusiveScan 1416
+            1418:     40(ptr) AccessChain 27(data) 1413 29
+            1419:   18(fvec4) Load 1418
+            1420:   18(fvec4) VectorShuffle 1419 1417 4 5 2 3
+                              Store 1418 1420
+            1421:      6(int) Load 8(invocation)
+            1422:     40(ptr) AccessChain 27(data) 49 29
+            1423:   18(fvec4) Load 1422
+            1424:   50(fvec3) VectorShuffle 1423 1423 0 1 2
+            1425:   50(fvec3) GroupNonUniformFAdd 34 ExclusiveScan 1424
+            1426:     40(ptr) AccessChain 27(data) 1421 29
+            1427:   18(fvec4) Load 1426
+            1428:   18(fvec4) VectorShuffle 1427 1425 4 5 6 3
+                              Store 1426 1428
+            1429:      6(int) Load 8(invocation)
+            1430:     40(ptr) AccessChain 27(data) 59 29
+            1431:   18(fvec4) Load 1430
+            1432:   18(fvec4) GroupNonUniformFAdd 34 ExclusiveScan 1431
+            1433:     40(ptr) AccessChain 27(data) 1429 29
+                              Store 1433 1432
+            1434:      6(int) Load 8(invocation)
+            1435:     65(ptr) AccessChain 27(data) 29 38 30
+            1436:     19(int) Load 1435
+            1437:     19(int) GroupNonUniformIAdd 34 ExclusiveScan 1436
+            1438:     65(ptr) AccessChain 27(data) 1434 38 30
+                              Store 1438 1437
+            1439:      6(int) Load 8(invocation)
+            1440:     72(ptr) AccessChain 27(data) 38 38
+            1441:   20(ivec4) Load 1440
+            1442:   71(ivec2) VectorShuffle 1441 1441 0 1
+            1443:   71(ivec2) GroupNonUniformIAdd 34 ExclusiveScan 1442
+            1444:     72(ptr) AccessChain 27(data) 1439 38
+            1445:   20(ivec4) Load 1444
+            1446:   20(ivec4) VectorShuffle 1445 1443 4 5 2 3
+                              Store 1444 1446
+            1447:      6(int) Load 8(invocation)
+            1448:     72(ptr) AccessChain 27(data) 49 38
+            1449:   20(ivec4) Load 1448
+            1450:   81(ivec3) VectorShuffle 1449 1449 0 1 2
+            1451:   81(ivec3) GroupNonUniformIAdd 34 ExclusiveScan 1450
+            1452:     72(ptr) AccessChain 27(data) 1447 38
+            1453:   20(ivec4) Load 1452
+            1454:   20(ivec4) VectorShuffle 1453 1451 4 5 6 3
+                              Store 1452 1454
+            1455:      6(int) Load 8(invocation)
+            1456:     72(ptr) AccessChain 27(data) 59 38
+            1457:   20(ivec4) Load 1456
+            1458:   20(ivec4) GroupNonUniformIAdd 34 ExclusiveScan 1457
+            1459:     72(ptr) AccessChain 27(data) 1455 38
+                              Store 1459 1458
+            1460:      6(int) Load 8(invocation)
+            1461:     95(ptr) AccessChain 27(data) 29 49 30
+            1462:      6(int) Load 1461
+            1463:      6(int) GroupNonUniformIAdd 34 ExclusiveScan 1462
+            1464:     95(ptr) AccessChain 27(data) 1460 49 30
+                              Store 1464 1463
+            1465:      6(int) Load 8(invocation)
+            1466:    102(ptr) AccessChain 27(data) 38 49
+            1467:   21(ivec4) Load 1466
+            1468:  101(ivec2) VectorShuffle 1467 1467 0 1
+            1469:  101(ivec2) GroupNonUniformIAdd 34 ExclusiveScan 1468
+            1470:    102(ptr) AccessChain 27(data) 1465 49
+            1471:   21(ivec4) Load 1470
+            1472:   21(ivec4) VectorShuffle 1471 1469 4 5 2 3
+                              Store 1470 1472
+            1473:      6(int) Load 8(invocation)
+            1474:    102(ptr) AccessChain 27(data) 49 49
+            1475:   21(ivec4) Load 1474
+            1476:  111(ivec3) VectorShuffle 1475 1475 0 1 2
+            1477:  111(ivec3) GroupNonUniformIAdd 34 ExclusiveScan 1476
+            1478:    102(ptr) AccessChain 27(data) 1473 49
+            1479:   21(ivec4) Load 1478
+            1480:   21(ivec4) VectorShuffle 1479 1477 4 5 6 3
+                              Store 1478 1480
+            1481:      6(int) Load 8(invocation)
+            1482:    102(ptr) AccessChain 27(data) 59 49
+            1483:   21(ivec4) Load 1482
+            1484:   21(ivec4) GroupNonUniformIAdd 34 ExclusiveScan 1483
+            1485:    102(ptr) AccessChain 27(data) 1481 49
+                              Store 1485 1484
+            1486:      6(int) Load 8(invocation)
+            1487:    125(ptr) AccessChain 27(data) 29 59 30
+            1488:   22(float) Load 1487
+            1489:   22(float) GroupNonUniformFAdd 34 ExclusiveScan 1488
+            1490:    125(ptr) AccessChain 27(data) 1486 59 30
+                              Store 1490 1489
+            1491:      6(int) Load 8(invocation)
+            1492:    132(ptr) AccessChain 27(data) 38 59
+            1493:   23(fvec4) Load 1492
+            1494:  131(fvec2) VectorShuffle 1493 1493 0 1
+            1495:  131(fvec2) GroupNonUniformFAdd 34 ExclusiveScan 1494
+            1496:    132(ptr) AccessChain 27(data) 1491 59
+            1497:   23(fvec4) Load 1496
+            1498:   23(fvec4) VectorShuffle 1497 1495 4 5 2 3
+                              Store 1496 1498
+            1499:      6(int) Load 8(invocation)
+            1500:    132(ptr) AccessChain 27(data) 49 59
+            1501:   23(fvec4) Load 1500
+            1502:  141(fvec3) VectorShuffle 1501 1501 0 1 2
+            1503:  141(fvec3) GroupNonUniformFAdd 34 ExclusiveScan 1502
+            1504:    132(ptr) AccessChain 27(data) 1499 59
+            1505:   23(fvec4) Load 1504
+            1506:   23(fvec4) VectorShuffle 1505 1503 4 5 6 3
+                              Store 1504 1506
+            1507:      6(int) Load 8(invocation)
+            1508:    132(ptr) AccessChain 27(data) 59 59
+            1509:   23(fvec4) Load 1508
+            1510:   23(fvec4) GroupNonUniformFAdd 34 ExclusiveScan 1509
+            1511:    132(ptr) AccessChain 27(data) 1507 59
+                              Store 1511 1510
+            1512:      6(int) Load 8(invocation)
+            1513:     31(ptr) AccessChain 27(data) 29 29 30
+            1514:   17(float) Load 1513
+            1515:   17(float) GroupNonUniformFMul 34 ExclusiveScan 1514
+            1516:     31(ptr) AccessChain 27(data) 1512 29 30
+                              Store 1516 1515
+            1517:      6(int) Load 8(invocation)
+            1518:     40(ptr) AccessChain 27(data) 38 29
+            1519:   18(fvec4) Load 1518
+            1520:   39(fvec2) VectorShuffle 1519 1519 0 1
+            1521:   39(fvec2) GroupNonUniformFMul 34 ExclusiveScan 1520
+            1522:     40(ptr) AccessChain 27(data) 1517 29
+            1523:   18(fvec4) Load 1522
+            1524:   18(fvec4) VectorShuffle 1523 1521 4 5 2 3
+                              Store 1522 1524
+            1525:      6(int) Load 8(invocation)
+            1526:     40(ptr) AccessChain 27(data) 49 29
+            1527:   18(fvec4) Load 1526
+            1528:   50(fvec3) VectorShuffle 1527 1527 0 1 2
+            1529:   50(fvec3) GroupNonUniformFMul 34 ExclusiveScan 1528
+            1530:     40(ptr) AccessChain 27(data) 1525 29
+            1531:   18(fvec4) Load 1530
+            1532:   18(fvec4) VectorShuffle 1531 1529 4 5 6 3
+                              Store 1530 1532
+            1533:      6(int) Load 8(invocation)
+            1534:     40(ptr) AccessChain 27(data) 59 29
+            1535:   18(fvec4) Load 1534
+            1536:   18(fvec4) GroupNonUniformFMul 34 ExclusiveScan 1535
+            1537:     40(ptr) AccessChain 27(data) 1533 29
+                              Store 1537 1536
+            1538:      6(int) Load 8(invocation)
+            1539:     65(ptr) AccessChain 27(data) 29 38 30
+            1540:     19(int) Load 1539
+            1541:     19(int) GroupNonUniformIMul 34 ExclusiveScan 1540
+            1542:     65(ptr) AccessChain 27(data) 1538 38 30
+                              Store 1542 1541
+            1543:      6(int) Load 8(invocation)
+            1544:     72(ptr) AccessChain 27(data) 38 38
+            1545:   20(ivec4) Load 1544
+            1546:   71(ivec2) VectorShuffle 1545 1545 0 1
+            1547:   71(ivec2) GroupNonUniformIMul 34 ExclusiveScan 1546
+            1548:     72(ptr) AccessChain 27(data) 1543 38
+            1549:   20(ivec4) Load 1548
+            1550:   20(ivec4) VectorShuffle 1549 1547 4 5 2 3
+                              Store 1548 1550
+            1551:      6(int) Load 8(invocation)
+            1552:     72(ptr) AccessChain 27(data) 49 38
+            1553:   20(ivec4) Load 1552
+            1554:   81(ivec3) VectorShuffle 1553 1553 0 1 2
+            1555:   81(ivec3) GroupNonUniformIMul 34 ExclusiveScan 1554
+            1556:     72(ptr) AccessChain 27(data) 1551 38
+            1557:   20(ivec4) Load 1556
+            1558:   20(ivec4) VectorShuffle 1557 1555 4 5 6 3
+                              Store 1556 1558
+            1559:      6(int) Load 8(invocation)
+            1560:     72(ptr) AccessChain 27(data) 59 38
+            1561:   20(ivec4) Load 1560
+            1562:   20(ivec4) GroupNonUniformIMul 34 ExclusiveScan 1561
+            1563:     72(ptr) AccessChain 27(data) 1559 38
+                              Store 1563 1562
+            1564:      6(int) Load 8(invocation)
+            1565:     95(ptr) AccessChain 27(data) 29 49 30
+            1566:      6(int) Load 1565
+            1567:      6(int) GroupNonUniformIMul 34 ExclusiveScan 1566
+            1568:     95(ptr) AccessChain 27(data) 1564 49 30
+                              Store 1568 1567
+            1569:      6(int) Load 8(invocation)
+            1570:    102(ptr) AccessChain 27(data) 38 49
+            1571:   21(ivec4) Load 1570
+            1572:  101(ivec2) VectorShuffle 1571 1571 0 1
+            1573:  101(ivec2) GroupNonUniformIMul 34 ExclusiveScan 1572
+            1574:    102(ptr) AccessChain 27(data) 1569 49
+            1575:   21(ivec4) Load 1574
+            1576:   21(ivec4) VectorShuffle 1575 1573 4 5 2 3
+                              Store 1574 1576
+            1577:      6(int) Load 8(invocation)
+            1578:    102(ptr) AccessChain 27(data) 49 49
+            1579:   21(ivec4) Load 1578
+            1580:  111(ivec3) VectorShuffle 1579 1579 0 1 2
+            1581:  111(ivec3) GroupNonUniformIMul 34 ExclusiveScan 1580
+            1582:    102(ptr) AccessChain 27(data) 1577 49
+            1583:   21(ivec4) Load 1582
+            1584:   21(ivec4) VectorShuffle 1583 1581 4 5 6 3
+                              Store 1582 1584
+            1585:      6(int) Load 8(invocation)
+            1586:    102(ptr) AccessChain 27(data) 59 49
+            1587:   21(ivec4) Load 1586
+            1588:   21(ivec4) GroupNonUniformIMul 34 ExclusiveScan 1587
+            1589:    102(ptr) AccessChain 27(data) 1585 49
+                              Store 1589 1588
+            1590:      6(int) Load 8(invocation)
+            1591:    125(ptr) AccessChain 27(data) 29 59 30
+            1592:   22(float) Load 1591
+            1593:   22(float) GroupNonUniformFMul 34 ExclusiveScan 1592
+            1594:    125(ptr) AccessChain 27(data) 1590 59 30
+                              Store 1594 1593
+            1595:      6(int) Load 8(invocation)
+            1596:    132(ptr) AccessChain 27(data) 38 59
+            1597:   23(fvec4) Load 1596
+            1598:  131(fvec2) VectorShuffle 1597 1597 0 1
+            1599:  131(fvec2) GroupNonUniformFMul 34 ExclusiveScan 1598
+            1600:    132(ptr) AccessChain 27(data) 1595 59
+            1601:   23(fvec4) Load 1600
+            1602:   23(fvec4) VectorShuffle 1601 1599 4 5 2 3
+                              Store 1600 1602
+            1603:      6(int) Load 8(invocation)
+            1604:    132(ptr) AccessChain 27(data) 49 59
+            1605:   23(fvec4) Load 1604
+            1606:  141(fvec3) VectorShuffle 1605 1605 0 1 2
+            1607:  141(fvec3) GroupNonUniformFMul 34 ExclusiveScan 1606
+            1608:    132(ptr) AccessChain 27(data) 1603 59
+            1609:   23(fvec4) Load 1608
+            1610:   23(fvec4) VectorShuffle 1609 1607 4 5 6 3
+                              Store 1608 1610
+            1611:      6(int) Load 8(invocation)
+            1612:    132(ptr) AccessChain 27(data) 59 59
+            1613:   23(fvec4) Load 1612
+            1614:   23(fvec4) GroupNonUniformFMul 34 ExclusiveScan 1613
+            1615:    132(ptr) AccessChain 27(data) 1611 59
+                              Store 1615 1614
+            1616:      6(int) Load 8(invocation)
+            1617:     31(ptr) AccessChain 27(data) 29 29 30
+            1618:   17(float) Load 1617
+            1619:   17(float) GroupNonUniformFMin 34 ExclusiveScan 1618
+            1620:     31(ptr) AccessChain 27(data) 1616 29 30
+                              Store 1620 1619
+            1621:      6(int) Load 8(invocation)
+            1622:     40(ptr) AccessChain 27(data) 38 29
+            1623:   18(fvec4) Load 1622
+            1624:   39(fvec2) VectorShuffle 1623 1623 0 1
+            1625:   39(fvec2) GroupNonUniformFMin 34 ExclusiveScan 1624
+            1626:     40(ptr) AccessChain 27(data) 1621 29
+            1627:   18(fvec4) Load 1626
+            1628:   18(fvec4) VectorShuffle 1627 1625 4 5 2 3
+                              Store 1626 1628
+            1629:      6(int) Load 8(invocation)
+            1630:     40(ptr) AccessChain 27(data) 49 29
+            1631:   18(fvec4) Load 1630
+            1632:   50(fvec3) VectorShuffle 1631 1631 0 1 2
+            1633:   50(fvec3) GroupNonUniformFMin 34 ExclusiveScan 1632
+            1634:     40(ptr) AccessChain 27(data) 1629 29
+            1635:   18(fvec4) Load 1634
+            1636:   18(fvec4) VectorShuffle 1635 1633 4 5 6 3
+                              Store 1634 1636
+            1637:      6(int) Load 8(invocation)
+            1638:     40(ptr) AccessChain 27(data) 59 29
+            1639:   18(fvec4) Load 1638
+            1640:   18(fvec4) GroupNonUniformFMin 34 ExclusiveScan 1639
+            1641:     40(ptr) AccessChain 27(data) 1637 29
+                              Store 1641 1640
+            1642:      6(int) Load 8(invocation)
+            1643:     65(ptr) AccessChain 27(data) 29 38 30
+            1644:     19(int) Load 1643
+            1645:     19(int) GroupNonUniformSMin 34 ExclusiveScan 1644
+            1646:     65(ptr) AccessChain 27(data) 1642 38 30
+                              Store 1646 1645
+            1647:      6(int) Load 8(invocation)
+            1648:     72(ptr) AccessChain 27(data) 38 38
+            1649:   20(ivec4) Load 1648
+            1650:   71(ivec2) VectorShuffle 1649 1649 0 1
+            1651:   71(ivec2) GroupNonUniformSMin 34 ExclusiveScan 1650
+            1652:     72(ptr) AccessChain 27(data) 1647 38
+            1653:   20(ivec4) Load 1652
+            1654:   20(ivec4) VectorShuffle 1653 1651 4 5 2 3
+                              Store 1652 1654
+            1655:      6(int) Load 8(invocation)
+            1656:     72(ptr) AccessChain 27(data) 49 38
+            1657:   20(ivec4) Load 1656
+            1658:   81(ivec3) VectorShuffle 1657 1657 0 1 2
+            1659:   81(ivec3) GroupNonUniformSMin 34 ExclusiveScan 1658
+            1660:     72(ptr) AccessChain 27(data) 1655 38
+            1661:   20(ivec4) Load 1660
+            1662:   20(ivec4) VectorShuffle 1661 1659 4 5 6 3
+                              Store 1660 1662
+            1663:      6(int) Load 8(invocation)
+            1664:     72(ptr) AccessChain 27(data) 59 38
+            1665:   20(ivec4) Load 1664
+            1666:   20(ivec4) GroupNonUniformSMin 34 ExclusiveScan 1665
+            1667:     72(ptr) AccessChain 27(data) 1663 38
+                              Store 1667 1666
+            1668:      6(int) Load 8(invocation)
+            1669:     95(ptr) AccessChain 27(data) 29 49 30
+            1670:      6(int) Load 1669
+            1671:      6(int) GroupNonUniformUMin 34 ExclusiveScan 1670
+            1672:     95(ptr) AccessChain 27(data) 1668 49 30
+                              Store 1672 1671
+            1673:      6(int) Load 8(invocation)
+            1674:    102(ptr) AccessChain 27(data) 38 49
+            1675:   21(ivec4) Load 1674
+            1676:  101(ivec2) VectorShuffle 1675 1675 0 1
+            1677:  101(ivec2) GroupNonUniformUMin 34 ExclusiveScan 1676
+            1678:    102(ptr) AccessChain 27(data) 1673 49
+            1679:   21(ivec4) Load 1678
+            1680:   21(ivec4) VectorShuffle 1679 1677 4 5 2 3
+                              Store 1678 1680
+            1681:      6(int) Load 8(invocation)
+            1682:    102(ptr) AccessChain 27(data) 49 49
+            1683:   21(ivec4) Load 1682
+            1684:  111(ivec3) VectorShuffle 1683 1683 0 1 2
+            1685:  111(ivec3) GroupNonUniformUMin 34 ExclusiveScan 1684
+            1686:    102(ptr) AccessChain 27(data) 1681 49
+            1687:   21(ivec4) Load 1686
+            1688:   21(ivec4) VectorShuffle 1687 1685 4 5 6 3
+                              Store 1686 1688
+            1689:      6(int) Load 8(invocation)
+            1690:    102(ptr) AccessChain 27(data) 59 49
+            1691:   21(ivec4) Load 1690
+            1692:   21(ivec4) GroupNonUniformUMin 34 ExclusiveScan 1691
+            1693:    102(ptr) AccessChain 27(data) 1689 49
+                              Store 1693 1692
+            1694:      6(int) Load 8(invocation)
+            1695:    125(ptr) AccessChain 27(data) 29 59 30
+            1696:   22(float) Load 1695
+            1697:   22(float) GroupNonUniformFMin 34 ExclusiveScan 1696
+            1698:    125(ptr) AccessChain 27(data) 1694 59 30
+                              Store 1698 1697
+            1699:      6(int) Load 8(invocation)
+            1700:    132(ptr) AccessChain 27(data) 38 59
+            1701:   23(fvec4) Load 1700
+            1702:  131(fvec2) VectorShuffle 1701 1701 0 1
+            1703:  131(fvec2) GroupNonUniformFMin 34 ExclusiveScan 1702
+            1704:    132(ptr) AccessChain 27(data) 1699 59
+            1705:   23(fvec4) Load 1704
+            1706:   23(fvec4) VectorShuffle 1705 1703 4 5 2 3
+                              Store 1704 1706
+            1707:      6(int) Load 8(invocation)
+            1708:    132(ptr) AccessChain 27(data) 49 59
+            1709:   23(fvec4) Load 1708
+            1710:  141(fvec3) VectorShuffle 1709 1709 0 1 2
+            1711:  141(fvec3) GroupNonUniformFMin 34 ExclusiveScan 1710
+            1712:    132(ptr) AccessChain 27(data) 1707 59
+            1713:   23(fvec4) Load 1712
+            1714:   23(fvec4) VectorShuffle 1713 1711 4 5 6 3
+                              Store 1712 1714
+            1715:      6(int) Load 8(invocation)
+            1716:    132(ptr) AccessChain 27(data) 59 59
+            1717:   23(fvec4) Load 1716
+            1718:   23(fvec4) GroupNonUniformFMin 34 ExclusiveScan 1717
+            1719:    132(ptr) AccessChain 27(data) 1715 59
+                              Store 1719 1718
+            1720:      6(int) Load 8(invocation)
+            1721:     31(ptr) AccessChain 27(data) 29 29 30
+            1722:   17(float) Load 1721
+            1723:   17(float) GroupNonUniformFMax 34 ExclusiveScan 1722
+            1724:     31(ptr) AccessChain 27(data) 1720 29 30
+                              Store 1724 1723
+            1725:      6(int) Load 8(invocation)
+            1726:     40(ptr) AccessChain 27(data) 38 29
+            1727:   18(fvec4) Load 1726
+            1728:   39(fvec2) VectorShuffle 1727 1727 0 1
+            1729:   39(fvec2) GroupNonUniformFMax 34 ExclusiveScan 1728
+            1730:     40(ptr) AccessChain 27(data) 1725 29
+            1731:   18(fvec4) Load 1730
+            1732:   18(fvec4) VectorShuffle 1731 1729 4 5 2 3
+                              Store 1730 1732
+            1733:      6(int) Load 8(invocation)
+            1734:     40(ptr) AccessChain 27(data) 49 29
+            1735:   18(fvec4) Load 1734
+            1736:   50(fvec3) VectorShuffle 1735 1735 0 1 2
+            1737:   50(fvec3) GroupNonUniformFMax 34 ExclusiveScan 1736
+            1738:     40(ptr) AccessChain 27(data) 1733 29
+            1739:   18(fvec4) Load 1738
+            1740:   18(fvec4) VectorShuffle 1739 1737 4 5 6 3
+                              Store 1738 1740
+            1741:      6(int) Load 8(invocation)
+            1742:     40(ptr) AccessChain 27(data) 59 29
+            1743:   18(fvec4) Load 1742
+            1744:   18(fvec4) GroupNonUniformFMax 34 ExclusiveScan 1743
+            1745:     40(ptr) AccessChain 27(data) 1741 29
+                              Store 1745 1744
+            1746:      6(int) Load 8(invocation)
+            1747:     65(ptr) AccessChain 27(data) 29 38 30
+            1748:     19(int) Load 1747
+            1749:     19(int) GroupNonUniformSMax 34 ExclusiveScan 1748
+            1750:     65(ptr) AccessChain 27(data) 1746 38 30
+                              Store 1750 1749
+            1751:      6(int) Load 8(invocation)
+            1752:     72(ptr) AccessChain 27(data) 38 38
+            1753:   20(ivec4) Load 1752
+            1754:   71(ivec2) VectorShuffle 1753 1753 0 1
+            1755:   71(ivec2) GroupNonUniformSMax 34 ExclusiveScan 1754
+            1756:     72(ptr) AccessChain 27(data) 1751 38
+            1757:   20(ivec4) Load 1756
+            1758:   20(ivec4) VectorShuffle 1757 1755 4 5 2 3
+                              Store 1756 1758
+            1759:      6(int) Load 8(invocation)
+            1760:     72(ptr) AccessChain 27(data) 49 38
+            1761:   20(ivec4) Load 1760
+            1762:   81(ivec3) VectorShuffle 1761 1761 0 1 2
+            1763:   81(ivec3) GroupNonUniformSMax 34 ExclusiveScan 1762
+            1764:     72(ptr) AccessChain 27(data) 1759 38
+            1765:   20(ivec4) Load 1764
+            1766:   20(ivec4) VectorShuffle 1765 1763 4 5 6 3
+                              Store 1764 1766
+            1767:      6(int) Load 8(invocation)
+            1768:     72(ptr) AccessChain 27(data) 59 38
+            1769:   20(ivec4) Load 1768
+            1770:   20(ivec4) GroupNonUniformSMax 34 ExclusiveScan 1769
+            1771:     72(ptr) AccessChain 27(data) 1767 38
+                              Store 1771 1770
+            1772:      6(int) Load 8(invocation)
+            1773:     95(ptr) AccessChain 27(data) 29 49 30
+            1774:      6(int) Load 1773
+            1775:      6(int) GroupNonUniformUMax 34 ExclusiveScan 1774
+            1776:     95(ptr) AccessChain 27(data) 1772 49 30
+                              Store 1776 1775
+            1777:      6(int) Load 8(invocation)
+            1778:    102(ptr) AccessChain 27(data) 38 49
+            1779:   21(ivec4) Load 1778
+            1780:  101(ivec2) VectorShuffle 1779 1779 0 1
+            1781:  101(ivec2) GroupNonUniformUMax 34 ExclusiveScan 1780
+            1782:    102(ptr) AccessChain 27(data) 1777 49
+            1783:   21(ivec4) Load 1782
+            1784:   21(ivec4) VectorShuffle 1783 1781 4 5 2 3
+                              Store 1782 1784
+            1785:      6(int) Load 8(invocation)
+            1786:    102(ptr) AccessChain 27(data) 49 49
+            1787:   21(ivec4) Load 1786
+            1788:  111(ivec3) VectorShuffle 1787 1787 0 1 2
+            1789:  111(ivec3) GroupNonUniformUMax 34 ExclusiveScan 1788
+            1790:    102(ptr) AccessChain 27(data) 1785 49
+            1791:   21(ivec4) Load 1790
+            1792:   21(ivec4) VectorShuffle 1791 1789 4 5 6 3
+                              Store 1790 1792
+            1793:      6(int) Load 8(invocation)
+            1794:    102(ptr) AccessChain 27(data) 59 49
+            1795:   21(ivec4) Load 1794
+            1796:   21(ivec4) GroupNonUniformUMax 34 ExclusiveScan 1795
+            1797:    102(ptr) AccessChain 27(data) 1793 49
+                              Store 1797 1796
+            1798:      6(int) Load 8(invocation)
+            1799:    125(ptr) AccessChain 27(data) 29 59 30
+            1800:   22(float) Load 1799
+            1801:   22(float) GroupNonUniformFMax 34 ExclusiveScan 1800
+            1802:    125(ptr) AccessChain 27(data) 1798 59 30
+                              Store 1802 1801
+            1803:      6(int) Load 8(invocation)
+            1804:    132(ptr) AccessChain 27(data) 38 59
+            1805:   23(fvec4) Load 1804
+            1806:  131(fvec2) VectorShuffle 1805 1805 0 1
+            1807:  131(fvec2) GroupNonUniformFMax 34 ExclusiveScan 1806
+            1808:    132(ptr) AccessChain 27(data) 1803 59
+            1809:   23(fvec4) Load 1808
+            1810:   23(fvec4) VectorShuffle 1809 1807 4 5 2 3
+                              Store 1808 1810
+            1811:      6(int) Load 8(invocation)
+            1812:    132(ptr) AccessChain 27(data) 49 59
+            1813:   23(fvec4) Load 1812
+            1814:  141(fvec3) VectorShuffle 1813 1813 0 1 2
+            1815:  141(fvec3) GroupNonUniformFMax 34 ExclusiveScan 1814
+            1816:    132(ptr) AccessChain 27(data) 1811 59
+            1817:   23(fvec4) Load 1816
+            1818:   23(fvec4) VectorShuffle 1817 1815 4 5 6 3
+                              Store 1816 1818
+            1819:      6(int) Load 8(invocation)
+            1820:    132(ptr) AccessChain 27(data) 59 59
+            1821:   23(fvec4) Load 1820
+            1822:   23(fvec4) GroupNonUniformFMax 34 ExclusiveScan 1821
+            1823:    132(ptr) AccessChain 27(data) 1819 59
+                              Store 1823 1822
+            1824:      6(int) Load 8(invocation)
+            1825:     65(ptr) AccessChain 27(data) 29 38 30
+            1826:     19(int) Load 1825
+            1827:     19(int) GroupNonUniformBitwiseAnd 34 ExclusiveScan 1826
+            1828:     65(ptr) AccessChain 27(data) 1824 38 30
+                              Store 1828 1827
+            1829:      6(int) Load 8(invocation)
+            1830:     72(ptr) AccessChain 27(data) 38 38
+            1831:   20(ivec4) Load 1830
+            1832:   71(ivec2) VectorShuffle 1831 1831 0 1
+            1833:   71(ivec2) GroupNonUniformBitwiseAnd 34 ExclusiveScan 1832
+            1834:     72(ptr) AccessChain 27(data) 1829 38
+            1835:   20(ivec4) Load 1834
+            1836:   20(ivec4) VectorShuffle 1835 1833 4 5 2 3
+                              Store 1834 1836
+            1837:      6(int) Load 8(invocation)
+            1838:     72(ptr) AccessChain 27(data) 49 38
+            1839:   20(ivec4) Load 1838
+            1840:   81(ivec3) VectorShuffle 1839 1839 0 1 2
+            1841:   81(ivec3) GroupNonUniformBitwiseAnd 34 ExclusiveScan 1840
+            1842:     72(ptr) AccessChain 27(data) 1837 38
+            1843:   20(ivec4) Load 1842
+            1844:   20(ivec4) VectorShuffle 1843 1841 4 5 6 3
+                              Store 1842 1844
+            1845:      6(int) Load 8(invocation)
+            1846:     72(ptr) AccessChain 27(data) 59 38
+            1847:   20(ivec4) Load 1846
+            1848:   20(ivec4) GroupNonUniformBitwiseAnd 34 ExclusiveScan 1847
+            1849:     72(ptr) AccessChain 27(data) 1845 38
+                              Store 1849 1848
+            1850:      6(int) Load 8(invocation)
+            1851:     95(ptr) AccessChain 27(data) 29 49 30
+            1852:      6(int) Load 1851
+            1853:      6(int) GroupNonUniformBitwiseAnd 34 ExclusiveScan 1852
+            1854:     95(ptr) AccessChain 27(data) 1850 49 30
+                              Store 1854 1853
+            1855:      6(int) Load 8(invocation)
+            1856:    102(ptr) AccessChain 27(data) 38 49
+            1857:   21(ivec4) Load 1856
+            1858:  101(ivec2) VectorShuffle 1857 1857 0 1
+            1859:  101(ivec2) GroupNonUniformBitwiseAnd 34 ExclusiveScan 1858
+            1860:    102(ptr) AccessChain 27(data) 1855 49
+            1861:   21(ivec4) Load 1860
+            1862:   21(ivec4) VectorShuffle 1861 1859 4 5 2 3
+                              Store 1860 1862
+            1863:      6(int) Load 8(invocation)
+            1864:    102(ptr) AccessChain 27(data) 49 49
+            1865:   21(ivec4) Load 1864
+            1866:  111(ivec3) VectorShuffle 1865 1865 0 1 2
+            1867:  111(ivec3) GroupNonUniformBitwiseAnd 34 ExclusiveScan 1866
+            1868:    102(ptr) AccessChain 27(data) 1863 49
+            1869:   21(ivec4) Load 1868
+            1870:   21(ivec4) VectorShuffle 1869 1867 4 5 6 3
+                              Store 1868 1870
+            1871:      6(int) Load 8(invocation)
+            1872:    102(ptr) AccessChain 27(data) 59 49
+            1873:   21(ivec4) Load 1872
+            1874:   21(ivec4) GroupNonUniformBitwiseAnd 34 ExclusiveScan 1873
+            1875:    102(ptr) AccessChain 27(data) 1871 49
+                              Store 1875 1874
+            1876:      6(int) Load 8(invocation)
+            1877:     65(ptr) AccessChain 27(data) 29 38 30
+            1878:     19(int) Load 1877
+            1879:   521(bool) SLessThan 1878 29
+            1880:   521(bool) GroupNonUniformLogicalAnd 34 ExclusiveScan 1879
+            1881:     19(int) Select 1880 38 29
+            1882:     65(ptr) AccessChain 27(data) 1876 38 30
+                              Store 1882 1881
+            1883:      6(int) Load 8(invocation)
+            1884:     72(ptr) AccessChain 27(data) 38 38
+            1885:   20(ivec4) Load 1884
+            1886:   71(ivec2) VectorShuffle 1885 1885 0 1
+            1887:  531(bvec2) SLessThan 1886 530
+            1888:  531(bvec2) GroupNonUniformLogicalAnd 34 ExclusiveScan 1887
+            1889:   71(ivec2) Select 1888 534 530
+            1890:     72(ptr) AccessChain 27(data) 1883 38
+            1891:   20(ivec4) Load 1890
+            1892:   20(ivec4) VectorShuffle 1891 1889 4 5 2 3
+                              Store 1890 1892
+            1893:      6(int) Load 8(invocation)
+            1894:     72(ptr) AccessChain 27(data) 38 38
+            1895:   20(ivec4) Load 1894
+            1896:   81(ivec3) VectorShuffle 1895 1895 0 1 2
+            1897:  544(bvec3) SLessThan 1896 543
+            1898:  544(bvec3) GroupNonUniformLogicalAnd 34 ExclusiveScan 1897
+            1899:   81(ivec3) Select 1898 547 543
+            1900:     72(ptr) AccessChain 27(data) 1893 38
+            1901:   20(ivec4) Load 1900
+            1902:   20(ivec4) VectorShuffle 1901 1899 4 5 6 3
+                              Store 1900 1902
+            1903:      6(int) Load 8(invocation)
+            1904:     72(ptr) AccessChain 27(data) 38 38
+            1905:   20(ivec4) Load 1904
+            1906:  556(bvec4) SLessThan 1905 555
+            1907:  556(bvec4) GroupNonUniformLogicalAnd 34 ExclusiveScan 1906
+            1908:   20(ivec4) Select 1907 559 555
+            1909:     72(ptr) AccessChain 27(data) 1903 38
+                              Store 1909 1908
+            1910:      6(int) Load 8(invocation)
+            1911:     65(ptr) AccessChain 27(data) 29 38 30
+            1912:     19(int) Load 1911
+            1913:     19(int) GroupNonUniformBitwiseOr 34 ExclusiveScan 1912
+            1914:     65(ptr) AccessChain 27(data) 1910 38 30
+                              Store 1914 1913
+            1915:      6(int) Load 8(invocation)
+            1916:     72(ptr) AccessChain 27(data) 38 38
+            1917:   20(ivec4) Load 1916
+            1918:   71(ivec2) VectorShuffle 1917 1917 0 1
+            1919:   71(ivec2) GroupNonUniformBitwiseOr 34 ExclusiveScan 1918
+            1920:     72(ptr) AccessChain 27(data) 1915 38
+            1921:   20(ivec4) Load 1920
+            1922:   20(ivec4) VectorShuffle 1921 1919 4 5 2 3
+                              Store 1920 1922
+            1923:      6(int) Load 8(invocation)
+            1924:     72(ptr) AccessChain 27(data) 49 38
+            1925:   20(ivec4) Load 1924
+            1926:   81(ivec3) VectorShuffle 1925 1925 0 1 2
+            1927:   81(ivec3) GroupNonUniformBitwiseOr 34 ExclusiveScan 1926
+            1928:     72(ptr) AccessChain 27(data) 1923 38
+            1929:   20(ivec4) Load 1928
+            1930:   20(ivec4) VectorShuffle 1929 1927 4 5 6 3
+                              Store 1928 1930
+            1931:      6(int) Load 8(invocation)
+            1932:     72(ptr) AccessChain 27(data) 59 38
+            1933:   20(ivec4) Load 1932
+            1934:   20(ivec4) GroupNonUniformBitwiseOr 34 ExclusiveScan 1933
+            1935:     72(ptr) AccessChain 27(data) 1931 38
+                              Store 1935 1934
+            1936:      6(int) Load 8(invocation)
+            1937:     95(ptr) AccessChain 27(data) 29 49 30
+            1938:      6(int) Load 1937
+            1939:      6(int) GroupNonUniformBitwiseOr 34 ExclusiveScan 1938
+            1940:     95(ptr) AccessChain 27(data) 1936 49 30
+                              Store 1940 1939
+            1941:      6(int) Load 8(invocation)
+            1942:    102(ptr) AccessChain 27(data) 38 49
+            1943:   21(ivec4) Load 1942
+            1944:  101(ivec2) VectorShuffle 1943 1943 0 1
+            1945:  101(ivec2) GroupNonUniformBitwiseOr 34 ExclusiveScan 1944
+            1946:    102(ptr) AccessChain 27(data) 1941 49
+            1947:   21(ivec4) Load 1946
+            1948:   21(ivec4) VectorShuffle 1947 1945 4 5 2 3
+                              Store 1946 1948
+            1949:      6(int) Load 8(invocation)
+            1950:    102(ptr) AccessChain 27(data) 49 49
+            1951:   21(ivec4) Load 1950
+            1952:  111(ivec3) VectorShuffle 1951 1951 0 1 2
+            1953:  111(ivec3) GroupNonUniformBitwiseOr 34 ExclusiveScan 1952
+            1954:    102(ptr) AccessChain 27(data) 1949 49
+            1955:   21(ivec4) Load 1954
+            1956:   21(ivec4) VectorShuffle 1955 1953 4 5 6 3
+                              Store 1954 1956
+            1957:      6(int) Load 8(invocation)
+            1958:    102(ptr) AccessChain 27(data) 59 49
+            1959:   21(ivec4) Load 1958
+            1960:   21(ivec4) GroupNonUniformBitwiseOr 34 ExclusiveScan 1959
+            1961:    102(ptr) AccessChain 27(data) 1957 49
+                              Store 1961 1960
+            1962:      6(int) Load 8(invocation)
+            1963:     65(ptr) AccessChain 27(data) 29 38 30
+            1964:     19(int) Load 1963
+            1965:   521(bool) SLessThan 1964 29
+            1966:   521(bool) GroupNonUniformLogicalOr 34 ExclusiveScan 1965
+            1967:     19(int) Select 1966 38 29
+            1968:     65(ptr) AccessChain 27(data) 1962 38 30
+                              Store 1968 1967
+            1969:      6(int) Load 8(invocation)
+            1970:     72(ptr) AccessChain 27(data) 38 38
+            1971:   20(ivec4) Load 1970
+            1972:   71(ivec2) VectorShuffle 1971 1971 0 1
+            1973:  531(bvec2) SLessThan 1972 530
+            1974:  531(bvec2) GroupNonUniformLogicalOr 34 ExclusiveScan 1973
+            1975:   71(ivec2) Select 1974 534 530
+            1976:     72(ptr) AccessChain 27(data) 1969 38
+            1977:   20(ivec4) Load 1976
+            1978:   20(ivec4) VectorShuffle 1977 1975 4 5 2 3
+                              Store 1976 1978
+            1979:      6(int) Load 8(invocation)
+            1980:     72(ptr) AccessChain 27(data) 38 38
+            1981:   20(ivec4) Load 1980
+            1982:   81(ivec3) VectorShuffle 1981 1981 0 1 2
+            1983:  544(bvec3) SLessThan 1982 543
+            1984:  544(bvec3) GroupNonUniformLogicalOr 34 ExclusiveScan 1983
+            1985:   81(ivec3) Select 1984 547 543
+            1986:     72(ptr) AccessChain 27(data) 1979 38
+            1987:   20(ivec4) Load 1986
+            1988:   20(ivec4) VectorShuffle 1987 1985 4 5 6 3
+                              Store 1986 1988
+            1989:      6(int) Load 8(invocation)
+            1990:     72(ptr) AccessChain 27(data) 38 38
+            1991:   20(ivec4) Load 1990
+            1992:  556(bvec4) SLessThan 1991 555
+            1993:  556(bvec4) GroupNonUniformLogicalOr 34 ExclusiveScan 1992
+            1994:   20(ivec4) Select 1993 559 555
+            1995:     72(ptr) AccessChain 27(data) 1989 38
+                              Store 1995 1994
+            1996:      6(int) Load 8(invocation)
+            1997:     65(ptr) AccessChain 27(data) 29 38 30
+            1998:     19(int) Load 1997
+            1999:     19(int) GroupNonUniformBitwiseXor 34 ExclusiveScan 1998
+            2000:     65(ptr) AccessChain 27(data) 1996 38 30
+                              Store 2000 1999
+            2001:      6(int) Load 8(invocation)
+            2002:     72(ptr) AccessChain 27(data) 38 38
+            2003:   20(ivec4) Load 2002
+            2004:   71(ivec2) VectorShuffle 2003 2003 0 1
+            2005:   71(ivec2) GroupNonUniformBitwiseXor 34 ExclusiveScan 2004
+            2006:     72(ptr) AccessChain 27(data) 2001 38
+            2007:   20(ivec4) Load 2006
+            2008:   20(ivec4) VectorShuffle 2007 2005 4 5 2 3
+                              Store 2006 2008
+            2009:      6(int) Load 8(invocation)
+            2010:     72(ptr) AccessChain 27(data) 49 38
+            2011:   20(ivec4) Load 2010
+            2012:   81(ivec3) VectorShuffle 2011 2011 0 1 2
+            2013:   81(ivec3) GroupNonUniformBitwiseXor 34 ExclusiveScan 2012
+            2014:     72(ptr) AccessChain 27(data) 2009 38
+            2015:   20(ivec4) Load 2014
+            2016:   20(ivec4) VectorShuffle 2015 2013 4 5 6 3
+                              Store 2014 2016
+            2017:      6(int) Load 8(invocation)
+            2018:     72(ptr) AccessChain 27(data) 59 38
+            2019:   20(ivec4) Load 2018
+            2020:   20(ivec4) GroupNonUniformBitwiseXor 34 ExclusiveScan 2019
+            2021:     72(ptr) AccessChain 27(data) 2017 38
+                              Store 2021 2020
+            2022:      6(int) Load 8(invocation)
+            2023:     95(ptr) AccessChain 27(data) 29 49 30
+            2024:      6(int) Load 2023
+            2025:      6(int) GroupNonUniformBitwiseXor 34 ExclusiveScan 2024
+            2026:     95(ptr) AccessChain 27(data) 2022 49 30
+                              Store 2026 2025
+            2027:      6(int) Load 8(invocation)
+            2028:    102(ptr) AccessChain 27(data) 38 49
+            2029:   21(ivec4) Load 2028
+            2030:  101(ivec2) VectorShuffle 2029 2029 0 1
+            2031:  101(ivec2) GroupNonUniformBitwiseXor 34 ExclusiveScan 2030
+            2032:    102(ptr) AccessChain 27(data) 2027 49
+            2033:   21(ivec4) Load 2032
+            2034:   21(ivec4) VectorShuffle 2033 2031 4 5 2 3
+                              Store 2032 2034
+            2035:      6(int) Load 8(invocation)
+            2036:    102(ptr) AccessChain 27(data) 49 49
+            2037:   21(ivec4) Load 2036
+            2038:  111(ivec3) VectorShuffle 2037 2037 0 1 2
+            2039:  111(ivec3) GroupNonUniformBitwiseXor 34 ExclusiveScan 2038
+            2040:    102(ptr) AccessChain 27(data) 2035 49
+            2041:   21(ivec4) Load 2040
+            2042:   21(ivec4) VectorShuffle 2041 2039 4 5 6 3
+                              Store 2040 2042
+            2043:      6(int) Load 8(invocation)
+            2044:    102(ptr) AccessChain 27(data) 59 49
+            2045:   21(ivec4) Load 2044
+            2046:   21(ivec4) GroupNonUniformBitwiseXor 34 ExclusiveScan 2045
+            2047:    102(ptr) AccessChain 27(data) 2043 49
+                              Store 2047 2046
+            2048:      6(int) Load 8(invocation)
+            2049:     65(ptr) AccessChain 27(data) 29 38 30
+            2050:     19(int) Load 2049
+            2051:   521(bool) SLessThan 2050 29
+            2052:   521(bool) GroupNonUniformLogicalXor 34 ExclusiveScan 2051
+            2053:     19(int) Select 2052 38 29
+            2054:     65(ptr) AccessChain 27(data) 2048 38 30
+                              Store 2054 2053
+            2055:      6(int) Load 8(invocation)
+            2056:     72(ptr) AccessChain 27(data) 38 38
+            2057:   20(ivec4) Load 2056
+            2058:   71(ivec2) VectorShuffle 2057 2057 0 1
+            2059:  531(bvec2) SLessThan 2058 530
+            2060:  531(bvec2) GroupNonUniformLogicalXor 34 ExclusiveScan 2059
+            2061:   71(ivec2) Select 2060 534 530
+            2062:     72(ptr) AccessChain 27(data) 2055 38
+            2063:   20(ivec4) Load 2062
+            2064:   20(ivec4) VectorShuffle 2063 2061 4 5 2 3
+                              Store 2062 2064
+            2065:      6(int) Load 8(invocation)
+            2066:     72(ptr) AccessChain 27(data) 38 38
+            2067:   20(ivec4) Load 2066
+            2068:   81(ivec3) VectorShuffle 2067 2067 0 1 2
+            2069:  544(bvec3) SLessThan 2068 543
+            2070:  544(bvec3) GroupNonUniformLogicalXor 34 ExclusiveScan 2069
+            2071:   81(ivec3) Select 2070 547 543
+            2072:     72(ptr) AccessChain 27(data) 2065 38
+            2073:   20(ivec4) Load 2072
+            2074:   20(ivec4) VectorShuffle 2073 2071 4 5 6 3
+                              Store 2072 2074
+            2075:      6(int) Load 8(invocation)
+            2076:     72(ptr) AccessChain 27(data) 38 38
+            2077:   20(ivec4) Load 2076
+            2078:  556(bvec4) SLessThan 2077 555
+            2079:  556(bvec4) GroupNonUniformLogicalXor 34 ExclusiveScan 2078
+            2080:   20(ivec4) Select 2079 559 555
+            2081:     72(ptr) AccessChain 27(data) 2075 38
+                              Store 2081 2080
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroupBallot.comp.out b/Test/baseResults/spv.subgroupBallot.comp.out
new file mode 100644
index 0000000..01d5b62
--- /dev/null
+++ b/Test/baseResults/spv.subgroupBallot.comp.out
@@ -0,0 +1,525 @@
+spv.subgroupBallot.comp
+// Module Version 10300
+// Generated by (magic number): 80005
+// Id's are bound by 417
+
+                              Capability Shader
+                              Capability Float64
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformBallot
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 10 12 21 23 26 29 32
+                              ExecutionMode 4 LocalSize 8 8 1
+                              Source GLSL 450
+                              SourceExtension  "GL_KHR_shader_subgroup_ballot"
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              Name 4  "main"
+                              Name 8  "invocation"
+                              Name 10  "gl_SubgroupInvocationID"
+                              Name 12  "gl_SubgroupSize"
+                              Name 19  "relMask"
+                              Name 21  "gl_SubgroupEqMask"
+                              Name 23  "gl_SubgroupGeMask"
+                              Name 26  "gl_SubgroupGtMask"
+                              Name 29  "gl_SubgroupLeMask"
+                              Name 32  "gl_SubgroupLtMask"
+                              Name 35  "result"
+                              Name 46  "Buffers"
+                              MemberName 46(Buffers) 0  "f4"
+                              MemberName 46(Buffers) 1  "i4"
+                              MemberName 46(Buffers) 2  "u4"
+                              MemberName 46(Buffers) 3  "d4"
+                              Name 49  "data"
+                              Decorate 10(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 10(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 11 RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 13 RelaxedPrecision
+                              Decorate 14 RelaxedPrecision
+                              Decorate 16 RelaxedPrecision
+                              Decorate 21(gl_SubgroupEqMask) BuiltIn SubgroupEqMaskKHR
+                              Decorate 23(gl_SubgroupGeMask) BuiltIn SubgroupGeMaskKHR
+                              Decorate 26(gl_SubgroupGtMask) BuiltIn SubgroupGtMaskKHR
+                              Decorate 29(gl_SubgroupLeMask) BuiltIn SubgroupLeMaskKHR
+                              Decorate 32(gl_SubgroupLtMask) BuiltIn SubgroupLtMaskKHR
+                              MemberDecorate 46(Buffers) 0 Offset 0
+                              MemberDecorate 46(Buffers) 1 Offset 16
+                              MemberDecorate 46(Buffers) 2 Offset 32
+                              MemberDecorate 46(Buffers) 3 Offset 64
+                              Decorate 46(Buffers) BufferBlock
+                              Decorate 49(data) DescriptorSet 0
+                              Decorate 49(data) Binding 0
+                              Decorate 416 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypePointer Input 6(int)
+10(gl_SubgroupInvocationID):      9(ptr) Variable Input
+12(gl_SubgroupSize):      9(ptr) Variable Input
+              15:      6(int) Constant 4
+              17:             TypeVector 6(int) 4
+              18:             TypePointer Function 17(ivec4)
+              20:             TypePointer Input 17(ivec4)
+21(gl_SubgroupEqMask):     20(ptr) Variable Input
+23(gl_SubgroupGeMask):     20(ptr) Variable Input
+26(gl_SubgroupGtMask):     20(ptr) Variable Input
+29(gl_SubgroupLeMask):     20(ptr) Variable Input
+32(gl_SubgroupLtMask):     20(ptr) Variable Input
+              36:             TypeBool
+              37:    36(bool) ConstantTrue
+              38:      6(int) Constant 3
+              40:             TypeFloat 32
+              41:             TypeVector 40(float) 4
+              42:             TypeInt 32 1
+              43:             TypeVector 42(int) 4
+              44:             TypeFloat 64
+              45:             TypeVector 44(float) 4
+     46(Buffers):             TypeStruct 41(fvec4) 43(ivec4) 17(ivec4) 45(fvec4)
+              47:             TypeArray 46(Buffers) 15
+              48:             TypePointer Uniform 47
+        49(data):     48(ptr) Variable Uniform
+              51:     42(int) Constant 2
+              54:      6(int) Constant 0
+              55:             TypePointer Uniform 6(int)
+              60:     42(int) Constant 1
+              61:     42(int) Constant 0
+              64:      6(int) Constant 1
+              72:      6(int) Constant 2
+              83:             TypeVector 36(bool) 4
+              88:             TypePointer Uniform 17(ivec4)
+              96:             TypePointer Uniform 40(float)
+             103:             TypeVector 40(float) 2
+             104:             TypePointer Uniform 41(fvec4)
+             114:             TypeVector 40(float) 3
+             124:     42(int) Constant 3
+             131:             TypePointer Uniform 42(int)
+             138:             TypeVector 42(int) 2
+             139:             TypePointer Uniform 43(ivec4)
+             149:             TypeVector 42(int) 3
+             171:             TypeVector 6(int) 2
+             181:             TypeVector 6(int) 3
+             197:             TypePointer Uniform 44(float)
+             204:             TypeVector 44(float) 2
+             205:             TypePointer Uniform 45(fvec4)
+             215:             TypeVector 44(float) 3
+             242:  138(ivec2) ConstantComposite 61 61
+             243:             TypeVector 36(bool) 2
+             247:  138(ivec2) ConstantComposite 60 60
+             256:  149(ivec3) ConstantComposite 61 61 61
+             257:             TypeVector 36(bool) 3
+             261:  149(ivec3) ConstantComposite 60 60 60
+             269:   43(ivec4) ConstantComposite 61 61 61 61
+             273:   43(ivec4) ConstantComposite 60 60 60 60
+             415:      6(int) Constant 8
+             416:  181(ivec3) ConstantComposite 415 415 64
+         4(main):           2 Function None 3
+               5:             Label
+   8(invocation):      7(ptr) Variable Function
+     19(relMask):     18(ptr) Variable Function
+      35(result):     18(ptr) Variable Function
+              11:      6(int) Load 10(gl_SubgroupInvocationID)
+              13:      6(int) Load 12(gl_SubgroupSize)
+              14:      6(int) IAdd 11 13
+              16:      6(int) UMod 14 15
+                              Store 8(invocation) 16
+              22:   17(ivec4) Load 21(gl_SubgroupEqMask)
+              24:   17(ivec4) Load 23(gl_SubgroupGeMask)
+              25:   17(ivec4) IAdd 22 24
+              27:   17(ivec4) Load 26(gl_SubgroupGtMask)
+              28:   17(ivec4) IAdd 25 27
+              30:   17(ivec4) Load 29(gl_SubgroupLeMask)
+              31:   17(ivec4) IAdd 28 30
+              33:   17(ivec4) Load 32(gl_SubgroupLtMask)
+              34:   17(ivec4) IAdd 31 33
+                              Store 19(relMask) 34
+              39:   17(ivec4) GroupNonUniformBallot 38 37
+                              Store 35(result) 39
+              50:      6(int) Load 8(invocation)
+              52:   17(ivec4) Load 35(result)
+              53:      6(int) GroupNonUniformBallotBitCount 38 Reduce 52
+              56:     55(ptr) AccessChain 49(data) 50 51 54
+                              Store 56 53
+              57:      6(int) Load 8(invocation)
+              58:   17(ivec4) Load 35(result)
+              59:    36(bool) GroupNonUniformBallotBitExtract 38 58 54
+              62:     42(int) Select 59 60 61
+              63:      6(int) Bitcast 62
+              65:     55(ptr) AccessChain 49(data) 57 51 64
+                              Store 65 63
+              66:      6(int) Load 8(invocation)
+              67:   17(ivec4) Load 35(result)
+              68:      6(int) GroupNonUniformBallotBitCount 38 InclusiveScan 67
+              69:   17(ivec4) Load 35(result)
+              70:      6(int) GroupNonUniformBallotBitCount 38 ExclusiveScan 69
+              71:      6(int) IAdd 68 70
+              73:     55(ptr) AccessChain 49(data) 66 51 72
+                              Store 73 71
+              74:      6(int) Load 8(invocation)
+              75:   17(ivec4) Load 35(result)
+              76:      6(int) GroupNonUniformBallotFindLSB 38 75
+              77:   17(ivec4) Load 35(result)
+              78:      6(int) GroupNonUniformBallotFindMSB 38 77
+              79:      6(int) IAdd 76 78
+              80:     55(ptr) AccessChain 49(data) 74 51 38
+                              Store 80 79
+              81:   17(ivec4) Load 19(relMask)
+              82:   17(ivec4) Load 35(result)
+              84:   83(bvec4) IEqual 81 82
+              85:    36(bool) All 84
+                              SelectionMerge 87 None
+                              BranchConditional 85 86 87
+              86:               Label
+              89:     88(ptr)   AccessChain 49(data) 61 51
+              90:   17(ivec4)   Load 89
+              91:    36(bool)   GroupNonUniformInverseBallot 38 90
+                                Branch 87
+              87:             Label
+              92:    36(bool) Phi 85 5 91 86
+                              SelectionMerge 94 None
+                              BranchConditional 92 93 276
+              93:               Label
+              95:      6(int)   Load 8(invocation)
+              97:     96(ptr)   AccessChain 49(data) 61 61 54
+              98:   40(float)   Load 97
+              99:      6(int)   Load 8(invocation)
+             100:   40(float)   GroupNonUniformBroadcast 38 98 99
+             101:     96(ptr)   AccessChain 49(data) 95 61 54
+                                Store 101 100
+             102:      6(int)   Load 8(invocation)
+             105:    104(ptr)   AccessChain 49(data) 60 61
+             106:   41(fvec4)   Load 105
+             107:  103(fvec2)   VectorShuffle 106 106 0 1
+             108:      6(int)   Load 8(invocation)
+             109:  103(fvec2)   GroupNonUniformBroadcast 38 107 108
+             110:    104(ptr)   AccessChain 49(data) 102 61
+             111:   41(fvec4)   Load 110
+             112:   41(fvec4)   VectorShuffle 111 109 4 5 2 3
+                                Store 110 112
+             113:      6(int)   Load 8(invocation)
+             115:    104(ptr)   AccessChain 49(data) 51 61
+             116:   41(fvec4)   Load 115
+             117:  114(fvec3)   VectorShuffle 116 116 0 1 2
+             118:      6(int)   Load 8(invocation)
+             119:  114(fvec3)   GroupNonUniformBroadcast 38 117 118
+             120:    104(ptr)   AccessChain 49(data) 113 61
+             121:   41(fvec4)   Load 120
+             122:   41(fvec4)   VectorShuffle 121 119 4 5 6 3
+                                Store 120 122
+             123:      6(int)   Load 8(invocation)
+             125:    104(ptr)   AccessChain 49(data) 124 61
+             126:   41(fvec4)   Load 125
+             127:      6(int)   Load 8(invocation)
+             128:   41(fvec4)   GroupNonUniformBroadcast 38 126 127
+             129:    104(ptr)   AccessChain 49(data) 123 61
+                                Store 129 128
+             130:      6(int)   Load 8(invocation)
+             132:    131(ptr)   AccessChain 49(data) 61 60 54
+             133:     42(int)   Load 132
+             134:      6(int)   Load 8(invocation)
+             135:     42(int)   GroupNonUniformBroadcast 38 133 134
+             136:    131(ptr)   AccessChain 49(data) 130 60 54
+                                Store 136 135
+             137:      6(int)   Load 8(invocation)
+             140:    139(ptr)   AccessChain 49(data) 60 60
+             141:   43(ivec4)   Load 140
+             142:  138(ivec2)   VectorShuffle 141 141 0 1
+             143:      6(int)   Load 8(invocation)
+             144:  138(ivec2)   GroupNonUniformBroadcast 38 142 143
+             145:    139(ptr)   AccessChain 49(data) 137 60
+             146:   43(ivec4)   Load 145
+             147:   43(ivec4)   VectorShuffle 146 144 4 5 2 3
+                                Store 145 147
+             148:      6(int)   Load 8(invocation)
+             150:    139(ptr)   AccessChain 49(data) 51 60
+             151:   43(ivec4)   Load 150
+             152:  149(ivec3)   VectorShuffle 151 151 0 1 2
+             153:      6(int)   Load 8(invocation)
+             154:  149(ivec3)   GroupNonUniformBroadcast 38 152 153
+             155:    139(ptr)   AccessChain 49(data) 148 60
+             156:   43(ivec4)   Load 155
+             157:   43(ivec4)   VectorShuffle 156 154 4 5 6 3
+                                Store 155 157
+             158:      6(int)   Load 8(invocation)
+             159:    139(ptr)   AccessChain 49(data) 124 60
+             160:   43(ivec4)   Load 159
+             161:      6(int)   Load 8(invocation)
+             162:   43(ivec4)   GroupNonUniformBroadcast 38 160 161
+             163:    139(ptr)   AccessChain 49(data) 158 60
+                                Store 163 162
+             164:      6(int)   Load 8(invocation)
+             165:     55(ptr)   AccessChain 49(data) 61 51 54
+             166:      6(int)   Load 165
+             167:      6(int)   Load 8(invocation)
+             168:      6(int)   GroupNonUniformBroadcast 38 166 167
+             169:     55(ptr)   AccessChain 49(data) 164 51 54
+                                Store 169 168
+             170:      6(int)   Load 8(invocation)
+             172:     88(ptr)   AccessChain 49(data) 60 51
+             173:   17(ivec4)   Load 172
+             174:  171(ivec2)   VectorShuffle 173 173 0 1
+             175:      6(int)   Load 8(invocation)
+             176:  171(ivec2)   GroupNonUniformBroadcast 38 174 175
+             177:     88(ptr)   AccessChain 49(data) 170 51
+             178:   17(ivec4)   Load 177
+             179:   17(ivec4)   VectorShuffle 178 176 4 5 2 3
+                                Store 177 179
+             180:      6(int)   Load 8(invocation)
+             182:     88(ptr)   AccessChain 49(data) 51 51
+             183:   17(ivec4)   Load 182
+             184:  181(ivec3)   VectorShuffle 183 183 0 1 2
+             185:      6(int)   Load 8(invocation)
+             186:  181(ivec3)   GroupNonUniformBroadcast 38 184 185
+             187:     88(ptr)   AccessChain 49(data) 180 51
+             188:   17(ivec4)   Load 187
+             189:   17(ivec4)   VectorShuffle 188 186 4 5 6 3
+                                Store 187 189
+             190:      6(int)   Load 8(invocation)
+             191:     88(ptr)   AccessChain 49(data) 124 51
+             192:   17(ivec4)   Load 191
+             193:      6(int)   Load 8(invocation)
+             194:   17(ivec4)   GroupNonUniformBroadcast 38 192 193
+             195:     88(ptr)   AccessChain 49(data) 190 51
+                                Store 195 194
+             196:      6(int)   Load 8(invocation)
+             198:    197(ptr)   AccessChain 49(data) 61 124 54
+             199:   44(float)   Load 198
+             200:      6(int)   Load 8(invocation)
+             201:   44(float)   GroupNonUniformBroadcast 38 199 200
+             202:    197(ptr)   AccessChain 49(data) 196 124 54
+                                Store 202 201
+             203:      6(int)   Load 8(invocation)
+             206:    205(ptr)   AccessChain 49(data) 60 124
+             207:   45(fvec4)   Load 206
+             208:  204(fvec2)   VectorShuffle 207 207 0 1
+             209:      6(int)   Load 8(invocation)
+             210:  204(fvec2)   GroupNonUniformBroadcast 38 208 209
+             211:    205(ptr)   AccessChain 49(data) 203 124
+             212:   45(fvec4)   Load 211
+             213:   45(fvec4)   VectorShuffle 212 210 4 5 2 3
+                                Store 211 213
+             214:      6(int)   Load 8(invocation)
+             216:    205(ptr)   AccessChain 49(data) 51 124
+             217:   45(fvec4)   Load 216
+             218:  215(fvec3)   VectorShuffle 217 217 0 1 2
+             219:      6(int)   Load 8(invocation)
+             220:  215(fvec3)   GroupNonUniformBroadcast 38 218 219
+             221:    205(ptr)   AccessChain 49(data) 214 124
+             222:   45(fvec4)   Load 221
+             223:   45(fvec4)   VectorShuffle 222 220 4 5 6 3
+                                Store 221 223
+             224:      6(int)   Load 8(invocation)
+             225:    205(ptr)   AccessChain 49(data) 124 124
+             226:   45(fvec4)   Load 225
+             227:      6(int)   Load 8(invocation)
+             228:   45(fvec4)   GroupNonUniformBroadcast 38 226 227
+             229:    205(ptr)   AccessChain 49(data) 224 124
+                                Store 229 228
+             230:      6(int)   Load 8(invocation)
+             231:    131(ptr)   AccessChain 49(data) 61 60 54
+             232:     42(int)   Load 231
+             233:    36(bool)   SLessThan 232 61
+             234:      6(int)   Load 8(invocation)
+             235:    36(bool)   GroupNonUniformBroadcast 38 233 234
+             236:     42(int)   Select 235 60 61
+             237:    131(ptr)   AccessChain 49(data) 230 60 54
+                                Store 237 236
+             238:      6(int)   Load 8(invocation)
+             239:    139(ptr)   AccessChain 49(data) 60 60
+             240:   43(ivec4)   Load 239
+             241:  138(ivec2)   VectorShuffle 240 240 0 1
+             244:  243(bvec2)   SLessThan 241 242
+             245:      6(int)   Load 8(invocation)
+             246:  243(bvec2)   GroupNonUniformBroadcast 38 244 245
+             248:  138(ivec2)   Select 246 247 242
+             249:    139(ptr)   AccessChain 49(data) 238 60
+             250:   43(ivec4)   Load 249
+             251:   43(ivec4)   VectorShuffle 250 248 4 5 2 3
+                                Store 249 251
+             252:      6(int)   Load 8(invocation)
+             253:    139(ptr)   AccessChain 49(data) 60 60
+             254:   43(ivec4)   Load 253
+             255:  149(ivec3)   VectorShuffle 254 254 0 1 2
+             258:  257(bvec3)   SLessThan 255 256
+             259:      6(int)   Load 8(invocation)
+             260:  257(bvec3)   GroupNonUniformBroadcast 38 258 259
+             262:  149(ivec3)   Select 260 261 256
+             263:    139(ptr)   AccessChain 49(data) 252 60
+             264:   43(ivec4)   Load 263
+             265:   43(ivec4)   VectorShuffle 264 262 4 5 6 3
+                                Store 263 265
+             266:      6(int)   Load 8(invocation)
+             267:    139(ptr)   AccessChain 49(data) 60 60
+             268:   43(ivec4)   Load 267
+             270:   83(bvec4)   SLessThan 268 269
+             271:      6(int)   Load 8(invocation)
+             272:   83(bvec4)   GroupNonUniformBroadcast 38 270 271
+             274:   43(ivec4)   Select 272 273 269
+             275:    139(ptr)   AccessChain 49(data) 266 60
+                                Store 275 274
+                                Branch 94
+             276:               Label
+             277:      6(int)   Load 8(invocation)
+             278:     96(ptr)   AccessChain 49(data) 61 61 54
+             279:   40(float)   Load 278
+             280:   40(float)   GroupNonUniformBroadcastFirst 38 279
+             281:     96(ptr)   AccessChain 49(data) 277 61 54
+                                Store 281 280
+             282:      6(int)   Load 8(invocation)
+             283:    104(ptr)   AccessChain 49(data) 60 61
+             284:   41(fvec4)   Load 283
+             285:  103(fvec2)   VectorShuffle 284 284 0 1
+             286:  103(fvec2)   GroupNonUniformBroadcastFirst 38 285
+             287:    104(ptr)   AccessChain 49(data) 282 61
+             288:   41(fvec4)   Load 287
+             289:   41(fvec4)   VectorShuffle 288 286 4 5 2 3
+                                Store 287 289
+             290:      6(int)   Load 8(invocation)
+             291:    104(ptr)   AccessChain 49(data) 51 61
+             292:   41(fvec4)   Load 291
+             293:  114(fvec3)   VectorShuffle 292 292 0 1 2
+             294:  114(fvec3)   GroupNonUniformBroadcastFirst 38 293
+             295:    104(ptr)   AccessChain 49(data) 290 61
+             296:   41(fvec4)   Load 295
+             297:   41(fvec4)   VectorShuffle 296 294 4 5 6 3
+                                Store 295 297
+             298:      6(int)   Load 8(invocation)
+             299:    104(ptr)   AccessChain 49(data) 124 61
+             300:   41(fvec4)   Load 299
+             301:   41(fvec4)   GroupNonUniformBroadcastFirst 38 300
+             302:    104(ptr)   AccessChain 49(data) 298 61
+                                Store 302 301
+             303:      6(int)   Load 8(invocation)
+             304:    131(ptr)   AccessChain 49(data) 61 60 54
+             305:     42(int)   Load 304
+             306:     42(int)   GroupNonUniformBroadcastFirst 38 305
+             307:    131(ptr)   AccessChain 49(data) 303 60 54
+                                Store 307 306
+             308:      6(int)   Load 8(invocation)
+             309:    139(ptr)   AccessChain 49(data) 60 60
+             310:   43(ivec4)   Load 309
+             311:  138(ivec2)   VectorShuffle 310 310 0 1
+             312:  138(ivec2)   GroupNonUniformBroadcastFirst 38 311
+             313:    139(ptr)   AccessChain 49(data) 308 60
+             314:   43(ivec4)   Load 313
+             315:   43(ivec4)   VectorShuffle 314 312 4 5 2 3
+                                Store 313 315
+             316:      6(int)   Load 8(invocation)
+             317:    139(ptr)   AccessChain 49(data) 51 60
+             318:   43(ivec4)   Load 317
+             319:  149(ivec3)   VectorShuffle 318 318 0 1 2
+             320:  149(ivec3)   GroupNonUniformBroadcastFirst 38 319
+             321:    139(ptr)   AccessChain 49(data) 316 60
+             322:   43(ivec4)   Load 321
+             323:   43(ivec4)   VectorShuffle 322 320 4 5 6 3
+                                Store 321 323
+             324:      6(int)   Load 8(invocation)
+             325:    139(ptr)   AccessChain 49(data) 124 60
+             326:   43(ivec4)   Load 325
+             327:   43(ivec4)   GroupNonUniformBroadcastFirst 38 326
+             328:    139(ptr)   AccessChain 49(data) 324 60
+                                Store 328 327
+             329:      6(int)   Load 8(invocation)
+             330:     55(ptr)   AccessChain 49(data) 61 51 54
+             331:      6(int)   Load 330
+             332:      6(int)   GroupNonUniformBroadcastFirst 38 331
+             333:     55(ptr)   AccessChain 49(data) 329 51 54
+                                Store 333 332
+             334:      6(int)   Load 8(invocation)
+             335:     88(ptr)   AccessChain 49(data) 60 51
+             336:   17(ivec4)   Load 335
+             337:  171(ivec2)   VectorShuffle 336 336 0 1
+             338:  171(ivec2)   GroupNonUniformBroadcastFirst 38 337
+             339:     88(ptr)   AccessChain 49(data) 334 51
+             340:   17(ivec4)   Load 339
+             341:   17(ivec4)   VectorShuffle 340 338 4 5 2 3
+                                Store 339 341
+             342:      6(int)   Load 8(invocation)
+             343:     88(ptr)   AccessChain 49(data) 51 51
+             344:   17(ivec4)   Load 343
+             345:  181(ivec3)   VectorShuffle 344 344 0 1 2
+             346:  181(ivec3)   GroupNonUniformBroadcastFirst 38 345
+             347:     88(ptr)   AccessChain 49(data) 342 51
+             348:   17(ivec4)   Load 347
+             349:   17(ivec4)   VectorShuffle 348 346 4 5 6 3
+                                Store 347 349
+             350:      6(int)   Load 8(invocation)
+             351:     88(ptr)   AccessChain 49(data) 124 51
+             352:   17(ivec4)   Load 351
+             353:   17(ivec4)   GroupNonUniformBroadcastFirst 38 352
+             354:     88(ptr)   AccessChain 49(data) 350 51
+                                Store 354 353
+             355:      6(int)   Load 8(invocation)
+             356:    197(ptr)   AccessChain 49(data) 61 124 54
+             357:   44(float)   Load 356
+             358:   44(float)   GroupNonUniformBroadcastFirst 38 357
+             359:    197(ptr)   AccessChain 49(data) 355 124 54
+                                Store 359 358
+             360:      6(int)   Load 8(invocation)
+             361:    205(ptr)   AccessChain 49(data) 60 124
+             362:   45(fvec4)   Load 361
+             363:  204(fvec2)   VectorShuffle 362 362 0 1
+             364:  204(fvec2)   GroupNonUniformBroadcastFirst 38 363
+             365:    205(ptr)   AccessChain 49(data) 360 124
+             366:   45(fvec4)   Load 365
+             367:   45(fvec4)   VectorShuffle 366 364 4 5 2 3
+                                Store 365 367
+             368:      6(int)   Load 8(invocation)
+             369:    205(ptr)   AccessChain 49(data) 51 124
+             370:   45(fvec4)   Load 369
+             371:  215(fvec3)   VectorShuffle 370 370 0 1 2
+             372:  215(fvec3)   GroupNonUniformBroadcastFirst 38 371
+             373:    205(ptr)   AccessChain 49(data) 368 124
+             374:   45(fvec4)   Load 373
+             375:   45(fvec4)   VectorShuffle 374 372 4 5 6 3
+                                Store 373 375
+             376:      6(int)   Load 8(invocation)
+             377:    205(ptr)   AccessChain 49(data) 124 124
+             378:   45(fvec4)   Load 377
+             379:   45(fvec4)   GroupNonUniformBroadcastFirst 38 378
+             380:    205(ptr)   AccessChain 49(data) 376 124
+                                Store 380 379
+             381:      6(int)   Load 8(invocation)
+             382:    131(ptr)   AccessChain 49(data) 61 60 54
+             383:     42(int)   Load 382
+             384:    36(bool)   SLessThan 383 61
+             385:    36(bool)   GroupNonUniformBroadcastFirst 38 384
+             386:     42(int)   Select 385 60 61
+             387:    131(ptr)   AccessChain 49(data) 381 60 54
+                                Store 387 386
+             388:      6(int)   Load 8(invocation)
+             389:    139(ptr)   AccessChain 49(data) 60 60
+             390:   43(ivec4)   Load 389
+             391:  138(ivec2)   VectorShuffle 390 390 0 1
+             392:  243(bvec2)   SLessThan 391 242
+             393:  243(bvec2)   GroupNonUniformBroadcastFirst 38 392
+             394:  138(ivec2)   Select 393 247 242
+             395:    139(ptr)   AccessChain 49(data) 388 60
+             396:   43(ivec4)   Load 395
+             397:   43(ivec4)   VectorShuffle 396 394 4 5 2 3
+                                Store 395 397
+             398:      6(int)   Load 8(invocation)
+             399:    139(ptr)   AccessChain 49(data) 60 60
+             400:   43(ivec4)   Load 399
+             401:  149(ivec3)   VectorShuffle 400 400 0 1 2
+             402:  257(bvec3)   SLessThan 401 256
+             403:  257(bvec3)   GroupNonUniformBroadcastFirst 38 402
+             404:  149(ivec3)   Select 403 261 256
+             405:    139(ptr)   AccessChain 49(data) 398 60
+             406:   43(ivec4)   Load 405
+             407:   43(ivec4)   VectorShuffle 406 404 4 5 6 3
+                                Store 405 407
+             408:      6(int)   Load 8(invocation)
+             409:    139(ptr)   AccessChain 49(data) 60 60
+             410:   43(ivec4)   Load 409
+             411:   83(bvec4)   SLessThan 410 269
+             412:   83(bvec4)   GroupNonUniformBroadcastFirst 38 411
+             413:   43(ivec4)   Select 412 273 269
+             414:    139(ptr)   AccessChain 49(data) 408 60
+                                Store 414 413
+                                Branch 94
+              94:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroupBasic.comp.out b/Test/baseResults/spv.subgroupBasic.comp.out
new file mode 100644
index 0000000..94adcfc
--- /dev/null
+++ b/Test/baseResults/spv.subgroupBasic.comp.out
@@ -0,0 +1,84 @@
+spv.subgroupBasic.comp
+// Module Version 10300
+// Generated by (magic number): 80005
+// Id's are bound by 40
+
+                              Capability Shader
+                              Capability GroupNonUniform
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 14 19 22 25
+                              ExecutionMode 4 LocalSize 8 8 1
+                              Source GLSL 450
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              Name 4  "main"
+                              Name 8  "Buffer"
+                              MemberName 8(Buffer) 0  "a"
+                              Name 10  "data"
+                              Name 14  "gl_SubgroupSize"
+                              Name 19  "gl_SubgroupInvocationID"
+                              Name 22  "gl_NumSubgroups"
+                              Name 25  "gl_SubgroupID"
+                              Decorate 7 ArrayStride 4
+                              MemberDecorate 8(Buffer) 0 Offset 0
+                              Decorate 8(Buffer) BufferBlock
+                              Decorate 10(data) DescriptorSet 0
+                              Decorate 10(data) Binding 0
+                              Decorate 14(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 14(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 15 RelaxedPrecision
+                              Decorate 19(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 19(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 20 RelaxedPrecision
+                              Decorate 22(gl_NumSubgroups) BuiltIn NumSubgroups
+                              Decorate 25(gl_SubgroupID) BuiltIn SubgroupId
+                              Decorate 39 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypeRuntimeArray 6(int)
+       8(Buffer):             TypeStruct 7
+               9:             TypePointer Uniform 8(Buffer)
+        10(data):      9(ptr) Variable Uniform
+              11:      6(int) Constant 0
+              12:             TypeInt 32 0
+              13:             TypePointer Input 12(int)
+14(gl_SubgroupSize):     13(ptr) Variable Input
+              16:      6(int) Constant 1
+              17:             TypePointer Uniform 6(int)
+19(gl_SubgroupInvocationID):     13(ptr) Variable Input
+22(gl_NumSubgroups):     13(ptr) Variable Input
+25(gl_SubgroupID):     13(ptr) Variable Input
+              27:             TypeBool
+              28:     12(int) Constant 3
+              32:     12(int) Constant 3400
+              33:     12(int) Constant 72
+              34:     12(int) Constant 264
+              35:     12(int) Constant 2056
+              36:             TypeVector 12(int) 3
+              37:     12(int) Constant 8
+              38:     12(int) Constant 1
+              39:   36(ivec3) ConstantComposite 37 37 38
+         4(main):           2 Function None 3
+               5:             Label
+              15:     12(int) Load 14(gl_SubgroupSize)
+              18:     17(ptr) AccessChain 10(data) 11 15
+                              Store 18 16
+              20:     12(int) Load 19(gl_SubgroupInvocationID)
+              21:     17(ptr) AccessChain 10(data) 11 20
+                              Store 21 16
+              23:     12(int) Load 22(gl_NumSubgroups)
+              24:     17(ptr) AccessChain 10(data) 11 23
+                              Store 24 16
+              26:     12(int) Load 25(gl_SubgroupID)
+              29:    27(bool) GroupNonUniformElect 28
+              30:      6(int) Select 29 16 11
+              31:     17(ptr) AccessChain 10(data) 11 26
+                              Store 31 30
+                              ControlBarrier 28 28 32
+                              MemoryBarrier 28 32
+                              MemoryBarrier 28 33
+                              MemoryBarrier 28 34
+                              MemoryBarrier 28 35
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroupClustered.comp.out b/Test/baseResults/spv.subgroupClustered.comp.out
new file mode 100644
index 0000000..37d0cbd
--- /dev/null
+++ b/Test/baseResults/spv.subgroupClustered.comp.out
@@ -0,0 +1,880 @@
+spv.subgroupClustered.comp
+// Module Version 10300
+// Generated by (magic number): 80005
+// Id's are bound by 737
+
+                              Capability Shader
+                              Capability Float64
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformClustered
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 10 12
+                              ExecutionMode 4 LocalSize 8 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              SourceExtension  "GL_KHR_shader_subgroup_clustered"
+                              Name 4  "main"
+                              Name 8  "invocation"
+                              Name 10  "gl_SubgroupInvocationID"
+                              Name 12  "gl_SubgroupSize"
+                              Name 24  "Buffers"
+                              MemberName 24(Buffers) 0  "f4"
+                              MemberName 24(Buffers) 1  "i4"
+                              MemberName 24(Buffers) 2  "u4"
+                              MemberName 24(Buffers) 3  "d4"
+                              Name 27  "data"
+                              Decorate 10(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 10(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 11 RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 13 RelaxedPrecision
+                              Decorate 14 RelaxedPrecision
+                              Decorate 16 RelaxedPrecision
+                              MemberDecorate 24(Buffers) 0 Offset 0
+                              MemberDecorate 24(Buffers) 1 Offset 16
+                              MemberDecorate 24(Buffers) 2 Offset 32
+                              MemberDecorate 24(Buffers) 3 Offset 64
+                              Decorate 24(Buffers) BufferBlock
+                              Decorate 27(data) DescriptorSet 0
+                              Decorate 27(data) Binding 0
+                              Decorate 736 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypePointer Input 6(int)
+10(gl_SubgroupInvocationID):      9(ptr) Variable Input
+12(gl_SubgroupSize):      9(ptr) Variable Input
+              15:      6(int) Constant 4
+              17:             TypeFloat 32
+              18:             TypeVector 17(float) 4
+              19:             TypeInt 32 1
+              20:             TypeVector 19(int) 4
+              21:             TypeVector 6(int) 4
+              22:             TypeFloat 64
+              23:             TypeVector 22(float) 4
+     24(Buffers):             TypeStruct 18(fvec4) 20(ivec4) 21(ivec4) 23(fvec4)
+              25:             TypeArray 24(Buffers) 15
+              26:             TypePointer Uniform 25
+        27(data):     26(ptr) Variable Uniform
+              29:     19(int) Constant 0
+              30:      6(int) Constant 0
+              31:             TypePointer Uniform 17(float)
+              34:      6(int) Constant 1
+              35:      6(int) Constant 3
+              39:     19(int) Constant 1
+              40:             TypeVector 17(float) 2
+              41:             TypePointer Uniform 18(fvec4)
+              50:     19(int) Constant 2
+              51:             TypeVector 17(float) 3
+              60:     19(int) Constant 3
+              66:             TypePointer Uniform 19(int)
+              72:             TypeVector 19(int) 2
+              73:             TypePointer Uniform 20(ivec4)
+              82:             TypeVector 19(int) 3
+              96:             TypePointer Uniform 6(int)
+             102:             TypeVector 6(int) 2
+             103:             TypePointer Uniform 21(ivec4)
+             112:             TypeVector 6(int) 3
+             126:             TypePointer Uniform 22(float)
+             132:             TypeVector 22(float) 2
+             133:             TypePointer Uniform 23(fvec4)
+             142:             TypeVector 22(float) 3
+             522:             TypeBool
+             531:   72(ivec2) ConstantComposite 29 29
+             532:             TypeVector 522(bool) 2
+             535:   72(ivec2) ConstantComposite 39 39
+             544:   82(ivec3) ConstantComposite 29 29 29
+             545:             TypeVector 522(bool) 3
+             548:   82(ivec3) ConstantComposite 39 39 39
+             556:   20(ivec4) ConstantComposite 29 29 29 29
+             557:             TypeVector 522(bool) 4
+             560:   20(ivec4) ConstantComposite 39 39 39 39
+             735:      6(int) Constant 8
+             736:  112(ivec3) ConstantComposite 735 34 34
+         4(main):           2 Function None 3
+               5:             Label
+   8(invocation):      7(ptr) Variable Function
+              11:      6(int) Load 10(gl_SubgroupInvocationID)
+              13:      6(int) Load 12(gl_SubgroupSize)
+              14:      6(int) IAdd 11 13
+              16:      6(int) UMod 14 15
+                              Store 8(invocation) 16
+              28:      6(int) Load 8(invocation)
+              32:     31(ptr) AccessChain 27(data) 29 29 30
+              33:   17(float) Load 32
+              36:   17(float) GroupNonUniformFAdd 35 ClusteredReduce 33 34
+              37:     31(ptr) AccessChain 27(data) 28 29 30
+                              Store 37 36
+              38:      6(int) Load 8(invocation)
+              42:     41(ptr) AccessChain 27(data) 39 29
+              43:   18(fvec4) Load 42
+              44:   40(fvec2) VectorShuffle 43 43 0 1
+              45:   40(fvec2) GroupNonUniformFAdd 35 ClusteredReduce 44 34
+              46:     41(ptr) AccessChain 27(data) 38 29
+              47:   18(fvec4) Load 46
+              48:   18(fvec4) VectorShuffle 47 45 4 5 2 3
+                              Store 46 48
+              49:      6(int) Load 8(invocation)
+              52:     41(ptr) AccessChain 27(data) 50 29
+              53:   18(fvec4) Load 52
+              54:   51(fvec3) VectorShuffle 53 53 0 1 2
+              55:   51(fvec3) GroupNonUniformFAdd 35 ClusteredReduce 54 34
+              56:     41(ptr) AccessChain 27(data) 49 29
+              57:   18(fvec4) Load 56
+              58:   18(fvec4) VectorShuffle 57 55 4 5 6 3
+                              Store 56 58
+              59:      6(int) Load 8(invocation)
+              61:     41(ptr) AccessChain 27(data) 60 29
+              62:   18(fvec4) Load 61
+              63:   18(fvec4) GroupNonUniformFAdd 35 ClusteredReduce 62 34
+              64:     41(ptr) AccessChain 27(data) 59 29
+                              Store 64 63
+              65:      6(int) Load 8(invocation)
+              67:     66(ptr) AccessChain 27(data) 29 39 30
+              68:     19(int) Load 67
+              69:     19(int) GroupNonUniformIAdd 35 ClusteredReduce 68 34
+              70:     66(ptr) AccessChain 27(data) 65 39 30
+                              Store 70 69
+              71:      6(int) Load 8(invocation)
+              74:     73(ptr) AccessChain 27(data) 39 39
+              75:   20(ivec4) Load 74
+              76:   72(ivec2) VectorShuffle 75 75 0 1
+              77:   72(ivec2) GroupNonUniformIAdd 35 ClusteredReduce 76 34
+              78:     73(ptr) AccessChain 27(data) 71 39
+              79:   20(ivec4) Load 78
+              80:   20(ivec4) VectorShuffle 79 77 4 5 2 3
+                              Store 78 80
+              81:      6(int) Load 8(invocation)
+              83:     73(ptr) AccessChain 27(data) 50 39
+              84:   20(ivec4) Load 83
+              85:   82(ivec3) VectorShuffle 84 84 0 1 2
+              86:   82(ivec3) GroupNonUniformIAdd 35 ClusteredReduce 85 34
+              87:     73(ptr) AccessChain 27(data) 81 39
+              88:   20(ivec4) Load 87
+              89:   20(ivec4) VectorShuffle 88 86 4 5 6 3
+                              Store 87 89
+              90:      6(int) Load 8(invocation)
+              91:     73(ptr) AccessChain 27(data) 60 39
+              92:   20(ivec4) Load 91
+              93:   20(ivec4) GroupNonUniformIAdd 35 ClusteredReduce 92 34
+              94:     73(ptr) AccessChain 27(data) 90 39
+                              Store 94 93
+              95:      6(int) Load 8(invocation)
+              97:     96(ptr) AccessChain 27(data) 29 50 30
+              98:      6(int) Load 97
+              99:      6(int) GroupNonUniformIAdd 35 ClusteredReduce 98 34
+             100:     96(ptr) AccessChain 27(data) 95 50 30
+                              Store 100 99
+             101:      6(int) Load 8(invocation)
+             104:    103(ptr) AccessChain 27(data) 39 50
+             105:   21(ivec4) Load 104
+             106:  102(ivec2) VectorShuffle 105 105 0 1
+             107:  102(ivec2) GroupNonUniformIAdd 35 ClusteredReduce 106 34
+             108:    103(ptr) AccessChain 27(data) 101 50
+             109:   21(ivec4) Load 108
+             110:   21(ivec4) VectorShuffle 109 107 4 5 2 3
+                              Store 108 110
+             111:      6(int) Load 8(invocation)
+             113:    103(ptr) AccessChain 27(data) 50 50
+             114:   21(ivec4) Load 113
+             115:  112(ivec3) VectorShuffle 114 114 0 1 2
+             116:  112(ivec3) GroupNonUniformIAdd 35 ClusteredReduce 115 34
+             117:    103(ptr) AccessChain 27(data) 111 50
+             118:   21(ivec4) Load 117
+             119:   21(ivec4) VectorShuffle 118 116 4 5 6 3
+                              Store 117 119
+             120:      6(int) Load 8(invocation)
+             121:    103(ptr) AccessChain 27(data) 60 50
+             122:   21(ivec4) Load 121
+             123:   21(ivec4) GroupNonUniformIAdd 35 ClusteredReduce 122 34
+             124:    103(ptr) AccessChain 27(data) 120 50
+                              Store 124 123
+             125:      6(int) Load 8(invocation)
+             127:    126(ptr) AccessChain 27(data) 29 60 30
+             128:   22(float) Load 127
+             129:   22(float) GroupNonUniformFAdd 35 ClusteredReduce 128 34
+             130:    126(ptr) AccessChain 27(data) 125 60 30
+                              Store 130 129
+             131:      6(int) Load 8(invocation)
+             134:    133(ptr) AccessChain 27(data) 39 60
+             135:   23(fvec4) Load 134
+             136:  132(fvec2) VectorShuffle 135 135 0 1
+             137:  132(fvec2) GroupNonUniformFAdd 35 ClusteredReduce 136 34
+             138:    133(ptr) AccessChain 27(data) 131 60
+             139:   23(fvec4) Load 138
+             140:   23(fvec4) VectorShuffle 139 137 4 5 2 3
+                              Store 138 140
+             141:      6(int) Load 8(invocation)
+             143:    133(ptr) AccessChain 27(data) 50 60
+             144:   23(fvec4) Load 143
+             145:  142(fvec3) VectorShuffle 144 144 0 1 2
+             146:  142(fvec3) GroupNonUniformFAdd 35 ClusteredReduce 145 34
+             147:    133(ptr) AccessChain 27(data) 141 60
+             148:   23(fvec4) Load 147
+             149:   23(fvec4) VectorShuffle 148 146 4 5 6 3
+                              Store 147 149
+             150:      6(int) Load 8(invocation)
+             151:    133(ptr) AccessChain 27(data) 60 60
+             152:   23(fvec4) Load 151
+             153:   23(fvec4) GroupNonUniformFAdd 35 ClusteredReduce 152 34
+             154:    133(ptr) AccessChain 27(data) 150 60
+                              Store 154 153
+             155:      6(int) Load 8(invocation)
+             156:     31(ptr) AccessChain 27(data) 29 29 30
+             157:   17(float) Load 156
+             158:   17(float) GroupNonUniformFMul 35 ClusteredReduce 157 34
+             159:     31(ptr) AccessChain 27(data) 155 29 30
+                              Store 159 158
+             160:      6(int) Load 8(invocation)
+             161:     41(ptr) AccessChain 27(data) 39 29
+             162:   18(fvec4) Load 161
+             163:   40(fvec2) VectorShuffle 162 162 0 1
+             164:   40(fvec2) GroupNonUniformFMul 35 ClusteredReduce 163 34
+             165:     41(ptr) AccessChain 27(data) 160 29
+             166:   18(fvec4) Load 165
+             167:   18(fvec4) VectorShuffle 166 164 4 5 2 3
+                              Store 165 167
+             168:      6(int) Load 8(invocation)
+             169:     41(ptr) AccessChain 27(data) 50 29
+             170:   18(fvec4) Load 169
+             171:   51(fvec3) VectorShuffle 170 170 0 1 2
+             172:   51(fvec3) GroupNonUniformFMul 35 ClusteredReduce 171 34
+             173:     41(ptr) AccessChain 27(data) 168 29
+             174:   18(fvec4) Load 173
+             175:   18(fvec4) VectorShuffle 174 172 4 5 6 3
+                              Store 173 175
+             176:      6(int) Load 8(invocation)
+             177:     41(ptr) AccessChain 27(data) 60 29
+             178:   18(fvec4) Load 177
+             179:   18(fvec4) GroupNonUniformFMul 35 ClusteredReduce 178 34
+             180:     41(ptr) AccessChain 27(data) 176 29
+                              Store 180 179
+             181:      6(int) Load 8(invocation)
+             182:     66(ptr) AccessChain 27(data) 29 39 30
+             183:     19(int) Load 182
+             184:     19(int) GroupNonUniformIMul 35 ClusteredReduce 183 34
+             185:     66(ptr) AccessChain 27(data) 181 39 30
+                              Store 185 184
+             186:      6(int) Load 8(invocation)
+             187:     73(ptr) AccessChain 27(data) 39 39
+             188:   20(ivec4) Load 187
+             189:   72(ivec2) VectorShuffle 188 188 0 1
+             190:   72(ivec2) GroupNonUniformIMul 35 ClusteredReduce 189 34
+             191:     73(ptr) AccessChain 27(data) 186 39
+             192:   20(ivec4) Load 191
+             193:   20(ivec4) VectorShuffle 192 190 4 5 2 3
+                              Store 191 193
+             194:      6(int) Load 8(invocation)
+             195:     73(ptr) AccessChain 27(data) 50 39
+             196:   20(ivec4) Load 195
+             197:   82(ivec3) VectorShuffle 196 196 0 1 2
+             198:   82(ivec3) GroupNonUniformIMul 35 ClusteredReduce 197 34
+             199:     73(ptr) AccessChain 27(data) 194 39
+             200:   20(ivec4) Load 199
+             201:   20(ivec4) VectorShuffle 200 198 4 5 6 3
+                              Store 199 201
+             202:      6(int) Load 8(invocation)
+             203:     73(ptr) AccessChain 27(data) 60 39
+             204:   20(ivec4) Load 203
+             205:   20(ivec4) GroupNonUniformIMul 35 ClusteredReduce 204 34
+             206:     73(ptr) AccessChain 27(data) 202 39
+                              Store 206 205
+             207:      6(int) Load 8(invocation)
+             208:     96(ptr) AccessChain 27(data) 29 50 30
+             209:      6(int) Load 208
+             210:      6(int) GroupNonUniformIMul 35 ClusteredReduce 209 34
+             211:     96(ptr) AccessChain 27(data) 207 50 30
+                              Store 211 210
+             212:      6(int) Load 8(invocation)
+             213:    103(ptr) AccessChain 27(data) 39 50
+             214:   21(ivec4) Load 213
+             215:  102(ivec2) VectorShuffle 214 214 0 1
+             216:  102(ivec2) GroupNonUniformIMul 35 ClusteredReduce 215 34
+             217:    103(ptr) AccessChain 27(data) 212 50
+             218:   21(ivec4) Load 217
+             219:   21(ivec4) VectorShuffle 218 216 4 5 2 3
+                              Store 217 219
+             220:      6(int) Load 8(invocation)
+             221:    103(ptr) AccessChain 27(data) 50 50
+             222:   21(ivec4) Load 221
+             223:  112(ivec3) VectorShuffle 222 222 0 1 2
+             224:  112(ivec3) GroupNonUniformIMul 35 ClusteredReduce 223 34
+             225:    103(ptr) AccessChain 27(data) 220 50
+             226:   21(ivec4) Load 225
+             227:   21(ivec4) VectorShuffle 226 224 4 5 6 3
+                              Store 225 227
+             228:      6(int) Load 8(invocation)
+             229:    103(ptr) AccessChain 27(data) 60 50
+             230:   21(ivec4) Load 229
+             231:   21(ivec4) GroupNonUniformIMul 35 ClusteredReduce 230 34
+             232:    103(ptr) AccessChain 27(data) 228 50
+                              Store 232 231
+             233:      6(int) Load 8(invocation)
+             234:    126(ptr) AccessChain 27(data) 29 60 30
+             235:   22(float) Load 234
+             236:   22(float) GroupNonUniformFMul 35 ClusteredReduce 235 34
+             237:    126(ptr) AccessChain 27(data) 233 60 30
+                              Store 237 236
+             238:      6(int) Load 8(invocation)
+             239:    133(ptr) AccessChain 27(data) 39 60
+             240:   23(fvec4) Load 239
+             241:  132(fvec2) VectorShuffle 240 240 0 1
+             242:  132(fvec2) GroupNonUniformFMul 35 ClusteredReduce 241 34
+             243:    133(ptr) AccessChain 27(data) 238 60
+             244:   23(fvec4) Load 243
+             245:   23(fvec4) VectorShuffle 244 242 4 5 2 3
+                              Store 243 245
+             246:      6(int) Load 8(invocation)
+             247:    133(ptr) AccessChain 27(data) 50 60
+             248:   23(fvec4) Load 247
+             249:  142(fvec3) VectorShuffle 248 248 0 1 2
+             250:  142(fvec3) GroupNonUniformFMul 35 ClusteredReduce 249 34
+             251:    133(ptr) AccessChain 27(data) 246 60
+             252:   23(fvec4) Load 251
+             253:   23(fvec4) VectorShuffle 252 250 4 5 6 3
+                              Store 251 253
+             254:      6(int) Load 8(invocation)
+             255:    133(ptr) AccessChain 27(data) 60 60
+             256:   23(fvec4) Load 255
+             257:   23(fvec4) GroupNonUniformFMul 35 ClusteredReduce 256 34
+             258:    133(ptr) AccessChain 27(data) 254 60
+                              Store 258 257
+             259:      6(int) Load 8(invocation)
+             260:     31(ptr) AccessChain 27(data) 29 29 30
+             261:   17(float) Load 260
+             262:   17(float) GroupNonUniformFMin 35 ClusteredReduce 261 34
+             263:     31(ptr) AccessChain 27(data) 259 29 30
+                              Store 263 262
+             264:      6(int) Load 8(invocation)
+             265:     41(ptr) AccessChain 27(data) 39 29
+             266:   18(fvec4) Load 265
+             267:   40(fvec2) VectorShuffle 266 266 0 1
+             268:   40(fvec2) GroupNonUniformFMin 35 ClusteredReduce 267 34
+             269:     41(ptr) AccessChain 27(data) 264 29
+             270:   18(fvec4) Load 269
+             271:   18(fvec4) VectorShuffle 270 268 4 5 2 3
+                              Store 269 271
+             272:      6(int) Load 8(invocation)
+             273:     41(ptr) AccessChain 27(data) 50 29
+             274:   18(fvec4) Load 273
+             275:   51(fvec3) VectorShuffle 274 274 0 1 2
+             276:   51(fvec3) GroupNonUniformFMin 35 ClusteredReduce 275 34
+             277:     41(ptr) AccessChain 27(data) 272 29
+             278:   18(fvec4) Load 277
+             279:   18(fvec4) VectorShuffle 278 276 4 5 6 3
+                              Store 277 279
+             280:      6(int) Load 8(invocation)
+             281:     41(ptr) AccessChain 27(data) 60 29
+             282:   18(fvec4) Load 281
+             283:   18(fvec4) GroupNonUniformFMin 35 ClusteredReduce 282 34
+             284:     41(ptr) AccessChain 27(data) 280 29
+                              Store 284 283
+             285:      6(int) Load 8(invocation)
+             286:     66(ptr) AccessChain 27(data) 29 39 30
+             287:     19(int) Load 286
+             288:     19(int) GroupNonUniformSMin 35 ClusteredReduce 287 34
+             289:     66(ptr) AccessChain 27(data) 285 39 30
+                              Store 289 288
+             290:      6(int) Load 8(invocation)
+             291:     73(ptr) AccessChain 27(data) 39 39
+             292:   20(ivec4) Load 291
+             293:   72(ivec2) VectorShuffle 292 292 0 1
+             294:   72(ivec2) GroupNonUniformSMin 35 ClusteredReduce 293 34
+             295:     73(ptr) AccessChain 27(data) 290 39
+             296:   20(ivec4) Load 295
+             297:   20(ivec4) VectorShuffle 296 294 4 5 2 3
+                              Store 295 297
+             298:      6(int) Load 8(invocation)
+             299:     73(ptr) AccessChain 27(data) 50 39
+             300:   20(ivec4) Load 299
+             301:   82(ivec3) VectorShuffle 300 300 0 1 2
+             302:   82(ivec3) GroupNonUniformSMin 35 ClusteredReduce 301 34
+             303:     73(ptr) AccessChain 27(data) 298 39
+             304:   20(ivec4) Load 303
+             305:   20(ivec4) VectorShuffle 304 302 4 5 6 3
+                              Store 303 305
+             306:      6(int) Load 8(invocation)
+             307:     73(ptr) AccessChain 27(data) 60 39
+             308:   20(ivec4) Load 307
+             309:   20(ivec4) GroupNonUniformSMin 35 ClusteredReduce 308 34
+             310:     73(ptr) AccessChain 27(data) 306 39
+                              Store 310 309
+             311:      6(int) Load 8(invocation)
+             312:     96(ptr) AccessChain 27(data) 29 50 30
+             313:      6(int) Load 312
+             314:      6(int) GroupNonUniformUMin 35 ClusteredReduce 313 34
+             315:     96(ptr) AccessChain 27(data) 311 50 30
+                              Store 315 314
+             316:      6(int) Load 8(invocation)
+             317:    103(ptr) AccessChain 27(data) 39 50
+             318:   21(ivec4) Load 317
+             319:  102(ivec2) VectorShuffle 318 318 0 1
+             320:  102(ivec2) GroupNonUniformUMin 35 ClusteredReduce 319 34
+             321:    103(ptr) AccessChain 27(data) 316 50
+             322:   21(ivec4) Load 321
+             323:   21(ivec4) VectorShuffle 322 320 4 5 2 3
+                              Store 321 323
+             324:      6(int) Load 8(invocation)
+             325:    103(ptr) AccessChain 27(data) 50 50
+             326:   21(ivec4) Load 325
+             327:  112(ivec3) VectorShuffle 326 326 0 1 2
+             328:  112(ivec3) GroupNonUniformUMin 35 ClusteredReduce 327 34
+             329:    103(ptr) AccessChain 27(data) 324 50
+             330:   21(ivec4) Load 329
+             331:   21(ivec4) VectorShuffle 330 328 4 5 6 3
+                              Store 329 331
+             332:      6(int) Load 8(invocation)
+             333:    103(ptr) AccessChain 27(data) 60 50
+             334:   21(ivec4) Load 333
+             335:   21(ivec4) GroupNonUniformUMin 35 ClusteredReduce 334 34
+             336:    103(ptr) AccessChain 27(data) 332 50
+                              Store 336 335
+             337:      6(int) Load 8(invocation)
+             338:    126(ptr) AccessChain 27(data) 29 60 30
+             339:   22(float) Load 338
+             340:   22(float) GroupNonUniformFMin 35 ClusteredReduce 339 34
+             341:    126(ptr) AccessChain 27(data) 337 60 30
+                              Store 341 340
+             342:      6(int) Load 8(invocation)
+             343:    133(ptr) AccessChain 27(data) 39 60
+             344:   23(fvec4) Load 343
+             345:  132(fvec2) VectorShuffle 344 344 0 1
+             346:  132(fvec2) GroupNonUniformFMin 35 ClusteredReduce 345 34
+             347:    133(ptr) AccessChain 27(data) 342 60
+             348:   23(fvec4) Load 347
+             349:   23(fvec4) VectorShuffle 348 346 4 5 2 3
+                              Store 347 349
+             350:      6(int) Load 8(invocation)
+             351:    133(ptr) AccessChain 27(data) 50 60
+             352:   23(fvec4) Load 351
+             353:  142(fvec3) VectorShuffle 352 352 0 1 2
+             354:  142(fvec3) GroupNonUniformFMin 35 ClusteredReduce 353 34
+             355:    133(ptr) AccessChain 27(data) 350 60
+             356:   23(fvec4) Load 355
+             357:   23(fvec4) VectorShuffle 356 354 4 5 6 3
+                              Store 355 357
+             358:      6(int) Load 8(invocation)
+             359:    133(ptr) AccessChain 27(data) 60 60
+             360:   23(fvec4) Load 359
+             361:   23(fvec4) GroupNonUniformFMin 35 ClusteredReduce 360 34
+             362:    133(ptr) AccessChain 27(data) 358 60
+                              Store 362 361
+             363:      6(int) Load 8(invocation)
+             364:     31(ptr) AccessChain 27(data) 29 29 30
+             365:   17(float) Load 364
+             366:   17(float) GroupNonUniformFMax 35 ClusteredReduce 365 34
+             367:     31(ptr) AccessChain 27(data) 363 29 30
+                              Store 367 366
+             368:      6(int) Load 8(invocation)
+             369:     41(ptr) AccessChain 27(data) 39 29
+             370:   18(fvec4) Load 369
+             371:   40(fvec2) VectorShuffle 370 370 0 1
+             372:   40(fvec2) GroupNonUniformFMax 35 ClusteredReduce 371 34
+             373:     41(ptr) AccessChain 27(data) 368 29
+             374:   18(fvec4) Load 373
+             375:   18(fvec4) VectorShuffle 374 372 4 5 2 3
+                              Store 373 375
+             376:      6(int) Load 8(invocation)
+             377:     41(ptr) AccessChain 27(data) 50 29
+             378:   18(fvec4) Load 377
+             379:   51(fvec3) VectorShuffle 378 378 0 1 2
+             380:   51(fvec3) GroupNonUniformFMax 35 ClusteredReduce 379 34
+             381:     41(ptr) AccessChain 27(data) 376 29
+             382:   18(fvec4) Load 381
+             383:   18(fvec4) VectorShuffle 382 380 4 5 6 3
+                              Store 381 383
+             384:      6(int) Load 8(invocation)
+             385:     41(ptr) AccessChain 27(data) 60 29
+             386:   18(fvec4) Load 385
+             387:   18(fvec4) GroupNonUniformFMax 35 ClusteredReduce 386 34
+             388:     41(ptr) AccessChain 27(data) 384 29
+                              Store 388 387
+             389:      6(int) Load 8(invocation)
+             390:     66(ptr) AccessChain 27(data) 29 39 30
+             391:     19(int) Load 390
+             392:     19(int) GroupNonUniformSMax 35 ClusteredReduce 391 34
+             393:     66(ptr) AccessChain 27(data) 389 39 30
+                              Store 393 392
+             394:      6(int) Load 8(invocation)
+             395:     73(ptr) AccessChain 27(data) 39 39
+             396:   20(ivec4) Load 395
+             397:   72(ivec2) VectorShuffle 396 396 0 1
+             398:   72(ivec2) GroupNonUniformSMax 35 ClusteredReduce 397 34
+             399:     73(ptr) AccessChain 27(data) 394 39
+             400:   20(ivec4) Load 399
+             401:   20(ivec4) VectorShuffle 400 398 4 5 2 3
+                              Store 399 401
+             402:      6(int) Load 8(invocation)
+             403:     73(ptr) AccessChain 27(data) 50 39
+             404:   20(ivec4) Load 403
+             405:   82(ivec3) VectorShuffle 404 404 0 1 2
+             406:   82(ivec3) GroupNonUniformSMax 35 ClusteredReduce 405 34
+             407:     73(ptr) AccessChain 27(data) 402 39
+             408:   20(ivec4) Load 407
+             409:   20(ivec4) VectorShuffle 408 406 4 5 6 3
+                              Store 407 409
+             410:      6(int) Load 8(invocation)
+             411:     73(ptr) AccessChain 27(data) 60 39
+             412:   20(ivec4) Load 411
+             413:   20(ivec4) GroupNonUniformSMax 35 ClusteredReduce 412 34
+             414:     73(ptr) AccessChain 27(data) 410 39
+                              Store 414 413
+             415:      6(int) Load 8(invocation)
+             416:     96(ptr) AccessChain 27(data) 29 50 30
+             417:      6(int) Load 416
+             418:      6(int) GroupNonUniformUMax 35 ClusteredReduce 417 34
+             419:     96(ptr) AccessChain 27(data) 415 50 30
+                              Store 419 418
+             420:      6(int) Load 8(invocation)
+             421:    103(ptr) AccessChain 27(data) 39 50
+             422:   21(ivec4) Load 421
+             423:  102(ivec2) VectorShuffle 422 422 0 1
+             424:  102(ivec2) GroupNonUniformUMax 35 ClusteredReduce 423 34
+             425:    103(ptr) AccessChain 27(data) 420 50
+             426:   21(ivec4) Load 425
+             427:   21(ivec4) VectorShuffle 426 424 4 5 2 3
+                              Store 425 427
+             428:      6(int) Load 8(invocation)
+             429:    103(ptr) AccessChain 27(data) 50 50
+             430:   21(ivec4) Load 429
+             431:  112(ivec3) VectorShuffle 430 430 0 1 2
+             432:  112(ivec3) GroupNonUniformUMax 35 ClusteredReduce 431 34
+             433:    103(ptr) AccessChain 27(data) 428 50
+             434:   21(ivec4) Load 433
+             435:   21(ivec4) VectorShuffle 434 432 4 5 6 3
+                              Store 433 435
+             436:      6(int) Load 8(invocation)
+             437:    103(ptr) AccessChain 27(data) 60 50
+             438:   21(ivec4) Load 437
+             439:   21(ivec4) GroupNonUniformUMax 35 ClusteredReduce 438 34
+             440:    103(ptr) AccessChain 27(data) 436 50
+                              Store 440 439
+             441:      6(int) Load 8(invocation)
+             442:    126(ptr) AccessChain 27(data) 29 60 30
+             443:   22(float) Load 442
+             444:   22(float) GroupNonUniformFMax 35 ClusteredReduce 443 34
+             445:    126(ptr) AccessChain 27(data) 441 60 30
+                              Store 445 444
+             446:      6(int) Load 8(invocation)
+             447:    133(ptr) AccessChain 27(data) 39 60
+             448:   23(fvec4) Load 447
+             449:  132(fvec2) VectorShuffle 448 448 0 1
+             450:  132(fvec2) GroupNonUniformFMax 35 ClusteredReduce 449 34
+             451:    133(ptr) AccessChain 27(data) 446 60
+             452:   23(fvec4) Load 451
+             453:   23(fvec4) VectorShuffle 452 450 4 5 2 3
+                              Store 451 453
+             454:      6(int) Load 8(invocation)
+             455:    133(ptr) AccessChain 27(data) 50 60
+             456:   23(fvec4) Load 455
+             457:  142(fvec3) VectorShuffle 456 456 0 1 2
+             458:  142(fvec3) GroupNonUniformFMax 35 ClusteredReduce 457 34
+             459:    133(ptr) AccessChain 27(data) 454 60
+             460:   23(fvec4) Load 459
+             461:   23(fvec4) VectorShuffle 460 458 4 5 6 3
+                              Store 459 461
+             462:      6(int) Load 8(invocation)
+             463:    133(ptr) AccessChain 27(data) 60 60
+             464:   23(fvec4) Load 463
+             465:   23(fvec4) GroupNonUniformFMax 35 ClusteredReduce 464 34
+             466:    133(ptr) AccessChain 27(data) 462 60
+                              Store 466 465
+             467:      6(int) Load 8(invocation)
+             468:     66(ptr) AccessChain 27(data) 29 39 30
+             469:     19(int) Load 468
+             470:     19(int) GroupNonUniformBitwiseAnd 35 ClusteredReduce 469 34
+             471:     66(ptr) AccessChain 27(data) 467 39 30
+                              Store 471 470
+             472:      6(int) Load 8(invocation)
+             473:     73(ptr) AccessChain 27(data) 39 39
+             474:   20(ivec4) Load 473
+             475:   72(ivec2) VectorShuffle 474 474 0 1
+             476:   72(ivec2) GroupNonUniformBitwiseAnd 35 ClusteredReduce 475 34
+             477:     73(ptr) AccessChain 27(data) 472 39
+             478:   20(ivec4) Load 477
+             479:   20(ivec4) VectorShuffle 478 476 4 5 2 3
+                              Store 477 479
+             480:      6(int) Load 8(invocation)
+             481:     73(ptr) AccessChain 27(data) 50 39
+             482:   20(ivec4) Load 481
+             483:   82(ivec3) VectorShuffle 482 482 0 1 2
+             484:   82(ivec3) GroupNonUniformBitwiseAnd 35 ClusteredReduce 483 34
+             485:     73(ptr) AccessChain 27(data) 480 39
+             486:   20(ivec4) Load 485
+             487:   20(ivec4) VectorShuffle 486 484 4 5 6 3
+                              Store 485 487
+             488:      6(int) Load 8(invocation)
+             489:     73(ptr) AccessChain 27(data) 60 39
+             490:   20(ivec4) Load 489
+             491:   20(ivec4) GroupNonUniformBitwiseAnd 35 ClusteredReduce 490 34
+             492:     73(ptr) AccessChain 27(data) 488 39
+                              Store 492 491
+             493:      6(int) Load 8(invocation)
+             494:     96(ptr) AccessChain 27(data) 29 50 30
+             495:      6(int) Load 494
+             496:      6(int) GroupNonUniformBitwiseAnd 35 ClusteredReduce 495 34
+             497:     96(ptr) AccessChain 27(data) 493 50 30
+                              Store 497 496
+             498:      6(int) Load 8(invocation)
+             499:    103(ptr) AccessChain 27(data) 39 50
+             500:   21(ivec4) Load 499
+             501:  102(ivec2) VectorShuffle 500 500 0 1
+             502:  102(ivec2) GroupNonUniformBitwiseAnd 35 ClusteredReduce 501 34
+             503:    103(ptr) AccessChain 27(data) 498 50
+             504:   21(ivec4) Load 503
+             505:   21(ivec4) VectorShuffle 504 502 4 5 2 3
+                              Store 503 505
+             506:      6(int) Load 8(invocation)
+             507:    103(ptr) AccessChain 27(data) 50 50
+             508:   21(ivec4) Load 507
+             509:  112(ivec3) VectorShuffle 508 508 0 1 2
+             510:  112(ivec3) GroupNonUniformBitwiseAnd 35 ClusteredReduce 509 34
+             511:    103(ptr) AccessChain 27(data) 506 50
+             512:   21(ivec4) Load 511
+             513:   21(ivec4) VectorShuffle 512 510 4 5 6 3
+                              Store 511 513
+             514:      6(int) Load 8(invocation)
+             515:    103(ptr) AccessChain 27(data) 60 50
+             516:   21(ivec4) Load 515
+             517:   21(ivec4) GroupNonUniformBitwiseAnd 35 ClusteredReduce 516 34
+             518:    103(ptr) AccessChain 27(data) 514 50
+                              Store 518 517
+             519:      6(int) Load 8(invocation)
+             520:     66(ptr) AccessChain 27(data) 29 39 30
+             521:     19(int) Load 520
+             523:   522(bool) SLessThan 521 29
+             524:   522(bool) GroupNonUniformLogicalAnd 35 ClusteredReduce 523 34
+             525:     19(int) Select 524 39 29
+             526:     66(ptr) AccessChain 27(data) 519 39 30
+                              Store 526 525
+             527:      6(int) Load 8(invocation)
+             528:     73(ptr) AccessChain 27(data) 39 39
+             529:   20(ivec4) Load 528
+             530:   72(ivec2) VectorShuffle 529 529 0 1
+             533:  532(bvec2) SLessThan 530 531
+             534:  532(bvec2) GroupNonUniformLogicalAnd 35 ClusteredReduce 533 34
+             536:   72(ivec2) Select 534 535 531
+             537:     73(ptr) AccessChain 27(data) 527 39
+             538:   20(ivec4) Load 537
+             539:   20(ivec4) VectorShuffle 538 536 4 5 2 3
+                              Store 537 539
+             540:      6(int) Load 8(invocation)
+             541:     73(ptr) AccessChain 27(data) 39 39
+             542:   20(ivec4) Load 541
+             543:   82(ivec3) VectorShuffle 542 542 0 1 2
+             546:  545(bvec3) SLessThan 543 544
+             547:  545(bvec3) GroupNonUniformLogicalAnd 35 ClusteredReduce 546 34
+             549:   82(ivec3) Select 547 548 544
+             550:     73(ptr) AccessChain 27(data) 540 39
+             551:   20(ivec4) Load 550
+             552:   20(ivec4) VectorShuffle 551 549 4 5 6 3
+                              Store 550 552
+             553:      6(int) Load 8(invocation)
+             554:     73(ptr) AccessChain 27(data) 39 39
+             555:   20(ivec4) Load 554
+             558:  557(bvec4) SLessThan 555 556
+             559:  557(bvec4) GroupNonUniformLogicalAnd 35 ClusteredReduce 558 34
+             561:   20(ivec4) Select 559 560 556
+             562:     73(ptr) AccessChain 27(data) 553 39
+                              Store 562 561
+             563:      6(int) Load 8(invocation)
+             564:     66(ptr) AccessChain 27(data) 29 39 30
+             565:     19(int) Load 564
+             566:     19(int) GroupNonUniformBitwiseOr 35 ClusteredReduce 565 34
+             567:     66(ptr) AccessChain 27(data) 563 39 30
+                              Store 567 566
+             568:      6(int) Load 8(invocation)
+             569:     73(ptr) AccessChain 27(data) 39 39
+             570:   20(ivec4) Load 569
+             571:   72(ivec2) VectorShuffle 570 570 0 1
+             572:   72(ivec2) GroupNonUniformBitwiseOr 35 ClusteredReduce 571 34
+             573:     73(ptr) AccessChain 27(data) 568 39
+             574:   20(ivec4) Load 573
+             575:   20(ivec4) VectorShuffle 574 572 4 5 2 3
+                              Store 573 575
+             576:      6(int) Load 8(invocation)
+             577:     73(ptr) AccessChain 27(data) 50 39
+             578:   20(ivec4) Load 577
+             579:   82(ivec3) VectorShuffle 578 578 0 1 2
+             580:   82(ivec3) GroupNonUniformBitwiseOr 35 ClusteredReduce 579 34
+             581:     73(ptr) AccessChain 27(data) 576 39
+             582:   20(ivec4) Load 581
+             583:   20(ivec4) VectorShuffle 582 580 4 5 6 3
+                              Store 581 583
+             584:      6(int) Load 8(invocation)
+             585:     73(ptr) AccessChain 27(data) 60 39
+             586:   20(ivec4) Load 585
+             587:   20(ivec4) GroupNonUniformBitwiseOr 35 ClusteredReduce 586 34
+             588:     73(ptr) AccessChain 27(data) 584 39
+                              Store 588 587
+             589:      6(int) Load 8(invocation)
+             590:     96(ptr) AccessChain 27(data) 29 50 30
+             591:      6(int) Load 590
+             592:      6(int) GroupNonUniformBitwiseOr 35 ClusteredReduce 591 34
+             593:     96(ptr) AccessChain 27(data) 589 50 30
+                              Store 593 592
+             594:      6(int) Load 8(invocation)
+             595:    103(ptr) AccessChain 27(data) 39 50
+             596:   21(ivec4) Load 595
+             597:  102(ivec2) VectorShuffle 596 596 0 1
+             598:  102(ivec2) GroupNonUniformBitwiseOr 35 ClusteredReduce 597 34
+             599:    103(ptr) AccessChain 27(data) 594 50
+             600:   21(ivec4) Load 599
+             601:   21(ivec4) VectorShuffle 600 598 4 5 2 3
+                              Store 599 601
+             602:      6(int) Load 8(invocation)
+             603:    103(ptr) AccessChain 27(data) 50 50
+             604:   21(ivec4) Load 603
+             605:  112(ivec3) VectorShuffle 604 604 0 1 2
+             606:  112(ivec3) GroupNonUniformBitwiseOr 35 ClusteredReduce 605 34
+             607:    103(ptr) AccessChain 27(data) 602 50
+             608:   21(ivec4) Load 607
+             609:   21(ivec4) VectorShuffle 608 606 4 5 6 3
+                              Store 607 609
+             610:      6(int) Load 8(invocation)
+             611:    103(ptr) AccessChain 27(data) 60 50
+             612:   21(ivec4) Load 611
+             613:   21(ivec4) GroupNonUniformBitwiseOr 35 ClusteredReduce 612 34
+             614:    103(ptr) AccessChain 27(data) 610 50
+                              Store 614 613
+             615:      6(int) Load 8(invocation)
+             616:     66(ptr) AccessChain 27(data) 29 39 30
+             617:     19(int) Load 616
+             618:   522(bool) SLessThan 617 29
+             619:   522(bool) GroupNonUniformLogicalOr 35 ClusteredReduce 618 34
+             620:     19(int) Select 619 39 29
+             621:     66(ptr) AccessChain 27(data) 615 39 30
+                              Store 621 620
+             622:      6(int) Load 8(invocation)
+             623:     73(ptr) AccessChain 27(data) 39 39
+             624:   20(ivec4) Load 623
+             625:   72(ivec2) VectorShuffle 624 624 0 1
+             626:  532(bvec2) SLessThan 625 531
+             627:  532(bvec2) GroupNonUniformLogicalOr 35 ClusteredReduce 626 34
+             628:   72(ivec2) Select 627 535 531
+             629:     73(ptr) AccessChain 27(data) 622 39
+             630:   20(ivec4) Load 629
+             631:   20(ivec4) VectorShuffle 630 628 4 5 2 3
+                              Store 629 631
+             632:      6(int) Load 8(invocation)
+             633:     73(ptr) AccessChain 27(data) 39 39
+             634:   20(ivec4) Load 633
+             635:   82(ivec3) VectorShuffle 634 634 0 1 2
+             636:  545(bvec3) SLessThan 635 544
+             637:  545(bvec3) GroupNonUniformLogicalOr 35 ClusteredReduce 636 34
+             638:   82(ivec3) Select 637 548 544
+             639:     73(ptr) AccessChain 27(data) 632 39
+             640:   20(ivec4) Load 639
+             641:   20(ivec4) VectorShuffle 640 638 4 5 6 3
+                              Store 639 641
+             642:      6(int) Load 8(invocation)
+             643:     73(ptr) AccessChain 27(data) 39 39
+             644:   20(ivec4) Load 643
+             645:  557(bvec4) SLessThan 644 556
+             646:  557(bvec4) GroupNonUniformLogicalOr 35 ClusteredReduce 645 34
+             647:   20(ivec4) Select 646 560 556
+             648:     73(ptr) AccessChain 27(data) 642 39
+                              Store 648 647
+             649:      6(int) Load 8(invocation)
+             650:     66(ptr) AccessChain 27(data) 29 39 30
+             651:     19(int) Load 650
+             652:     19(int) GroupNonUniformBitwiseXor 35 ClusteredReduce 651 34
+             653:     66(ptr) AccessChain 27(data) 649 39 30
+                              Store 653 652
+             654:      6(int) Load 8(invocation)
+             655:     73(ptr) AccessChain 27(data) 39 39
+             656:   20(ivec4) Load 655
+             657:   72(ivec2) VectorShuffle 656 656 0 1
+             658:   72(ivec2) GroupNonUniformBitwiseXor 35 ClusteredReduce 657 34
+             659:     73(ptr) AccessChain 27(data) 654 39
+             660:   20(ivec4) Load 659
+             661:   20(ivec4) VectorShuffle 660 658 4 5 2 3
+                              Store 659 661
+             662:      6(int) Load 8(invocation)
+             663:     73(ptr) AccessChain 27(data) 50 39
+             664:   20(ivec4) Load 663
+             665:   82(ivec3) VectorShuffle 664 664 0 1 2
+             666:   82(ivec3) GroupNonUniformBitwiseXor 35 ClusteredReduce 665 34
+             667:     73(ptr) AccessChain 27(data) 662 39
+             668:   20(ivec4) Load 667
+             669:   20(ivec4) VectorShuffle 668 666 4 5 6 3
+                              Store 667 669
+             670:      6(int) Load 8(invocation)
+             671:     73(ptr) AccessChain 27(data) 60 39
+             672:   20(ivec4) Load 671
+             673:   20(ivec4) GroupNonUniformBitwiseXor 35 ClusteredReduce 672 34
+             674:     73(ptr) AccessChain 27(data) 670 39
+                              Store 674 673
+             675:      6(int) Load 8(invocation)
+             676:     96(ptr) AccessChain 27(data) 29 50 30
+             677:      6(int) Load 676
+             678:      6(int) GroupNonUniformBitwiseXor 35 ClusteredReduce 677 34
+             679:     96(ptr) AccessChain 27(data) 675 50 30
+                              Store 679 678
+             680:      6(int) Load 8(invocation)
+             681:    103(ptr) AccessChain 27(data) 39 50
+             682:   21(ivec4) Load 681
+             683:  102(ivec2) VectorShuffle 682 682 0 1
+             684:  102(ivec2) GroupNonUniformBitwiseXor 35 ClusteredReduce 683 34
+             685:    103(ptr) AccessChain 27(data) 680 50
+             686:   21(ivec4) Load 685
+             687:   21(ivec4) VectorShuffle 686 684 4 5 2 3
+                              Store 685 687
+             688:      6(int) Load 8(invocation)
+             689:    103(ptr) AccessChain 27(data) 50 50
+             690:   21(ivec4) Load 689
+             691:  112(ivec3) VectorShuffle 690 690 0 1 2
+             692:  112(ivec3) GroupNonUniformBitwiseXor 35 ClusteredReduce 691 34
+             693:    103(ptr) AccessChain 27(data) 688 50
+             694:   21(ivec4) Load 693
+             695:   21(ivec4) VectorShuffle 694 692 4 5 6 3
+                              Store 693 695
+             696:      6(int) Load 8(invocation)
+             697:    103(ptr) AccessChain 27(data) 60 50
+             698:   21(ivec4) Load 697
+             699:   21(ivec4) GroupNonUniformBitwiseXor 35 ClusteredReduce 698 34
+             700:    103(ptr) AccessChain 27(data) 696 50
+                              Store 700 699
+             701:      6(int) Load 8(invocation)
+             702:     66(ptr) AccessChain 27(data) 29 39 30
+             703:     19(int) Load 702
+             704:   522(bool) SLessThan 703 29
+             705:   522(bool) GroupNonUniformLogicalXor 35 ClusteredReduce 704 34
+             706:     19(int) Select 705 39 29
+             707:     66(ptr) AccessChain 27(data) 701 39 30
+                              Store 707 706
+             708:      6(int) Load 8(invocation)
+             709:     73(ptr) AccessChain 27(data) 39 39
+             710:   20(ivec4) Load 709
+             711:   72(ivec2) VectorShuffle 710 710 0 1
+             712:  532(bvec2) SLessThan 711 531
+             713:  532(bvec2) GroupNonUniformLogicalXor 35 ClusteredReduce 712 34
+             714:   72(ivec2) Select 713 535 531
+             715:     73(ptr) AccessChain 27(data) 708 39
+             716:   20(ivec4) Load 715
+             717:   20(ivec4) VectorShuffle 716 714 4 5 2 3
+                              Store 715 717
+             718:      6(int) Load 8(invocation)
+             719:     73(ptr) AccessChain 27(data) 39 39
+             720:   20(ivec4) Load 719
+             721:   82(ivec3) VectorShuffle 720 720 0 1 2
+             722:  545(bvec3) SLessThan 721 544
+             723:  545(bvec3) GroupNonUniformLogicalXor 35 ClusteredReduce 722 34
+             724:   82(ivec3) Select 723 548 544
+             725:     73(ptr) AccessChain 27(data) 718 39
+             726:   20(ivec4) Load 725
+             727:   20(ivec4) VectorShuffle 726 724 4 5 6 3
+                              Store 725 727
+             728:      6(int) Load 8(invocation)
+             729:     73(ptr) AccessChain 27(data) 39 39
+             730:   20(ivec4) Load 729
+             731:  557(bvec4) SLessThan 730 556
+             732:  557(bvec4) GroupNonUniformLogicalXor 35 ClusteredReduce 731 34
+             733:   20(ivec4) Select 732 560 556
+             734:     73(ptr) AccessChain 27(data) 728 39
+                              Store 734 733
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroupClusteredNeg.comp.out b/Test/baseResults/spv.subgroupClusteredNeg.comp.out
new file mode 100755
index 0000000..911ff72
--- /dev/null
+++ b/Test/baseResults/spv.subgroupClusteredNeg.comp.out
@@ -0,0 +1,13 @@
+spv.subgroupClusteredNeg.comp
+ERROR: 0:22: 'cluster size' : argument must be at least 1 
+ERROR: 0:24: 'cluster size' : argument must be a power of 2 
+ERROR: 0:27: 'cluster size' : argument must be a power of 2 
+ERROR: 0:29: 'cluster size' : argument must be at least 1 
+ERROR: 0:31: 'cluster size' : argument must be at least 1 
+ERROR: 0:33: 'cluster size' : argument must be compile-time constant 
+ERROR: 0:36: 'cluster size' : argument must be compile-time constant 
+ERROR: 0:37: 'cluster size' : argument must be compile-time constant 
+ERROR: 8 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.subgroupQuad.comp.out b/Test/baseResults/spv.subgroupQuad.comp.out
new file mode 100644
index 0000000..275f1e3
--- /dev/null
+++ b/Test/baseResults/spv.subgroupQuad.comp.out
@@ -0,0 +1,739 @@
+spv.subgroupQuad.comp
+// Module Version 10300
+// Generated by (magic number): 80005
+// Id's are bound by 616
+
+                              Capability Shader
+                              Capability Float64
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformQuad
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 10 12
+                              ExecutionMode 4 LocalSize 8 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              SourceExtension  "GL_KHR_shader_subgroup_quad"
+                              Name 4  "main"
+                              Name 8  "invocation"
+                              Name 10  "gl_SubgroupInvocationID"
+                              Name 12  "gl_SubgroupSize"
+                              Name 24  "Buffers"
+                              MemberName 24(Buffers) 0  "f4"
+                              MemberName 24(Buffers) 1  "i4"
+                              MemberName 24(Buffers) 2  "u4"
+                              MemberName 24(Buffers) 3  "d4"
+                              Name 27  "data"
+                              Decorate 10(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 10(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 11 RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 13 RelaxedPrecision
+                              Decorate 14 RelaxedPrecision
+                              Decorate 16 RelaxedPrecision
+                              MemberDecorate 24(Buffers) 0 Offset 0
+                              MemberDecorate 24(Buffers) 1 Offset 16
+                              MemberDecorate 24(Buffers) 2 Offset 32
+                              MemberDecorate 24(Buffers) 3 Offset 64
+                              Decorate 24(Buffers) BufferBlock
+                              Decorate 27(data) DescriptorSet 0
+                              Decorate 27(data) Binding 0
+                              Decorate 615 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypePointer Input 6(int)
+10(gl_SubgroupInvocationID):      9(ptr) Variable Input
+12(gl_SubgroupSize):      9(ptr) Variable Input
+              15:      6(int) Constant 4
+              17:             TypeFloat 32
+              18:             TypeVector 17(float) 4
+              19:             TypeInt 32 1
+              20:             TypeVector 19(int) 4
+              21:             TypeVector 6(int) 4
+              22:             TypeFloat 64
+              23:             TypeVector 22(float) 4
+     24(Buffers):             TypeStruct 18(fvec4) 20(ivec4) 21(ivec4) 23(fvec4)
+              25:             TypeArray 24(Buffers) 15
+              26:             TypePointer Uniform 25
+        27(data):     26(ptr) Variable Uniform
+              29:     19(int) Constant 0
+              30:      6(int) Constant 0
+              31:             TypePointer Uniform 17(float)
+              34:      6(int) Constant 1
+              35:      6(int) Constant 3
+              39:     19(int) Constant 1
+              40:             TypeVector 17(float) 2
+              41:             TypePointer Uniform 18(fvec4)
+              50:     19(int) Constant 2
+              51:             TypeVector 17(float) 3
+              60:     19(int) Constant 3
+              66:             TypePointer Uniform 19(int)
+              72:             TypeVector 19(int) 2
+              73:             TypePointer Uniform 20(ivec4)
+              82:             TypeVector 19(int) 3
+              96:             TypePointer Uniform 6(int)
+             102:             TypeVector 6(int) 2
+             103:             TypePointer Uniform 21(ivec4)
+             112:             TypeVector 6(int) 3
+             126:             TypePointer Uniform 22(float)
+             132:             TypeVector 22(float) 2
+             133:             TypePointer Uniform 23(fvec4)
+             142:             TypeVector 22(float) 3
+             158:             TypeBool
+             167:   72(ivec2) ConstantComposite 29 29
+             168:             TypeVector 158(bool) 2
+             171:   72(ivec2) ConstantComposite 39 39
+             180:   82(ivec3) ConstantComposite 29 29 29
+             181:             TypeVector 158(bool) 3
+             184:   82(ivec3) ConstantComposite 39 39 39
+             192:   20(ivec4) ConstantComposite 29 29 29 29
+             193:             TypeVector 158(bool) 4
+             196:   20(ivec4) ConstantComposite 39 39 39 39
+             478:      6(int) Constant 2
+             614:      6(int) Constant 8
+             615:  112(ivec3) ConstantComposite 614 34 34
+         4(main):           2 Function None 3
+               5:             Label
+   8(invocation):      7(ptr) Variable Function
+              11:      6(int) Load 10(gl_SubgroupInvocationID)
+              13:      6(int) Load 12(gl_SubgroupSize)
+              14:      6(int) IAdd 11 13
+              16:      6(int) UMod 14 15
+                              Store 8(invocation) 16
+              28:      6(int) Load 8(invocation)
+              32:     31(ptr) AccessChain 27(data) 29 29 30
+              33:   17(float) Load 32
+              36:   17(float) GroupNonUniformQuadBroadcast 35 33 34
+              37:     31(ptr) AccessChain 27(data) 28 29 30
+                              Store 37 36
+              38:      6(int) Load 8(invocation)
+              42:     41(ptr) AccessChain 27(data) 39 29
+              43:   18(fvec4) Load 42
+              44:   40(fvec2) VectorShuffle 43 43 0 1
+              45:   40(fvec2) GroupNonUniformQuadBroadcast 35 44 34
+              46:     41(ptr) AccessChain 27(data) 38 29
+              47:   18(fvec4) Load 46
+              48:   18(fvec4) VectorShuffle 47 45 4 5 2 3
+                              Store 46 48
+              49:      6(int) Load 8(invocation)
+              52:     41(ptr) AccessChain 27(data) 50 29
+              53:   18(fvec4) Load 52
+              54:   51(fvec3) VectorShuffle 53 53 0 1 2
+              55:   51(fvec3) GroupNonUniformQuadBroadcast 35 54 34
+              56:     41(ptr) AccessChain 27(data) 49 29
+              57:   18(fvec4) Load 56
+              58:   18(fvec4) VectorShuffle 57 55 4 5 6 3
+                              Store 56 58
+              59:      6(int) Load 8(invocation)
+              61:     41(ptr) AccessChain 27(data) 60 29
+              62:   18(fvec4) Load 61
+              63:   18(fvec4) GroupNonUniformQuadBroadcast 35 62 34
+              64:     41(ptr) AccessChain 27(data) 59 29
+                              Store 64 63
+              65:      6(int) Load 8(invocation)
+              67:     66(ptr) AccessChain 27(data) 29 39 30
+              68:     19(int) Load 67
+              69:     19(int) GroupNonUniformQuadBroadcast 35 68 34
+              70:     66(ptr) AccessChain 27(data) 65 39 30
+                              Store 70 69
+              71:      6(int) Load 8(invocation)
+              74:     73(ptr) AccessChain 27(data) 39 39
+              75:   20(ivec4) Load 74
+              76:   72(ivec2) VectorShuffle 75 75 0 1
+              77:   72(ivec2) GroupNonUniformQuadBroadcast 35 76 34
+              78:     73(ptr) AccessChain 27(data) 71 39
+              79:   20(ivec4) Load 78
+              80:   20(ivec4) VectorShuffle 79 77 4 5 2 3
+                              Store 78 80
+              81:      6(int) Load 8(invocation)
+              83:     73(ptr) AccessChain 27(data) 50 39
+              84:   20(ivec4) Load 83
+              85:   82(ivec3) VectorShuffle 84 84 0 1 2
+              86:   82(ivec3) GroupNonUniformQuadBroadcast 35 85 34
+              87:     73(ptr) AccessChain 27(data) 81 39
+              88:   20(ivec4) Load 87
+              89:   20(ivec4) VectorShuffle 88 86 4 5 6 3
+                              Store 87 89
+              90:      6(int) Load 8(invocation)
+              91:     73(ptr) AccessChain 27(data) 60 39
+              92:   20(ivec4) Load 91
+              93:   20(ivec4) GroupNonUniformQuadBroadcast 35 92 34
+              94:     73(ptr) AccessChain 27(data) 90 39
+                              Store 94 93
+              95:      6(int) Load 8(invocation)
+              97:     96(ptr) AccessChain 27(data) 29 50 30
+              98:      6(int) Load 97
+              99:      6(int) GroupNonUniformQuadBroadcast 35 98 34
+             100:     96(ptr) AccessChain 27(data) 95 50 30
+                              Store 100 99
+             101:      6(int) Load 8(invocation)
+             104:    103(ptr) AccessChain 27(data) 39 50
+             105:   21(ivec4) Load 104
+             106:  102(ivec2) VectorShuffle 105 105 0 1
+             107:  102(ivec2) GroupNonUniformQuadBroadcast 35 106 34
+             108:    103(ptr) AccessChain 27(data) 101 50
+             109:   21(ivec4) Load 108
+             110:   21(ivec4) VectorShuffle 109 107 4 5 2 3
+                              Store 108 110
+             111:      6(int) Load 8(invocation)
+             113:    103(ptr) AccessChain 27(data) 50 50
+             114:   21(ivec4) Load 113
+             115:  112(ivec3) VectorShuffle 114 114 0 1 2
+             116:  112(ivec3) GroupNonUniformQuadBroadcast 35 115 34
+             117:    103(ptr) AccessChain 27(data) 111 50
+             118:   21(ivec4) Load 117
+             119:   21(ivec4) VectorShuffle 118 116 4 5 6 3
+                              Store 117 119
+             120:      6(int) Load 8(invocation)
+             121:    103(ptr) AccessChain 27(data) 60 50
+             122:   21(ivec4) Load 121
+             123:   21(ivec4) GroupNonUniformQuadBroadcast 35 122 34
+             124:    103(ptr) AccessChain 27(data) 120 50
+                              Store 124 123
+             125:      6(int) Load 8(invocation)
+             127:    126(ptr) AccessChain 27(data) 29 60 30
+             128:   22(float) Load 127
+             129:   22(float) GroupNonUniformQuadBroadcast 35 128 34
+             130:    126(ptr) AccessChain 27(data) 125 60 30
+                              Store 130 129
+             131:      6(int) Load 8(invocation)
+             134:    133(ptr) AccessChain 27(data) 39 60
+             135:   23(fvec4) Load 134
+             136:  132(fvec2) VectorShuffle 135 135 0 1
+             137:  132(fvec2) GroupNonUniformQuadBroadcast 35 136 34
+             138:    133(ptr) AccessChain 27(data) 131 60
+             139:   23(fvec4) Load 138
+             140:   23(fvec4) VectorShuffle 139 137 4 5 2 3
+                              Store 138 140
+             141:      6(int) Load 8(invocation)
+             143:    133(ptr) AccessChain 27(data) 50 60
+             144:   23(fvec4) Load 143
+             145:  142(fvec3) VectorShuffle 144 144 0 1 2
+             146:  142(fvec3) GroupNonUniformQuadBroadcast 35 145 34
+             147:    133(ptr) AccessChain 27(data) 141 60
+             148:   23(fvec4) Load 147
+             149:   23(fvec4) VectorShuffle 148 146 4 5 6 3
+                              Store 147 149
+             150:      6(int) Load 8(invocation)
+             151:    133(ptr) AccessChain 27(data) 60 60
+             152:   23(fvec4) Load 151
+             153:   23(fvec4) GroupNonUniformQuadBroadcast 35 152 34
+             154:    133(ptr) AccessChain 27(data) 150 60
+                              Store 154 153
+             155:      6(int) Load 8(invocation)
+             156:     66(ptr) AccessChain 27(data) 29 39 30
+             157:     19(int) Load 156
+             159:   158(bool) SLessThan 157 29
+             160:   158(bool) GroupNonUniformQuadBroadcast 35 159 34
+             161:     19(int) Select 160 39 29
+             162:     66(ptr) AccessChain 27(data) 155 39 30
+                              Store 162 161
+             163:      6(int) Load 8(invocation)
+             164:     73(ptr) AccessChain 27(data) 39 39
+             165:   20(ivec4) Load 164
+             166:   72(ivec2) VectorShuffle 165 165 0 1
+             169:  168(bvec2) SLessThan 166 167
+             170:  168(bvec2) GroupNonUniformQuadBroadcast 35 169 34
+             172:   72(ivec2) Select 170 171 167
+             173:     73(ptr) AccessChain 27(data) 163 39
+             174:   20(ivec4) Load 173
+             175:   20(ivec4) VectorShuffle 174 172 4 5 2 3
+                              Store 173 175
+             176:      6(int) Load 8(invocation)
+             177:     73(ptr) AccessChain 27(data) 39 39
+             178:   20(ivec4) Load 177
+             179:   82(ivec3) VectorShuffle 178 178 0 1 2
+             182:  181(bvec3) SLessThan 179 180
+             183:  181(bvec3) GroupNonUniformQuadBroadcast 35 182 34
+             185:   82(ivec3) Select 183 184 180
+             186:     73(ptr) AccessChain 27(data) 176 39
+             187:   20(ivec4) Load 186
+             188:   20(ivec4) VectorShuffle 187 185 4 5 6 3
+                              Store 186 188
+             189:      6(int) Load 8(invocation)
+             190:     73(ptr) AccessChain 27(data) 39 39
+             191:   20(ivec4) Load 190
+             194:  193(bvec4) SLessThan 191 192
+             195:  193(bvec4) GroupNonUniformQuadBroadcast 35 194 34
+             197:   20(ivec4) Select 195 196 192
+             198:     73(ptr) AccessChain 27(data) 189 39
+                              Store 198 197
+             199:      6(int) Load 8(invocation)
+             200:     31(ptr) AccessChain 27(data) 29 29 30
+             201:   17(float) Load 200
+             202:   17(float) GroupNonUniformQuadSwap 35 201 30
+             203:     31(ptr) AccessChain 27(data) 199 29 30
+                              Store 203 202
+             204:      6(int) Load 8(invocation)
+             205:     41(ptr) AccessChain 27(data) 39 29
+             206:   18(fvec4) Load 205
+             207:   40(fvec2) VectorShuffle 206 206 0 1
+             208:   40(fvec2) GroupNonUniformQuadSwap 35 207 30
+             209:     41(ptr) AccessChain 27(data) 204 29
+             210:   18(fvec4) Load 209
+             211:   18(fvec4) VectorShuffle 210 208 4 5 2 3
+                              Store 209 211
+             212:      6(int) Load 8(invocation)
+             213:     41(ptr) AccessChain 27(data) 50 29
+             214:   18(fvec4) Load 213
+             215:   51(fvec3) VectorShuffle 214 214 0 1 2
+             216:   51(fvec3) GroupNonUniformQuadSwap 35 215 30
+             217:     41(ptr) AccessChain 27(data) 212 29
+             218:   18(fvec4) Load 217
+             219:   18(fvec4) VectorShuffle 218 216 4 5 6 3
+                              Store 217 219
+             220:      6(int) Load 8(invocation)
+             221:     41(ptr) AccessChain 27(data) 60 29
+             222:   18(fvec4) Load 221
+             223:   18(fvec4) GroupNonUniformQuadSwap 35 222 30
+             224:     41(ptr) AccessChain 27(data) 220 29
+                              Store 224 223
+             225:      6(int) Load 8(invocation)
+             226:     66(ptr) AccessChain 27(data) 29 39 30
+             227:     19(int) Load 226
+             228:     19(int) GroupNonUniformQuadSwap 35 227 30
+             229:     66(ptr) AccessChain 27(data) 225 39 30
+                              Store 229 228
+             230:      6(int) Load 8(invocation)
+             231:     73(ptr) AccessChain 27(data) 39 39
+             232:   20(ivec4) Load 231
+             233:   72(ivec2) VectorShuffle 232 232 0 1
+             234:   72(ivec2) GroupNonUniformQuadSwap 35 233 30
+             235:     73(ptr) AccessChain 27(data) 230 39
+             236:   20(ivec4) Load 235
+             237:   20(ivec4) VectorShuffle 236 234 4 5 2 3
+                              Store 235 237
+             238:      6(int) Load 8(invocation)
+             239:     73(ptr) AccessChain 27(data) 50 39
+             240:   20(ivec4) Load 239
+             241:   82(ivec3) VectorShuffle 240 240 0 1 2
+             242:   82(ivec3) GroupNonUniformQuadSwap 35 241 30
+             243:     73(ptr) AccessChain 27(data) 238 39
+             244:   20(ivec4) Load 243
+             245:   20(ivec4) VectorShuffle 244 242 4 5 6 3
+                              Store 243 245
+             246:      6(int) Load 8(invocation)
+             247:     73(ptr) AccessChain 27(data) 60 39
+             248:   20(ivec4) Load 247
+             249:   20(ivec4) GroupNonUniformQuadSwap 35 248 30
+             250:     73(ptr) AccessChain 27(data) 246 39
+                              Store 250 249
+             251:      6(int) Load 8(invocation)
+             252:     96(ptr) AccessChain 27(data) 29 50 30
+             253:      6(int) Load 252
+             254:      6(int) GroupNonUniformQuadSwap 35 253 30
+             255:     96(ptr) AccessChain 27(data) 251 50 30
+                              Store 255 254
+             256:      6(int) Load 8(invocation)
+             257:    103(ptr) AccessChain 27(data) 39 50
+             258:   21(ivec4) Load 257
+             259:  102(ivec2) VectorShuffle 258 258 0 1
+             260:  102(ivec2) GroupNonUniformQuadSwap 35 259 30
+             261:    103(ptr) AccessChain 27(data) 256 50
+             262:   21(ivec4) Load 261
+             263:   21(ivec4) VectorShuffle 262 260 4 5 2 3
+                              Store 261 263
+             264:      6(int) Load 8(invocation)
+             265:    103(ptr) AccessChain 27(data) 50 50
+             266:   21(ivec4) Load 265
+             267:  112(ivec3) VectorShuffle 266 266 0 1 2
+             268:  112(ivec3) GroupNonUniformQuadSwap 35 267 30
+             269:    103(ptr) AccessChain 27(data) 264 50
+             270:   21(ivec4) Load 269
+             271:   21(ivec4) VectorShuffle 270 268 4 5 6 3
+                              Store 269 271
+             272:      6(int) Load 8(invocation)
+             273:    103(ptr) AccessChain 27(data) 60 50
+             274:   21(ivec4) Load 273
+             275:   21(ivec4) GroupNonUniformQuadSwap 35 274 30
+             276:    103(ptr) AccessChain 27(data) 272 50
+                              Store 276 275
+             277:      6(int) Load 8(invocation)
+             278:    126(ptr) AccessChain 27(data) 29 60 30
+             279:   22(float) Load 278
+             280:   22(float) GroupNonUniformQuadSwap 35 279 30
+             281:    126(ptr) AccessChain 27(data) 277 60 30
+                              Store 281 280
+             282:      6(int) Load 8(invocation)
+             283:    133(ptr) AccessChain 27(data) 39 60
+             284:   23(fvec4) Load 283
+             285:  132(fvec2) VectorShuffle 284 284 0 1
+             286:  132(fvec2) GroupNonUniformQuadSwap 35 285 30
+             287:    133(ptr) AccessChain 27(data) 282 60
+             288:   23(fvec4) Load 287
+             289:   23(fvec4) VectorShuffle 288 286 4 5 2 3
+                              Store 287 289
+             290:      6(int) Load 8(invocation)
+             291:    133(ptr) AccessChain 27(data) 50 60
+             292:   23(fvec4) Load 291
+             293:  142(fvec3) VectorShuffle 292 292 0 1 2
+             294:  142(fvec3) GroupNonUniformQuadSwap 35 293 30
+             295:    133(ptr) AccessChain 27(data) 290 60
+             296:   23(fvec4) Load 295
+             297:   23(fvec4) VectorShuffle 296 294 4 5 6 3
+                              Store 295 297
+             298:      6(int) Load 8(invocation)
+             299:    133(ptr) AccessChain 27(data) 60 60
+             300:   23(fvec4) Load 299
+             301:   23(fvec4) GroupNonUniformQuadSwap 35 300 30
+             302:    133(ptr) AccessChain 27(data) 298 60
+                              Store 302 301
+             303:      6(int) Load 8(invocation)
+             304:     66(ptr) AccessChain 27(data) 29 39 30
+             305:     19(int) Load 304
+             306:   158(bool) SLessThan 305 29
+             307:   158(bool) GroupNonUniformQuadSwap 35 306 30
+             308:     19(int) Select 307 39 29
+             309:     66(ptr) AccessChain 27(data) 303 39 30
+                              Store 309 308
+             310:      6(int) Load 8(invocation)
+             311:     73(ptr) AccessChain 27(data) 39 39
+             312:   20(ivec4) Load 311
+             313:   72(ivec2) VectorShuffle 312 312 0 1
+             314:  168(bvec2) SLessThan 313 167
+             315:  168(bvec2) GroupNonUniformQuadSwap 35 314 30
+             316:   72(ivec2) Select 315 171 167
+             317:     73(ptr) AccessChain 27(data) 310 39
+             318:   20(ivec4) Load 317
+             319:   20(ivec4) VectorShuffle 318 316 4 5 2 3
+                              Store 317 319
+             320:      6(int) Load 8(invocation)
+             321:     73(ptr) AccessChain 27(data) 39 39
+             322:   20(ivec4) Load 321
+             323:   82(ivec3) VectorShuffle 322 322 0 1 2
+             324:  181(bvec3) SLessThan 323 180
+             325:  181(bvec3) GroupNonUniformQuadSwap 35 324 30
+             326:   82(ivec3) Select 325 184 180
+             327:     73(ptr) AccessChain 27(data) 320 39
+             328:   20(ivec4) Load 327
+             329:   20(ivec4) VectorShuffle 328 326 4 5 6 3
+                              Store 327 329
+             330:      6(int) Load 8(invocation)
+             331:     73(ptr) AccessChain 27(data) 39 39
+             332:   20(ivec4) Load 331
+             333:  193(bvec4) SLessThan 332 192
+             334:  193(bvec4) GroupNonUniformQuadSwap 35 333 30
+             335:   20(ivec4) Select 334 196 192
+             336:     73(ptr) AccessChain 27(data) 330 39
+                              Store 336 335
+             337:      6(int) Load 8(invocation)
+             338:     31(ptr) AccessChain 27(data) 29 29 30
+             339:   17(float) Load 338
+             340:   17(float) GroupNonUniformQuadSwap 35 339 34
+             341:     31(ptr) AccessChain 27(data) 337 29 30
+                              Store 341 340
+             342:      6(int) Load 8(invocation)
+             343:     41(ptr) AccessChain 27(data) 39 29
+             344:   18(fvec4) Load 343
+             345:   40(fvec2) VectorShuffle 344 344 0 1
+             346:   40(fvec2) GroupNonUniformQuadSwap 35 345 34
+             347:     41(ptr) AccessChain 27(data) 342 29
+             348:   18(fvec4) Load 347
+             349:   18(fvec4) VectorShuffle 348 346 4 5 2 3
+                              Store 347 349
+             350:      6(int) Load 8(invocation)
+             351:     41(ptr) AccessChain 27(data) 50 29
+             352:   18(fvec4) Load 351
+             353:   51(fvec3) VectorShuffle 352 352 0 1 2
+             354:   51(fvec3) GroupNonUniformQuadSwap 35 353 34
+             355:     41(ptr) AccessChain 27(data) 350 29
+             356:   18(fvec4) Load 355
+             357:   18(fvec4) VectorShuffle 356 354 4 5 6 3
+                              Store 355 357
+             358:      6(int) Load 8(invocation)
+             359:     41(ptr) AccessChain 27(data) 60 29
+             360:   18(fvec4) Load 359
+             361:   18(fvec4) GroupNonUniformQuadSwap 35 360 34
+             362:     41(ptr) AccessChain 27(data) 358 29
+                              Store 362 361
+             363:      6(int) Load 8(invocation)
+             364:     66(ptr) AccessChain 27(data) 29 39 30
+             365:     19(int) Load 364
+             366:     19(int) GroupNonUniformQuadSwap 35 365 34
+             367:     66(ptr) AccessChain 27(data) 363 39 30
+                              Store 367 366
+             368:      6(int) Load 8(invocation)
+             369:     73(ptr) AccessChain 27(data) 39 39
+             370:   20(ivec4) Load 369
+             371:   72(ivec2) VectorShuffle 370 370 0 1
+             372:   72(ivec2) GroupNonUniformQuadSwap 35 371 34
+             373:     73(ptr) AccessChain 27(data) 368 39
+             374:   20(ivec4) Load 373
+             375:   20(ivec4) VectorShuffle 374 372 4 5 2 3
+                              Store 373 375
+             376:      6(int) Load 8(invocation)
+             377:     73(ptr) AccessChain 27(data) 50 39
+             378:   20(ivec4) Load 377
+             379:   82(ivec3) VectorShuffle 378 378 0 1 2
+             380:   82(ivec3) GroupNonUniformQuadSwap 35 379 34
+             381:     73(ptr) AccessChain 27(data) 376 39
+             382:   20(ivec4) Load 381
+             383:   20(ivec4) VectorShuffle 382 380 4 5 6 3
+                              Store 381 383
+             384:      6(int) Load 8(invocation)
+             385:     73(ptr) AccessChain 27(data) 60 39
+             386:   20(ivec4) Load 385
+             387:   20(ivec4) GroupNonUniformQuadSwap 35 386 34
+             388:     73(ptr) AccessChain 27(data) 384 39
+                              Store 388 387
+             389:      6(int) Load 8(invocation)
+             390:     96(ptr) AccessChain 27(data) 29 50 30
+             391:      6(int) Load 390
+             392:      6(int) GroupNonUniformQuadSwap 35 391 34
+             393:     96(ptr) AccessChain 27(data) 389 50 30
+                              Store 393 392
+             394:      6(int) Load 8(invocation)
+             395:    103(ptr) AccessChain 27(data) 39 50
+             396:   21(ivec4) Load 395
+             397:  102(ivec2) VectorShuffle 396 396 0 1
+             398:  102(ivec2) GroupNonUniformQuadSwap 35 397 34
+             399:    103(ptr) AccessChain 27(data) 394 50
+             400:   21(ivec4) Load 399
+             401:   21(ivec4) VectorShuffle 400 398 4 5 2 3
+                              Store 399 401
+             402:      6(int) Load 8(invocation)
+             403:    103(ptr) AccessChain 27(data) 50 50
+             404:   21(ivec4) Load 403
+             405:  112(ivec3) VectorShuffle 404 404 0 1 2
+             406:  112(ivec3) GroupNonUniformQuadSwap 35 405 34
+             407:    103(ptr) AccessChain 27(data) 402 50
+             408:   21(ivec4) Load 407
+             409:   21(ivec4) VectorShuffle 408 406 4 5 6 3
+                              Store 407 409
+             410:      6(int) Load 8(invocation)
+             411:    103(ptr) AccessChain 27(data) 60 50
+             412:   21(ivec4) Load 411
+             413:   21(ivec4) GroupNonUniformQuadSwap 35 412 34
+             414:    103(ptr) AccessChain 27(data) 410 50
+                              Store 414 413
+             415:      6(int) Load 8(invocation)
+             416:    126(ptr) AccessChain 27(data) 29 60 30
+             417:   22(float) Load 416
+             418:   22(float) GroupNonUniformQuadSwap 35 417 34
+             419:    126(ptr) AccessChain 27(data) 415 60 30
+                              Store 419 418
+             420:      6(int) Load 8(invocation)
+             421:    133(ptr) AccessChain 27(data) 39 60
+             422:   23(fvec4) Load 421
+             423:  132(fvec2) VectorShuffle 422 422 0 1
+             424:  132(fvec2) GroupNonUniformQuadSwap 35 423 34
+             425:    133(ptr) AccessChain 27(data) 420 60
+             426:   23(fvec4) Load 425
+             427:   23(fvec4) VectorShuffle 426 424 4 5 2 3
+                              Store 425 427
+             428:      6(int) Load 8(invocation)
+             429:    133(ptr) AccessChain 27(data) 50 60
+             430:   23(fvec4) Load 429
+             431:  142(fvec3) VectorShuffle 430 430 0 1 2
+             432:  142(fvec3) GroupNonUniformQuadSwap 35 431 34
+             433:    133(ptr) AccessChain 27(data) 428 60
+             434:   23(fvec4) Load 433
+             435:   23(fvec4) VectorShuffle 434 432 4 5 6 3
+                              Store 433 435
+             436:      6(int) Load 8(invocation)
+             437:    133(ptr) AccessChain 27(data) 60 60
+             438:   23(fvec4) Load 437
+             439:   23(fvec4) GroupNonUniformQuadSwap 35 438 34
+             440:    133(ptr) AccessChain 27(data) 436 60
+                              Store 440 439
+             441:      6(int) Load 8(invocation)
+             442:     66(ptr) AccessChain 27(data) 29 39 30
+             443:     19(int) Load 442
+             444:   158(bool) SLessThan 443 29
+             445:   158(bool) GroupNonUniformQuadSwap 35 444 34
+             446:     19(int) Select 445 39 29
+             447:     66(ptr) AccessChain 27(data) 441 39 30
+                              Store 447 446
+             448:      6(int) Load 8(invocation)
+             449:     73(ptr) AccessChain 27(data) 39 39
+             450:   20(ivec4) Load 449
+             451:   72(ivec2) VectorShuffle 450 450 0 1
+             452:  168(bvec2) SLessThan 451 167
+             453:  168(bvec2) GroupNonUniformQuadSwap 35 452 34
+             454:   72(ivec2) Select 453 171 167
+             455:     73(ptr) AccessChain 27(data) 448 39
+             456:   20(ivec4) Load 455
+             457:   20(ivec4) VectorShuffle 456 454 4 5 2 3
+                              Store 455 457
+             458:      6(int) Load 8(invocation)
+             459:     73(ptr) AccessChain 27(data) 39 39
+             460:   20(ivec4) Load 459
+             461:   82(ivec3) VectorShuffle 460 460 0 1 2
+             462:  181(bvec3) SLessThan 461 180
+             463:  181(bvec3) GroupNonUniformQuadSwap 35 462 34
+             464:   82(ivec3) Select 463 184 180
+             465:     73(ptr) AccessChain 27(data) 458 39
+             466:   20(ivec4) Load 465
+             467:   20(ivec4) VectorShuffle 466 464 4 5 6 3
+                              Store 465 467
+             468:      6(int) Load 8(invocation)
+             469:     73(ptr) AccessChain 27(data) 39 39
+             470:   20(ivec4) Load 469
+             471:  193(bvec4) SLessThan 470 192
+             472:  193(bvec4) GroupNonUniformQuadSwap 35 471 34
+             473:   20(ivec4) Select 472 196 192
+             474:     73(ptr) AccessChain 27(data) 468 39
+                              Store 474 473
+             475:      6(int) Load 8(invocation)
+             476:     31(ptr) AccessChain 27(data) 29 29 30
+             477:   17(float) Load 476
+             479:   17(float) GroupNonUniformQuadSwap 35 477 478
+             480:     31(ptr) AccessChain 27(data) 475 29 30
+                              Store 480 479
+             481:      6(int) Load 8(invocation)
+             482:     41(ptr) AccessChain 27(data) 39 29
+             483:   18(fvec4) Load 482
+             484:   40(fvec2) VectorShuffle 483 483 0 1
+             485:   40(fvec2) GroupNonUniformQuadSwap 35 484 478
+             486:     41(ptr) AccessChain 27(data) 481 29
+             487:   18(fvec4) Load 486
+             488:   18(fvec4) VectorShuffle 487 485 4 5 2 3
+                              Store 486 488
+             489:      6(int) Load 8(invocation)
+             490:     41(ptr) AccessChain 27(data) 50 29
+             491:   18(fvec4) Load 490
+             492:   51(fvec3) VectorShuffle 491 491 0 1 2
+             493:   51(fvec3) GroupNonUniformQuadSwap 35 492 478
+             494:     41(ptr) AccessChain 27(data) 489 29
+             495:   18(fvec4) Load 494
+             496:   18(fvec4) VectorShuffle 495 493 4 5 6 3
+                              Store 494 496
+             497:      6(int) Load 8(invocation)
+             498:     41(ptr) AccessChain 27(data) 60 29
+             499:   18(fvec4) Load 498
+             500:   18(fvec4) GroupNonUniformQuadSwap 35 499 478
+             501:     41(ptr) AccessChain 27(data) 497 29
+                              Store 501 500
+             502:      6(int) Load 8(invocation)
+             503:     66(ptr) AccessChain 27(data) 29 39 30
+             504:     19(int) Load 503
+             505:     19(int) GroupNonUniformQuadSwap 35 504 478
+             506:     66(ptr) AccessChain 27(data) 502 39 30
+                              Store 506 505
+             507:      6(int) Load 8(invocation)
+             508:     73(ptr) AccessChain 27(data) 39 39
+             509:   20(ivec4) Load 508
+             510:   72(ivec2) VectorShuffle 509 509 0 1
+             511:   72(ivec2) GroupNonUniformQuadSwap 35 510 478
+             512:     73(ptr) AccessChain 27(data) 507 39
+             513:   20(ivec4) Load 512
+             514:   20(ivec4) VectorShuffle 513 511 4 5 2 3
+                              Store 512 514
+             515:      6(int) Load 8(invocation)
+             516:     73(ptr) AccessChain 27(data) 50 39
+             517:   20(ivec4) Load 516
+             518:   82(ivec3) VectorShuffle 517 517 0 1 2
+             519:   82(ivec3) GroupNonUniformQuadSwap 35 518 478
+             520:     73(ptr) AccessChain 27(data) 515 39
+             521:   20(ivec4) Load 520
+             522:   20(ivec4) VectorShuffle 521 519 4 5 6 3
+                              Store 520 522
+             523:      6(int) Load 8(invocation)
+             524:     73(ptr) AccessChain 27(data) 60 39
+             525:   20(ivec4) Load 524
+             526:   20(ivec4) GroupNonUniformQuadSwap 35 525 478
+             527:     73(ptr) AccessChain 27(data) 523 39
+                              Store 527 526
+             528:      6(int) Load 8(invocation)
+             529:     96(ptr) AccessChain 27(data) 29 50 30
+             530:      6(int) Load 529
+             531:      6(int) GroupNonUniformQuadSwap 35 530 478
+             532:     96(ptr) AccessChain 27(data) 528 50 30
+                              Store 532 531
+             533:      6(int) Load 8(invocation)
+             534:    103(ptr) AccessChain 27(data) 39 50
+             535:   21(ivec4) Load 534
+             536:  102(ivec2) VectorShuffle 535 535 0 1
+             537:  102(ivec2) GroupNonUniformQuadSwap 35 536 478
+             538:    103(ptr) AccessChain 27(data) 533 50
+             539:   21(ivec4) Load 538
+             540:   21(ivec4) VectorShuffle 539 537 4 5 2 3
+                              Store 538 540
+             541:      6(int) Load 8(invocation)
+             542:    103(ptr) AccessChain 27(data) 50 50
+             543:   21(ivec4) Load 542
+             544:  112(ivec3) VectorShuffle 543 543 0 1 2
+             545:  112(ivec3) GroupNonUniformQuadSwap 35 544 478
+             546:    103(ptr) AccessChain 27(data) 541 50
+             547:   21(ivec4) Load 546
+             548:   21(ivec4) VectorShuffle 547 545 4 5 6 3
+                              Store 546 548
+             549:      6(int) Load 8(invocation)
+             550:    103(ptr) AccessChain 27(data) 60 50
+             551:   21(ivec4) Load 550
+             552:   21(ivec4) GroupNonUniformQuadSwap 35 551 478
+             553:    103(ptr) AccessChain 27(data) 549 50
+                              Store 553 552
+             554:      6(int) Load 8(invocation)
+             555:    126(ptr) AccessChain 27(data) 29 60 30
+             556:   22(float) Load 555
+             557:   22(float) GroupNonUniformQuadSwap 35 556 478
+             558:    126(ptr) AccessChain 27(data) 554 60 30
+                              Store 558 557
+             559:      6(int) Load 8(invocation)
+             560:    133(ptr) AccessChain 27(data) 39 60
+             561:   23(fvec4) Load 560
+             562:  132(fvec2) VectorShuffle 561 561 0 1
+             563:  132(fvec2) GroupNonUniformQuadSwap 35 562 478
+             564:    133(ptr) AccessChain 27(data) 559 60
+             565:   23(fvec4) Load 564
+             566:   23(fvec4) VectorShuffle 565 563 4 5 2 3
+                              Store 564 566
+             567:      6(int) Load 8(invocation)
+             568:    133(ptr) AccessChain 27(data) 50 60
+             569:   23(fvec4) Load 568
+             570:  142(fvec3) VectorShuffle 569 569 0 1 2
+             571:  142(fvec3) GroupNonUniformQuadSwap 35 570 478
+             572:    133(ptr) AccessChain 27(data) 567 60
+             573:   23(fvec4) Load 572
+             574:   23(fvec4) VectorShuffle 573 571 4 5 6 3
+                              Store 572 574
+             575:      6(int) Load 8(invocation)
+             576:    133(ptr) AccessChain 27(data) 60 60
+             577:   23(fvec4) Load 576
+             578:   23(fvec4) GroupNonUniformQuadSwap 35 577 478
+             579:    133(ptr) AccessChain 27(data) 575 60
+                              Store 579 578
+             580:      6(int) Load 8(invocation)
+             581:     66(ptr) AccessChain 27(data) 29 39 30
+             582:     19(int) Load 581
+             583:   158(bool) SLessThan 582 29
+             584:   158(bool) GroupNonUniformQuadSwap 35 583 478
+             585:     19(int) Select 584 39 29
+             586:     66(ptr) AccessChain 27(data) 580 39 30
+                              Store 586 585
+             587:      6(int) Load 8(invocation)
+             588:     73(ptr) AccessChain 27(data) 39 39
+             589:   20(ivec4) Load 588
+             590:   72(ivec2) VectorShuffle 589 589 0 1
+             591:  168(bvec2) SLessThan 590 167
+             592:  168(bvec2) GroupNonUniformQuadSwap 35 591 478
+             593:   72(ivec2) Select 592 171 167
+             594:     73(ptr) AccessChain 27(data) 587 39
+             595:   20(ivec4) Load 594
+             596:   20(ivec4) VectorShuffle 595 593 4 5 2 3
+                              Store 594 596
+             597:      6(int) Load 8(invocation)
+             598:     73(ptr) AccessChain 27(data) 39 39
+             599:   20(ivec4) Load 598
+             600:   82(ivec3) VectorShuffle 599 599 0 1 2
+             601:  181(bvec3) SLessThan 600 180
+             602:  181(bvec3) GroupNonUniformQuadSwap 35 601 478
+             603:   82(ivec3) Select 602 184 180
+             604:     73(ptr) AccessChain 27(data) 597 39
+             605:   20(ivec4) Load 604
+             606:   20(ivec4) VectorShuffle 605 603 4 5 6 3
+                              Store 604 606
+             607:      6(int) Load 8(invocation)
+             608:     73(ptr) AccessChain 27(data) 39 39
+             609:   20(ivec4) Load 608
+             610:  193(bvec4) SLessThan 609 192
+             611:  193(bvec4) GroupNonUniformQuadSwap 35 610 478
+             612:   20(ivec4) Select 611 196 192
+             613:     73(ptr) AccessChain 27(data) 607 39
+                              Store 613 612
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroupShuffle.comp.out b/Test/baseResults/spv.subgroupShuffle.comp.out
new file mode 100644
index 0000000..065acb8
--- /dev/null
+++ b/Test/baseResults/spv.subgroupShuffle.comp.out
@@ -0,0 +1,462 @@
+spv.subgroupShuffle.comp
+// Module Version 10300
+// Generated by (magic number): 80005
+// Id's are bound by 379
+
+                              Capability Shader
+                              Capability Float64
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformShuffle
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 10 12
+                              ExecutionMode 4 LocalSize 8 8 1
+                              Source GLSL 450
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              SourceExtension  "GL_KHR_shader_subgroup_shuffle"
+                              Name 4  "main"
+                              Name 8  "invocation"
+                              Name 10  "gl_SubgroupInvocationID"
+                              Name 12  "gl_SubgroupSize"
+                              Name 24  "Buffers"
+                              MemberName 24(Buffers) 0  "f4"
+                              MemberName 24(Buffers) 1  "i4"
+                              MemberName 24(Buffers) 2  "u4"
+                              MemberName 24(Buffers) 3  "d4"
+                              Name 27  "data"
+                              Decorate 10(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 10(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 11 RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 13 RelaxedPrecision
+                              Decorate 14 RelaxedPrecision
+                              Decorate 16 RelaxedPrecision
+                              MemberDecorate 24(Buffers) 0 Offset 0
+                              MemberDecorate 24(Buffers) 1 Offset 16
+                              MemberDecorate 24(Buffers) 2 Offset 32
+                              MemberDecorate 24(Buffers) 3 Offset 64
+                              Decorate 24(Buffers) BufferBlock
+                              Decorate 27(data) DescriptorSet 0
+                              Decorate 27(data) Binding 0
+                              Decorate 378 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypePointer Input 6(int)
+10(gl_SubgroupInvocationID):      9(ptr) Variable Input
+12(gl_SubgroupSize):      9(ptr) Variable Input
+              15:      6(int) Constant 4
+              17:             TypeFloat 32
+              18:             TypeVector 17(float) 4
+              19:             TypeInt 32 1
+              20:             TypeVector 19(int) 4
+              21:             TypeVector 6(int) 4
+              22:             TypeFloat 64
+              23:             TypeVector 22(float) 4
+     24(Buffers):             TypeStruct 18(fvec4) 20(ivec4) 21(ivec4) 23(fvec4)
+              25:             TypeArray 24(Buffers) 15
+              26:             TypePointer Uniform 25
+        27(data):     26(ptr) Variable Uniform
+              29:     19(int) Constant 0
+              30:      6(int) Constant 0
+              31:             TypePointer Uniform 17(float)
+              35:      6(int) Constant 3
+              39:     19(int) Constant 1
+              40:             TypeVector 17(float) 2
+              41:             TypePointer Uniform 18(fvec4)
+              51:     19(int) Constant 2
+              52:             TypeVector 17(float) 3
+              62:     19(int) Constant 3
+              69:             TypePointer Uniform 19(int)
+              76:             TypeVector 19(int) 2
+              77:             TypePointer Uniform 20(ivec4)
+              87:             TypeVector 19(int) 3
+             103:             TypePointer Uniform 6(int)
+             110:             TypeVector 6(int) 2
+             111:             TypePointer Uniform 21(ivec4)
+             121:             TypeVector 6(int) 3
+             137:             TypePointer Uniform 22(float)
+             144:             TypeVector 22(float) 2
+             145:             TypePointer Uniform 23(fvec4)
+             155:             TypeVector 22(float) 3
+             173:             TypeBool
+             183:   76(ivec2) ConstantComposite 29 29
+             184:             TypeVector 173(bool) 2
+             188:   76(ivec2) ConstantComposite 39 39
+             197:   87(ivec3) ConstantComposite 29 29 29
+             198:             TypeVector 173(bool) 3
+             202:   87(ivec3) ConstantComposite 39 39 39
+             210:   20(ivec4) ConstantComposite 29 29 29 29
+             211:             TypeVector 173(bool) 4
+             215:   20(ivec4) ConstantComposite 39 39 39 39
+             376:      6(int) Constant 8
+             377:      6(int) Constant 1
+             378:  121(ivec3) ConstantComposite 376 376 377
+         4(main):           2 Function None 3
+               5:             Label
+   8(invocation):      7(ptr) Variable Function
+              11:      6(int) Load 10(gl_SubgroupInvocationID)
+              13:      6(int) Load 12(gl_SubgroupSize)
+              14:      6(int) IAdd 11 13
+              16:      6(int) UMod 14 15
+                              Store 8(invocation) 16
+              28:      6(int) Load 8(invocation)
+              32:     31(ptr) AccessChain 27(data) 29 29 30
+              33:   17(float) Load 32
+              34:      6(int) Load 8(invocation)
+              36:   17(float) GroupNonUniformShuffle 35 33 34
+              37:     31(ptr) AccessChain 27(data) 28 29 30
+                              Store 37 36
+              38:      6(int) Load 8(invocation)
+              42:     41(ptr) AccessChain 27(data) 39 29
+              43:   18(fvec4) Load 42
+              44:   40(fvec2) VectorShuffle 43 43 0 1
+              45:      6(int) Load 8(invocation)
+              46:   40(fvec2) GroupNonUniformShuffle 35 44 45
+              47:     41(ptr) AccessChain 27(data) 38 29
+              48:   18(fvec4) Load 47
+              49:   18(fvec4) VectorShuffle 48 46 4 5 2 3
+                              Store 47 49
+              50:      6(int) Load 8(invocation)
+              53:     41(ptr) AccessChain 27(data) 51 29
+              54:   18(fvec4) Load 53
+              55:   52(fvec3) VectorShuffle 54 54 0 1 2
+              56:      6(int) Load 8(invocation)
+              57:   52(fvec3) GroupNonUniformShuffle 35 55 56
+              58:     41(ptr) AccessChain 27(data) 50 29
+              59:   18(fvec4) Load 58
+              60:   18(fvec4) VectorShuffle 59 57 4 5 6 3
+                              Store 58 60
+              61:      6(int) Load 8(invocation)
+              63:     41(ptr) AccessChain 27(data) 62 29
+              64:   18(fvec4) Load 63
+              65:      6(int) Load 8(invocation)
+              66:   18(fvec4) GroupNonUniformShuffle 35 64 65
+              67:     41(ptr) AccessChain 27(data) 61 29
+                              Store 67 66
+              68:      6(int) Load 8(invocation)
+              70:     69(ptr) AccessChain 27(data) 29 39 30
+              71:     19(int) Load 70
+              72:      6(int) Load 8(invocation)
+              73:     19(int) GroupNonUniformShuffle 35 71 72
+              74:     69(ptr) AccessChain 27(data) 68 39 30
+                              Store 74 73
+              75:      6(int) Load 8(invocation)
+              78:     77(ptr) AccessChain 27(data) 39 39
+              79:   20(ivec4) Load 78
+              80:   76(ivec2) VectorShuffle 79 79 0 1
+              81:      6(int) Load 8(invocation)
+              82:   76(ivec2) GroupNonUniformShuffle 35 80 81
+              83:     77(ptr) AccessChain 27(data) 75 39
+              84:   20(ivec4) Load 83
+              85:   20(ivec4) VectorShuffle 84 82 4 5 2 3
+                              Store 83 85
+              86:      6(int) Load 8(invocation)
+              88:     77(ptr) AccessChain 27(data) 51 39
+              89:   20(ivec4) Load 88
+              90:   87(ivec3) VectorShuffle 89 89 0 1 2
+              91:      6(int) Load 8(invocation)
+              92:   87(ivec3) GroupNonUniformShuffle 35 90 91
+              93:     77(ptr) AccessChain 27(data) 86 39
+              94:   20(ivec4) Load 93
+              95:   20(ivec4) VectorShuffle 94 92 4 5 6 3
+                              Store 93 95
+              96:      6(int) Load 8(invocation)
+              97:     77(ptr) AccessChain 27(data) 62 39
+              98:   20(ivec4) Load 97
+              99:      6(int) Load 8(invocation)
+             100:   20(ivec4) GroupNonUniformShuffle 35 98 99
+             101:     77(ptr) AccessChain 27(data) 96 39
+                              Store 101 100
+             102:      6(int) Load 8(invocation)
+             104:    103(ptr) AccessChain 27(data) 29 51 30
+             105:      6(int) Load 104
+             106:      6(int) Load 8(invocation)
+             107:      6(int) GroupNonUniformShuffle 35 105 106
+             108:    103(ptr) AccessChain 27(data) 102 51 30
+                              Store 108 107
+             109:      6(int) Load 8(invocation)
+             112:    111(ptr) AccessChain 27(data) 39 51
+             113:   21(ivec4) Load 112
+             114:  110(ivec2) VectorShuffle 113 113 0 1
+             115:      6(int) Load 8(invocation)
+             116:  110(ivec2) GroupNonUniformShuffle 35 114 115
+             117:    111(ptr) AccessChain 27(data) 109 51
+             118:   21(ivec4) Load 117
+             119:   21(ivec4) VectorShuffle 118 116 4 5 2 3
+                              Store 117 119
+             120:      6(int) Load 8(invocation)
+             122:    111(ptr) AccessChain 27(data) 51 51
+             123:   21(ivec4) Load 122
+             124:  121(ivec3) VectorShuffle 123 123 0 1 2
+             125:      6(int) Load 8(invocation)
+             126:  121(ivec3) GroupNonUniformShuffle 35 124 125
+             127:    111(ptr) AccessChain 27(data) 120 51
+             128:   21(ivec4) Load 127
+             129:   21(ivec4) VectorShuffle 128 126 4 5 6 3
+                              Store 127 129
+             130:      6(int) Load 8(invocation)
+             131:    111(ptr) AccessChain 27(data) 62 51
+             132:   21(ivec4) Load 131
+             133:      6(int) Load 8(invocation)
+             134:   21(ivec4) GroupNonUniformShuffle 35 132 133
+             135:    111(ptr) AccessChain 27(data) 130 51
+                              Store 135 134
+             136:      6(int) Load 8(invocation)
+             138:    137(ptr) AccessChain 27(data) 29 62 30
+             139:   22(float) Load 138
+             140:      6(int) Load 8(invocation)
+             141:   22(float) GroupNonUniformShuffle 35 139 140
+             142:    137(ptr) AccessChain 27(data) 136 62 30
+                              Store 142 141
+             143:      6(int) Load 8(invocation)
+             146:    145(ptr) AccessChain 27(data) 39 62
+             147:   23(fvec4) Load 146
+             148:  144(fvec2) VectorShuffle 147 147 0 1
+             149:      6(int) Load 8(invocation)
+             150:  144(fvec2) GroupNonUniformShuffle 35 148 149
+             151:    145(ptr) AccessChain 27(data) 143 62
+             152:   23(fvec4) Load 151
+             153:   23(fvec4) VectorShuffle 152 150 4 5 2 3
+                              Store 151 153
+             154:      6(int) Load 8(invocation)
+             156:    145(ptr) AccessChain 27(data) 51 62
+             157:   23(fvec4) Load 156
+             158:  155(fvec3) VectorShuffle 157 157 0 1 2
+             159:      6(int) Load 8(invocation)
+             160:  155(fvec3) GroupNonUniformShuffle 35 158 159
+             161:    145(ptr) AccessChain 27(data) 154 62
+             162:   23(fvec4) Load 161
+             163:   23(fvec4) VectorShuffle 162 160 4 5 6 3
+                              Store 161 163
+             164:      6(int) Load 8(invocation)
+             165:    145(ptr) AccessChain 27(data) 62 62
+             166:   23(fvec4) Load 165
+             167:      6(int) Load 8(invocation)
+             168:   23(fvec4) GroupNonUniformShuffle 35 166 167
+             169:    145(ptr) AccessChain 27(data) 164 62
+                              Store 169 168
+             170:      6(int) Load 8(invocation)
+             171:     69(ptr) AccessChain 27(data) 29 39 30
+             172:     19(int) Load 171
+             174:   173(bool) SLessThan 172 29
+             175:      6(int) Load 8(invocation)
+             176:   173(bool) GroupNonUniformShuffle 35 174 175
+             177:     19(int) Select 176 39 29
+             178:     69(ptr) AccessChain 27(data) 170 39 30
+                              Store 178 177
+             179:      6(int) Load 8(invocation)
+             180:     77(ptr) AccessChain 27(data) 39 39
+             181:   20(ivec4) Load 180
+             182:   76(ivec2) VectorShuffle 181 181 0 1
+             185:  184(bvec2) SLessThan 182 183
+             186:      6(int) Load 8(invocation)
+             187:  184(bvec2) GroupNonUniformShuffle 35 185 186
+             189:   76(ivec2) Select 187 188 183
+             190:     77(ptr) AccessChain 27(data) 179 39
+             191:   20(ivec4) Load 190
+             192:   20(ivec4) VectorShuffle 191 189 4 5 2 3
+                              Store 190 192
+             193:      6(int) Load 8(invocation)
+             194:     77(ptr) AccessChain 27(data) 39 39
+             195:   20(ivec4) Load 194
+             196:   87(ivec3) VectorShuffle 195 195 0 1 2
+             199:  198(bvec3) SLessThan 196 197
+             200:      6(int) Load 8(invocation)
+             201:  198(bvec3) GroupNonUniformShuffle 35 199 200
+             203:   87(ivec3) Select 201 202 197
+             204:     77(ptr) AccessChain 27(data) 193 39
+             205:   20(ivec4) Load 204
+             206:   20(ivec4) VectorShuffle 205 203 4 5 6 3
+                              Store 204 206
+             207:      6(int) Load 8(invocation)
+             208:     77(ptr) AccessChain 27(data) 39 39
+             209:   20(ivec4) Load 208
+             212:  211(bvec4) SLessThan 209 210
+             213:      6(int) Load 8(invocation)
+             214:  211(bvec4) GroupNonUniformShuffle 35 212 213
+             216:   20(ivec4) Select 214 215 210
+             217:     77(ptr) AccessChain 27(data) 207 39
+                              Store 217 216
+             218:      6(int) Load 8(invocation)
+             219:     31(ptr) AccessChain 27(data) 29 29 30
+             220:   17(float) Load 219
+             221:      6(int) Load 8(invocation)
+             222:   17(float) GroupNonUniformShuffleXor 35 220 221
+             223:     31(ptr) AccessChain 27(data) 218 29 30
+                              Store 223 222
+             224:      6(int) Load 8(invocation)
+             225:     41(ptr) AccessChain 27(data) 39 29
+             226:   18(fvec4) Load 225
+             227:   40(fvec2) VectorShuffle 226 226 0 1
+             228:      6(int) Load 8(invocation)
+             229:   40(fvec2) GroupNonUniformShuffleXor 35 227 228
+             230:     41(ptr) AccessChain 27(data) 224 29
+             231:   18(fvec4) Load 230
+             232:   18(fvec4) VectorShuffle 231 229 4 5 2 3
+                              Store 230 232
+             233:      6(int) Load 8(invocation)
+             234:     41(ptr) AccessChain 27(data) 51 29
+             235:   18(fvec4) Load 234
+             236:   52(fvec3) VectorShuffle 235 235 0 1 2
+             237:      6(int) Load 8(invocation)
+             238:   52(fvec3) GroupNonUniformShuffleXor 35 236 237
+             239:     41(ptr) AccessChain 27(data) 233 29
+             240:   18(fvec4) Load 239
+             241:   18(fvec4) VectorShuffle 240 238 4 5 6 3
+                              Store 239 241
+             242:      6(int) Load 8(invocation)
+             243:     41(ptr) AccessChain 27(data) 62 29
+             244:   18(fvec4) Load 243
+             245:      6(int) Load 8(invocation)
+             246:   18(fvec4) GroupNonUniformShuffleXor 35 244 245
+             247:     41(ptr) AccessChain 27(data) 242 29
+                              Store 247 246
+             248:      6(int) Load 8(invocation)
+             249:     69(ptr) AccessChain 27(data) 29 39 30
+             250:     19(int) Load 249
+             251:      6(int) Load 8(invocation)
+             252:     19(int) GroupNonUniformShuffleXor 35 250 251
+             253:     69(ptr) AccessChain 27(data) 248 39 30
+                              Store 253 252
+             254:      6(int) Load 8(invocation)
+             255:     77(ptr) AccessChain 27(data) 39 39
+             256:   20(ivec4) Load 255
+             257:   76(ivec2) VectorShuffle 256 256 0 1
+             258:      6(int) Load 8(invocation)
+             259:   76(ivec2) GroupNonUniformShuffleXor 35 257 258
+             260:     77(ptr) AccessChain 27(data) 254 39
+             261:   20(ivec4) Load 260
+             262:   20(ivec4) VectorShuffle 261 259 4 5 2 3
+                              Store 260 262
+             263:      6(int) Load 8(invocation)
+             264:     77(ptr) AccessChain 27(data) 51 39
+             265:   20(ivec4) Load 264
+             266:   87(ivec3) VectorShuffle 265 265 0 1 2
+             267:      6(int) Load 8(invocation)
+             268:   87(ivec3) GroupNonUniformShuffleXor 35 266 267
+             269:     77(ptr) AccessChain 27(data) 263 39
+             270:   20(ivec4) Load 269
+             271:   20(ivec4) VectorShuffle 270 268 4 5 6 3
+                              Store 269 271
+             272:      6(int) Load 8(invocation)
+             273:     77(ptr) AccessChain 27(data) 62 39
+             274:   20(ivec4) Load 273
+             275:      6(int) Load 8(invocation)
+             276:   20(ivec4) GroupNonUniformShuffleXor 35 274 275
+             277:     77(ptr) AccessChain 27(data) 272 39
+                              Store 277 276
+             278:      6(int) Load 8(invocation)
+             279:    103(ptr) AccessChain 27(data) 29 51 30
+             280:      6(int) Load 279
+             281:      6(int) Load 8(invocation)
+             282:      6(int) GroupNonUniformShuffleXor 35 280 281
+             283:    103(ptr) AccessChain 27(data) 278 51 30
+                              Store 283 282
+             284:      6(int) Load 8(invocation)
+             285:    111(ptr) AccessChain 27(data) 39 51
+             286:   21(ivec4) Load 285
+             287:  110(ivec2) VectorShuffle 286 286 0 1
+             288:      6(int) Load 8(invocation)
+             289:  110(ivec2) GroupNonUniformShuffleXor 35 287 288
+             290:    111(ptr) AccessChain 27(data) 284 51
+             291:   21(ivec4) Load 290
+             292:   21(ivec4) VectorShuffle 291 289 4 5 2 3
+                              Store 290 292
+             293:      6(int) Load 8(invocation)
+             294:    111(ptr) AccessChain 27(data) 51 51
+             295:   21(ivec4) Load 294
+             296:  121(ivec3) VectorShuffle 295 295 0 1 2
+             297:      6(int) Load 8(invocation)
+             298:  121(ivec3) GroupNonUniformShuffleXor 35 296 297
+             299:    111(ptr) AccessChain 27(data) 293 51
+             300:   21(ivec4) Load 299
+             301:   21(ivec4) VectorShuffle 300 298 4 5 6 3
+                              Store 299 301
+             302:      6(int) Load 8(invocation)
+             303:    111(ptr) AccessChain 27(data) 62 51
+             304:   21(ivec4) Load 303
+             305:      6(int) Load 8(invocation)
+             306:   21(ivec4) GroupNonUniformShuffleXor 35 304 305
+             307:    111(ptr) AccessChain 27(data) 302 51
+                              Store 307 306
+             308:      6(int) Load 8(invocation)
+             309:    137(ptr) AccessChain 27(data) 29 62 30
+             310:   22(float) Load 309
+             311:      6(int) Load 8(invocation)
+             312:   22(float) GroupNonUniformShuffleXor 35 310 311
+             313:    137(ptr) AccessChain 27(data) 308 62 30
+                              Store 313 312
+             314:      6(int) Load 8(invocation)
+             315:    145(ptr) AccessChain 27(data) 39 62
+             316:   23(fvec4) Load 315
+             317:  144(fvec2) VectorShuffle 316 316 0 1
+             318:      6(int) Load 8(invocation)
+             319:  144(fvec2) GroupNonUniformShuffleXor 35 317 318
+             320:    145(ptr) AccessChain 27(data) 314 62
+             321:   23(fvec4) Load 320
+             322:   23(fvec4) VectorShuffle 321 319 4 5 2 3
+                              Store 320 322
+             323:      6(int) Load 8(invocation)
+             324:    145(ptr) AccessChain 27(data) 51 62
+             325:   23(fvec4) Load 324
+             326:  155(fvec3) VectorShuffle 325 325 0 1 2
+             327:      6(int) Load 8(invocation)
+             328:  155(fvec3) GroupNonUniformShuffleXor 35 326 327
+             329:    145(ptr) AccessChain 27(data) 323 62
+             330:   23(fvec4) Load 329
+             331:   23(fvec4) VectorShuffle 330 328 4 5 6 3
+                              Store 329 331
+             332:      6(int) Load 8(invocation)
+             333:    145(ptr) AccessChain 27(data) 62 62
+             334:   23(fvec4) Load 333
+             335:      6(int) Load 8(invocation)
+             336:   23(fvec4) GroupNonUniformShuffleXor 35 334 335
+             337:    145(ptr) AccessChain 27(data) 332 62
+                              Store 337 336
+             338:      6(int) Load 8(invocation)
+             339:     69(ptr) AccessChain 27(data) 29 39 30
+             340:     19(int) Load 339
+             341:   173(bool) SLessThan 340 29
+             342:      6(int) Load 8(invocation)
+             343:   173(bool) GroupNonUniformShuffleXor 35 341 342
+             344:     19(int) Select 343 39 29
+             345:     69(ptr) AccessChain 27(data) 338 39 30
+                              Store 345 344
+             346:      6(int) Load 8(invocation)
+             347:     77(ptr) AccessChain 27(data) 39 39
+             348:   20(ivec4) Load 347
+             349:   76(ivec2) VectorShuffle 348 348 0 1
+             350:  184(bvec2) SLessThan 349 183
+             351:      6(int) Load 8(invocation)
+             352:  184(bvec2) GroupNonUniformShuffleXor 35 350 351
+             353:   76(ivec2) Select 352 188 183
+             354:     77(ptr) AccessChain 27(data) 346 39
+             355:   20(ivec4) Load 354
+             356:   20(ivec4) VectorShuffle 355 353 4 5 2 3
+                              Store 354 356
+             357:      6(int) Load 8(invocation)
+             358:     77(ptr) AccessChain 27(data) 39 39
+             359:   20(ivec4) Load 358
+             360:   87(ivec3) VectorShuffle 359 359 0 1 2
+             361:  198(bvec3) SLessThan 360 197
+             362:      6(int) Load 8(invocation)
+             363:  198(bvec3) GroupNonUniformShuffleXor 35 361 362
+             364:   87(ivec3) Select 363 202 197
+             365:     77(ptr) AccessChain 27(data) 357 39
+             366:   20(ivec4) Load 365
+             367:   20(ivec4) VectorShuffle 366 364 4 5 6 3
+                              Store 365 367
+             368:      6(int) Load 8(invocation)
+             369:     77(ptr) AccessChain 27(data) 39 39
+             370:   20(ivec4) Load 369
+             371:  211(bvec4) SLessThan 370 210
+             372:      6(int) Load 8(invocation)
+             373:  211(bvec4) GroupNonUniformShuffleXor 35 371 372
+             374:   20(ivec4) Select 373 215 210
+             375:     77(ptr) AccessChain 27(data) 368 39
+                              Store 375 374
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroupShuffleRelative.comp.out b/Test/baseResults/spv.subgroupShuffleRelative.comp.out
new file mode 100644
index 0000000..90c9fb1
--- /dev/null
+++ b/Test/baseResults/spv.subgroupShuffleRelative.comp.out
@@ -0,0 +1,462 @@
+spv.subgroupShuffleRelative.comp
+// Module Version 10300
+// Generated by (magic number): 80005
+// Id's are bound by 379
+
+                              Capability Shader
+                              Capability Float64
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformShuffleRelative
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 10 12
+                              ExecutionMode 4 LocalSize 8 8 1
+                              Source GLSL 450
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              SourceExtension  "GL_KHR_shader_subgroup_shuffle_relative"
+                              Name 4  "main"
+                              Name 8  "invocation"
+                              Name 10  "gl_SubgroupInvocationID"
+                              Name 12  "gl_SubgroupSize"
+                              Name 24  "Buffers"
+                              MemberName 24(Buffers) 0  "f4"
+                              MemberName 24(Buffers) 1  "i4"
+                              MemberName 24(Buffers) 2  "u4"
+                              MemberName 24(Buffers) 3  "d4"
+                              Name 27  "data"
+                              Decorate 10(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 10(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 11 RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 13 RelaxedPrecision
+                              Decorate 14 RelaxedPrecision
+                              Decorate 16 RelaxedPrecision
+                              MemberDecorate 24(Buffers) 0 Offset 0
+                              MemberDecorate 24(Buffers) 1 Offset 16
+                              MemberDecorate 24(Buffers) 2 Offset 32
+                              MemberDecorate 24(Buffers) 3 Offset 64
+                              Decorate 24(Buffers) BufferBlock
+                              Decorate 27(data) DescriptorSet 0
+                              Decorate 27(data) Binding 0
+                              Decorate 378 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypePointer Input 6(int)
+10(gl_SubgroupInvocationID):      9(ptr) Variable Input
+12(gl_SubgroupSize):      9(ptr) Variable Input
+              15:      6(int) Constant 4
+              17:             TypeFloat 32
+              18:             TypeVector 17(float) 4
+              19:             TypeInt 32 1
+              20:             TypeVector 19(int) 4
+              21:             TypeVector 6(int) 4
+              22:             TypeFloat 64
+              23:             TypeVector 22(float) 4
+     24(Buffers):             TypeStruct 18(fvec4) 20(ivec4) 21(ivec4) 23(fvec4)
+              25:             TypeArray 24(Buffers) 15
+              26:             TypePointer Uniform 25
+        27(data):     26(ptr) Variable Uniform
+              29:     19(int) Constant 0
+              30:      6(int) Constant 0
+              31:             TypePointer Uniform 17(float)
+              35:      6(int) Constant 3
+              39:     19(int) Constant 1
+              40:             TypeVector 17(float) 2
+              41:             TypePointer Uniform 18(fvec4)
+              51:     19(int) Constant 2
+              52:             TypeVector 17(float) 3
+              62:     19(int) Constant 3
+              69:             TypePointer Uniform 19(int)
+              76:             TypeVector 19(int) 2
+              77:             TypePointer Uniform 20(ivec4)
+              87:             TypeVector 19(int) 3
+             103:             TypePointer Uniform 6(int)
+             110:             TypeVector 6(int) 2
+             111:             TypePointer Uniform 21(ivec4)
+             121:             TypeVector 6(int) 3
+             137:             TypePointer Uniform 22(float)
+             144:             TypeVector 22(float) 2
+             145:             TypePointer Uniform 23(fvec4)
+             155:             TypeVector 22(float) 3
+             173:             TypeBool
+             183:   76(ivec2) ConstantComposite 29 29
+             184:             TypeVector 173(bool) 2
+             188:   76(ivec2) ConstantComposite 39 39
+             197:   87(ivec3) ConstantComposite 29 29 29
+             198:             TypeVector 173(bool) 3
+             202:   87(ivec3) ConstantComposite 39 39 39
+             210:   20(ivec4) ConstantComposite 29 29 29 29
+             211:             TypeVector 173(bool) 4
+             215:   20(ivec4) ConstantComposite 39 39 39 39
+             376:      6(int) Constant 8
+             377:      6(int) Constant 1
+             378:  121(ivec3) ConstantComposite 376 376 377
+         4(main):           2 Function None 3
+               5:             Label
+   8(invocation):      7(ptr) Variable Function
+              11:      6(int) Load 10(gl_SubgroupInvocationID)
+              13:      6(int) Load 12(gl_SubgroupSize)
+              14:      6(int) IAdd 11 13
+              16:      6(int) UMod 14 15
+                              Store 8(invocation) 16
+              28:      6(int) Load 8(invocation)
+              32:     31(ptr) AccessChain 27(data) 29 29 30
+              33:   17(float) Load 32
+              34:      6(int) Load 8(invocation)
+              36:   17(float) GroupNonUniformShuffleUp 35 33 34
+              37:     31(ptr) AccessChain 27(data) 28 29 30
+                              Store 37 36
+              38:      6(int) Load 8(invocation)
+              42:     41(ptr) AccessChain 27(data) 39 29
+              43:   18(fvec4) Load 42
+              44:   40(fvec2) VectorShuffle 43 43 0 1
+              45:      6(int) Load 8(invocation)
+              46:   40(fvec2) GroupNonUniformShuffleUp 35 44 45
+              47:     41(ptr) AccessChain 27(data) 38 29
+              48:   18(fvec4) Load 47
+              49:   18(fvec4) VectorShuffle 48 46 4 5 2 3
+                              Store 47 49
+              50:      6(int) Load 8(invocation)
+              53:     41(ptr) AccessChain 27(data) 51 29
+              54:   18(fvec4) Load 53
+              55:   52(fvec3) VectorShuffle 54 54 0 1 2
+              56:      6(int) Load 8(invocation)
+              57:   52(fvec3) GroupNonUniformShuffleUp 35 55 56
+              58:     41(ptr) AccessChain 27(data) 50 29
+              59:   18(fvec4) Load 58
+              60:   18(fvec4) VectorShuffle 59 57 4 5 6 3
+                              Store 58 60
+              61:      6(int) Load 8(invocation)
+              63:     41(ptr) AccessChain 27(data) 62 29
+              64:   18(fvec4) Load 63
+              65:      6(int) Load 8(invocation)
+              66:   18(fvec4) GroupNonUniformShuffleUp 35 64 65
+              67:     41(ptr) AccessChain 27(data) 61 29
+                              Store 67 66
+              68:      6(int) Load 8(invocation)
+              70:     69(ptr) AccessChain 27(data) 29 39 30
+              71:     19(int) Load 70
+              72:      6(int) Load 8(invocation)
+              73:     19(int) GroupNonUniformShuffleUp 35 71 72
+              74:     69(ptr) AccessChain 27(data) 68 39 30
+                              Store 74 73
+              75:      6(int) Load 8(invocation)
+              78:     77(ptr) AccessChain 27(data) 39 39
+              79:   20(ivec4) Load 78
+              80:   76(ivec2) VectorShuffle 79 79 0 1
+              81:      6(int) Load 8(invocation)
+              82:   76(ivec2) GroupNonUniformShuffleUp 35 80 81
+              83:     77(ptr) AccessChain 27(data) 75 39
+              84:   20(ivec4) Load 83
+              85:   20(ivec4) VectorShuffle 84 82 4 5 2 3
+                              Store 83 85
+              86:      6(int) Load 8(invocation)
+              88:     77(ptr) AccessChain 27(data) 51 39
+              89:   20(ivec4) Load 88
+              90:   87(ivec3) VectorShuffle 89 89 0 1 2
+              91:      6(int) Load 8(invocation)
+              92:   87(ivec3) GroupNonUniformShuffleUp 35 90 91
+              93:     77(ptr) AccessChain 27(data) 86 39
+              94:   20(ivec4) Load 93
+              95:   20(ivec4) VectorShuffle 94 92 4 5 6 3
+                              Store 93 95
+              96:      6(int) Load 8(invocation)
+              97:     77(ptr) AccessChain 27(data) 62 39
+              98:   20(ivec4) Load 97
+              99:      6(int) Load 8(invocation)
+             100:   20(ivec4) GroupNonUniformShuffleUp 35 98 99
+             101:     77(ptr) AccessChain 27(data) 96 39
+                              Store 101 100
+             102:      6(int) Load 8(invocation)
+             104:    103(ptr) AccessChain 27(data) 29 51 30
+             105:      6(int) Load 104
+             106:      6(int) Load 8(invocation)
+             107:      6(int) GroupNonUniformShuffleUp 35 105 106
+             108:    103(ptr) AccessChain 27(data) 102 51 30
+                              Store 108 107
+             109:      6(int) Load 8(invocation)
+             112:    111(ptr) AccessChain 27(data) 39 51
+             113:   21(ivec4) Load 112
+             114:  110(ivec2) VectorShuffle 113 113 0 1
+             115:      6(int) Load 8(invocation)
+             116:  110(ivec2) GroupNonUniformShuffleUp 35 114 115
+             117:    111(ptr) AccessChain 27(data) 109 51
+             118:   21(ivec4) Load 117
+             119:   21(ivec4) VectorShuffle 118 116 4 5 2 3
+                              Store 117 119
+             120:      6(int) Load 8(invocation)
+             122:    111(ptr) AccessChain 27(data) 51 51
+             123:   21(ivec4) Load 122
+             124:  121(ivec3) VectorShuffle 123 123 0 1 2
+             125:      6(int) Load 8(invocation)
+             126:  121(ivec3) GroupNonUniformShuffleUp 35 124 125
+             127:    111(ptr) AccessChain 27(data) 120 51
+             128:   21(ivec4) Load 127
+             129:   21(ivec4) VectorShuffle 128 126 4 5 6 3
+                              Store 127 129
+             130:      6(int) Load 8(invocation)
+             131:    111(ptr) AccessChain 27(data) 62 51
+             132:   21(ivec4) Load 131
+             133:      6(int) Load 8(invocation)
+             134:   21(ivec4) GroupNonUniformShuffleUp 35 132 133
+             135:    111(ptr) AccessChain 27(data) 130 51
+                              Store 135 134
+             136:      6(int) Load 8(invocation)
+             138:    137(ptr) AccessChain 27(data) 29 62 30
+             139:   22(float) Load 138
+             140:      6(int) Load 8(invocation)
+             141:   22(float) GroupNonUniformShuffleUp 35 139 140
+             142:    137(ptr) AccessChain 27(data) 136 62 30
+                              Store 142 141
+             143:      6(int) Load 8(invocation)
+             146:    145(ptr) AccessChain 27(data) 39 62
+             147:   23(fvec4) Load 146
+             148:  144(fvec2) VectorShuffle 147 147 0 1
+             149:      6(int) Load 8(invocation)
+             150:  144(fvec2) GroupNonUniformShuffleUp 35 148 149
+             151:    145(ptr) AccessChain 27(data) 143 62
+             152:   23(fvec4) Load 151
+             153:   23(fvec4) VectorShuffle 152 150 4 5 2 3
+                              Store 151 153
+             154:      6(int) Load 8(invocation)
+             156:    145(ptr) AccessChain 27(data) 51 62
+             157:   23(fvec4) Load 156
+             158:  155(fvec3) VectorShuffle 157 157 0 1 2
+             159:      6(int) Load 8(invocation)
+             160:  155(fvec3) GroupNonUniformShuffleUp 35 158 159
+             161:    145(ptr) AccessChain 27(data) 154 62
+             162:   23(fvec4) Load 161
+             163:   23(fvec4) VectorShuffle 162 160 4 5 6 3
+                              Store 161 163
+             164:      6(int) Load 8(invocation)
+             165:    145(ptr) AccessChain 27(data) 62 62
+             166:   23(fvec4) Load 165
+             167:      6(int) Load 8(invocation)
+             168:   23(fvec4) GroupNonUniformShuffleUp 35 166 167
+             169:    145(ptr) AccessChain 27(data) 164 62
+                              Store 169 168
+             170:      6(int) Load 8(invocation)
+             171:     69(ptr) AccessChain 27(data) 29 39 30
+             172:     19(int) Load 171
+             174:   173(bool) SLessThan 172 29
+             175:      6(int) Load 8(invocation)
+             176:   173(bool) GroupNonUniformShuffleUp 35 174 175
+             177:     19(int) Select 176 39 29
+             178:     69(ptr) AccessChain 27(data) 170 39 30
+                              Store 178 177
+             179:      6(int) Load 8(invocation)
+             180:     77(ptr) AccessChain 27(data) 39 39
+             181:   20(ivec4) Load 180
+             182:   76(ivec2) VectorShuffle 181 181 0 1
+             185:  184(bvec2) SLessThan 182 183
+             186:      6(int) Load 8(invocation)
+             187:  184(bvec2) GroupNonUniformShuffleUp 35 185 186
+             189:   76(ivec2) Select 187 188 183
+             190:     77(ptr) AccessChain 27(data) 179 39
+             191:   20(ivec4) Load 190
+             192:   20(ivec4) VectorShuffle 191 189 4 5 2 3
+                              Store 190 192
+             193:      6(int) Load 8(invocation)
+             194:     77(ptr) AccessChain 27(data) 39 39
+             195:   20(ivec4) Load 194
+             196:   87(ivec3) VectorShuffle 195 195 0 1 2
+             199:  198(bvec3) SLessThan 196 197
+             200:      6(int) Load 8(invocation)
+             201:  198(bvec3) GroupNonUniformShuffleUp 35 199 200
+             203:   87(ivec3) Select 201 202 197
+             204:     77(ptr) AccessChain 27(data) 193 39
+             205:   20(ivec4) Load 204
+             206:   20(ivec4) VectorShuffle 205 203 4 5 6 3
+                              Store 204 206
+             207:      6(int) Load 8(invocation)
+             208:     77(ptr) AccessChain 27(data) 39 39
+             209:   20(ivec4) Load 208
+             212:  211(bvec4) SLessThan 209 210
+             213:      6(int) Load 8(invocation)
+             214:  211(bvec4) GroupNonUniformShuffleUp 35 212 213
+             216:   20(ivec4) Select 214 215 210
+             217:     77(ptr) AccessChain 27(data) 207 39
+                              Store 217 216
+             218:      6(int) Load 8(invocation)
+             219:     31(ptr) AccessChain 27(data) 29 29 30
+             220:   17(float) Load 219
+             221:      6(int) Load 8(invocation)
+             222:   17(float) GroupNonUniformShuffleDown 35 220 221
+             223:     31(ptr) AccessChain 27(data) 218 29 30
+                              Store 223 222
+             224:      6(int) Load 8(invocation)
+             225:     41(ptr) AccessChain 27(data) 39 29
+             226:   18(fvec4) Load 225
+             227:   40(fvec2) VectorShuffle 226 226 0 1
+             228:      6(int) Load 8(invocation)
+             229:   40(fvec2) GroupNonUniformShuffleDown 35 227 228
+             230:     41(ptr) AccessChain 27(data) 224 29
+             231:   18(fvec4) Load 230
+             232:   18(fvec4) VectorShuffle 231 229 4 5 2 3
+                              Store 230 232
+             233:      6(int) Load 8(invocation)
+             234:     41(ptr) AccessChain 27(data) 51 29
+             235:   18(fvec4) Load 234
+             236:   52(fvec3) VectorShuffle 235 235 0 1 2
+             237:      6(int) Load 8(invocation)
+             238:   52(fvec3) GroupNonUniformShuffleDown 35 236 237
+             239:     41(ptr) AccessChain 27(data) 233 29
+             240:   18(fvec4) Load 239
+             241:   18(fvec4) VectorShuffle 240 238 4 5 6 3
+                              Store 239 241
+             242:      6(int) Load 8(invocation)
+             243:     41(ptr) AccessChain 27(data) 62 29
+             244:   18(fvec4) Load 243
+             245:      6(int) Load 8(invocation)
+             246:   18(fvec4) GroupNonUniformShuffleDown 35 244 245
+             247:     41(ptr) AccessChain 27(data) 242 29
+                              Store 247 246
+             248:      6(int) Load 8(invocation)
+             249:     69(ptr) AccessChain 27(data) 29 39 30
+             250:     19(int) Load 249
+             251:      6(int) Load 8(invocation)
+             252:     19(int) GroupNonUniformShuffleDown 35 250 251
+             253:     69(ptr) AccessChain 27(data) 248 39 30
+                              Store 253 252
+             254:      6(int) Load 8(invocation)
+             255:     77(ptr) AccessChain 27(data) 39 39
+             256:   20(ivec4) Load 255
+             257:   76(ivec2) VectorShuffle 256 256 0 1
+             258:      6(int) Load 8(invocation)
+             259:   76(ivec2) GroupNonUniformShuffleDown 35 257 258
+             260:     77(ptr) AccessChain 27(data) 254 39
+             261:   20(ivec4) Load 260
+             262:   20(ivec4) VectorShuffle 261 259 4 5 2 3
+                              Store 260 262
+             263:      6(int) Load 8(invocation)
+             264:     77(ptr) AccessChain 27(data) 51 39
+             265:   20(ivec4) Load 264
+             266:   87(ivec3) VectorShuffle 265 265 0 1 2
+             267:      6(int) Load 8(invocation)
+             268:   87(ivec3) GroupNonUniformShuffleDown 35 266 267
+             269:     77(ptr) AccessChain 27(data) 263 39
+             270:   20(ivec4) Load 269
+             271:   20(ivec4) VectorShuffle 270 268 4 5 6 3
+                              Store 269 271
+             272:      6(int) Load 8(invocation)
+             273:     77(ptr) AccessChain 27(data) 62 39
+             274:   20(ivec4) Load 273
+             275:      6(int) Load 8(invocation)
+             276:   20(ivec4) GroupNonUniformShuffleDown 35 274 275
+             277:     77(ptr) AccessChain 27(data) 272 39
+                              Store 277 276
+             278:      6(int) Load 8(invocation)
+             279:    103(ptr) AccessChain 27(data) 29 51 30
+             280:      6(int) Load 279
+             281:      6(int) Load 8(invocation)
+             282:      6(int) GroupNonUniformShuffleDown 35 280 281
+             283:    103(ptr) AccessChain 27(data) 278 51 30
+                              Store 283 282
+             284:      6(int) Load 8(invocation)
+             285:    111(ptr) AccessChain 27(data) 39 51
+             286:   21(ivec4) Load 285
+             287:  110(ivec2) VectorShuffle 286 286 0 1
+             288:      6(int) Load 8(invocation)
+             289:  110(ivec2) GroupNonUniformShuffleDown 35 287 288
+             290:    111(ptr) AccessChain 27(data) 284 51
+             291:   21(ivec4) Load 290
+             292:   21(ivec4) VectorShuffle 291 289 4 5 2 3
+                              Store 290 292
+             293:      6(int) Load 8(invocation)
+             294:    111(ptr) AccessChain 27(data) 51 51
+             295:   21(ivec4) Load 294
+             296:  121(ivec3) VectorShuffle 295 295 0 1 2
+             297:      6(int) Load 8(invocation)
+             298:  121(ivec3) GroupNonUniformShuffleDown 35 296 297
+             299:    111(ptr) AccessChain 27(data) 293 51
+             300:   21(ivec4) Load 299
+             301:   21(ivec4) VectorShuffle 300 298 4 5 6 3
+                              Store 299 301
+             302:      6(int) Load 8(invocation)
+             303:    111(ptr) AccessChain 27(data) 62 51
+             304:   21(ivec4) Load 303
+             305:      6(int) Load 8(invocation)
+             306:   21(ivec4) GroupNonUniformShuffleDown 35 304 305
+             307:    111(ptr) AccessChain 27(data) 302 51
+                              Store 307 306
+             308:      6(int) Load 8(invocation)
+             309:    137(ptr) AccessChain 27(data) 29 62 30
+             310:   22(float) Load 309
+             311:      6(int) Load 8(invocation)
+             312:   22(float) GroupNonUniformShuffleDown 35 310 311
+             313:    137(ptr) AccessChain 27(data) 308 62 30
+                              Store 313 312
+             314:      6(int) Load 8(invocation)
+             315:    145(ptr) AccessChain 27(data) 39 62
+             316:   23(fvec4) Load 315
+             317:  144(fvec2) VectorShuffle 316 316 0 1
+             318:      6(int) Load 8(invocation)
+             319:  144(fvec2) GroupNonUniformShuffleDown 35 317 318
+             320:    145(ptr) AccessChain 27(data) 314 62
+             321:   23(fvec4) Load 320
+             322:   23(fvec4) VectorShuffle 321 319 4 5 2 3
+                              Store 320 322
+             323:      6(int) Load 8(invocation)
+             324:    145(ptr) AccessChain 27(data) 51 62
+             325:   23(fvec4) Load 324
+             326:  155(fvec3) VectorShuffle 325 325 0 1 2
+             327:      6(int) Load 8(invocation)
+             328:  155(fvec3) GroupNonUniformShuffleDown 35 326 327
+             329:    145(ptr) AccessChain 27(data) 323 62
+             330:   23(fvec4) Load 329
+             331:   23(fvec4) VectorShuffle 330 328 4 5 6 3
+                              Store 329 331
+             332:      6(int) Load 8(invocation)
+             333:    145(ptr) AccessChain 27(data) 62 62
+             334:   23(fvec4) Load 333
+             335:      6(int) Load 8(invocation)
+             336:   23(fvec4) GroupNonUniformShuffleDown 35 334 335
+             337:    145(ptr) AccessChain 27(data) 332 62
+                              Store 337 336
+             338:      6(int) Load 8(invocation)
+             339:     69(ptr) AccessChain 27(data) 29 39 30
+             340:     19(int) Load 339
+             341:   173(bool) SLessThan 340 29
+             342:      6(int) Load 8(invocation)
+             343:   173(bool) GroupNonUniformShuffleDown 35 341 342
+             344:     19(int) Select 343 39 29
+             345:     69(ptr) AccessChain 27(data) 338 39 30
+                              Store 345 344
+             346:      6(int) Load 8(invocation)
+             347:     77(ptr) AccessChain 27(data) 39 39
+             348:   20(ivec4) Load 347
+             349:   76(ivec2) VectorShuffle 348 348 0 1
+             350:  184(bvec2) SLessThan 349 183
+             351:      6(int) Load 8(invocation)
+             352:  184(bvec2) GroupNonUniformShuffleDown 35 350 351
+             353:   76(ivec2) Select 352 188 183
+             354:     77(ptr) AccessChain 27(data) 346 39
+             355:   20(ivec4) Load 354
+             356:   20(ivec4) VectorShuffle 355 353 4 5 2 3
+                              Store 354 356
+             357:      6(int) Load 8(invocation)
+             358:     77(ptr) AccessChain 27(data) 39 39
+             359:   20(ivec4) Load 358
+             360:   87(ivec3) VectorShuffle 359 359 0 1 2
+             361:  198(bvec3) SLessThan 360 197
+             362:      6(int) Load 8(invocation)
+             363:  198(bvec3) GroupNonUniformShuffleDown 35 361 362
+             364:   87(ivec3) Select 363 202 197
+             365:     77(ptr) AccessChain 27(data) 357 39
+             366:   20(ivec4) Load 365
+             367:   20(ivec4) VectorShuffle 366 364 4 5 6 3
+                              Store 365 367
+             368:      6(int) Load 8(invocation)
+             369:     77(ptr) AccessChain 27(data) 39 39
+             370:   20(ivec4) Load 369
+             371:  211(bvec4) SLessThan 370 210
+             372:      6(int) Load 8(invocation)
+             373:  211(bvec4) GroupNonUniformShuffleDown 35 371 372
+             374:   20(ivec4) Select 373 215 210
+             375:     77(ptr) AccessChain 27(data) 368 39
+                              Store 375 374
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroupVote.comp.out b/Test/baseResults/spv.subgroupVote.comp.out
new file mode 100644
index 0000000..563cc21
--- /dev/null
+++ b/Test/baseResults/spv.subgroupVote.comp.out
@@ -0,0 +1,288 @@
+spv.subgroupVote.comp
+// Module Version 10300
+// Generated by (magic number): 80005
+// Id's are bound by 216
+
+                              Capability Shader
+                              Capability Float64
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformVote
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 10 12
+                              ExecutionMode 4 LocalSize 8 8 1
+                              Source GLSL 450
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              SourceExtension  "GL_KHR_shader_subgroup_vote"
+                              Name 4  "main"
+                              Name 8  "invocation"
+                              Name 10  "gl_SubgroupInvocationID"
+                              Name 12  "gl_SubgroupSize"
+                              Name 24  "Buffers"
+                              MemberName 24(Buffers) 0  "f4"
+                              MemberName 24(Buffers) 1  "i4"
+                              MemberName 24(Buffers) 2  "u4"
+                              MemberName 24(Buffers) 3  "d4"
+                              MemberName 24(Buffers) 4  "r"
+                              Name 27  "data"
+                              Decorate 10(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 10(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 11 RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 13 RelaxedPrecision
+                              Decorate 14 RelaxedPrecision
+                              Decorate 16 RelaxedPrecision
+                              MemberDecorate 24(Buffers) 0 Offset 0
+                              MemberDecorate 24(Buffers) 1 Offset 16
+                              MemberDecorate 24(Buffers) 2 Offset 32
+                              MemberDecorate 24(Buffers) 3 Offset 64
+                              MemberDecorate 24(Buffers) 4 Offset 96
+                              Decorate 24(Buffers) BufferBlock
+                              Decorate 27(data) DescriptorSet 0
+                              Decorate 27(data) Binding 0
+                              Decorate 215 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypePointer Input 6(int)
+10(gl_SubgroupInvocationID):      9(ptr) Variable Input
+12(gl_SubgroupSize):      9(ptr) Variable Input
+              15:      6(int) Constant 4
+              17:             TypeFloat 32
+              18:             TypeVector 17(float) 4
+              19:             TypeInt 32 1
+              20:             TypeVector 19(int) 4
+              21:             TypeVector 6(int) 4
+              22:             TypeFloat 64
+              23:             TypeVector 22(float) 4
+     24(Buffers):             TypeStruct 18(fvec4) 20(ivec4) 21(ivec4) 23(fvec4) 19(int)
+              25:             TypeArray 24(Buffers) 15
+              26:             TypePointer Uniform 25
+        27(data):     26(ptr) Variable Uniform
+              29:     19(int) Constant 4
+              30:             TypePointer Uniform 19(int)
+              33:     19(int) Constant 0
+              34:             TypeBool
+              36:      6(int) Constant 3
+              41:      6(int) Constant 0
+              42:             TypePointer Uniform 17(float)
+              46:     19(int) Constant 1
+              50:             TypeVector 17(float) 2
+              51:             TypePointer Uniform 18(fvec4)
+              59:     19(int) Constant 2
+              60:             TypeVector 17(float) 3
+              68:     19(int) Constant 3
+              81:             TypeVector 19(int) 2
+              82:             TypePointer Uniform 20(ivec4)
+              90:             TypeVector 19(int) 3
+             104:             TypePointer Uniform 6(int)
+             111:             TypeVector 6(int) 2
+             112:             TypePointer Uniform 21(ivec4)
+             120:             TypeVector 6(int) 3
+             142:             TypePointer Uniform 22(float)
+             149:             TypeVector 22(float) 2
+             150:             TypePointer Uniform 23(fvec4)
+             158:             TypeVector 22(float) 3
+             182:   81(ivec2) ConstantComposite 33 33
+             183:             TypeVector 34(bool) 2
+             194:   90(ivec3) ConstantComposite 33 33 33
+             195:             TypeVector 34(bool) 3
+             205:   20(ivec4) ConstantComposite 33 33 33 33
+             206:             TypeVector 34(bool) 4
+             213:      6(int) Constant 8
+             214:      6(int) Constant 1
+             215:  120(ivec3) ConstantComposite 213 213 214
+         4(main):           2 Function None 3
+               5:             Label
+   8(invocation):      7(ptr) Variable Function
+              11:      6(int) Load 10(gl_SubgroupInvocationID)
+              13:      6(int) Load 12(gl_SubgroupSize)
+              14:      6(int) IAdd 11 13
+              16:      6(int) UMod 14 15
+                              Store 8(invocation) 16
+              28:      6(int) Load 8(invocation)
+              31:     30(ptr) AccessChain 27(data) 28 29
+              32:     19(int) Load 31
+              35:    34(bool) SLessThan 32 33
+              37:    34(bool) GroupNonUniformAll 36 35
+                              SelectionMerge 39 None
+                              BranchConditional 37 38 133
+              38:               Label
+              40:      6(int)   Load 8(invocation)
+              43:     42(ptr)   AccessChain 27(data) 33 33 41
+              44:   17(float)   Load 43
+              45:    34(bool)   GroupNonUniformAllEqual 36 44
+              47:     19(int)   Select 45 46 33
+              48:     30(ptr)   AccessChain 27(data) 40 29
+                                Store 48 47
+              49:      6(int)   Load 8(invocation)
+              52:     51(ptr)   AccessChain 27(data) 46 33
+              53:   18(fvec4)   Load 52
+              54:   50(fvec2)   VectorShuffle 53 53 0 1
+              55:    34(bool)   GroupNonUniformAllEqual 36 54
+              56:     19(int)   Select 55 46 33
+              57:     30(ptr)   AccessChain 27(data) 49 29
+                                Store 57 56
+              58:      6(int)   Load 8(invocation)
+              61:     51(ptr)   AccessChain 27(data) 59 33
+              62:   18(fvec4)   Load 61
+              63:   60(fvec3)   VectorShuffle 62 62 0 1 2
+              64:    34(bool)   GroupNonUniformAllEqual 36 63
+              65:     19(int)   Select 64 46 33
+              66:     30(ptr)   AccessChain 27(data) 58 29
+                                Store 66 65
+              67:      6(int)   Load 8(invocation)
+              69:     51(ptr)   AccessChain 27(data) 68 33
+              70:   18(fvec4)   Load 69
+              71:    34(bool)   GroupNonUniformAllEqual 36 70
+              72:     19(int)   Select 71 46 33
+              73:     30(ptr)   AccessChain 27(data) 67 29
+                                Store 73 72
+              74:      6(int)   Load 8(invocation)
+              75:     30(ptr)   AccessChain 27(data) 33 46 41
+              76:     19(int)   Load 75
+              77:    34(bool)   GroupNonUniformAllEqual 36 76
+              78:     19(int)   Select 77 46 33
+              79:     30(ptr)   AccessChain 27(data) 74 29
+                                Store 79 78
+              80:      6(int)   Load 8(invocation)
+              83:     82(ptr)   AccessChain 27(data) 46 46
+              84:   20(ivec4)   Load 83
+              85:   81(ivec2)   VectorShuffle 84 84 0 1
+              86:    34(bool)   GroupNonUniformAllEqual 36 85
+              87:     19(int)   Select 86 46 33
+              88:     30(ptr)   AccessChain 27(data) 80 29
+                                Store 88 87
+              89:      6(int)   Load 8(invocation)
+              91:     82(ptr)   AccessChain 27(data) 59 46
+              92:   20(ivec4)   Load 91
+              93:   90(ivec3)   VectorShuffle 92 92 0 1 2
+              94:    34(bool)   GroupNonUniformAllEqual 36 93
+              95:     19(int)   Select 94 46 33
+              96:     30(ptr)   AccessChain 27(data) 89 29
+                                Store 96 95
+              97:      6(int)   Load 8(invocation)
+              98:     82(ptr)   AccessChain 27(data) 68 46
+              99:   20(ivec4)   Load 98
+             100:    34(bool)   GroupNonUniformAllEqual 36 99
+             101:     19(int)   Select 100 46 33
+             102:     30(ptr)   AccessChain 27(data) 97 29
+                                Store 102 101
+             103:      6(int)   Load 8(invocation)
+             105:    104(ptr)   AccessChain 27(data) 33 59 41
+             106:      6(int)   Load 105
+             107:    34(bool)   GroupNonUniformAllEqual 36 106
+             108:     19(int)   Select 107 46 33
+             109:     30(ptr)   AccessChain 27(data) 103 29
+                                Store 109 108
+             110:      6(int)   Load 8(invocation)
+             113:    112(ptr)   AccessChain 27(data) 46 59
+             114:   21(ivec4)   Load 113
+             115:  111(ivec2)   VectorShuffle 114 114 0 1
+             116:    34(bool)   GroupNonUniformAllEqual 36 115
+             117:     19(int)   Select 116 46 33
+             118:     30(ptr)   AccessChain 27(data) 110 29
+                                Store 118 117
+             119:      6(int)   Load 8(invocation)
+             121:    112(ptr)   AccessChain 27(data) 59 59
+             122:   21(ivec4)   Load 121
+             123:  120(ivec3)   VectorShuffle 122 122 0 1 2
+             124:    34(bool)   GroupNonUniformAllEqual 36 123
+             125:     19(int)   Select 124 46 33
+             126:     30(ptr)   AccessChain 27(data) 119 29
+                                Store 126 125
+             127:      6(int)   Load 8(invocation)
+             128:    112(ptr)   AccessChain 27(data) 68 59
+             129:   21(ivec4)   Load 128
+             130:    34(bool)   GroupNonUniformAllEqual 36 129
+             131:     19(int)   Select 130 46 33
+             132:     30(ptr)   AccessChain 27(data) 127 29
+                                Store 132 131
+                                Branch 39
+             133:               Label
+             134:      6(int)   Load 8(invocation)
+             135:     30(ptr)   AccessChain 27(data) 134 29
+             136:     19(int)   Load 135
+             137:    34(bool)   SLessThan 136 33
+             138:    34(bool)   GroupNonUniformAny 36 137
+                                SelectionMerge 140 None
+                                BranchConditional 138 139 140
+             139:                 Label
+             141:      6(int)     Load 8(invocation)
+             143:    142(ptr)     AccessChain 27(data) 33 68 41
+             144:   22(float)     Load 143
+             145:    34(bool)     GroupNonUniformAllEqual 36 144
+             146:     19(int)     Select 145 46 33
+             147:     30(ptr)     AccessChain 27(data) 141 29
+                                  Store 147 146
+             148:      6(int)     Load 8(invocation)
+             151:    150(ptr)     AccessChain 27(data) 46 68
+             152:   23(fvec4)     Load 151
+             153:  149(fvec2)     VectorShuffle 152 152 0 1
+             154:    34(bool)     GroupNonUniformAllEqual 36 153
+             155:     19(int)     Select 154 46 33
+             156:     30(ptr)     AccessChain 27(data) 148 29
+                                  Store 156 155
+             157:      6(int)     Load 8(invocation)
+             159:    150(ptr)     AccessChain 27(data) 59 68
+             160:   23(fvec4)     Load 159
+             161:  158(fvec3)     VectorShuffle 160 160 0 1 2
+             162:    34(bool)     GroupNonUniformAllEqual 36 161
+             163:     19(int)     Select 162 46 33
+             164:     30(ptr)     AccessChain 27(data) 157 29
+                                  Store 164 163
+             165:      6(int)     Load 8(invocation)
+             166:    150(ptr)     AccessChain 27(data) 68 68
+             167:   23(fvec4)     Load 166
+             168:    34(bool)     GroupNonUniformAllEqual 36 167
+             169:     19(int)     Select 168 46 33
+             170:     30(ptr)     AccessChain 27(data) 165 29
+                                  Store 170 169
+             171:      6(int)     Load 8(invocation)
+             172:     30(ptr)     AccessChain 27(data) 33 46 41
+             173:     19(int)     Load 172
+             174:    34(bool)     SLessThan 173 33
+             175:    34(bool)     GroupNonUniformAllEqual 36 174
+             176:     19(int)     Select 175 46 33
+             177:     30(ptr)     AccessChain 27(data) 171 29
+                                  Store 177 176
+             178:      6(int)     Load 8(invocation)
+             179:     82(ptr)     AccessChain 27(data) 46 46
+             180:   20(ivec4)     Load 179
+             181:   81(ivec2)     VectorShuffle 180 180 0 1
+             184:  183(bvec2)     SLessThan 181 182
+             185:    34(bool)     GroupNonUniformAllEqual 36 184
+             186:     19(int)     Select 185 46 33
+             187:   81(ivec2)     CompositeConstruct 186 186
+             188:     19(int)     CompositeExtract 187 0
+             189:     30(ptr)     AccessChain 27(data) 178 29
+                                  Store 189 188
+             190:      6(int)     Load 8(invocation)
+             191:     82(ptr)     AccessChain 27(data) 46 46
+             192:   20(ivec4)     Load 191
+             193:   90(ivec3)     VectorShuffle 192 192 0 1 2
+             196:  195(bvec3)     SLessThan 193 194
+             197:    34(bool)     GroupNonUniformAllEqual 36 196
+             198:     19(int)     Select 197 46 33
+             199:   90(ivec3)     CompositeConstruct 198 198 198
+             200:     19(int)     CompositeExtract 199 0
+             201:     30(ptr)     AccessChain 27(data) 190 29
+                                  Store 201 200
+             202:      6(int)     Load 8(invocation)
+             203:     82(ptr)     AccessChain 27(data) 46 46
+             204:   20(ivec4)     Load 203
+             207:  206(bvec4)     SLessThan 204 205
+             208:    34(bool)     GroupNonUniformAllEqual 36 207
+             209:     19(int)     Select 208 46 33
+             210:   20(ivec4)     CompositeConstruct 209 209 209 209
+             211:     19(int)     CompositeExtract 210 0
+             212:     30(ptr)     AccessChain 27(data) 202 29
+                                  Store 212 211
+                                  Branch 140
+             140:               Label
+                                Branch 39
+              39:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.vulkan100.subgroupArithmetic.comp.out b/Test/baseResults/spv.vulkan100.subgroupArithmetic.comp.out
new file mode 100755
index 0000000..9955053
--- /dev/null
+++ b/Test/baseResults/spv.vulkan100.subgroupArithmetic.comp.out
@@ -0,0 +1,305 @@
+spv.vulkan100.subgroupArithmetic.comp
+ERROR: 0:19: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:20: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:21: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:22: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:24: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:25: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:26: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:27: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:29: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:30: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:31: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:32: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:34: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:35: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:36: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:37: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:39: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:40: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:41: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:42: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:44: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:45: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:46: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:47: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:49: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:50: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:51: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:52: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:54: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:55: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:56: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:57: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:59: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:60: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:61: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:62: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:64: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:65: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:66: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:67: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:69: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:70: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:71: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:72: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:74: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:75: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:76: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:77: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:79: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:80: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:81: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:82: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:84: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:85: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:86: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:87: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:89: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:90: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:91: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:92: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:94: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:95: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:96: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:97: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:99: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:100: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:101: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:102: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:104: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:105: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:106: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:107: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:109: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:110: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:111: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:112: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:114: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:115: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:116: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:117: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:119: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:120: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:121: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:122: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:124: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:125: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:126: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:127: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:129: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:130: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:131: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:132: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:134: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:135: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:136: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:137: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:139: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:140: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:141: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:142: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:144: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:145: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:146: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:147: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:149: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:150: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:151: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:152: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:154: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:155: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:156: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:157: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:159: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:160: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:161: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:162: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:164: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:165: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:166: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:167: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:169: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:170: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:171: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:172: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:174: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:175: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:176: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:177: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:179: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:180: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:181: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:182: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:184: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:185: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:186: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:187: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:189: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:190: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:191: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:192: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:194: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:195: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:196: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:197: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:199: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:200: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:201: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:202: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:204: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:205: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:206: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:207: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:209: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:210: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:211: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:212: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:214: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:215: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:216: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:217: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:219: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:220: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:221: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:222: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:224: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:225: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:226: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:227: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:229: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:230: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:231: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:232: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:234: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:235: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:236: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:237: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:239: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:240: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:241: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:242: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:244: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:245: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:246: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:247: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:249: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:250: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:251: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:252: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:254: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:255: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:256: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:257: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:259: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:260: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:261: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:262: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:264: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:265: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:266: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:267: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:269: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:270: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:271: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:272: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:274: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:275: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:276: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:277: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:279: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:280: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:281: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:282: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:284: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:285: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:286: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:287: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:289: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:290: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:291: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:292: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:294: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:295: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:296: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:297: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:299: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:300: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:301: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:302: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:304: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:305: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:306: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:307: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:309: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:310: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:311: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:312: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:314: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:315: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:316: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:317: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:319: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:320: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:321: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:322: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:324: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:325: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:326: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:327: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:329: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:330: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:331: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:332: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:334: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:335: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:336: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:337: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:339: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:340: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:341: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:342: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:344: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:345: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:346: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:347: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:349: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:350: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:351: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:352: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:354: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:355: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:356: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:357: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:359: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:360: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:361: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:362: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:364: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:365: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:366: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:367: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:369: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:370: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:371: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:372: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:374: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:375: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:376: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:377: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:379: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:380: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:381: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:382: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:384: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:385: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:386: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:387: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:389: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:390: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:391: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:392: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 300 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.vulkan110.int16.frag.out b/Test/baseResults/spv.vulkan110.int16.frag.out
new file mode 100755
index 0000000..74527e3
--- /dev/null
+++ b/Test/baseResults/spv.vulkan110.int16.frag.out
@@ -0,0 +1,743 @@
+spv.vulkan110.int16.frag
+// Module Version 10300
+// Generated by (magic number): 80005
+// Id's are bound by 525
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Float64
+                              Capability Int64
+                              Capability Int16
+                              Capability Int8
+                              Capability StorageUniform16
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float16"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float32"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int16"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int32"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int8"
+                              Name 4  "main"
+                              Name 6  "literal("
+                              Name 8  "typeCast16("
+                              Name 10  "operators("
+                              Name 12  "builtinFuncs("
+                              Name 16  "i16"
+                              Name 24  "Uniforms"
+                              MemberName 24(Uniforms) 0  "index"
+                              Name 26  ""
+                              Name 33  "indexable"
+                              Name 38  "u16"
+                              Name 46  "indexable"
+                              Name 51  "i32v"
+                              Name 54  "i16v"
+                              Name 59  "u16v"
+                              Name 67  "u32v"
+                              Name 74  "i64v"
+                              Name 80  "u64v"
+                              Name 94  "f16v"
+                              Name 100  "f32v"
+                              Name 106  "f64v"
+                              Name 154  "i8v"
+                              Name 163  "u8v"
+                              Name 176  "bv"
+                              Name 195  "u16v"
+                              Name 200  "i16"
+                              Name 220  "i"
+                              Name 227  "uv"
+                              Name 243  "i64"
+                              Name 283  "b"
+                              Name 345  "i16v"
+                              Name 348  "i16"
+                              Name 358  "u16v"
+                              Name 360  "u16"
+                              Name 430  "i32"
+                              Name 433  "i64"
+                              Name 436  "i16v4"
+                              Name 439  "u32"
+                              Name 440  "u16v2"
+                              Name 444  "u64"
+                              Name 447  "u16v4"
+                              Name 459  "bv"
+                              Name 520  "Block"
+                              MemberName 520(Block) 0  "i16"
+                              MemberName 520(Block) 1  "i16v2"
+                              MemberName 520(Block) 2  "i16v3"
+                              MemberName 520(Block) 3  "i16v4"
+                              MemberName 520(Block) 4  "u16"
+                              MemberName 520(Block) 5  "u16v2"
+                              MemberName 520(Block) 6  "u16v3"
+                              MemberName 520(Block) 7  "u16v4"
+                              Name 522  "block"
+                              Name 523  "si16"
+                              Name 524  "su16"
+                              MemberDecorate 24(Uniforms) 0 Offset 0
+                              Decorate 24(Uniforms) Block
+                              Decorate 26 DescriptorSet 0
+                              Decorate 26 Binding 0
+                              MemberDecorate 520(Block) 0 Offset 0
+                              MemberDecorate 520(Block) 1 Offset 4
+                              MemberDecorate 520(Block) 2 Offset 8
+                              MemberDecorate 520(Block) 3 Offset 16
+                              MemberDecorate 520(Block) 4 Offset 24
+                              MemberDecorate 520(Block) 5 Offset 28
+                              MemberDecorate 520(Block) 6 Offset 32
+                              MemberDecorate 520(Block) 7 Offset 40
+                              Decorate 520(Block) Block
+                              Decorate 522(block) DescriptorSet 0
+                              Decorate 522(block) Binding 1
+                              Decorate 523(si16) SpecId 100
+                              Decorate 524(su16) SpecId 101
+               2:             TypeVoid
+               3:             TypeFunction 2
+              14:             TypeInt 16 1
+              15:             TypePointer Function 14(int)
+              17:             TypeInt 32 0
+              18:     17(int) Constant 3
+              19:             TypeArray 14(int) 18
+              20:     14(int) Constant 4294962927
+              21:     14(int) Constant 4294967295
+              22:     14(int) Constant 16384
+              23:          19 ConstantComposite 20 21 22
+    24(Uniforms):             TypeStruct 17(int)
+              25:             TypePointer Uniform 24(Uniforms)
+              26:     25(ptr) Variable Uniform
+              27:             TypeInt 32 1
+              28:     27(int) Constant 0
+              29:             TypePointer Uniform 17(int)
+              32:             TypePointer Function 19
+              36:             TypeInt 16 0
+              37:             TypePointer Function 36(int)
+              39:             TypeArray 36(int) 18
+              40:     36(int) Constant 65535
+              41:     36(int) Constant 32767
+              42:          39 ConstantComposite 40 40 41
+              45:             TypePointer Function 39
+              49:             TypeVector 27(int) 2
+              50:             TypePointer Function 49(ivec2)
+              52:             TypeVector 14(int) 2
+              53:             TypePointer Function 52(ivec2)
+              57:             TypeVector 36(int) 2
+              58:             TypePointer Function 57(ivec2)
+              65:             TypeVector 17(int) 2
+              66:             TypePointer Function 65(ivec2)
+              71:             TypeInt 64 1
+              72:             TypeVector 71(int) 2
+              73:             TypePointer Function 72(ivec2)
+              77:             TypeInt 64 0
+              78:             TypeVector 77(int) 2
+              79:             TypePointer Function 78(ivec2)
+              91:             TypeFloat 16
+              92:             TypeVector 91(float) 2
+              93:             TypePointer Function 92(fvec2)
+              97:             TypeFloat 32
+              98:             TypeVector 97(float) 2
+              99:             TypePointer Function 98(fvec2)
+             103:             TypeFloat 64
+             104:             TypeVector 103(float) 2
+             105:             TypePointer Function 104(fvec2)
+             151:             TypeInt 8 1
+             152:             TypeVector 151(int) 2
+             153:             TypePointer Function 152(ivec2)
+             160:             TypeInt 8 0
+             161:             TypeVector 160(int) 2
+             162:             TypePointer Function 161(ivec2)
+             173:             TypeBool
+             174:             TypeVector 173(bool) 2
+             175:             TypePointer Function 174(bvec2)
+             178:     14(int) Constant 0
+             179:     14(int) Constant 1
+             180:   52(ivec2) ConstantComposite 178 178
+             181:   52(ivec2) ConstantComposite 179 179
+             184:     36(int) Constant 0
+             185:     36(int) Constant 1
+             186:   57(ivec2) ConstantComposite 184 184
+             187:   57(ivec2) ConstantComposite 185 185
+             193:             TypeVector 36(int) 3
+             194:             TypePointer Function 193(ivec3)
+             197:             TypeVector 14(int) 3
+             219:             TypePointer Function 27(int)
+             225:             TypeVector 17(int) 3
+             226:             TypePointer Function 225(ivec3)
+             242:             TypePointer Function 71(int)
+             264:     17(int) Constant 1
+             270:     17(int) Constant 2
+             275:             TypeVector 27(int) 3
+             282:             TypePointer Function 173(bool)
+             284:     17(int) Constant 0
+             298:             TypePointer Function 17(int)
+             356:   52(ivec2) ConstantComposite 21 21
+             365:  193(ivec3) ConstantComposite 184 184 184
+             407:   173(bool) ConstantTrue
+             414:   173(bool) ConstantFalse
+             415:  174(bvec2) ConstantComposite 414 414
+             427:             TypeVector 173(bool) 3
+             428:  427(bvec3) ConstantComposite 414 414 414
+             434:             TypeVector 14(int) 4
+             435:             TypePointer Function 434(ivec4)
+             443:             TypePointer Function 77(int)
+             445:             TypeVector 36(int) 4
+             446:             TypePointer Function 445(ivec4)
+             458:             TypePointer Function 427(bvec3)
+      520(Block):             TypeStruct 14(int) 52(ivec2) 197(ivec3) 434(ivec4) 36(int) 57(ivec2) 193(ivec3) 445(ivec4)
+             521:             TypePointer Uniform 520(Block)
+      522(block):    521(ptr) Variable Uniform
+       523(si16):     14(int) SpecConstant 4294967286
+       524(su16):     36(int) SpecConstant 20
+         4(main):           2 Function None 3
+               5:             Label
+                              Return
+                              FunctionEnd
+     6(literal():           2 Function None 3
+               7:             Label
+         16(i16):     15(ptr) Variable Function
+   33(indexable):     32(ptr) Variable Function
+         38(u16):     37(ptr) Variable Function
+   46(indexable):     45(ptr) Variable Function
+              30:     29(ptr) AccessChain 26 28
+              31:     17(int) Load 30
+                              Store 33(indexable) 23
+              34:     15(ptr) AccessChain 33(indexable) 31
+              35:     14(int) Load 34
+                              Store 16(i16) 35
+              43:     29(ptr) AccessChain 26 28
+              44:     17(int) Load 43
+                              Store 46(indexable) 42
+              47:     37(ptr) AccessChain 46(indexable) 44
+              48:     36(int) Load 47
+                              Store 38(u16) 48
+                              Return
+                              FunctionEnd
+  8(typeCast16():           2 Function None 3
+               9:             Label
+        51(i32v):     50(ptr) Variable Function
+        54(i16v):     53(ptr) Variable Function
+        59(u16v):     58(ptr) Variable Function
+        67(u32v):     66(ptr) Variable Function
+        74(i64v):     73(ptr) Variable Function
+        80(u64v):     79(ptr) Variable Function
+        94(f16v):     93(ptr) Variable Function
+       100(f32v):     99(ptr) Variable Function
+       106(f64v):    105(ptr) Variable Function
+        154(i8v):    153(ptr) Variable Function
+        163(u8v):    162(ptr) Variable Function
+         176(bv):    175(ptr) Variable Function
+              55:   52(ivec2) Load 54(i16v)
+              56:   49(ivec2) SConvert 55
+                              Store 51(i32v) 56
+              60:   57(ivec2) Load 59(u16v)
+              61:   49(ivec2) UConvert 60
+              62:   49(ivec2) Bitcast 61
+                              Store 51(i32v) 62
+              63:   52(ivec2) Load 54(i16v)
+              64:   57(ivec2) Bitcast 63
+                              Store 59(u16v) 64
+              68:   52(ivec2) Load 54(i16v)
+              69:   49(ivec2) SConvert 68
+              70:   65(ivec2) Bitcast 69
+                              Store 67(u32v) 70
+              75:   52(ivec2) Load 54(i16v)
+              76:   72(ivec2) SConvert 75
+                              Store 74(i64v) 76
+              81:   52(ivec2) Load 54(i16v)
+              82:   72(ivec2) SConvert 81
+              83:   78(ivec2) Bitcast 82
+                              Store 80(u64v) 83
+              84:   57(ivec2) Load 59(u16v)
+              85:   65(ivec2) UConvert 84
+                              Store 67(u32v) 85
+              86:   57(ivec2) Load 59(u16v)
+              87:   72(ivec2) UConvert 86
+              88:   72(ivec2) Bitcast 87
+                              Store 74(i64v) 88
+              89:   57(ivec2) Load 59(u16v)
+              90:   78(ivec2) UConvert 89
+                              Store 80(u64v) 90
+              95:   52(ivec2) Load 54(i16v)
+              96:   92(fvec2) ConvertSToF 95
+                              Store 94(f16v) 96
+             101:   52(ivec2) Load 54(i16v)
+             102:   98(fvec2) ConvertSToF 101
+                              Store 100(f32v) 102
+             107:   52(ivec2) Load 54(i16v)
+             108:  104(fvec2) ConvertSToF 107
+                              Store 106(f64v) 108
+             109:   57(ivec2) Load 59(u16v)
+             110:   92(fvec2) ConvertUToF 109
+                              Store 94(f16v) 110
+             111:   57(ivec2) Load 59(u16v)
+             112:   98(fvec2) ConvertUToF 111
+                              Store 100(f32v) 112
+             113:   57(ivec2) Load 59(u16v)
+             114:  104(fvec2) ConvertUToF 113
+                              Store 106(f64v) 114
+             115:   52(ivec2) Load 54(i16v)
+             116:   49(ivec2) SConvert 115
+                              Store 51(i32v) 116
+             117:   57(ivec2) Load 59(u16v)
+             118:   49(ivec2) UConvert 117
+             119:   49(ivec2) Bitcast 118
+                              Store 51(i32v) 119
+             120:   52(ivec2) Load 54(i16v)
+             121:   57(ivec2) Bitcast 120
+                              Store 59(u16v) 121
+             122:   52(ivec2) Load 54(i16v)
+             123:   49(ivec2) SConvert 122
+             124:   65(ivec2) Bitcast 123
+                              Store 67(u32v) 124
+             125:   52(ivec2) Load 54(i16v)
+             126:   72(ivec2) SConvert 125
+                              Store 74(i64v) 126
+             127:   52(ivec2) Load 54(i16v)
+             128:   72(ivec2) SConvert 127
+             129:   78(ivec2) Bitcast 128
+                              Store 80(u64v) 129
+             130:   57(ivec2) Load 59(u16v)
+             131:   65(ivec2) UConvert 130
+                              Store 67(u32v) 131
+             132:   57(ivec2) Load 59(u16v)
+             133:   72(ivec2) UConvert 132
+             134:   72(ivec2) Bitcast 133
+                              Store 74(i64v) 134
+             135:   57(ivec2) Load 59(u16v)
+             136:   72(ivec2) UConvert 135
+             137:   72(ivec2) Bitcast 136
+             138:   78(ivec2) Bitcast 137
+                              Store 80(u64v) 138
+             139:   52(ivec2) Load 54(i16v)
+             140:   92(fvec2) ConvertSToF 139
+                              Store 94(f16v) 140
+             141:   52(ivec2) Load 54(i16v)
+             142:   98(fvec2) ConvertSToF 141
+                              Store 100(f32v) 142
+             143:   52(ivec2) Load 54(i16v)
+             144:  104(fvec2) ConvertSToF 143
+                              Store 106(f64v) 144
+             145:   57(ivec2) Load 59(u16v)
+             146:   92(fvec2) ConvertUToF 145
+                              Store 94(f16v) 146
+             147:   57(ivec2) Load 59(u16v)
+             148:   98(fvec2) ConvertUToF 147
+                              Store 100(f32v) 148
+             149:   57(ivec2) Load 59(u16v)
+             150:  104(fvec2) ConvertUToF 149
+                              Store 106(f64v) 150
+             155:   52(ivec2) Load 54(i16v)
+             156:  152(ivec2) SConvert 155
+                              Store 154(i8v) 156
+             157:   57(ivec2) Load 59(u16v)
+             158:  152(ivec2) UConvert 157
+             159:  152(ivec2) Bitcast 158
+                              Store 154(i8v) 159
+             164:   52(ivec2) Load 54(i16v)
+             165:  152(ivec2) SConvert 164
+             166:  161(ivec2) Bitcast 165
+                              Store 163(u8v) 166
+             167:   57(ivec2) Load 59(u16v)
+             168:  161(ivec2) UConvert 167
+                              Store 163(u8v) 168
+             169:   57(ivec2) Load 59(u16v)
+             170:  161(ivec2) UConvert 169
+             171:   52(ivec2) UConvert 170
+             172:   52(ivec2) Bitcast 171
+                              Store 54(i16v) 172
+             177:  174(bvec2) Load 176(bv)
+             182:   52(ivec2) Select 177 181 180
+                              Store 54(i16v) 182
+             183:  174(bvec2) Load 176(bv)
+             188:   57(ivec2) Select 183 187 186
+                              Store 59(u16v) 188
+             189:   52(ivec2) Load 54(i16v)
+             190:  174(bvec2) INotEqual 189 186
+                              Store 176(bv) 190
+             191:   57(ivec2) Load 59(u16v)
+             192:  174(bvec2) INotEqual 191 186
+                              Store 176(bv) 192
+                              Return
+                              FunctionEnd
+  10(operators():           2 Function None 3
+              11:             Label
+       195(u16v):    194(ptr) Variable Function
+        200(i16):     15(ptr) Variable Function
+          220(i):    219(ptr) Variable Function
+         227(uv):    226(ptr) Variable Function
+        243(i64):    242(ptr) Variable Function
+          283(b):    282(ptr) Variable Function
+             196:  193(ivec3) Load 195(u16v)
+             198:  197(ivec3) CompositeConstruct 179 179 179
+             199:  193(ivec3) IAdd 196 198
+                              Store 195(u16v) 199
+             201:     14(int) Load 200(i16)
+             202:     14(int) ISub 201 179
+                              Store 200(i16) 202
+             203:     14(int) Load 200(i16)
+             204:     14(int) IAdd 203 179
+                              Store 200(i16) 204
+             205:  193(ivec3) Load 195(u16v)
+             206:  197(ivec3) CompositeConstruct 179 179 179
+             207:  193(ivec3) ISub 205 206
+                              Store 195(u16v) 207
+             208:  193(ivec3) Load 195(u16v)
+             209:  193(ivec3) Not 208
+                              Store 195(u16v) 209
+             210:     14(int) Load 200(i16)
+                              Store 200(i16) 210
+             211:  193(ivec3) Load 195(u16v)
+             212:  193(ivec3) SNegate 211
+                              Store 195(u16v) 212
+             213:     14(int) Load 200(i16)
+             214:     14(int) Load 200(i16)
+             215:     14(int) IAdd 214 213
+                              Store 200(i16) 215
+             216:  193(ivec3) Load 195(u16v)
+             217:  193(ivec3) Load 195(u16v)
+             218:  193(ivec3) ISub 217 216
+                              Store 195(u16v) 218
+             221:     14(int) Load 200(i16)
+             222:     27(int) SConvert 221
+             223:     27(int) Load 220(i)
+             224:     27(int) IMul 223 222
+                              Store 220(i) 224
+             228:  193(ivec3) Load 195(u16v)
+             229:  225(ivec3) UConvert 228
+             230:  225(ivec3) Load 227(uv)
+             231:  225(ivec3) UDiv 230 229
+                              Store 227(uv) 231
+             232:     14(int) Load 200(i16)
+             233:     27(int) SConvert 232
+             234:     17(int) Bitcast 233
+             235:  225(ivec3) Load 227(uv)
+             236:  225(ivec3) CompositeConstruct 234 234 234
+             237:  225(ivec3) UMod 235 236
+                              Store 227(uv) 237
+             238:  193(ivec3) Load 195(u16v)
+             239:  225(ivec3) UConvert 238
+             240:  225(ivec3) Load 227(uv)
+             241:  225(ivec3) IAdd 239 240
+                              Store 227(uv) 241
+             244:     14(int) Load 200(i16)
+             245:     71(int) SConvert 244
+             246:     71(int) Load 243(i64)
+             247:     71(int) ISub 245 246
+                              Store 243(i64) 247
+             248:  193(ivec3) Load 195(u16v)
+             249:  225(ivec3) UConvert 248
+             250:  225(ivec3) Load 227(uv)
+             251:  225(ivec3) IMul 249 250
+                              Store 227(uv) 251
+             252:     14(int) Load 200(i16)
+             253:     71(int) SConvert 252
+             254:     71(int) Load 243(i64)
+             255:     71(int) IMul 253 254
+                              Store 243(i64) 255
+             256:     14(int) Load 200(i16)
+             257:     27(int) SConvert 256
+             258:     27(int) Load 220(i)
+             259:     27(int) SMod 257 258
+                              Store 220(i) 259
+             260:     14(int) Load 200(i16)
+             261:  193(ivec3) Load 195(u16v)
+             262:  197(ivec3) CompositeConstruct 260 260 260
+             263:  193(ivec3) ShiftLeftLogical 261 262
+                              Store 195(u16v) 263
+             265:     37(ptr) AccessChain 195(u16v) 264
+             266:     36(int) Load 265
+             267:     14(int) Load 200(i16)
+             268:     14(int) ShiftRightArithmetic 267 266
+                              Store 200(i16) 268
+             269:     14(int) Load 200(i16)
+             271:     37(ptr) AccessChain 195(u16v) 270
+             272:     36(int) Load 271
+             273:     14(int) ShiftLeftLogical 269 272
+                              Store 200(i16) 273
+             274:  193(ivec3) Load 195(u16v)
+             276:  275(ivec3) UConvert 274
+             277:  275(ivec3) Bitcast 276
+             278:     27(int) Load 220(i)
+             279:  275(ivec3) CompositeConstruct 278 278 278
+             280:  275(ivec3) ShiftLeftLogical 277 279
+             281:  225(ivec3) Bitcast 280
+                              Store 227(uv) 281
+             285:     37(ptr) AccessChain 195(u16v) 284
+             286:     36(int) Load 285
+             287:     14(int) Load 200(i16)
+             288:     36(int) Bitcast 287
+             289:   173(bool) INotEqual 286 288
+                              Store 283(b) 289
+             290:     14(int) Load 200(i16)
+             291:     36(int) Bitcast 290
+             292:     37(ptr) AccessChain 195(u16v) 284
+             293:     36(int) Load 292
+             294:   173(bool) IEqual 291 293
+                              Store 283(b) 294
+             295:     37(ptr) AccessChain 195(u16v) 284
+             296:     36(int) Load 295
+             297:     17(int) UConvert 296
+             299:    298(ptr) AccessChain 227(uv) 264
+             300:     17(int) Load 299
+             301:   173(bool) UGreaterThan 297 300
+                              Store 283(b) 301
+             302:     14(int) Load 200(i16)
+             303:     27(int) SConvert 302
+             304:     27(int) Load 220(i)
+             305:   173(bool) SLessThan 303 304
+                              Store 283(b) 305
+             306:     37(ptr) AccessChain 195(u16v) 264
+             307:     36(int) Load 306
+             308:     17(int) UConvert 307
+             309:    298(ptr) AccessChain 227(uv) 284
+             310:     17(int) Load 309
+             311:   173(bool) UGreaterThanEqual 308 310
+                              Store 283(b) 311
+             312:     14(int) Load 200(i16)
+             313:     27(int) SConvert 312
+             314:     27(int) Load 220(i)
+             315:   173(bool) SLessThanEqual 313 314
+                              Store 283(b) 315
+             316:     14(int) Load 200(i16)
+             317:     27(int) SConvert 316
+             318:     17(int) Bitcast 317
+             319:  225(ivec3) Load 227(uv)
+             320:  225(ivec3) CompositeConstruct 318 318 318
+             321:  225(ivec3) BitwiseOr 319 320
+                              Store 227(uv) 321
+             322:     14(int) Load 200(i16)
+             323:     27(int) SConvert 322
+             324:     27(int) Load 220(i)
+             325:     27(int) BitwiseOr 323 324
+                              Store 220(i) 325
+             326:     14(int) Load 200(i16)
+             327:     71(int) SConvert 326
+             328:     71(int) Load 243(i64)
+             329:     71(int) BitwiseAnd 328 327
+                              Store 243(i64) 329
+             330:  193(ivec3) Load 195(u16v)
+             331:  225(ivec3) UConvert 330
+             332:  225(ivec3) Load 227(uv)
+             333:  225(ivec3) BitwiseAnd 331 332
+                              Store 227(uv) 333
+             334:     14(int) Load 200(i16)
+             335:     27(int) SConvert 334
+             336:     17(int) Bitcast 335
+             337:  225(ivec3) Load 227(uv)
+             338:  225(ivec3) CompositeConstruct 336 336 336
+             339:  225(ivec3) BitwiseXor 337 338
+                              Store 227(uv) 339
+             340:  193(ivec3) Load 195(u16v)
+             341:     14(int) Load 200(i16)
+             342:     36(int) Bitcast 341
+             343:  193(ivec3) CompositeConstruct 342 342 342
+             344:  193(ivec3) BitwiseXor 340 343
+                              Store 195(u16v) 344
+                              Return
+                              FunctionEnd
+12(builtinFuncs():           2 Function None 3
+              13:             Label
+       345(i16v):     53(ptr) Variable Function
+        348(i16):     15(ptr) Variable Function
+       358(u16v):    194(ptr) Variable Function
+        360(u16):     37(ptr) Variable Function
+        430(i32):    219(ptr) Variable Function
+        433(i64):    242(ptr) Variable Function
+      436(i16v4):    435(ptr) Variable Function
+        439(u32):    298(ptr) Variable Function
+      440(u16v2):     58(ptr) Variable Function
+        444(u64):    443(ptr) Variable Function
+      447(u16v4):    446(ptr) Variable Function
+         459(bv):    458(ptr) Variable Function
+             346:   52(ivec2) Load 345(i16v)
+             347:   52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 346
+                              Store 345(i16v) 347
+             349:     14(int) Load 348(i16)
+             350:     14(int) ExtInst 1(GLSL.std.450) 7(SSign) 349
+                              Store 348(i16) 350
+             351:   52(ivec2) Load 345(i16v)
+             352:     14(int) Load 348(i16)
+             353:   52(ivec2) CompositeConstruct 352 352
+             354:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 351 353
+                              Store 345(i16v) 354
+             355:   52(ivec2) Load 345(i16v)
+             357:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 355 356
+                              Store 345(i16v) 357
+             359:  193(ivec3) Load 358(u16v)
+             361:     36(int) Load 360(u16)
+             362:  193(ivec3) CompositeConstruct 361 361 361
+             363:  193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 359 362
+                              Store 358(u16v) 363
+             364:  193(ivec3) Load 358(u16v)
+             366:  193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 364 365
+                              Store 358(u16v) 366
+             367:   52(ivec2) Load 345(i16v)
+             368:     14(int) Load 348(i16)
+             369:   52(ivec2) CompositeConstruct 368 368
+             370:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 367 369
+                              Store 345(i16v) 370
+             371:   52(ivec2) Load 345(i16v)
+             372:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 371 356
+                              Store 345(i16v) 372
+             373:  193(ivec3) Load 358(u16v)
+             374:     36(int) Load 360(u16)
+             375:  193(ivec3) CompositeConstruct 374 374 374
+             376:  193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 373 375
+                              Store 358(u16v) 376
+             377:  193(ivec3) Load 358(u16v)
+             378:  193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 377 365
+                              Store 358(u16v) 378
+             379:   52(ivec2) Load 345(i16v)
+             380:     14(int) Load 348(i16)
+             381:     14(int) SNegate 380
+             382:     14(int) Load 348(i16)
+             383:   52(ivec2) CompositeConstruct 381 381
+             384:   52(ivec2) CompositeConstruct 382 382
+             385:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 379 383 384
+                              Store 345(i16v) 385
+             386:   52(ivec2) Load 345(i16v)
+             387:   52(ivec2) Load 345(i16v)
+             388:   52(ivec2) SNegate 387
+             389:   52(ivec2) Load 345(i16v)
+             390:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 386 388 389
+                              Store 345(i16v) 390
+             391:  193(ivec3) Load 358(u16v)
+             392:     36(int) Load 360(u16)
+             393:     36(int) SNegate 392
+             394:     36(int) Load 360(u16)
+             395:  193(ivec3) CompositeConstruct 393 393 393
+             396:  193(ivec3) CompositeConstruct 394 394 394
+             397:  193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 391 395 396
+                              Store 358(u16v) 397
+             398:  193(ivec3) Load 358(u16v)
+             399:  193(ivec3) Load 358(u16v)
+             400:  193(ivec3) SNegate 399
+             401:  193(ivec3) Load 358(u16v)
+             402:  193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 398 400 401
+                              Store 358(u16v) 402
+             403:     15(ptr) AccessChain 345(i16v) 284
+             404:     14(int) Load 403
+             405:     15(ptr) AccessChain 345(i16v) 264
+             406:     14(int) Load 405
+             408:     14(int) Select 407 406 404
+                              Store 348(i16) 408
+             409:     14(int) Load 348(i16)
+             410:   52(ivec2) CompositeConstruct 409 409
+             411:     14(int) Load 348(i16)
+             412:     14(int) SNegate 411
+             413:   52(ivec2) CompositeConstruct 412 412
+             416:   52(ivec2) Select 415 413 410
+                              Store 345(i16v) 416
+             417:     37(ptr) AccessChain 358(u16v) 284
+             418:     36(int) Load 417
+             419:     37(ptr) AccessChain 358(u16v) 264
+             420:     36(int) Load 419
+             421:     36(int) Select 407 420 418
+                              Store 360(u16) 421
+             422:     36(int) Load 360(u16)
+             423:  193(ivec3) CompositeConstruct 422 422 422
+             424:     36(int) Load 360(u16)
+             425:     36(int) SNegate 424
+             426:  193(ivec3) CompositeConstruct 425 425 425
+             429:  193(ivec3) Select 428 426 423
+                              Store 358(u16v) 429
+             431:   52(ivec2) Load 345(i16v)
+             432:     27(int) Bitcast 431
+                              Store 430(i32) 432
+             437:  434(ivec4) Load 436(i16v4)
+             438:     71(int) Bitcast 437
+                              Store 433(i64) 438
+             441:   57(ivec2) Load 440(u16v2)
+             442:     17(int) Bitcast 441
+                              Store 439(u32) 442
+             448:  445(ivec4) Load 447(u16v4)
+             449:     77(int) Bitcast 448
+                              Store 444(u64) 449
+             450:     27(int) Load 430(i32)
+             451:   52(ivec2) Bitcast 450
+                              Store 345(i16v) 451
+             452:     71(int) Load 433(i64)
+             453:  434(ivec4) Bitcast 452
+                              Store 436(i16v4) 453
+             454:     17(int) Load 439(u32)
+             455:   57(ivec2) Bitcast 454
+                              Store 440(u16v2) 455
+             456:     77(int) Load 444(u64)
+             457:  445(ivec4) Bitcast 456
+                              Store 447(u16v4) 457
+             460:  193(ivec3) Load 358(u16v)
+             461:     36(int) Load 360(u16)
+             462:  193(ivec3) CompositeConstruct 461 461 461
+             463:  427(bvec3) ULessThan 460 462
+                              Store 459(bv) 463
+             464:   52(ivec2) Load 345(i16v)
+             465:     14(int) Load 348(i16)
+             466:   52(ivec2) CompositeConstruct 465 465
+             467:  174(bvec2) SLessThan 464 466
+             468:  427(bvec3) Load 459(bv)
+             469:  427(bvec3) VectorShuffle 468 467 3 4 2
+                              Store 459(bv) 469
+             470:  193(ivec3) Load 358(u16v)
+             471:     36(int) Load 360(u16)
+             472:  193(ivec3) CompositeConstruct 471 471 471
+             473:  427(bvec3) ULessThanEqual 470 472
+                              Store 459(bv) 473
+             474:   52(ivec2) Load 345(i16v)
+             475:     14(int) Load 348(i16)
+             476:   52(ivec2) CompositeConstruct 475 475
+             477:  174(bvec2) SLessThanEqual 474 476
+             478:  427(bvec3) Load 459(bv)
+             479:  427(bvec3) VectorShuffle 478 477 3 4 2
+                              Store 459(bv) 479
+             480:  193(ivec3) Load 358(u16v)
+             481:     36(int) Load 360(u16)
+             482:  193(ivec3) CompositeConstruct 481 481 481
+             483:  427(bvec3) UGreaterThan 480 482
+                              Store 459(bv) 483
+             484:   52(ivec2) Load 345(i16v)
+             485:     14(int) Load 348(i16)
+             486:   52(ivec2) CompositeConstruct 485 485
+             487:  174(bvec2) SGreaterThan 484 486
+             488:  427(bvec3) Load 459(bv)
+             489:  427(bvec3) VectorShuffle 488 487 3 4 2
+                              Store 459(bv) 489
+             490:  193(ivec3) Load 358(u16v)
+             491:     36(int) Load 360(u16)
+             492:  193(ivec3) CompositeConstruct 491 491 491
+             493:  427(bvec3) UGreaterThanEqual 490 492
+                              Store 459(bv) 493
+             494:   52(ivec2) Load 345(i16v)
+             495:     14(int) Load 348(i16)
+             496:   52(ivec2) CompositeConstruct 495 495
+             497:  174(bvec2) SGreaterThanEqual 494 496
+             498:  427(bvec3) Load 459(bv)
+             499:  427(bvec3) VectorShuffle 498 497 3 4 2
+                              Store 459(bv) 499
+             500:  193(ivec3) Load 358(u16v)
+             501:     36(int) Load 360(u16)
+             502:  193(ivec3) CompositeConstruct 501 501 501
+             503:  427(bvec3) IEqual 500 502
+                              Store 459(bv) 503
+             504:   52(ivec2) Load 345(i16v)
+             505:     14(int) Load 348(i16)
+             506:   52(ivec2) CompositeConstruct 505 505
+             507:  174(bvec2) IEqual 504 506
+             508:  427(bvec3) Load 459(bv)
+             509:  427(bvec3) VectorShuffle 508 507 3 4 2
+                              Store 459(bv) 509
+             510:  193(ivec3) Load 358(u16v)
+             511:     36(int) Load 360(u16)
+             512:  193(ivec3) CompositeConstruct 511 511 511
+             513:  427(bvec3) INotEqual 510 512
+                              Store 459(bv) 513
+             514:   52(ivec2) Load 345(i16v)
+             515:     14(int) Load 348(i16)
+             516:   52(ivec2) CompositeConstruct 515 515
+             517:  174(bvec2) INotEqual 514 516
+             518:  427(bvec3) Load 459(bv)
+             519:  427(bvec3) VectorShuffle 518 517 3 4 2
+                              Store 459(bv) 519
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.vulkan110.storageBuffer.vert.out b/Test/baseResults/spv.vulkan110.storageBuffer.vert.out
new file mode 100755
index 0000000..2a8938c
--- /dev/null
+++ b/Test/baseResults/spv.vulkan110.storageBuffer.vert.out
@@ -0,0 +1,66 @@
+spv.vulkan110.storageBuffer.vert
+// Module Version 10300
+// Generated by (magic number): 80005
+// Id's are bound by 31
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 13
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 11  "gl_PerVertex"
+                              MemberName 11(gl_PerVertex) 0  "gl_Position"
+                              MemberName 11(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 11(gl_PerVertex) 2  "gl_ClipDistance"
+                              MemberName 11(gl_PerVertex) 3  "gl_CullDistance"
+                              Name 13  ""
+                              Name 16  "ub"
+                              MemberName 16(ub) 0  "a"
+                              Name 18  "ubi"
+                              Name 22  "bb"
+                              MemberName 22(bb) 0  "b"
+                              Name 24  "bbi"
+                              MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance
+                              MemberDecorate 11(gl_PerVertex) 3 BuiltIn CullDistance
+                              Decorate 11(gl_PerVertex) Block
+                              MemberDecorate 16(ub) 0 Offset 0
+                              Decorate 16(ub) Block
+                              Decorate 18(ubi) DescriptorSet 0
+                              MemberDecorate 22(bb) 0 Offset 0
+                              Decorate 22(bb) Block
+                              Decorate 24(bbi) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeInt 32 0
+               9:      8(int) Constant 1
+              10:             TypeArray 6(float) 9
+11(gl_PerVertex):             TypeStruct 7(fvec4) 6(float) 10 10
+              12:             TypePointer Output 11(gl_PerVertex)
+              13:     12(ptr) Variable Output
+              14:             TypeInt 32 1
+              15:     14(int) Constant 0
+          16(ub):             TypeStruct 7(fvec4)
+              17:             TypePointer Uniform 16(ub)
+         18(ubi):     17(ptr) Variable Uniform
+              19:             TypePointer Uniform 7(fvec4)
+          22(bb):             TypeStruct 7(fvec4)
+              23:             TypePointer StorageBuffer 22(bb)
+         24(bbi):     23(ptr) Variable StorageBuffer
+              25:             TypePointer StorageBuffer 7(fvec4)
+              29:             TypePointer Output 7(fvec4)
+         4(main):           2 Function None 3
+               5:             Label
+              20:     19(ptr) AccessChain 18(ubi) 15
+              21:    7(fvec4) Load 20
+              26:     25(ptr) AccessChain 24(bbi) 15
+              27:    7(fvec4) Load 26
+              28:    7(fvec4) FAdd 21 27
+              30:     29(ptr) AccessChain 13 15
+                              Store 30 28
+                              Return
+                              FunctionEnd
diff --git a/Test/findFunction.frag b/Test/findFunction.frag
new file mode 100644
index 0000000..7e18065
--- /dev/null
+++ b/Test/findFunction.frag
@@ -0,0 +1,46 @@
+#version 450
+
+#extension GL_KHX_shader_explicit_arithmetic_types: enable
+
+int64_t func(int8_t a, int16_t b, int16_t c)
+{
+    return int64_t(a | b + c);
+}
+
+int64_t func(int8_t a, int16_t b, int32_t c)
+{
+    return int64_t(a | b - c);
+}
+
+int64_t func(int32_t a, int32_t b, int32_t c)
+{
+    return int64_t(a / b + c);
+}
+
+int64_t func(float16_t a, float16_t b, float32_t c)
+{
+    return int64_t(a - b * c);
+}
+
+int64_t func(float16_t a, int16_t b, float32_t c)
+{
+    return int64_t(a - b * c);
+}
+
+void main()
+{
+    int8_t  x;
+    int16_t y;
+    int32_t z;
+    int64_t w;
+    float16_t f16;
+    float64_t f64;
+    int64_t b1 = func(x, y, z);
+    int64_t b2 = func(y, y, z); // tie
+    int64_t b3 = func(y, y, w); // No match
+    int64_t b4 = func(y, z, f16); // No match
+    int64_t b5 = func(y, y, f16);
+    int64_t b7 = func(f16, f16, y);
+    int64_t b8 = func(f16, f16, f64); // No match
+    int64_t b9 = func(f16, x, f16); // tie
+}
diff --git a/Test/hlsl.boolConv.vert b/Test/hlsl.boolConv.vert
index 7efe20b..6182b29 100755
--- a/Test/hlsl.boolConv.vert
+++ b/Test/hlsl.boolConv.vert
@@ -1,20 +1,20 @@
-static bool a, b = true;

-float4 main() : SV_Position

-{

-    int r = 0;

-

-    r += a + b;

-    r += a - b;

-    r += a * b;

-    r += a / b;

-    r += a % b;

-

-    r += a & b;

-    r += a | b;

-    r += a ^ b;

-

-    r += a << b;

-    r += a >> b;

-

-    return r;

-}
\ No newline at end of file
+static bool a, b = true;
+float4 main() : SV_Position
+{
+    int r = 0;
+
+    r += a + b;
+    r += a - b;
+    r += a * b;
+    r += a / b;
+    r += a % b;
+
+    r += a & b;
+    r += a | b;
+    r += a ^ b;
+
+    r += a << b;
+    r += a >> b;
+
+    return r;
+}
diff --git a/Test/hlsl.wavebroadcast.comp b/Test/hlsl.wavebroadcast.comp
new file mode 100644
index 0000000..f6bae36
--- /dev/null
+++ b/Test/hlsl.wavebroadcast.comp
@@ -0,0 +1,53 @@
+struct Types

+{

+	uint4 u;

+	int4 i;

+	float4 f;

+	double4 d;

+};

+

+RWStructuredBuffer<Types> data;

+

+[numthreads(32, 16, 1)]

+void CSMain(uint3 dti : SV_DispatchThreadID)

+{

+	data[dti.x].u = WaveReadLaneAt(data[dti.x].u, 13);

+	data[dti.x].u.x = WaveReadLaneAt(data[dti.x].u.x, 13);

+	data[dti.x].u.xy = WaveReadLaneAt(data[dti.x].u.xy, 13);

+	data[dti.x].u.xyz = WaveReadLaneAt(data[dti.x].u.xyz, 13);

+

+	data[dti.x].i = WaveReadLaneAt(data[dti.x].i, 13);

+	data[dti.x].i.x = WaveReadLaneAt(data[dti.x].i.x, 13);

+	data[dti.x].i.xy = WaveReadLaneAt(data[dti.x].i.xy, 13);

+	data[dti.x].i.xyz = WaveReadLaneAt(data[dti.x].i.xyz, 13);

+

+	data[dti.x].f = WaveReadLaneAt(data[dti.x].f, 13);

+	data[dti.x].f.x = WaveReadLaneAt(data[dti.x].f.x, 13);

+	data[dti.x].f.xy = WaveReadLaneAt(data[dti.x].f.xy, 13);

+	data[dti.x].f.xyz = WaveReadLaneAt(data[dti.x].f.xyz, 13);

+

+	data[dti.x].d = WaveReadFirstLane(data[dti.x].d);

+	data[dti.x].d.x = WaveReadFirstLane(data[dti.x].d.x);

+	data[dti.x].d.xy = WaveReadFirstLane(data[dti.x].d.xy);

+	data[dti.x].d.xyz = WaveReadFirstLane(data[dti.x].d.xyz);

+

+	data[dti.x].u = WaveReadFirstLane(data[dti.x].u);

+	data[dti.x].u.x = WaveReadFirstLane(data[dti.x].u.x);

+	data[dti.x].u.xy = WaveReadFirstLane(data[dti.x].u.xy);

+	data[dti.x].u.xyz = WaveReadFirstLane(data[dti.x].u.xyz);

+

+	data[dti.x].i = WaveReadFirstLane(data[dti.x].i);

+	data[dti.x].i.x = WaveReadFirstLane(data[dti.x].i.x);

+	data[dti.x].i.xy = WaveReadFirstLane(data[dti.x].i.xy);

+	data[dti.x].i.xyz = WaveReadFirstLane(data[dti.x].i.xyz);

+

+	data[dti.x].f = WaveReadFirstLane(data[dti.x].f);

+	data[dti.x].f.x = WaveReadFirstLane(data[dti.x].f.x);

+	data[dti.x].f.xy = WaveReadFirstLane(data[dti.x].f.xy);

+	data[dti.x].f.xyz = WaveReadFirstLane(data[dti.x].f.xyz);

+

+	data[dti.x].d = WaveReadFirstLane(data[dti.x].d);

+	data[dti.x].d.x = WaveReadFirstLane(data[dti.x].d.x);

+	data[dti.x].d.xy = WaveReadFirstLane(data[dti.x].d.xy);

+	data[dti.x].d.xyz = WaveReadFirstLane(data[dti.x].d.xyz);

+}

diff --git a/Test/hlsl.waveprefix.comp b/Test/hlsl.waveprefix.comp
new file mode 100644
index 0000000..e4b4367
--- /dev/null
+++ b/Test/hlsl.waveprefix.comp
@@ -0,0 +1,55 @@
+struct Types

+{

+	uint4 u;

+	int4 i;

+	float4 f;

+	double4 d;

+};

+

+RWStructuredBuffer<Types> data;

+

+[numthreads(32, 16, 1)]

+void CSMain(uint3 dti : SV_DispatchThreadID)

+{

+	data[dti.x].u = WavePrefixSum(data[dti.x].u);

+	data[dti.x].u.x = WavePrefixSum(data[dti.x].u.x);

+	data[dti.x].u.xy = WavePrefixSum(data[dti.x].u.xy);

+	data[dti.x].u.xyz = WavePrefixSum(data[dti.x].u.xyz);

+

+	data[dti.x].i = WavePrefixSum(data[dti.x].i);

+	data[dti.x].i.x = WavePrefixSum(data[dti.x].i.x);

+	data[dti.x].i.xy = WavePrefixSum(data[dti.x].i.xy);

+	data[dti.x].i.xyz = WavePrefixSum(data[dti.x].i.xyz);

+

+	data[dti.x].f = WavePrefixSum(data[dti.x].f);

+	data[dti.x].f.x = WavePrefixSum(data[dti.x].f.x);

+	data[dti.x].f.xy = WavePrefixSum(data[dti.x].f.xy);

+	data[dti.x].f.xyz = WavePrefixSum(data[dti.x].f.xyz);

+

+	data[dti.x].d = WavePrefixSum(data[dti.x].d);

+	data[dti.x].d.x = WavePrefixSum(data[dti.x].d.x);

+	data[dti.x].d.xy = WavePrefixSum(data[dti.x].d.xy);

+	data[dti.x].d.xyz = WavePrefixSum(data[dti.x].d.xyz);

+

+	data[dti.x].u = WavePrefixProduct(data[dti.x].u);

+	data[dti.x].u.x = WavePrefixProduct(data[dti.x].u.x);

+	data[dti.x].u.xy = WavePrefixProduct(data[dti.x].u.xy);

+	data[dti.x].u.xyz = WavePrefixProduct(data[dti.x].u.xyz);

+

+	data[dti.x].i = WavePrefixProduct(data[dti.x].i);

+	data[dti.x].i.x = WavePrefixProduct(data[dti.x].i.x);

+	data[dti.x].i.xy = WavePrefixProduct(data[dti.x].i.xy);

+	data[dti.x].i.xyz = WavePrefixProduct(data[dti.x].i.xyz);

+

+	data[dti.x].f = WavePrefixProduct(data[dti.x].f);

+	data[dti.x].f.x = WavePrefixProduct(data[dti.x].f.x);

+	data[dti.x].f.xy = WavePrefixProduct(data[dti.x].f.xy);

+	data[dti.x].f.xyz = WavePrefixProduct(data[dti.x].f.xyz);

+

+	data[dti.x].d = WavePrefixProduct(data[dti.x].d);

+	data[dti.x].d.x = WavePrefixProduct(data[dti.x].d.x);

+	data[dti.x].d.xy = WavePrefixProduct(data[dti.x].d.xy);

+	data[dti.x].d.xyz = WavePrefixProduct(data[dti.x].d.xyz);

+

+	data[dti.x].u.x = WavePrefixCountBits(data[dti.x].u.x == 0);

+}

diff --git a/Test/hlsl.wavequad.comp b/Test/hlsl.wavequad.comp
new file mode 100644
index 0000000..34e8b78
--- /dev/null
+++ b/Test/hlsl.wavequad.comp
@@ -0,0 +1,153 @@
+struct Types

+{

+	uint4 u;

+	int4 i;

+	float4 f;

+	double4 d;

+};

+

+RWStructuredBuffer<Types> data;

+

+[numthreads(32, 16, 1)]

+void CSMain(uint3 dti : SV_DispatchThreadID)

+{

+	data[dti.x].u = QuadReadLaneAt(data[dti.x].u, 0);

+	data[dti.x].u.x = QuadReadLaneAt(data[dti.x].u.x, 0);

+	data[dti.x].u.xy = QuadReadLaneAt(data[dti.x].u.xy, 0);

+	data[dti.x].u.xyz = QuadReadLaneAt(data[dti.x].u.xyz, 0);

+

+	data[dti.x].i = QuadReadLaneAt(data[dti.x].i, 0);

+	data[dti.x].i.x = QuadReadLaneAt(data[dti.x].i.x, 0);

+	data[dti.x].i.xy = QuadReadLaneAt(data[dti.x].i.xy, 0);

+	data[dti.x].i.xyz = QuadReadLaneAt(data[dti.x].i.xyz, 0);

+

+	data[dti.x].f = QuadReadLaneAt(data[dti.x].f, 0);

+	data[dti.x].f.x = QuadReadLaneAt(data[dti.x].f.x, 0);

+	data[dti.x].f.xy = QuadReadLaneAt(data[dti.x].f.xy, 0);

+	data[dti.x].f.xyz = QuadReadLaneAt(data[dti.x].f.xyz, 0);

+

+	data[dti.x].d = QuadReadLaneAt(data[dti.x].d, 0);

+	data[dti.x].d.x = QuadReadLaneAt(data[dti.x].d.x, 0);

+	data[dti.x].d.xy = QuadReadLaneAt(data[dti.x].d.xy, 0);

+	data[dti.x].d.xyz = QuadReadLaneAt(data[dti.x].d.xyz, 0);

+

+	data[dti.x].u = QuadReadLaneAt(data[dti.x].u, 1);

+	data[dti.x].u.x = QuadReadLaneAt(data[dti.x].u.x, 1);

+	data[dti.x].u.xy = QuadReadLaneAt(data[dti.x].u.xy, 1);

+	data[dti.x].u.xyz = QuadReadLaneAt(data[dti.x].u.xyz, 1);

+

+	data[dti.x].i = QuadReadLaneAt(data[dti.x].i, 1);

+	data[dti.x].i.x = QuadReadLaneAt(data[dti.x].i.x, 1);

+	data[dti.x].i.xy = QuadReadLaneAt(data[dti.x].i.xy, 1);

+	data[dti.x].i.xyz = QuadReadLaneAt(data[dti.x].i.xyz, 1);

+

+	data[dti.x].f = QuadReadLaneAt(data[dti.x].f, 1);

+	data[dti.x].f.x = QuadReadLaneAt(data[dti.x].f.x, 1);

+	data[dti.x].f.xy = QuadReadLaneAt(data[dti.x].f.xy, 1);

+	data[dti.x].f.xyz = QuadReadLaneAt(data[dti.x].f.xyz, 1);

+

+	data[dti.x].d = QuadReadLaneAt(data[dti.x].d, 1);

+	data[dti.x].d.x = QuadReadLaneAt(data[dti.x].d.x, 1);

+	data[dti.x].d.xy = QuadReadLaneAt(data[dti.x].d.xy, 1);

+	data[dti.x].d.xyz = QuadReadLaneAt(data[dti.x].d.xyz, 1);

+

+	data[dti.x].u = QuadReadLaneAt(data[dti.x].u, 2);

+	data[dti.x].u.x = QuadReadLaneAt(data[dti.x].u.x, 2);

+	data[dti.x].u.xy = QuadReadLaneAt(data[dti.x].u.xy, 2);

+	data[dti.x].u.xyz = QuadReadLaneAt(data[dti.x].u.xyz, 2);

+

+	data[dti.x].i = QuadReadLaneAt(data[dti.x].i, 2);

+	data[dti.x].i.x = QuadReadLaneAt(data[dti.x].i.x, 2);

+	data[dti.x].i.xy = QuadReadLaneAt(data[dti.x].i.xy, 2);

+	data[dti.x].i.xyz = QuadReadLaneAt(data[dti.x].i.xyz, 2);

+

+	data[dti.x].f = QuadReadLaneAt(data[dti.x].f, 2);

+	data[dti.x].f.x = QuadReadLaneAt(data[dti.x].f.x, 2);

+	data[dti.x].f.xy = QuadReadLaneAt(data[dti.x].f.xy, 2);

+	data[dti.x].f.xyz = QuadReadLaneAt(data[dti.x].f.xyz, 2);

+

+	data[dti.x].d = QuadReadLaneAt(data[dti.x].d, 2);

+	data[dti.x].d.x = QuadReadLaneAt(data[dti.x].d.x, 2);

+	data[dti.x].d.xy = QuadReadLaneAt(data[dti.x].d.xy, 2);

+	data[dti.x].d.xyz = QuadReadLaneAt(data[dti.x].d.xyz, 2);

+

+	data[dti.x].u = QuadReadLaneAt(data[dti.x].u, 3);

+	data[dti.x].u.x = QuadReadLaneAt(data[dti.x].u.x, 3);

+	data[dti.x].u.xy = QuadReadLaneAt(data[dti.x].u.xy, 3);

+	data[dti.x].u.xyz = QuadReadLaneAt(data[dti.x].u.xyz, 3);

+

+	data[dti.x].i = QuadReadLaneAt(data[dti.x].i, 3);

+	data[dti.x].i.x = QuadReadLaneAt(data[dti.x].i.x, 3);

+	data[dti.x].i.xy = QuadReadLaneAt(data[dti.x].i.xy, 3);

+	data[dti.x].i.xyz = QuadReadLaneAt(data[dti.x].i.xyz, 3);

+

+	data[dti.x].f = QuadReadLaneAt(data[dti.x].f, 3);

+	data[dti.x].f.x = QuadReadLaneAt(data[dti.x].f.x, 3);

+	data[dti.x].f.xy = QuadReadLaneAt(data[dti.x].f.xy, 3);

+	data[dti.x].f.xyz = QuadReadLaneAt(data[dti.x].f.xyz, 3);

+

+	data[dti.x].d = QuadReadLaneAt(data[dti.x].d, 3);

+	data[dti.x].d.x = QuadReadLaneAt(data[dti.x].d.x, 3);

+	data[dti.x].d.xy = QuadReadLaneAt(data[dti.x].d.xy, 3);

+	data[dti.x].d.xyz = QuadReadLaneAt(data[dti.x].d.xyz, 3);

+

+	data[dti.x].u = QuadReadAcrossX(data[dti.x].u);

+	data[dti.x].u.x = QuadReadAcrossX(data[dti.x].u.x);

+	data[dti.x].u.xy = QuadReadAcrossX(data[dti.x].u.xy);

+	data[dti.x].u.xyz = QuadReadAcrossX(data[dti.x].u.xyz);

+

+	data[dti.x].i = QuadReadAcrossX(data[dti.x].i);

+	data[dti.x].i.x = QuadReadAcrossX(data[dti.x].i.x);

+	data[dti.x].i.xy = QuadReadAcrossX(data[dti.x].i.xy);

+	data[dti.x].i.xyz = QuadReadAcrossX(data[dti.x].i.xyz);

+

+	data[dti.x].f = QuadReadAcrossX(data[dti.x].f);

+	data[dti.x].f.x = QuadReadAcrossX(data[dti.x].f.x);

+	data[dti.x].f.xy = QuadReadAcrossX(data[dti.x].f.xy);

+	data[dti.x].f.xyz = QuadReadAcrossX(data[dti.x].f.xyz);

+

+	data[dti.x].d = QuadReadAcrossX(data[dti.x].d);

+	data[dti.x].d.x = QuadReadAcrossX(data[dti.x].d.x);

+	data[dti.x].d.xy = QuadReadAcrossX(data[dti.x].d.xy);

+	data[dti.x].d.xyz = QuadReadAcrossX(data[dti.x].d.xyz);

+

+	data[dti.x].u = QuadReadAcrossY(data[dti.x].u);

+	data[dti.x].u.x = QuadReadAcrossY(data[dti.x].u.x);

+	data[dti.x].u.xy = QuadReadAcrossY(data[dti.x].u.xy);

+	data[dti.x].u.xyz = QuadReadAcrossY(data[dti.x].u.xyz);

+

+	data[dti.x].i = QuadReadAcrossY(data[dti.x].i);

+	data[dti.x].i.x = QuadReadAcrossY(data[dti.x].i.x);

+	data[dti.x].i.xy = QuadReadAcrossY(data[dti.x].i.xy);

+	data[dti.x].i.xyz = QuadReadAcrossY(data[dti.x].i.xyz);

+

+	data[dti.x].f = QuadReadAcrossY(data[dti.x].f);

+	data[dti.x].f.x = QuadReadAcrossY(data[dti.x].f.x);

+	data[dti.x].f.xy = QuadReadAcrossY(data[dti.x].f.xy);

+	data[dti.x].f.xyz = QuadReadAcrossY(data[dti.x].f.xyz);

+

+	data[dti.x].d = QuadReadAcrossY(data[dti.x].d);

+	data[dti.x].d.x = QuadReadAcrossY(data[dti.x].d.x);

+	data[dti.x].d.xy = QuadReadAcrossY(data[dti.x].d.xy);

+	data[dti.x].d.xyz = QuadReadAcrossY(data[dti.x].d.xyz);

+

+	data[dti.x].u = QuadReadAcrossDiagonal(data[dti.x].u);

+	data[dti.x].u.x = QuadReadAcrossDiagonal(data[dti.x].u.x);

+	data[dti.x].u.xy = QuadReadAcrossDiagonal(data[dti.x].u.xy);

+	data[dti.x].u.xyz = QuadReadAcrossDiagonal(data[dti.x].u.xyz);

+

+	data[dti.x].i = QuadReadAcrossDiagonal(data[dti.x].i);

+	data[dti.x].i.x = QuadReadAcrossDiagonal(data[dti.x].i.x);

+	data[dti.x].i.xy = QuadReadAcrossDiagonal(data[dti.x].i.xy);

+	data[dti.x].i.xyz = QuadReadAcrossDiagonal(data[dti.x].i.xyz);

+

+	data[dti.x].f = QuadReadAcrossDiagonal(data[dti.x].f);

+	data[dti.x].f.x = QuadReadAcrossDiagonal(data[dti.x].f.x);

+	data[dti.x].f.xy = QuadReadAcrossDiagonal(data[dti.x].f.xy);

+	data[dti.x].f.xyz = QuadReadAcrossDiagonal(data[dti.x].f.xyz);

+

+	data[dti.x].d = QuadReadAcrossDiagonal(data[dti.x].d);

+	data[dti.x].d.x = QuadReadAcrossDiagonal(data[dti.x].d.x);

+	data[dti.x].d.xy = QuadReadAcrossDiagonal(data[dti.x].d.xy);

+	data[dti.x].d.xyz = QuadReadAcrossDiagonal(data[dti.x].d.xyz);

+}

diff --git a/Test/hlsl.wavequery.comp b/Test/hlsl.wavequery.comp
new file mode 100644
index 0000000..a689e11
--- /dev/null
+++ b/Test/hlsl.wavequery.comp
@@ -0,0 +1,7 @@
+RWStructuredBuffer<uint> data;

+

+[numthreads(32, 16, 1)]

+void CSMain()

+{

+    data[WaveGetLaneIndex()] = (WaveIsFirstLane()) ? WaveGetLaneCount() : 0;

+}

diff --git a/Test/hlsl.wavequery.frag b/Test/hlsl.wavequery.frag
new file mode 100644
index 0000000..d1437f0
--- /dev/null
+++ b/Test/hlsl.wavequery.frag
@@ -0,0 +1,11 @@
+float4 PixelShaderFunction() : COLOR0

+{

+    if (WaveIsFirstLane())

+    {

+        return float4(1, 2, 3, 4);

+    }

+    else

+    {

+        return float4(4, 3, 2, 1);

+    }

+}

diff --git a/Test/hlsl.wavereduction.comp b/Test/hlsl.wavereduction.comp
new file mode 100644
index 0000000..b7604ad
--- /dev/null
+++ b/Test/hlsl.wavereduction.comp
@@ -0,0 +1,125 @@
+struct Types

+{

+	uint4 u;

+	int4 i;

+	float4 f;

+	double4 d;

+};

+

+RWStructuredBuffer<Types> data;

+

+[numthreads(32, 16, 1)]

+void CSMain(uint3 dti : SV_DispatchThreadID)

+{

+	data[dti.x].u = WaveActiveSum(data[dti.x].u);

+	data[dti.x].u.x = WaveActiveSum(data[dti.x].u.x);

+	data[dti.x].u.xy = WaveActiveSum(data[dti.x].u.xy);

+	data[dti.x].u.xyz = WaveActiveSum(data[dti.x].u.xyz);

+

+	data[dti.x].i = WaveActiveSum(data[dti.x].i);

+	data[dti.x].i.x = WaveActiveSum(data[dti.x].i.x);

+	data[dti.x].i.xy = WaveActiveSum(data[dti.x].i.xy);

+	data[dti.x].i.xyz = WaveActiveSum(data[dti.x].i.xyz);

+

+	data[dti.x].f = WaveActiveSum(data[dti.x].f);

+	data[dti.x].f.x = WaveActiveSum(data[dti.x].f.x);

+	data[dti.x].f.xy = WaveActiveSum(data[dti.x].f.xy);

+	data[dti.x].f.xyz = WaveActiveSum(data[dti.x].f.xyz);

+

+	data[dti.x].d = WaveActiveSum(data[dti.x].d);

+	data[dti.x].d.x = WaveActiveSum(data[dti.x].d.x);

+	data[dti.x].d.xy = WaveActiveSum(data[dti.x].d.xy);

+	data[dti.x].d.xyz = WaveActiveSum(data[dti.x].d.xyz);

+

+	data[dti.x].u = WaveActiveProduct(data[dti.x].u);

+	data[dti.x].u.x = WaveActiveProduct(data[dti.x].u.x);

+	data[dti.x].u.xy = WaveActiveProduct(data[dti.x].u.xy);

+	data[dti.x].u.xyz = WaveActiveProduct(data[dti.x].u.xyz);

+

+	data[dti.x].i = WaveActiveProduct(data[dti.x].i);

+	data[dti.x].i.x = WaveActiveProduct(data[dti.x].i.x);

+	data[dti.x].i.xy = WaveActiveProduct(data[dti.x].i.xy);

+	data[dti.x].i.xyz = WaveActiveProduct(data[dti.x].i.xyz);

+

+	data[dti.x].f = WaveActiveProduct(data[dti.x].f);

+	data[dti.x].f.x = WaveActiveProduct(data[dti.x].f.x);

+	data[dti.x].f.xy = WaveActiveProduct(data[dti.x].f.xy);

+	data[dti.x].f.xyz = WaveActiveProduct(data[dti.x].f.xyz);

+

+	data[dti.x].d = WaveActiveProduct(data[dti.x].d);

+	data[dti.x].d.x = WaveActiveProduct(data[dti.x].d.x);

+	data[dti.x].d.xy = WaveActiveProduct(data[dti.x].d.xy);

+	data[dti.x].d.xyz = WaveActiveProduct(data[dti.x].d.xyz);

+

+	data[dti.x].u = WaveActiveMin(data[dti.x].u);

+	data[dti.x].u.x = WaveActiveMin(data[dti.x].u.x);

+	data[dti.x].u.xy = WaveActiveMin(data[dti.x].u.xy);

+	data[dti.x].u.xyz = WaveActiveMin(data[dti.x].u.xyz);

+

+	data[dti.x].i = WaveActiveMin(data[dti.x].i);

+	data[dti.x].i.x = WaveActiveMin(data[dti.x].i.x);

+	data[dti.x].i.xy = WaveActiveMin(data[dti.x].i.xy);

+	data[dti.x].i.xyz = WaveActiveMin(data[dti.x].i.xyz);

+

+	data[dti.x].f = WaveActiveMin(data[dti.x].f);

+	data[dti.x].f.x = WaveActiveMin(data[dti.x].f.x);

+	data[dti.x].f.xy = WaveActiveMin(data[dti.x].f.xy);

+	data[dti.x].f.xyz = WaveActiveMin(data[dti.x].f.xyz);

+

+	data[dti.x].d = WaveActiveMin(data[dti.x].d);

+	data[dti.x].d.x = WaveActiveMin(data[dti.x].d.x);

+	data[dti.x].d.xy = WaveActiveMin(data[dti.x].d.xy);

+	data[dti.x].d.xyz = WaveActiveMin(data[dti.x].d.xyz);

+

+	data[dti.x].u = WaveActiveMax(data[dti.x].u);

+	data[dti.x].u.x = WaveActiveMax(data[dti.x].u.x);

+	data[dti.x].u.xy = WaveActiveMax(data[dti.x].u.xy);

+	data[dti.x].u.xyz = WaveActiveMax(data[dti.x].u.xyz);

+

+	data[dti.x].i = WaveActiveMax(data[dti.x].i);

+	data[dti.x].i.x = WaveActiveMax(data[dti.x].i.x);

+	data[dti.x].i.xy = WaveActiveMax(data[dti.x].i.xy);

+	data[dti.x].i.xyz = WaveActiveMax(data[dti.x].i.xyz);

+

+	data[dti.x].f = WaveActiveMax(data[dti.x].f);

+	data[dti.x].f.x = WaveActiveMax(data[dti.x].f.x);

+	data[dti.x].f.xy = WaveActiveMax(data[dti.x].f.xy);

+	data[dti.x].f.xyz = WaveActiveMax(data[dti.x].f.xyz);

+

+	data[dti.x].d = WaveActiveMax(data[dti.x].d);

+	data[dti.x].d.x = WaveActiveMax(data[dti.x].d.x);

+	data[dti.x].d.xy = WaveActiveMax(data[dti.x].d.xy);

+	data[dti.x].d.xyz = WaveActiveMax(data[dti.x].d.xyz);

+

+	data[dti.x].u = WaveActiveBitAnd(data[dti.x].u);

+	data[dti.x].u.x = WaveActiveBitAnd(data[dti.x].u.x);

+	data[dti.x].u.xy = WaveActiveBitAnd(data[dti.x].u.xy);

+	data[dti.x].u.xyz = WaveActiveBitAnd(data[dti.x].u.xyz);

+

+	data[dti.x].i = WaveActiveBitAnd(data[dti.x].i);

+	data[dti.x].i.x = WaveActiveBitAnd(data[dti.x].i.x);

+	data[dti.x].i.xy = WaveActiveBitAnd(data[dti.x].i.xy);

+	data[dti.x].i.xyz = WaveActiveBitAnd(data[dti.x].i.xyz);

+

+	data[dti.x].u = WaveActiveBitOr(data[dti.x].u);

+	data[dti.x].u.x = WaveActiveBitOr(data[dti.x].u.x);

+	data[dti.x].u.xy = WaveActiveBitOr(data[dti.x].u.xy);

+	data[dti.x].u.xyz = WaveActiveBitOr(data[dti.x].u.xyz);

+

+	data[dti.x].i = WaveActiveBitOr(data[dti.x].i);

+	data[dti.x].i.x = WaveActiveBitOr(data[dti.x].i.x);

+	data[dti.x].i.xy = WaveActiveBitOr(data[dti.x].i.xy);

+	data[dti.x].i.xyz = WaveActiveBitOr(data[dti.x].i.xyz);

+

+	data[dti.x].u = WaveActiveBitXor(data[dti.x].u);

+	data[dti.x].u.x = WaveActiveBitXor(data[dti.x].u.x);

+	data[dti.x].u.xy = WaveActiveBitXor(data[dti.x].u.xy);

+	data[dti.x].u.xyz = WaveActiveBitXor(data[dti.x].u.xyz);

+

+	data[dti.x].i = WaveActiveBitXor(data[dti.x].i);

+	data[dti.x].i.x = WaveActiveBitXor(data[dti.x].i.x);

+	data[dti.x].i.xy = WaveActiveBitXor(data[dti.x].i.xy);

+	data[dti.x].i.xyz = WaveActiveBitXor(data[dti.x].i.xyz);

+

+	data[dti.x].u.x = WaveActiveCountBits(data[dti.x].u.x == 0);

+}

diff --git a/Test/hlsl.wavevote.comp b/Test/hlsl.wavevote.comp
new file mode 100644
index 0000000..0370e69
--- /dev/null
+++ b/Test/hlsl.wavevote.comp
@@ -0,0 +1,10 @@
+RWStructuredBuffer<uint64_t> data;

+

+[numthreads(32, 16, 1)]

+void CSMain(uint3 dti : SV_DispatchThreadID)

+{

+	data[dti.x] = WaveActiveBallot(WaveActiveAnyTrue(dti.x == 0));

+	data[dti.y] = WaveActiveBallot(WaveActiveAllTrue(dti.y == 0));

+	data[dti.z] = WaveActiveBallot(WaveActiveAllEqualBool(dti.z == 0));

+	data[dti.z] = WaveActiveBallot(WaveActiveAllEqual(dti.z));

+}

diff --git a/Test/runtests b/Test/runtests
index 9f3583e..98d7466 100755
--- a/Test/runtests
+++ b/Test/runtests
@@ -129,6 +129,9 @@
 $EXE -g --relaxed-errors --suppress-warnings --aml --amb --hlsl-offsets --nsf \
      -G -H spv.debugInfo.frag --rsb frag 3 > $TARGETDIR/spv.debugInfo.frag.out
 diff -b $BASEDIR/spv.debugInfo.frag.out $TARGETDIR/spv.debugInfo.frag.out || HASERROR=1
+$EXE -g -Od --target-env vulkan1.1 --relaxed-errors --suppress-warnings --aml --hlsl-offsets --nsf \
+     -G -H spv.debugInfo.frag --rsb frag 3 > $TARGETDIR/spv.debugInfo.1.1.frag.out
+diff -b $BASEDIR/spv.debugInfo.1.1.frag.out $TARGETDIR/spv.debugInfo.1.1.frag.out || HASERROR=1
 $EXE -g -D -Od -e newMain -g --amb --aml --fua --hlsl-iomap --nsf --sib 1 --ssb 2 --sbb 3 --stb 4 --suavb 5 --sub 6 \
      --sep origMain -H -Od spv.hlslDebugInfo.vert --rsb vert t0 0 0 > $TARGETDIR/spv.hlslDebugInfo.frag.out
 diff -b $BASEDIR/spv.hlslDebugInfo.frag.out $TARGETDIR/spv.hlslDebugInfo.frag.out || HASERROR=1
@@ -162,6 +165,7 @@
 $EXE --client vulkan100      spv.targetVulkan.vert || HASERROR=1
 $EXE --client opengl100      spv.targetOpenGL.vert || HASERROR=1
 $EXE --target-env vulkan1.0  spv.targetVulkan.vert || HASERROR=1
+$EXE --target-env vulkan1.1  spv.targetVulkan.vert || HASERROR=1
 $EXE --target-env opengl     spv.targetOpenGL.vert || HASERROR=1
 $EXE -V100                   spv.targetVulkan.vert || HASERROR=1
 $EXE -G100                   spv.targetOpenGL.vert || HASERROR=1
diff --git a/Test/spv.explicittypes.frag b/Test/spv.explicittypes.frag
new file mode 100644
index 0000000..18c070a
--- /dev/null
+++ b/Test/spv.explicittypes.frag
@@ -0,0 +1,334 @@
+#version 450
+
+#extension GL_KHX_shader_explicit_arithmetic_types: enable
+#extension GL_KHX_shader_explicit_arithmetic_types_int8: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int16: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int32: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float16: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float32: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float64: require
+
+layout(binding = 0) uniform Uniforms
+{
+    uint index;
+};
+
+layout(std140, binding = 1) uniform Block
+{
+    int16_t   i16;
+    i16vec2   i16v2;
+    i16vec3   i16v3;
+    i16vec4   i16v4;
+    uint16_t  u16;
+    u16vec2   u16v2;
+    u16vec3   u16v3;
+    u16vec4   u16v4;
+
+    int32_t   i32;
+    i32vec2   i32v2;
+    i32vec3   i32v3;
+    i32vec4   i32v4;
+    uint32_t  u32;
+    u32vec2   u32v2;
+    u32vec3   u32v3;
+    u32vec4   u32v4;
+} block;
+
+void main()
+{
+}
+
+void literal()
+{
+    const int64_t i64Const[3] =
+    {
+        -0x1111111111111111l,   // Hex
+        -1l,                    // Dec
+        040000000000l,          // Oct
+    };
+
+    int64_t i64 = i64Const[index];
+
+    const uint64_t u64Const[] =
+    {
+        0xFFFFFFFFFFFFFFFFul,   // Hex
+        4294967296UL,           // Dec
+        077777777777ul,         // Oct
+    };
+
+    uint64_t u64 = u64Const[index];
+
+    const int32_t i32Const[3] =
+    {
+        -0x11111111,           // Hex
+        -1,                    // Dec
+        04000000000,           // Oct
+    };
+
+    int32_t i32 = i32Const[index];
+
+    const uint32_t u32Const[] =
+    {
+        0xFFFFFFFF,             // Hex
+        4294967295,             // Dec
+        017777777777,           // Oct
+    };
+
+    uint32_t u32 = u32Const[index];
+
+    const int16_t i16Const[3] =
+    {
+        int16_t(-0x1111),           // Hex
+        int16_t(-1),                // Dec
+        int16_t(040000),            // Oct
+    };
+
+    int16_t i16 = i16Const[index];
+
+    const uint16_t u16Const[] =
+    {
+        uint16_t(0xFFFF),             // Hex
+        uint16_t(65535),              // Dec
+        uint16_t(077777),             // Oct
+    };
+
+    uint16_t u16 = u16Const[index];
+
+    const int8_t i8Const[3] =
+    {
+        int8_t(-0x11),           // Hex
+        int8_t(-1),              // Dec
+        int8_t(0400),            // Oct
+    };
+
+    int8_t i8 = i8Const[index];
+
+    const uint8_t u8Const[] =
+    {
+        uint8_t(0xFF),             // Hex
+        uint8_t(255),              // Dec
+        uint8_t(0177),             // Oct
+    };
+
+    uint8_t u8 = u8Const[index];
+}
+
+void typeCast8()
+{
+    i8vec2 i8v;
+    u8vec2 u8v;
+    i16vec2 i16v;
+    u16vec2 u16v;
+    i32vec2 i32v;
+    u32vec2 u32v;
+    i64vec2 i64v;
+    u64vec2 u64v;
+    f16vec2 f16v;
+    f32vec2 f32v;
+    f64vec2 f64v;
+    bvec2   bv;
+
+    u8v = i8v;      // int8_t  ->  uint8_t
+    i16v = i8v;     // int8_t  ->   int16_t
+    i16v = u8v;     // uint8_t ->   int16_t
+    i32v = i8v;     // int8_t  ->   int32_t
+    i32v = u8v;     // uint8_t ->   int32_t
+    u32v = i8v;     // int8_t  ->  uint32_t
+    i64v = i8v;     // int8_t  ->   int64_t
+    u64v = i8v;     // int8_t  ->  uint64_t
+    u32v = u8v;     // uint8_t ->  uint32_t
+    i64v = u8v;     // uint8_t ->   int64_t
+    u64v = u8v;     // uint8_t ->  uint64_t
+    f16v = i8v;     // int8_t  ->  float16_t
+    f32v = i8v;     // int8_t  ->  float32_t
+    f64v = i8v;     // int8_t  ->  float64_t
+    f16v = u8v;     // uint8_t ->  float16_t
+    f32v = u8v;     // uint8_t ->  float32_t
+    f64v = u8v;     // uint8_t ->  float64_t
+
+    i8v =  i8vec2(u8v);       // uint8_t  ->   int8_t
+    i16v = i16vec2(i8v);      // int8_t   ->   int16_t
+    i16v = i16vec2(u8v);      // uint8_t  ->   int16_t
+    i32v = i32vec2(i8v);      // int8_t   ->   int32_t
+    i32v = i32vec2(u8v);      // uint8_t  ->   int32_t
+    i64v = i64vec2(i8v);      // int8_t   ->   int64_t
+    u64v = i64vec2(i8v);      // int8_t   ->  uint64_t
+    u16v = u16vec2(i8v);      // int8_t   ->  uint16_t
+    u16v = u16vec2(u8v);      // uint8_t  ->  uint16_t
+    u32v = u32vec2(u8v);      // uint8_t  ->  uint32_t
+    i64v = i64vec2(u8v);      // uint8_t  ->   int64_t
+    u64v = i64vec2(u8v);      // uint8_t  ->  uint64_t
+    f16v = f16vec2(i8v);      // int8_t   ->  float16_t
+    f32v = f32vec2(i8v);      // int8_t   ->  float32_t
+    f64v = f64vec2(i8v);      // int8_t   ->  float64_t
+    f16v = f16vec2(u8v);      // uint8_t  ->  float16_t
+    f32v = f32vec2(u8v);      // uint8_t  ->  float32_t
+    f64v = f64vec2(u8v);      // uint8_t  ->  float64_t
+
+    i8v = i8vec2(bv);       // bool     ->   int8
+    u8v = u8vec2(bv);       // bool     ->   uint8
+    bv  = bvec2(i8v);       // int8    ->   bool
+    bv  = bvec2(u8v);       // uint8   ->   bool
+}
+
+void typeCast16()
+{
+    i8vec2 i8v;
+    u8vec2 u8v;
+    i16vec2 i16v;
+    u16vec2 u16v;
+    i32vec2 i32v;
+    u32vec2 u32v;
+    i64vec2 i64v;
+    u64vec2 u64v;
+    f16vec2 f16v;
+    f32vec2 f32v;
+    f64vec2 f64v;
+    bvec2   bv;
+
+    i32v = i16v;     // int16_t  ->   int32_t
+    i32v = u16v;     // uint16_t ->   int32_t
+    u16v = i16v;     // int16_t  ->  uint16_t
+    u32v = i16v;     // int16_t  ->  uint32_t
+    i64v = i16v;     // int16_t  ->   int64_t
+    u64v = i16v;     // int16_t  ->  uint64_t
+    u32v = u16v;     // uint16_t ->  uint32_t
+    i64v = u16v;     // uint16_t ->   int64_t
+    u64v = u16v;     // uint16_t ->  uint64_t
+    f16v = i16v;     // int16_t  ->  float16_t
+    f32v = i16v;     // int16_t  ->  float32_t
+    f64v = i16v;     // int16_t  ->  float64_t
+    f16v = u16v;     // uint16_t ->  float16_t
+    f32v = u16v;     // uint16_t ->  float32_t
+    f64v = u16v;     // uint16_t ->  float64_t
+
+    i32v = i32vec2(i16v);     // int16_t  ->   int32_t
+    i32v = i32vec2(u16v);     // uint16_t ->   int32_t
+    u16v = u16vec2(i16v);     // int16_t  ->  uint16_t
+    u32v = u32vec2(i16v);     // int16_t  ->  uint32_t
+    i64v = i64vec2(i16v);     // int16_t  ->   int64_t
+    u64v = i64vec2(i16v);     // int16_t  ->  uint64_t
+    u32v = u32vec2(u16v);     // uint16_t ->  uint32_t
+    i64v = i64vec2(u16v);     // uint16_t ->   int64_t
+    u64v = i64vec2(u16v);     // uint16_t ->  uint64_t
+    f16v = f16vec2(i16v);     // int16_t  ->  float16_t
+    f32v = f32vec2(i16v);     // int16_t  ->  float32_t
+    f64v = f64vec2(i16v);     // int16_t  ->  float64_t
+    f16v = f16vec2(u16v);     // uint16_t ->  float16_t
+    f32v = f32vec2(u16v);     // uint16_t ->  float32_t
+    f64v = f64vec2(u16v);     // uint16_t ->  float64_t
+
+    i8v  = i8vec2(i16v);      // int16_t  ->   int8_t
+    i8v  = i8vec2(u16v);      // uint16_t ->   int8_t
+    u8v  = u8vec2(i16v);      // int16_t  ->  uint8_t
+    u8v  = u8vec2(u16v);      // uint16_t ->  uint8_t
+    i16v = u8vec2(u16v);      // uint16_t ->   int16_t
+    i16v = i16vec2(bv);       // bool     ->   int16
+    u16v = u16vec2(bv);       // bool     ->   uint16
+    bv   = bvec2(i16v);       // int16    ->   bool
+    bv   = bvec2(u16v);       // uint16   ->   bool
+}
+
+void typeCast32()
+{
+    i8vec2 i8v;
+    u8vec2 u8v;
+    i16vec2 i16v;
+    u16vec2 u16v;
+    i32vec2 i32v;
+    u32vec2 u32v;
+    i64vec2 i64v;
+    u64vec2 u64v;
+    f16vec2 f16v;
+    f32vec2 f32v;
+    f64vec2 f64v;
+    bvec2   bv;
+
+    u32v = i32v;     // int32_t  ->  uint32_t
+    i64v = i32v;     // int32_t  ->   int64_t
+    u64v = i32v;     // int32_t  ->  uint64_t
+    i64v = u32v;     // uint32_t ->   int64_t
+    u64v = u32v;     // uint32_t ->  uint64_t
+    f32v = i32v;     // int32_t  ->  float32_t
+    f64v = i32v;     // int32_t  ->  float64_t
+    f32v = u32v;     // uint32_t ->  float32_t
+    f64v = u32v;     // uint32_t ->  float64_t
+
+    i8v =  i8vec2(i32v);       // int32_t   ->   int8_t
+    i8v =  i8vec2(u32v);       // uint32_t  ->   int8_t
+    i16v = i16vec2(i32v);      // int32_t   ->   int16_t
+    i16v = i16vec2(u32v);      // uint32_t  ->   int16_t
+    i32v = i32vec2(i32v);      // int32_t   ->   int32_t
+    i32v = i32vec2(u32v);      // uint32_t  ->   int32_t
+    i64v = i64vec2(i32v);      // int32_t   ->   int64_t
+	i64v = i64vec2(u32v);      // uint32_t  ->   int64_t
+	u8v =  u8vec2(i32v);       // int32_t   ->   uint8_t
+    u8v =  u8vec2(u32v);       // uint32_t  ->   uint8_t
+    u16v = u16vec2(i32v);      // int32_t   ->   uint16_t
+    u16v = u16vec2(u32v);      // uint32_t  ->   uint16_t
+    u32v = u32vec2(i32v);      // int32_t   ->   uint32_t
+    u32v = u32vec2(u32v);      // uint32_t  ->   uint32_t
+    u64v = u64vec2(i32v);      // int32_t   ->   uint64_t
+    u64v = u64vec2(u32v);      // uint32_t  ->   uint64_t
+
+    f16v = f16vec2(i32v);      // int32_t   ->  float16_t
+    f32v = f32vec2(i32v);      // int32_t   ->  float32_t
+    f64v = f64vec2(i32v);      // int32_t   ->  float64_t
+    f16v = f16vec2(u32v);      // uint32_t  ->  float16_t
+    f32v = f32vec2(u32v);      // uint32_t  ->  float32_t
+    f64v = f64vec2(u32v);      // uint32_t  ->  float64_t
+
+    i32v = i32vec2(bv);       // bool     ->   int32
+    u32v = u32vec2(bv);       // bool     ->   uint32
+    bv   = bvec2(i32v);       // int32    ->   bool
+    bv   = bvec2(u32v);       // uint32   ->   bool
+}
+
+void typeCast64()
+{
+    i8vec2 i8v;
+    u8vec2 u8v;
+    i16vec2 i16v;
+    u16vec2 u16v;
+    i32vec2 i32v;
+    u32vec2 u32v;
+    i64vec2 i64v;
+    u64vec2 u64v;
+    f16vec2 f16v;
+    f32vec2 f32v;
+    f64vec2 f64v;
+    bvec2   bv;
+
+    u64v = i64v;     // int64_t  ->  uint64_t
+    f64v = i64v;     // int64_t  ->  float64_t
+    f64v = u64v;     // uint64_t ->  float64_t
+
+    i8v =  i8vec2(i64v);       // int64_t   ->   int8_t
+    i8v =  i8vec2(u64v);       // uint64_t  ->   int8_t
+    i16v = i16vec2(i64v);      // int64_t   ->   int16_t
+    i16v = i16vec2(u64v);      // uint64_t  ->   int16_t
+    i32v = i32vec2(i64v);      // int64_t   ->   int32_t
+    i32v = i32vec2(u64v);      // uint64_t  ->   int32_t
+	i64v = i64vec2(u64v);      // uint64_t  ->   int64_t
+	u8v =  u8vec2(i64v);       // int64_t   ->   uint8_t
+    u8v =  u8vec2(u64v);       // uint64_t  ->   uint8_t
+    u16v = u16vec2(i64v);      // int64_t   ->   uint16_t
+    u16v = u16vec2(u64v);      // uint64_t  ->   uint16_t
+    u32v = u32vec2(i64v);      // int64_t   ->   uint32_t
+    u32v = u32vec2(u64v);      // uint64_t  ->   uint32_t
+    u64v = u64vec2(i64v);      // int64_t   ->   uint64_t
+    u64v = u64vec2(u64v);      // uint64_t  ->   uint64_t
+
+    f16v = f16vec2(i64v);      // int64_t   ->  float16_t
+    f32v = f32vec2(i64v);      // int64_t   ->  float32_t
+    f64v = f64vec2(i64v);      // int64_t   ->  float64_t
+    f16v = f16vec2(u64v);      // uint64_t  ->  float16_t
+    f32v = f32vec2(u64v);      // uint64_t  ->  float32_t
+    f64v = f64vec2(u64v);      // uint64_t  ->  float64_t
+
+    i64v = i64vec2(bv);       // bool     ->   int64
+    u64v = u64vec2(bv);       // bool     ->   uint64
+    bv   = bvec2(i64v);       // int64    ->   bool
+    bv   = bvec2(u64v);       // uint64   ->   bool
+}
diff --git a/Test/spv.float32.frag b/Test/spv.float32.frag
new file mode 100644
index 0000000..471f6b3
--- /dev/null
+++ b/Test/spv.float32.frag
@@ -0,0 +1,277 @@
+#version 450
+
+#extension GL_KHX_shader_explicit_arithmetic_types: enable
+#extension GL_KHX_shader_explicit_arithmetic_types_int8: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int16: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int32: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float16: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float32: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float64: require
+
+void main()
+{
+}
+
+// Single float literals
+void literal()
+{
+    const float32_t f32c  = 0.000001f;
+    const f32vec2   f32cv = f32vec2(-0.25F, 0.03f);
+
+    f32vec2 f32v;
+    f32v.x  = f32c;
+    f32v   += f32cv;
+}
+
+// Block memory layout
+struct S
+{
+    float32_t  x;
+    f32vec2    y;
+    f32vec3    z;
+};
+
+layout(column_major, std140) uniform B1
+{
+    float32_t  a;
+    f32vec2    b;
+    f32vec3    c;
+    float32_t  d[2];
+    f32mat2x3  e;
+    f32mat2x3  f[2];
+    S          g;
+    S          h[2];
+};
+
+// Specialization constant
+layout(constant_id = 100) const float16_t sf16 = 0.125hf;
+layout(constant_id = 101) const float32_t sf   = 0.25;
+layout(constant_id = 102) const float64_t sd   = 0.5lf;
+
+const float  f16_to_f = float(sf16);
+const double f16_to_d = float(sf16);
+
+const float16_t f_to_f16 = float16_t(sf);
+const float16_t d_to_f16 = float16_t(sd);
+
+void operators()
+{
+    float32_t f32;
+    f32vec2   f32v;
+    f32mat2x2 f32m;
+    bool      b;
+
+    // Arithmetic
+    f32v += f32v;
+    f32v -= f32v;
+    f32v *= f32v;
+    f32v /= f32v;
+    f32v++;
+    f32v--;
+    ++f32m;
+    --f32m;
+    f32v = -f32v;
+    f32m = -f32m;
+
+    f32 = f32v.x + f32v.y;
+    f32 = f32v.x - f32v.y;
+    f32 = f32v.x * f32v.y;
+    f32 = f32v.x / f32v.y;
+
+    // Relational
+    b = (f32v.x != f32);
+    b = (f32v.y == f32);
+    b = (f32v.x >  f32);
+    b = (f32v.y <  f32);
+    b = (f32v.x >= f32);
+    b = (f32v.y <= f32);
+
+    // Vector/matrix operations
+    f32v = f32v * f32;
+    f32m = f32m * f32;
+    f32v = f32m * f32v;
+    f32v = f32v * f32m;
+    f32m = f32m * f32m;
+}
+
+void typeCast()
+{
+    bvec3   bv;
+    f32vec3   f32v;
+    f64vec3   f64v;
+    i8vec3    i8v;
+    u8vec3    u8v;
+    i16vec3   i16v;
+    u16vec3   u16v;
+    i32vec3   i32v;
+    u32vec3   u32v;
+    i64vec3   i64v;
+    u64vec3   u64v;
+    f16vec3   f16v;
+
+    f64v = f32v;            // float32_t -> float64_t
+
+    f32v = f32vec3(bv);     // bool -> float32
+    bv   = bvec3(f32v);     // float32 -> bool
+
+    f32v = f32vec3(f64v);   // double -> float32
+    f64v = f64vec3(f32v);   // float32 -> double
+
+    f32v = f32vec3(f16v);   // float16 -> float32
+    f16v = f16vec3(f32v);   // float32 -> float16
+
+    i8v  = i8vec3(f32v);    //  float32 -> int8
+    i16v = i16vec3(f32v);    // float32 -> int16
+    i32v = i32vec3(f32v);    // float32 -> int32
+    i64v = i64vec3(f32v);    // float32 -> int64
+
+    u8v  = u8vec3(f32v);    //  float32 -> uint8
+    u16v = u16vec3(f32v);    // float32 -> uint16
+    u32v = u32vec3(f32v);    // float32 -> uint32
+    u64v = u64vec3(f32v);    // float32 -> uint64
+}
+
+void builtinAngleTrigFuncs()
+{
+    f32vec4 f32v1, f32v2;
+
+    f32v2 = radians(f32v1);
+    f32v2 = degrees(f32v1);
+    f32v2 = sin(f32v1);
+    f32v2 = cos(f32v1);
+    f32v2 = tan(f32v1);
+    f32v2 = asin(f32v1);
+    f32v2 = acos(f32v1);
+    f32v2 = atan(f32v1, f32v2);
+    f32v2 = atan(f32v1);
+    f32v2 = sinh(f32v1);
+    f32v2 = cosh(f32v1);
+    f32v2 = tanh(f32v1);
+    f32v2 = asinh(f32v1);
+    f32v2 = acosh(f32v1);
+    f32v2 = atanh(f32v1);
+}
+
+void builtinExpFuncs()
+{
+    f32vec2 f32v1, f32v2;
+
+    f32v2 = pow(f32v1, f32v2);
+    f32v2 = exp(f32v1);
+    f32v2 = log(f32v1);
+    f32v2 = exp2(f32v1);
+    f32v2 = log2(f32v1);
+    f32v2 = sqrt(f32v1);
+    f32v2 = inversesqrt(f32v1);
+}
+
+void builtinCommonFuncs()
+{
+    f32vec3   f32v1, f32v2, f32v3;
+    float32_t f32;
+    bool  b;
+    bvec3 bv;
+    ivec3 iv;
+
+    f32v2 = abs(f32v1);
+    f32v2 = sign(f32v1);
+    f32v2 = floor(f32v1);
+    f32v2 = trunc(f32v1);
+    f32v2 = round(f32v1);
+    f32v2 = roundEven(f32v1);
+    f32v2 = ceil(f32v1);
+    f32v2 = fract(f32v1);
+    f32v2 = mod(f32v1, f32v2);
+    f32v2 = mod(f32v1, f32);
+    f32v3 = modf(f32v1, f32v2);
+    f32v3 = min(f32v1, f32v2);
+    f32v3 = min(f32v1, f32);
+    f32v3 = max(f32v1, f32v2);
+    f32v3 = max(f32v1, f32);
+    f32v3 = clamp(f32v1, f32, f32v2.x);
+    f32v3 = clamp(f32v1, f32v2, f32vec3(f32));
+    f32v3 = mix(f32v1, f32v2, f32);
+    f32v3 = mix(f32v1, f32v2, f32v3);
+    f32v3 = mix(f32v1, f32v2, bv);
+    f32v3 = step(f32v1, f32v2);
+    f32v3 = step(f32, f32v3);
+    f32v3 = smoothstep(f32v1, f32v2, f32v3);
+    f32v3 = smoothstep(f32, f32v1.x, f32v2);
+    b     = isnan(f32);
+    bv    = isinf(f32v1);
+    f32v3 = fma(f32v1, f32v2, f32v3);
+    f32v2 = frexp(f32v1, iv);
+    f32v2 = ldexp(f32v1, iv);
+}
+
+void builtinGeometryFuncs()
+{
+    float32_t f32;
+    f32vec3   f32v1, f32v2, f32v3;
+
+    f32   = length(f32v1);
+    f32   = distance(f32v1, f32v2);
+    f32   = dot(f32v1, f32v2);
+    f32v3 = cross(f32v1, f32v2);
+    f32v2 = normalize(f32v1);
+    f32v3 = faceforward(f32v1, f32v2, f32v3);
+    f32v3 = reflect(f32v1, f32v2);
+    f32v3 = refract(f32v1, f32v2, f32);
+}
+
+void builtinMatrixFuncs()
+{
+    f32mat2x3 f32m1, f32m2, f32m3;
+    f32mat3x2 f32m4;
+    f32mat3   f32m5;
+    f32mat4   f32m6, f32m7;
+
+    f32vec3 f32v1;
+    f32vec2 f32v2;
+
+    float32_t f32;
+
+    f32m3 = matrixCompMult(f32m1, f32m2);
+    f32m1 = outerProduct(f32v1, f32v2);
+    f32m4 = transpose(f32m1);
+    f32   = determinant(f32m5);
+    f32m6 = inverse(f32m7);
+}
+
+void builtinVecRelFuncs()
+{
+    f32vec3 f32v1, f32v2;
+    bvec3   bv;
+
+    bv = lessThan(f32v1, f32v2);
+    bv = lessThanEqual(f32v1, f32v2);
+    bv = greaterThan(f32v1, f32v2);
+    bv = greaterThanEqual(f32v1, f32v2);
+    bv = equal(f32v1, f32v2);
+    bv = notEqual(f32v1, f32v2);
+}
+
+in f32vec3 if32v;
+
+void builtinFragProcFuncs()
+{
+    f32vec3 f32v;
+
+    // Derivative
+    f32v.x  = dFdx(if32v.x);
+    f32v.y  = dFdy(if32v.y);
+    f32v.xy = dFdxFine(if32v.xy);
+    f32v.xy = dFdyFine(if32v.xy);
+    f32v    = dFdxCoarse(if32v);
+    f32v    = dFdxCoarse(if32v);
+
+    f32v.x  = fwidth(if32v.x);
+    f32v.xy = fwidthFine(if32v.xy);
+    f32v    = fwidthCoarse(if32v);
+
+    // Interpolation
+    f32v.x  = interpolateAtCentroid(if32v.x);
+    f32v.xy = interpolateAtSample(if32v.xy, 1);
+    f32v    = interpolateAtOffset(if32v, f32vec2(0.5f));
+}
diff --git a/Test/spv.float64.frag b/Test/spv.float64.frag
new file mode 100644
index 0000000..efbec77
--- /dev/null
+++ b/Test/spv.float64.frag
@@ -0,0 +1,272 @@
+#version 450
+
+#extension GL_KHX_shader_explicit_arithmetic_types: enable
+#extension GL_KHX_shader_explicit_arithmetic_types_int8: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int16: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int32: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float16: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float32: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float64: require
+
+void main()
+{
+}
+
+// Single float literals
+void literal()
+{
+    const float64_t f64c  = 0.000001LF;
+    const f64vec2   f64cv = f64vec2(-0.25lF, 0.03Lf);
+
+    f64vec2 f64v;
+    f64v.x  = f64c;
+    f64v   += f64cv;
+}
+
+// Block memory layout
+struct S
+{
+    float64_t  x;
+    f64vec2    y;
+    f64vec3    z;
+};
+
+layout(column_major, std140) uniform B1
+{
+    float64_t  a;
+    f64vec2    b;
+    f64vec3    c;
+    float64_t  d[2];
+    f64mat2x3  e;
+    f64mat2x3  f[2];
+    S          g;
+    S          h[2];
+};
+
+// Specialization constant
+layout(constant_id = 100) const float16_t sf16 = 0.125hf;
+layout(constant_id = 101) const float32_t sf   = 0.25;
+layout(constant_id = 102) const float64_t sd   = 0.5lf;
+
+const float  f16_to_f = float(sf16);
+const double f16_to_d = float(sf16);
+
+const float16_t f_to_f16 = float16_t(sf);
+const float16_t d_to_f16 = float16_t(sd);
+
+void operators()
+{
+    float64_t f64;
+    f64vec2   f64v;
+    f64mat2x2 f64m;
+    bool      b;
+
+    // Arithmetic
+    f64v += f64v;
+    f64v -= f64v;
+    f64v *= f64v;
+    f64v /= f64v;
+    f64v++;
+    f64v--;
+    ++f64m;
+    --f64m;
+    f64v = -f64v;
+    f64m = -f64m;
+
+    f64 = f64v.x + f64v.y;
+    f64 = f64v.x - f64v.y;
+    f64 = f64v.x * f64v.y;
+    f64 = f64v.x / f64v.y;
+
+    // Relational
+    b = (f64v.x != f64);
+    b = (f64v.y == f64);
+    b = (f64v.x >  f64);
+    b = (f64v.y <  f64);
+    b = (f64v.x >= f64);
+    b = (f64v.y <= f64);
+
+    // Vector/matrix operations
+    f64v = f64v * f64;
+    f64m = f64m * f64;
+    f64v = f64m * f64v;
+    f64v = f64v * f64m;
+    f64m = f64m * f64m;
+}
+
+void typeCast()
+{
+    bvec3   bv;
+    f32vec3   f32v;
+    f64vec3   f64v;
+    i8vec3    i8v;
+    u8vec3    u8v;
+    i16vec3   i16v;
+    u16vec3   u16v;
+    i32vec3   i32v;
+    u32vec3   u32v;
+    i64vec3   i64v;
+    u64vec3   u64v;
+    f16vec3   f16v;
+
+    f64v = f64vec3(bv);     // bool -> float64
+    bv   = bvec3(f64v);     // float64 -> bool
+
+    f64v = f64vec3(f16v);   // float16 -> float64
+    f16v = f16vec3(f64v);   // float64 -> float16
+
+    i8v  = i8vec3(f64v);    //  float64 -> int8
+    i16v = i16vec3(f64v);    // float64 -> int16
+    i32v = i32vec3(f64v);    // float64 -> int32
+    i64v = i64vec3(f64v);    // float64 -> int64
+
+    u8v  = u8vec3(f64v);    //  float64 -> uint8
+    u16v = u16vec3(f64v);    // float64 -> uint16
+    u32v = u32vec3(f64v);    // float64 -> uint32
+    u64v = u64vec3(f64v);    // float64 -> uint64
+}
+
+void builtinAngleTrigFuncs()
+{
+    f64vec4 f64v1, f64v2;
+
+    f64v2 = radians(f64v1);
+    f64v2 = degrees(f64v1);
+    f64v2 = sin(f64v1);
+    f64v2 = cos(f64v1);
+    f64v2 = tan(f64v1);
+    f64v2 = asin(f64v1);
+    f64v2 = acos(f64v1);
+    f64v2 = atan(f64v1, f64v2);
+    f64v2 = atan(f64v1);
+    f64v2 = sinh(f64v1);
+    f64v2 = cosh(f64v1);
+    f64v2 = tanh(f64v1);
+    f64v2 = asinh(f64v1);
+    f64v2 = acosh(f64v1);
+    f64v2 = atanh(f64v1);
+}
+
+void builtinExpFuncs()
+{
+    f64vec2 f64v1, f64v2;
+
+    f64v2 = pow(f64v1, f64v2);
+    f64v2 = exp(f64v1);
+    f64v2 = log(f64v1);
+    f64v2 = exp2(f64v1);
+    f64v2 = log2(f64v1);
+    f64v2 = sqrt(f64v1);
+    f64v2 = inversesqrt(f64v1);
+}
+
+void builtinCommonFuncs()
+{
+    f64vec3   f64v1, f64v2, f64v3;
+    float64_t f64;
+    bool  b;
+    bvec3 bv;
+    ivec3 iv;
+
+    f64v2 = abs(f64v1);
+    f64v2 = sign(f64v1);
+    f64v2 = floor(f64v1);
+    f64v2 = trunc(f64v1);
+    f64v2 = round(f64v1);
+    f64v2 = roundEven(f64v1);
+    f64v2 = ceil(f64v1);
+    f64v2 = fract(f64v1);
+    f64v2 = mod(f64v1, f64v2);
+    f64v2 = mod(f64v1, f64);
+    f64v3 = modf(f64v1, f64v2);
+    f64v3 = min(f64v1, f64v2);
+    f64v3 = min(f64v1, f64);
+    f64v3 = max(f64v1, f64v2);
+    f64v3 = max(f64v1, f64);
+    f64v3 = clamp(f64v1, f64, f64v2.x);
+    f64v3 = clamp(f64v1, f64v2, f64vec3(f64));
+    f64v3 = mix(f64v1, f64v2, f64);
+    f64v3 = mix(f64v1, f64v2, f64v3);
+    f64v3 = mix(f64v1, f64v2, bv);
+    f64v3 = step(f64v1, f64v2);
+    f64v3 = step(f64, f64v3);
+    f64v3 = smoothstep(f64v1, f64v2, f64v3);
+    f64v3 = smoothstep(f64, f64v1.x, f64v2);
+    b     = isnan(f64);
+    bv    = isinf(f64v1);
+    f64v3 = fma(f64v1, f64v2, f64v3);
+    f64v2 = frexp(f64v1, iv);
+    f64v2 = ldexp(f64v1, iv);
+}
+
+void builtinGeometryFuncs()
+{
+    float64_t f64;
+    f64vec3   f64v1, f64v2, f64v3;
+
+    f64   = length(f64v1);
+    f64   = distance(f64v1, f64v2);
+    f64   = dot(f64v1, f64v2);
+    f64v3 = cross(f64v1, f64v2);
+    f64v2 = normalize(f64v1);
+    f64v3 = faceforward(f64v1, f64v2, f64v3);
+    f64v3 = reflect(f64v1, f64v2);
+    f64v3 = refract(f64v1, f64v2, f64);
+}
+
+void builtinMatrixFuncs()
+{
+    f64mat2x3 f64m1, f64m2, f64m3;
+    f64mat3x2 f64m4;
+    f64mat3   f64m5;
+    f64mat4   f64m6, f64m7;
+
+    f64vec3 f64v1;
+    f64vec2 f64v2;
+
+    float64_t f64;
+
+    f64m3 = matrixCompMult(f64m1, f64m2);
+    f64m1 = outerProduct(f64v1, f64v2);
+    f64m4 = transpose(f64m1);
+    f64   = determinant(f64m5);
+    f64m6 = inverse(f64m7);
+}
+
+void builtinVecRelFuncs()
+{
+    f64vec3 f64v1, f64v2;
+    bvec3   bv;
+
+    bv = lessThan(f64v1, f64v2);
+    bv = lessThanEqual(f64v1, f64v2);
+    bv = greaterThan(f64v1, f64v2);
+    bv = greaterThanEqual(f64v1, f64v2);
+    bv = equal(f64v1, f64v2);
+    bv = notEqual(f64v1, f64v2);
+}
+
+in flat f64vec3 if64v;
+
+void builtinFragProcFuncs()
+{
+    f64vec3 f64v;
+
+    // Derivative
+    f64v.x  = dFdx(if64v.x);
+    f64v.y  = dFdy(if64v.y);
+    f64v.xy = dFdxFine(if64v.xy);
+    f64v.xy = dFdyFine(if64v.xy);
+    f64v    = dFdxCoarse(if64v);
+    f64v    = dFdxCoarse(if64v);
+
+    f64v.x  = fwidth(if64v.x);
+    f64v.xy = fwidthFine(if64v.xy);
+    f64v    = fwidthCoarse(if64v);
+
+    // Interpolation
+    f64v.x  = interpolateAtCentroid(if64v.x);
+    f64v.xy = interpolateAtSample(if64v.xy, 1);
+    f64v    = interpolateAtOffset(if64v, f64vec2(0.5f));
+}
diff --git a/Test/spv.int16.amd.frag b/Test/spv.int16.amd.frag
new file mode 100644
index 0000000..818e6d8
--- /dev/null
+++ b/Test/spv.int16.amd.frag
@@ -0,0 +1,314 @@
+#version 450 core
+
+#extension GL_ARB_gpu_shader_int64: enable
+#extension GL_AMD_gpu_shader_half_float: enable
+#extension GL_AMD_gpu_shader_int16: enable
+
+layout(binding = 0) uniform Uniforms
+{
+    uint i;
+};
+
+// int16/uint16 in block
+layout(std140, binding = 1) uniform Block
+{
+    i16vec3  i16v;
+    uint16_t u16;
+} block;
+
+// int16/uint16 for input
+layout(location = 0) in flat u16vec3 iu16v;
+layout(location = 1) in flat int16_t ii16;
+
+void literal()
+{
+    const int16_t i16c[3] =
+    {
+        0x111S,         // Hex
+        -2s,            // Dec
+        0400s,          // Oct
+    };
+
+    const uint16_t u16c[] =
+    {
+        0xFFFFus,       // Hex
+        65535US,        // Dec
+        0177777us,      // Oct
+    };
+
+    uint16_t u16 = i16c[i] + u16c[i];
+}
+
+void operators()
+{
+    u16vec3  u16v;
+    int16_t  i16;
+    uint16_t u16;
+    int      i;
+    uint     u;
+    bool     b;
+
+    // Unary
+    u16v++;
+    i16--;
+    ++i16;
+    --u16v;
+
+    u16v = ~u16v;
+
+    i16 = +i16;
+    u16v = -u16v;
+
+    // Arithmetic
+    u16  += i16;
+    u16v -= u16v;
+    i16  *= i16;
+    u16v /= u16v;
+    u16v %= i16;
+
+    u16v = u16v + u16v;
+    u16  = i16 - u16;
+    u16v = u16v * i16;
+    i16  = i16 * i16;
+    i16  = i16 % i16;
+
+    // Shift
+    u16v <<= i16;
+    i16  >>= u16v.y;
+
+    i16  = i16 << u16v.z;
+    u16v = u16v << i16;
+
+    // Relational
+    b = (u16v.x != i16);
+    b = (i16 == u16v.x);
+    b = (u16v.x > u16v.y);
+    b = (i16 < u);
+    b = (u16v.y >= u16v.x);
+    b = (i16 <= i);
+
+    // Bitwise
+    u16v |= i16;
+    u16  = i16 | u16;
+    i16  &= i16;
+    u16v = u16v & u16v;
+    u16v ^= i16;
+    u16v = u16v ^ i16;
+}
+
+void typeCast()
+{
+    bvec2 bv;
+    ivec2 iv;
+    uvec2 uv;
+    vec2  fv;
+    dvec2 dv;
+
+    f16vec2 f16v;
+    i64vec2 i64v;
+    u64vec2 u64v;
+    i16vec2 i16v;
+    u16vec2 u16v;
+
+    i16v = i16vec2(bv);   // bool -> int16
+    u16v = u16vec2(bv);   // bool -> uint16
+    bv   = bvec2(i16v);   // int16  -> bool
+    bv   = bvec2(u16v);   // uint16 -> bool
+
+    i16v = i16vec2(iv);   // int -> int16
+    u16v = u16vec2(iv);   // int -> uint16
+    iv   = i16v;          // int16  -> int
+    iv   = ivec2(u16v);   // uint16 -> int
+
+    i16v = i16vec2(uv);   // uint -> int16
+    u16v = u16vec2(uv);   // uint -> uint16
+    uv   = i16v;          // int16  -> uint
+    uv   = u16v;          // uint16 -> uint
+
+    i16v = i16vec2(fv);   // float -> int16
+    u16v = u16vec2(fv);   // float -> uint16
+    fv   = i16v;          // int16  -> float
+    fv   = u16v;          // uint16 -> float
+
+    i16v = i16vec2(dv);   // double -> int16
+    u16v = u16vec2(dv);   // double -> uint16
+    dv   = i16v;          // int16  -> double
+    dv   = u16v;          // uint16 -> double
+
+    i16v = i16vec2(f16v); // float16 -> int16
+    u16v = u16vec2(f16v); // float16 -> uint16
+    f16v = i16v;          // int16  -> float16
+    f16v = u16v;          // uint16 -> float16
+
+    i16v = i16vec2(i64v); // int64 -> int16
+    u16v = u16vec2(i64v); // int64 -> uint16
+    i64v = i16v;          // int16  -> int64
+    i64v = i64vec2(u16v); // uint16 -> int64
+
+    i16v = i16vec2(u64v); // uint64 -> int16
+    u16v = u16vec2(u64v); // uint64 -> uint16
+    u64v = i16v;          // int16  -> uint64
+    u64v = u16v;          // uint16 -> uint64
+
+    i16v = i16vec2(u16v); // uint16 -> int16
+    u16v = i16v;          // int16 -> uint16
+}
+
+void builtinFuncs()
+{
+    i16vec2  i16v;
+    u16vec3  u16v;
+    f16vec3  f16v;
+    bvec3    bv;
+
+    int16_t  i16;
+    uint16_t u16;
+
+    // abs()
+    i16v = abs(i16v);
+
+    // sign()
+    i16v  = sign(i16v);
+
+    // min()
+    i16v = min(i16v, i16);
+    i16v = min(i16v, i16vec2(-1s));
+    u16v = min(u16v, u16);
+    u16v = min(u16v, u16vec3(0us));
+
+    // max()
+    i16v = max(i16v, i16);
+    i16v = max(i16v, i16vec2(-1s));
+    u16v = max(u16v, u16);
+    u16v = max(u16v, u16vec3(0us));
+
+    // clamp()
+    i16v = clamp(i16v, -i16, i16);
+    i16v = clamp(i16v, -i16v, i16v);
+    u16v = clamp(u16v, -u16, u16);
+    u16v = clamp(u16v, -u16v, u16v);
+
+    // mix()
+    i16  = mix(i16v.x, i16v.y, true);
+    i16v = mix(i16vec2(i16), i16vec2(-i16), bvec2(false));
+    u16  = mix(u16v.x, u16v.y, true);
+    u16v = mix(u16vec3(u16), u16vec3(-u16), bvec3(false));
+
+    // frexp()
+    i16vec3 exp;
+    f16v = frexp(f16v, exp);
+
+    // ldexp()
+    f16v = ldexp(f16v, exp);
+
+    // float16BitsToInt16()
+    i16v = float16BitsToInt16(f16v.xy);
+
+    // float16BitsToUint16()
+    u16v.x = float16BitsToUint16(f16v.z);
+
+    // int16BitsToFloat16()
+    f16v.xy = int16BitsToFloat16(i16v);
+
+    // uint16BitsToFloat16()
+    f16v = uint16BitsToFloat16(u16v);
+
+    // packInt2x16()
+    int packi = packInt2x16(i16v);
+
+    // unpackInt2x16()
+    i16v = unpackInt2x16(packi);
+
+    // packUint2x16()
+    uint packu = packUint2x16(u16v.xy);
+
+    // unpackUint2x16()
+    u16v.xy = unpackUint2x16(packu);
+
+    // packInt4x16()
+    int64_t packi64 = packInt4x16(i16vec4(i16));
+
+    // unpackInt4x16()
+    i16v = unpackInt4x16(packi64).xy;
+
+    // packUint4x16()
+    uint64_t packu64 = packUint4x16(u16vec4(u16));
+
+    // unpackUint4x16()
+    u16v = unpackUint4x16(packu64).xyz;
+
+    // lessThan()
+    bv    = lessThan(u16v, u16vec3(u16));
+    bv.xy = lessThan(i16v, i16vec2(i16));
+
+    // lessThanEqual()
+    bv    = lessThanEqual(u16v, u16vec3(u16));
+    bv.xy = lessThanEqual(i16v, i16vec2(i16));
+
+    // greaterThan()
+    bv    = greaterThan(u16v, u16vec3(u16));
+    bv.xy = greaterThan(i16v, i16vec2(i16));
+
+    // greaterThanEqual()
+    bv    = greaterThanEqual(u16v, u16vec3(u16));
+    bv.xy = greaterThanEqual(i16v, i16vec2(i16));
+
+    // equal()
+    bv    = equal(u16v, u16vec3(u16));
+    bv.xy = equal(i16v, i16vec2(i16));
+
+    // notEqual()
+    bv    = notEqual(u16v, u16vec3(u16));
+    bv.xy = notEqual(i16v, i16vec2(i16));
+}
+
+// Type conversion for specialization constant
+layout(constant_id = 100) const int64_t  si64 = -10L;
+layout(constant_id = 101) const uint64_t su64 = 20UL;
+layout(constant_id = 102) const int  si = -5;
+layout(constant_id = 103) const uint su = 4;
+layout(constant_id = 104) const bool sb = true;
+layout(constant_id = 105) const int16_t si16 = -5S;
+layout(constant_id = 106) const uint16_t su16 = 4US;
+
+// bool <-> int16/uint16
+const bool i16_to_b = bool(si16);
+const bool u16_to_b = bool(su16);
+const int16_t  b_to_i16 = int16_t(sb);
+const uint16_t b_to_u16 = uint16_t(sb);
+
+// int <-> int16/uint16
+const int i16_to_i = int(si16);
+const int u16_to_i = int(su16);
+const int16_t  i_to_i16 = int16_t(si);
+const uint16_t i_to_u16 = uint16_t(si);
+
+// uint <-> int16/uint16
+const uint i16_to_u = uint(si16);
+const uint u16_to_u = uint(su16);
+const int16_t  u_to_i16 = int16_t(su);
+const uint16_t u_to_u16 = uint16_t(su);
+
+// int64 <-> int16/uint16
+const int64_t i16_to_i64 = int64_t(si16);
+const int64_t u16_to_i64 = int64_t(su16);
+const int16_t  i64_to_i16 = int16_t(si64);
+const uint16_t i64_to_u16 = uint16_t(si64);
+
+// uint64 <-> int16/uint16
+const uint64_t i16_to_u64 = uint64_t(si16);
+const uint64_t u16_to_u64 = uint64_t(su16);
+const int16_t  u64_to_i16 = int16_t(su64);
+const uint16_t u64_to_u16 = uint16_t(su64);
+
+// int16 <-> uint16
+const uint16_t i16_to_u16 = uint16_t(si16);
+const int16_t  u16_to_i16 = int16_t(su16);
+
+void main()
+{
+    literal();
+    operators();
+    typeCast();
+    builtinFuncs();
+}
diff --git a/Test/spv.int16.frag b/Test/spv.int16.frag
index 9dd9090..d29894b 100644
--- a/Test/spv.int16.frag
+++ b/Test/spv.int16.frag
@@ -1,314 +1,251 @@
-#version 450 core

-

-#extension GL_ARB_gpu_shader_int64: enable

-#extension GL_AMD_gpu_shader_half_float: enable

-#extension GL_AMD_gpu_shader_int16: enable

-

-layout(binding = 0) uniform Uniforms

-{

-    uint i;

-};

-

-// int16/uint16 in block

-layout(std140, binding = 1) uniform Block

-{

-    i16vec3  i16v;

-    uint16_t u16;

-} block;

-

-// int16/uint16 for input

-layout(location = 0) in flat u16vec3 iu16v;

-layout(location = 1) in flat int16_t ii16;

-

-void literal()

-{

-    const int16_t i16c[3] =

-    {

-        0x111S,         // Hex

-        -2s,            // Dec

-        0400s,          // Oct

-    };

-

-    const uint16_t u16c[] =

-    {

-        0xFFFFus,       // Hex

-        65535US,        // Dec

-        0177777us,      // Oct

-    };

-

-    uint16_t u16 = i16c[i] + u16c[i];

-}

-

-void operators()

-{

-    u16vec3  u16v;

-    int16_t  i16;

-    uint16_t u16;

-    int      i;

-    uint     u;

-    bool     b;

-

-    // Unary

-    u16v++;

-    i16--;

-    ++i16;

-    --u16v;

-

-    u16v = ~u16v;

-

-    i16 = +i16;

-    u16v = -u16v;

-

-    // Arithmetic

-    u16  += i16;

-    u16v -= u16v;

-    i16  *= i16;

-    u16v /= u16v;

-    u16v %= i16;

-

-    u16v = u16v + u16v;

-    u16  = i16 - u16;

-    u16v = u16v * i16;

-    i16  = i16 * i16;

-    i16  = i16 % i16;

-

-    // Shift

-    u16v <<= i;

-    i16  >>= u16v.y;

-

-    i16  = i16 << u16v.z;

-    u16v = u16v << i16;

-

-    // Relational

-    b = (u16v.x != i16);

-    b = (i16 == u16v.x);

-    b = (u16v.x > u16v.y);

-    b = (i16 < u);

-    b = (u16v.y >= u16v.x);

-    b = (i16 <= i);

-

-    // Bitwise

-    u16v |= i16;

-    u16  = i16 | u16;

-    i16  &= i16;

-    u16v = u16v & u16v;

-    u16v ^= i16;

-    u16v = u16v ^ i16;

-}

-

-void typeCast()

-{

-    bvec2 bv;

-    ivec2 iv;

-    uvec2 uv;

-    vec2  fv;

-    dvec2 dv;

-

-    f16vec2 f16v;

-    i64vec2 i64v;

-    u64vec2 u64v;

-    i16vec2 i16v;

-    u16vec2 u16v;

-

-    i16v = i16vec2(bv);   // bool -> int16

-    u16v = u16vec2(bv);   // bool -> uint16

-    bv   = bvec2(i16v);   // int16  -> bool

-    bv   = bvec2(u16v);   // uint16 -> bool

-

-    i16v = i16vec2(iv);   // int -> int16

-    u16v = u16vec2(iv);   // int -> uint16

-    iv   = i16v;          // int16  -> int

-    iv   = ivec2(u16v);   // uint16 -> int

-

-    i16v = i16vec2(uv);   // uint -> int16

-    u16v = u16vec2(uv);   // uint -> uint16

-    uv   = i16v;          // int16  -> uint

-    uv   = u16v;          // uint16 -> uint

-

-    i16v = i16vec2(fv);   // float -> int16

-    u16v = u16vec2(fv);   // float -> uint16

-    fv   = i16v;          // int16  -> float

-    fv   = u16v;          // uint16 -> float

-

-    i16v = i16vec2(dv);   // double -> int16

-    u16v = u16vec2(dv);   // double -> uint16

-    dv   = i16v;          // int16  -> double

-    dv   = u16v;          // uint16 -> double

-

-    i16v = i16vec2(f16v); // float16 -> int16

-    u16v = u16vec2(f16v); // float16 -> uint16

-    f16v = i16v;          // int16  -> float16

-    f16v = u16v;          // uint16 -> float16

-

-    i16v = i16vec2(i64v); // int64 -> int16

-    u16v = u16vec2(i64v); // int64 -> uint16

-    i64v = i16v;          // int16  -> int64

-    i64v = i64vec2(u16v); // uint16 -> int64

-

-    i16v = i16vec2(u64v); // uint64 -> int16

-    u16v = u16vec2(u64v); // uint64 -> uint16

-    u64v = i16v;          // int16  -> uint64

-    u64v = u16v;          // uint16 -> uint64

-

-    i16v = i16vec2(u16v); // uint16 -> int16

-    u16v = i16v;          // int16 -> uint16

-}

-

-void builtinFuncs()

-{

-    i16vec2  i16v;

-    u16vec3  u16v;

-    f16vec3  f16v;

-    bvec3    bv;

-

-    int16_t  i16;

-    uint16_t u16;

-

-    // abs()

-    i16v = abs(i16v);

-

-    // sign()

-    i16v  = sign(i16v);

-

-    // min()

-    i16v = min(i16v, i16);

-    i16v = min(i16v, i16vec2(-1s));

-    u16v = min(u16v, u16);

-    u16v = min(u16v, u16vec3(0us));

-

-    // max()

-    i16v = max(i16v, i16);

-    i16v = max(i16v, i16vec2(-1s));

-    u16v = max(u16v, u16);

-    u16v = max(u16v, u16vec3(0us));

-

-    // clamp()

-    i16v = clamp(i16v, -i16, i16);

-    i16v = clamp(i16v, -i16v, i16v);

-    u16v = clamp(u16v, -u16, u16);

-    u16v = clamp(u16v, -u16v, u16v);

-

-    // mix()

-    i16  = mix(i16v.x, i16v.y, true);

-    i16v = mix(i16vec2(i16), i16vec2(-i16), bvec2(false));

-    u16  = mix(u16v.x, u16v.y, true);

-    u16v = mix(u16vec3(u16), u16vec3(-u16), bvec3(false));

-

-    // frexp()

-    i16vec3 exp;

-    f16v = frexp(f16v, exp);

-

-    // ldexp()

-    f16v = ldexp(f16v, exp);

-

-    // float16BitsToInt16()

-    i16v = float16BitsToInt16(f16v.xy);

-

-    // float16BitsToUint16()

-    u16v.x = float16BitsToUint16(f16v.z);

-

-    // int16BitsToFloat16()

-    f16v.xy = int16BitsToFloat16(i16v);

-

-    // uint16BitsToFloat16()

-    f16v = uint16BitsToFloat16(u16v);

-

-    // packInt2x16()

-    int packi = packInt2x16(i16v);

-

-    // unpackInt2x16()

-    i16v = unpackInt2x16(packi);

-

-    // packUint2x16()

-    uint packu = packUint2x16(u16v.xy);

-

-    // unpackUint2x16()

-    u16v.xy = unpackUint2x16(packu);

-

-    // packInt4x16()

-    int64_t packi64 = packInt4x16(i16vec4(i16));

-

-    // unpackInt4x16()

-    i16v = unpackInt4x16(packi64).xy;

-

-    // packUint4x16()

-    uint64_t packu64 = packUint4x16(u16vec4(u16));

-

-    // unpackUint4x16()

-    u16v = unpackUint4x16(packu64).xyz;

-

-    // lessThan()

-    bv    = lessThan(u16v, u16vec3(u16));

-    bv.xy = lessThan(i16v, i16vec2(i16));

-

-    // lessThanEqual()

-    bv    = lessThanEqual(u16v, u16vec3(u16));

-    bv.xy = lessThanEqual(i16v, i16vec2(i16));

-

-    // greaterThan()

-    bv    = greaterThan(u16v, u16vec3(u16));

-    bv.xy = greaterThan(i16v, i16vec2(i16));

-

-    // greaterThanEqual()

-    bv    = greaterThanEqual(u16v, u16vec3(u16));

-    bv.xy = greaterThanEqual(i16v, i16vec2(i16));

-

-    // equal()

-    bv    = equal(u16v, u16vec3(u16));

-    bv.xy = equal(i16v, i16vec2(i16));

-

-    // notEqual()

-    bv    = notEqual(u16v, u16vec3(u16));

-    bv.xy = notEqual(i16v, i16vec2(i16));

-}

-

-// Type conversion for specialization constant

-layout(constant_id = 100) const int64_t  si64 = -10L;

-layout(constant_id = 101) const uint64_t su64 = 20UL;

-layout(constant_id = 102) const int  si = -5;

-layout(constant_id = 103) const uint su = 4;

-layout(constant_id = 104) const bool sb = true;

-layout(constant_id = 105) const int16_t si16 = -5S;

-layout(constant_id = 106) const uint16_t su16 = 4US;

-

-// bool <-> int16/uint16

-const bool i16_to_b = bool(si16);

-const bool u16_to_b = bool(su16);

-const int16_t  b_to_i16 = int16_t(sb);

-const uint16_t b_to_u16 = uint16_t(sb);

-

-// int <-> int16/uint16

-const int i16_to_i = int(si16);

-const int u16_to_i = int(su16);

-const int16_t  i_to_i16 = int16_t(si);

-const uint16_t i_to_u16 = uint16_t(si);

-

-// uint <-> int16/uint16

-const uint i16_to_u = uint(si16);

-const uint u16_to_u = uint(su16);

-const int16_t  u_to_i16 = int16_t(su);

-const uint16_t u_to_u16 = uint16_t(su);

-

-// int64 <-> int16/uint16

-const int64_t i16_to_i64 = int64_t(si16);

-const int64_t u16_to_i64 = int64_t(su16);

-const int16_t  i64_to_i16 = int16_t(si64);

-const uint16_t i64_to_u16 = uint16_t(si64);

-

-// uint64 <-> int16/uint16

-const uint64_t i16_to_u64 = uint64_t(si16);

-const uint64_t u16_to_u64 = uint64_t(su16);

-const int16_t  u64_to_i16 = int16_t(su64);

-const uint16_t u64_to_u16 = uint16_t(su64);

-

-// int16 <-> uint16

-const uint16_t i16_to_u16 = uint16_t(si16);

-const int16_t  u16_to_i16 = int16_t(su16);

-

-void main()

-{

-    literal();

-    operators();

-    typeCast();

-    builtinFuncs();

-}

+#version 450
+
+#extension GL_KHX_shader_explicit_arithmetic_types: enable
+#extension GL_KHX_shader_explicit_arithmetic_types_int8: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int16: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int32: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float16: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float32: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float64: require
+
+layout(binding = 0) uniform Uniforms
+{
+    uint index;
+};
+
+layout(std140, binding = 1) uniform Block
+{
+    int16_t   i16;
+    i16vec2   i16v2;
+    i16vec3   i16v3;
+    i16vec4   i16v4;
+    uint16_t  u16;
+    u16vec2   u16v2;
+    u16vec3   u16v3;
+    u16vec4   u16v4;
+} block;
+
+void main()
+{
+}
+
+void literal()
+{
+    const int16_t i16Const[3] =
+    {
+        int16_t(-0x1111),           // Hex
+        int16_t(-1),                // Dec
+        int16_t(040000),            // Oct
+    };
+
+    int16_t i16 = i16Const[index];
+
+    const uint16_t u16Const[] =
+    {
+        uint16_t(0xFFFF),             // Hex
+        uint16_t(65535),              // Dec
+        uint16_t(077777),             // Oct
+    };
+
+    uint16_t u16 = u16Const[index];
+}
+
+void typeCast16()
+{
+    i8vec2 i8v;
+    u8vec2 u8v;
+    i16vec2 i16v;
+    u16vec2 u16v;
+    i32vec2 i32v;
+    u32vec2 u32v;
+    i64vec2 i64v;
+    u64vec2 u64v;
+    f16vec2 f16v;
+    f32vec2 f32v;
+    f64vec2 f64v;
+    bvec2   bv;
+
+    i32v = i16v;     // int16_t  ->   int32_t
+    i32v = u16v;     // uint16_t ->   int32_t
+    u16v = i16v;     // int16_t  ->  uint16_t
+    u32v = i16v;     // int16_t  ->  uint32_t
+    i64v = i16v;     // int16_t  ->   int64_t
+    u64v = i16v;     // int16_t  ->  uint64_t
+    u32v = u16v;     // uint16_t ->  uint32_t
+    i64v = u16v;     // uint16_t ->   int64_t
+    u64v = u16v;     // uint16_t ->  uint64_t
+    f16v = i16v;     // int16_t  ->  float16_t
+    f32v = i16v;     // int16_t  ->  float32_t
+    f64v = i16v;     // int16_t  ->  float64_t
+    f16v = u16v;     // uint16_t ->  float16_t
+    f32v = u16v;     // uint16_t ->  float32_t
+    f64v = u16v;     // uint16_t ->  float64_t
+
+    i32v = i32vec2(i16v);     // int16_t  ->   int32_t
+    i32v = i32vec2(u16v);     // uint16_t ->   int32_t
+    u16v = u16vec2(i16v);     // int16_t  ->  uint16_t
+    u32v = u32vec2(i16v);     // int16_t  ->  uint32_t
+    i64v = i64vec2(i16v);     // int16_t  ->   int64_t
+    u64v = i64vec2(i16v);     // int16_t  ->  uint64_t
+    u32v = u32vec2(u16v);     // uint16_t ->  uint32_t
+    i64v = i64vec2(u16v);     // uint16_t ->   int64_t
+    u64v = i64vec2(u16v);     // uint16_t ->  uint64_t
+    f16v = f16vec2(i16v);     // int16_t  ->  float16_t
+    f32v = f32vec2(i16v);     // int16_t  ->  float32_t
+    f64v = f64vec2(i16v);     // int16_t  ->  float64_t
+    f16v = f16vec2(u16v);     // uint16_t ->  float16_t
+    f32v = f32vec2(u16v);     // uint16_t ->  float32_t
+    f64v = f64vec2(u16v);     // uint16_t ->  float64_t
+
+    i8v  = i8vec2(i16v);      // int16_t  ->   int8_t
+    i8v  = i8vec2(u16v);      // uint16_t ->   int8_t
+    u8v  = u8vec2(i16v);      // int16_t  ->  uint8_t
+    u8v  = u8vec2(u16v);      // uint16_t ->  uint8_t
+    i16v = u8vec2(u16v);      // uint16_t ->   int16_t
+    i16v = i16vec2(bv);       // bool     ->   int16
+    u16v = u16vec2(bv);       // bool     ->   uint16
+    bv   = bvec2(i16v);       // int16    ->   bool
+    bv   = bvec2(u16v);       // uint16   ->   bool
+}
+void operators()
+{
+    u16vec3 u16v;
+    int16_t i16;
+    uvec3   uv;
+    int32_t i;
+    int64_t i64;
+    bool    b;
+
+    // Unary
+    u16v++;
+    i16--;
+    ++i16;
+    --u16v;
+
+    u16v = ~u16v;
+
+    i16 = +i16;
+    u16v = -u16v;
+
+    // Arithmetic
+    i16  += i16;
+    u16v -= u16v;
+    i  *= i16;
+    uv /= u16v;
+    uv %= i16;
+
+    uv = u16v + uv;
+    i64  = i16 - i64;
+    uv = u16v * uv;
+    i64  = i16 * i64;
+    i  = i16 % i;
+
+    // Shift
+    u16v <<= i16;
+    i16  >>= u16v.y;
+
+    i16  = i16 << u16v.z;
+    uv = u16v << i;
+
+    // Relational
+    b = (u16v.x != i16);
+    b = (i16 == u16v.x);
+    b = (u16v.x > uv.y);
+    b = (i16 < i);
+    b = (u16v.y >= uv.x);
+    b = (i16 <= i);
+
+    // Bitwise
+    uv |= i16;
+    i  = i16 | i;
+    i64  &= i16;
+    uv = u16v & uv;
+    uv ^= i16;
+    u16v = u16v ^ i16;
+}
+
+void builtinFuncs()
+{
+    i16vec2  i16v;
+    i16vec4  i16v4;
+    u16vec3  u16v;
+    u16vec2  u16v2;
+    u16vec4  u16v4;
+    bvec3   bv;
+    int16_t i16;
+    uint16_t u16;
+    int32_t i32;
+    uint32_t u32;
+    int64_t i64;
+    uint64_t u64;
+
+    // abs()
+    i16v = abs(i16v);
+
+    // sign()
+    i16  = sign(i16);
+
+    // min()
+    i16v = min(i16v, i16);
+    i16v = min(i16v, i16vec2(-1));
+    u16v = min(u16v, u16);
+    u16v = min(u16v, u16vec3(0));
+
+    // max()
+    i16v = max(i16v, i16);
+    i16v = max(i16v, i16vec2(-1));
+    u16v = max(u16v, u16);
+    u16v = max(u16v, u16vec3(0));
+
+    // clamp()
+    i16v = clamp(i16v, -i16, i16);
+    i16v = clamp(i16v, -i16v, i16v);
+    u16v = clamp(u16v, -u16, u16);
+    u16v = clamp(u16v, -u16v, u16v);
+
+    // mix()
+    i16  = mix(i16v.x, i16v.y, true);
+    i16v = mix(i16vec2(i16), i16vec2(-i16), bvec2(false));
+    u16  = mix(u16v.x, u16v.y, true);
+    u16v = mix(u16vec3(u16), u16vec3(-u16), bvec3(false));
+
+    //pack
+    i32 = pack32(i16v);
+    i64 = pack64(i16v4);
+    u32 = pack32(u16v2);
+    u64 = pack64(u16v4);
+
+    i16v  = unpack16(i32);
+    i16v4 = unpack16(i64);
+    u16v2 = unpack16(u32);
+    u16v4 = unpack16(u64);
+
+    // lessThan()
+    bv    = lessThan(u16v, u16vec3(u16));
+    bv.xy = lessThan(i16v, i16vec2(i16));
+
+    // lessThanEqual()
+    bv    = lessThanEqual(u16v, u16vec3(u16));
+    bv.xy = lessThanEqual(i16v, i16vec2(i16));
+
+    // greaterThan()
+    bv    = greaterThan(u16v, u16vec3(u16));
+    bv.xy = greaterThan(i16v, i16vec2(i16));
+
+    // greaterThanEqual()
+    bv    = greaterThanEqual(u16v, u16vec3(u16));
+    bv.xy = greaterThanEqual(i16v, i16vec2(i16));
+
+    // equal()
+    bv    = equal(u16v, u16vec3(u16));
+    bv.xy = equal(i16v, i16vec2(i16));
+
+    // notEqual()
+    bv    = notEqual(u16v, u16vec3(u16));
+    bv.xy = notEqual(i16v, i16vec2(i16));
+}
+
+// Type conversion for specialization constant
+layout(constant_id = 100) const int16_t  si16 = int16_t(-10);
+layout(constant_id = 101) const uint16_t su16 = uint16_t(20);
diff --git a/Test/spv.int32.frag b/Test/spv.int32.frag
new file mode 100644
index 0000000..3a33c67
--- /dev/null
+++ b/Test/spv.int32.frag
@@ -0,0 +1,256 @@
+#version 450
+
+#extension GL_KHX_shader_explicit_arithmetic_types: enable
+#extension GL_KHX_shader_explicit_arithmetic_types_int8: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int16: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int32: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float16: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float32: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float64: require
+
+layout(binding = 0) uniform Uniforms
+{
+    uint index;
+};
+
+layout(std140, binding = 1) uniform Block
+{
+    int32_t   i32;
+    i32vec2   i32v2;
+    i32vec3   i32v3;
+    i32vec4   i32v4;
+    uint32_t  u32;
+    u32vec2   u32v2;
+    u32vec3   u32v3;
+    u32vec4   u32v4;
+} block;
+
+void main()
+{
+}
+
+void literal()
+{
+
+    const int32_t i32Const[3] =
+    {
+        -0x11111111,           // Hex
+        -1,                    // Dec
+        04000000000,           // Oct
+    };
+
+    int32_t i32 = i32Const[index];
+
+    const uint32_t u32Const[] =
+    {
+        0xFFFFFFFF,             // Hex
+        4294967295,             // Dec
+        017777777777,           // Oct
+    };
+
+    uint32_t u32 = u32Const[index];
+}
+
+void typeCast32()
+{
+    i8vec2 i8v;
+    u8vec2 u8v;
+    i16vec2 i16v;
+    u16vec2 u16v;
+    i32vec2 i32v;
+    u32vec2 u32v;
+    i64vec2 i64v;
+    u64vec2 u64v;
+    f16vec2 f16v;
+    f32vec2 f32v;
+    f64vec2 f64v;
+    bvec2   bv;
+
+    u32v = i32v;     // int32_t  ->  uint32_t
+    i64v = i32v;     // int32_t  ->   int64_t
+    u64v = i32v;     // int32_t  ->  uint64_t
+    i64v = u32v;     // uint32_t ->   int64_t
+    u64v = u32v;     // uint32_t ->  uint64_t
+    f32v = i32v;     // int32_t  ->  float32_t
+    f64v = i32v;     // int32_t  ->  float64_t
+    f32v = u32v;     // uint32_t ->  float32_t
+    f64v = u32v;     // uint32_t ->  float64_t
+
+    i8v =  i8vec2(i32v);       // int32_t   ->   int8_t
+    i8v =  i8vec2(u32v);       // uint32_t  ->   int8_t
+    i16v = i16vec2(i32v);      // int32_t   ->   int16_t
+    i16v = i16vec2(u32v);      // uint32_t  ->   int16_t
+    i32v = i32vec2(i32v);      // int32_t   ->   int32_t
+    i32v = i32vec2(u32v);      // uint32_t  ->   int32_t
+    i64v = i64vec2(i32v);      // int32_t   ->   int64_t
+	i64v = i64vec2(u32v);      // uint32_t  ->   int64_t
+	u8v =  u8vec2(i32v);       // int32_t   ->   uint8_t
+    u8v =  u8vec2(u32v);       // uint32_t  ->   uint8_t
+    u16v = u16vec2(i32v);      // int32_t   ->   uint16_t
+    u16v = u16vec2(u32v);      // uint32_t  ->   uint16_t
+    u32v = u32vec2(i32v);      // int32_t   ->   uint32_t
+    u32v = u32vec2(u32v);      // uint32_t  ->   uint32_t
+    u64v = u64vec2(i32v);      // int32_t   ->   uint64_t
+    u64v = u64vec2(u32v);      // uint32_t  ->   uint64_t
+
+    f16v = f16vec2(i32v);      // int32_t   ->  float16_t
+    f32v = f32vec2(i32v);      // int32_t   ->  float32_t
+    f64v = f64vec2(i32v);      // int32_t   ->  float64_t
+    f16v = f16vec2(u32v);      // uint32_t  ->  float16_t
+    f32v = f32vec2(u32v);      // uint32_t  ->  float32_t
+    f64v = f64vec2(u32v);      // uint32_t  ->  float64_t
+
+    i32v = i32vec2(bv);       // bool     ->   int32
+    u32v = u32vec2(bv);       // bool     ->   uint32
+    bv   = bvec2(i32v);       // int32    ->   bool
+    bv   = bvec2(u32v);       // uint32   ->   bool
+}
+
+void operators()
+{
+    u32vec3 u32v;
+    int32_t i32;
+    uvec3   uv;
+    int32_t i;
+    int64_t i64;
+    bool    b;
+
+    // Unary
+    u32v++;
+    i32--;
+    ++i32;
+    --u32v;
+
+    u32v = ~u32v;
+
+    i32 = +i32;
+    u32v = -u32v;
+
+    // Arithmetic
+    i32  += i32;
+    u32v -= u32v;
+    i  *= i32;
+    uv /= u32v;
+    uv %= i32;
+
+    uv = u32v + uv;
+    i64  = i32 - i64;
+    uv = u32v * uv;
+    i64  = i32 * i64;
+    i  = i32 % i;
+
+    // Shift
+    u32v <<= i32;
+    i32  >>= u32v.y;
+
+    i64  = i64 << u32v.z;
+    uv = u32v << i;
+
+    // Relational
+    b = (u32v.x != i32);
+    b = (i32 == u32v.x);
+    b = (u32v.x > uv.y);
+    b = (i32 < i);
+    b = (u32v.y >= uv.x);
+    b = (i32 <= i);
+
+    // Bitwise
+    uv |= i32;
+    i  = i32 | i;
+    i64  &= i32;
+    uv = u32v & uv;
+    uv ^= i32;
+    u32v = u32v ^ i32;
+}
+
+void builtinFuncs()
+{
+    i32vec2  i32v;
+    i32vec4  i32v4;
+    u32vec3  u32v;
+    u32vec2  u32v2;
+    u32vec4  u32v4;
+    bvec3   bv;
+    int32_t i32;
+    uint32_t u32;
+    int64_t i64;
+    uint64_t u64;
+    i8vec4  i8v4;
+    u8vec4  u8v4;
+    i16vec2  i16v2;
+    u16vec2  u16v2;
+
+    // abs()
+    i32v = abs(i32v);
+
+    // sign()
+    i32  = sign(i32);
+
+    // min()
+    i32v = min(i32v, i32);
+    i32v = min(i32v, i32vec2(-1));
+    u32v = min(u32v, u32);
+    u32v = min(u32v, u32vec3(0));
+
+    // max()
+    i32v = max(i32v, i32);
+    i32v = max(i32v, i32vec2(-1));
+    u32v = max(u32v, u32);
+    u32v = max(u32v, u32vec3(0));
+
+    // clamp()
+    i32v = clamp(i32v, -i32, i32);
+    i32v = clamp(i32v, -i32v, i32v);
+    u32v = clamp(u32v, -u32, u32);
+    u32v = clamp(u32v, -u32v, u32v);
+
+    // mix()
+    i32  = mix(i32v.x, i32v.y, true);
+    i32v = mix(i32vec2(i32), i32vec2(-i32), bvec2(false));
+    u32  = mix(u32v.x, u32v.y, true);
+    u32v = mix(u32vec3(u32), u32vec3(-u32), bvec3(false));
+
+    //pack
+    i32 = pack32(i8v4);
+    i32 = pack32(i16v2);
+    u32 = pack32(u8v4);
+    u32 = pack32(u16v2);
+
+    i32v  = unpack32(i64);
+    u32v2  = unpack32(u64);
+
+    // lessThan()
+    bv    = lessThan(u32v, u32vec3(u32));
+    bv.xy = lessThan(i32v, i32vec2(i32));
+
+    // lessThanEqual()
+    bv    = lessThanEqual(u32v, u32vec3(u32));
+    bv.xy = lessThanEqual(i32v, i32vec2(i32));
+
+    // greaterThan()
+    bv    = greaterThan(u32v, u32vec3(u32));
+    bv.xy = greaterThan(i32v, i32vec2(i32));
+
+    // greaterThanEqual()
+    bv    = greaterThanEqual(u32v, u32vec3(u32));
+    bv.xy = greaterThanEqual(i32v, i32vec2(i32));
+
+    // equal()
+    bv    = equal(u32v, u32vec3(u32));
+    bv.xy = equal(i32v, i32vec2(i32));
+
+    // notEqual()
+    bv    = notEqual(u32v, u32vec3(u32));
+    bv.xy = notEqual(i32v, i32vec2(i32));
+}
+
+// Type conversion for specialization constant
+layout(constant_id = 100) const int32_t  si32 = -10;
+layout(constant_id = 101) const uint32_t su32 = 20U;
+layout(constant_id = 102) const int  si = -5;
+layout(constant_id = 103) const uint su = 4;
+layout(constant_id = 104) const bool sb = true;
+
+#define UINT32_MAX  4294967295u
+uint32_t u32Max = UINT32_MAX;
diff --git a/Test/spv.int64.frag b/Test/spv.int64.frag
index 8021b7e..bcbb24b 100644
--- a/Test/spv.int64.frag
+++ b/Test/spv.int64.frag
@@ -1,6 +1,7 @@
 #version 450

 

 #extension GL_ARB_gpu_shader_int64: enable

+#extension GL_KHX_shader_explicit_arithmetic_types_int64: require

 

 layout(binding = 0) uniform Uniforms

 {

diff --git a/Test/spv.int8.frag b/Test/spv.int8.frag
new file mode 100644
index 0000000..f41c62f
--- /dev/null
+++ b/Test/spv.int8.frag
@@ -0,0 +1,253 @@
+#version 450
+
+#extension GL_KHX_shader_explicit_arithmetic_types: enable
+#extension GL_KHX_shader_explicit_arithmetic_types_int8: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int16: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int32: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float16: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float32: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float64: require
+
+layout(binding = 0) uniform Uniforms
+{
+    uint index;
+};
+
+layout(std140, binding = 1) uniform Block
+{
+    int8_t   i8;
+    i8vec2   i8v2;
+    i8vec3   i8v3;
+    i8vec4   i8v4;
+    uint8_t  u8;
+    u8vec2   u8v2;
+    u8vec3   u8v3;
+    u8vec4   u8v4;
+} block;
+
+void main()
+{
+}
+
+void literal()
+{
+    const int8_t i8Const[3] =
+    {
+        int8_t(-0x11),           // Hex
+        int8_t(-1),              // Dec
+        int8_t(0400),            // Oct
+    };
+
+    int8_t i8 = i8Const[index];
+
+    const uint8_t u8Const[] =
+    {
+        uint8_t(0xFF),             // Hex
+        uint8_t(255),              // Dec
+        uint8_t(0177),             // Oct
+    };
+
+    uint8_t u8 = u8Const[index];
+}
+
+void typeCast8()
+{
+    i8vec2 i8v;
+    u8vec2 u8v;
+    i16vec2 i16v;
+    u16vec2 u16v;
+    i32vec2 i32v;
+    u32vec2 u32v;
+    i64vec2 i64v;
+    u64vec2 u64v;
+    f16vec2 f16v;
+    f32vec2 f32v;
+    f64vec2 f64v;
+    bvec2   bv;
+
+    u8v = i8v;      // int8_t  ->  uint8_t
+    i16v = i8v;     // int8_t  ->   int16_t
+    i16v = u8v;     // uint8_t ->   int16_t
+    i32v = i8v;     // int8_t  ->   int32_t
+    i32v = u8v;     // uint8_t ->   int32_t
+    u32v = i8v;     // int8_t  ->  uint32_t
+    i64v = i8v;     // int8_t  ->   int64_t
+    u64v = i8v;     // int8_t  ->  uint64_t
+    u32v = u8v;     // uint8_t ->  uint32_t
+    i64v = u8v;     // uint8_t ->   int64_t
+    u64v = u8v;     // uint8_t ->  uint64_t
+    f16v = i8v;     // int8_t  ->  float16_t
+    f32v = i8v;     // int8_t  ->  float32_t
+    f64v = i8v;     // int8_t  ->  float64_t
+    f16v = u8v;     // uint8_t ->  float16_t
+    f32v = u8v;     // uint8_t ->  float32_t
+    f64v = u8v;     // uint8_t ->  float64_t
+
+    i8v =  i8vec2(u8v);       // uint8_t  ->   int8_t
+    i16v = i16vec2(i8v);      // int8_t   ->   int16_t
+    i16v = i16vec2(u8v);      // uint8_t  ->   int16_t
+    i32v = i32vec2(i8v);      // int8_t   ->   int32_t
+    i32v = i32vec2(u8v);      // uint8_t  ->   int32_t
+    i64v = i64vec2(i8v);      // int8_t   ->   int64_t
+    u64v = i64vec2(i8v);      // int8_t   ->  uint64_t
+    u16v = u16vec2(i8v);      // int8_t   ->  uint16_t
+    u16v = u16vec2(u8v);      // uint8_t  ->  uint16_t
+    u32v = u32vec2(u8v);      // uint8_t  ->  uint32_t
+    i64v = i64vec2(u8v);      // uint8_t  ->   int64_t
+    u64v = i64vec2(u8v);      // uint8_t  ->  uint64_t
+    f16v = f16vec2(i8v);      // int8_t   ->  float16_t
+    f32v = f32vec2(i8v);      // int8_t   ->  float32_t
+    f64v = f64vec2(i8v);      // int8_t   ->  float64_t
+    f16v = f16vec2(u8v);      // uint8_t  ->  float16_t
+    f32v = f32vec2(u8v);      // uint8_t  ->  float32_t
+    f64v = f64vec2(u8v);      // uint8_t  ->  float64_t
+
+    i8v = i8vec2(bv);       // bool     ->   int8
+    u8v = u8vec2(bv);       // bool     ->   uint8
+    bv  = bvec2(i8v);       // int8    ->   bool
+    bv  = bvec2(u8v);       // uint8   ->   bool
+}
+
+void operators()
+{
+    u8vec3 u8v;
+    int8_t i8;
+    uvec3   uv;
+    int32_t i;
+    int16_t i16;
+    bool    b;
+
+    // Unary
+    u8v++;
+    i8--;
+    ++i8;
+    --u8v;
+
+    u8v = ~u8v;
+
+    i8 = +i8;
+    u8v = -u8v;
+
+    // Arithmetic
+    i8  += i8;
+    u8v -= u8v;
+    i  *= i8;
+    uv /= u8v;
+    uv %= i8;
+
+    uv = u8v + uv;
+    i16  = i8 - i16;
+    uv = u8v * uv;
+    i16  = i8 * i16;
+    i  = i8 % i;
+
+    // Shift
+    u8v <<= i8;
+    i8  >>= u8v.y;
+
+    i8  = i8 << u8v.z;
+    u8v = u8v << i8;
+
+    // Relational
+    b = (u8v.x != i8);
+    b = (i8 == u8v.x);
+    b = (u8v.x > uv.y);
+    b = (i8 < i);
+    b = (u8v.y >= uv.x);
+    b = (i8 <= i);
+
+    // Bitwise
+    uv |= i8;
+    i  = i8 | i;
+    i16  &= i8;
+    uv = u8v & uv;
+    uv ^= i8;
+    u8v = u8v ^ i8;
+}
+
+void builtinFuncs()
+{
+    i8vec2  i8v;
+    i8vec4  i8v4;
+    u8vec3  u8v;
+    u8vec2  u8v2;
+    u8vec4  u8v4;
+    bvec3   bv;
+    int16_t i16;
+    int32_t i32;
+    uint16_t u16;
+    uint32_t u32;
+
+    int8_t  i8;
+    uint8_t u8;
+
+    // abs()
+    i8v = abs(i8v);
+
+    // sign()
+    i8  = sign(i8);
+
+    // min()
+    i8v = min(i8v, i8);
+    i8v = min(i8v, i8vec2(-1));
+    u8v = min(u8v, u8);
+    u8v = min(u8v, u8vec3(0));
+
+    // max()
+    i8v = max(i8v, i8);
+    i8v = max(i8v, i8vec2(-1));
+    u8v = max(u8v, u8);
+    u8v = max(u8v, u8vec3(0));
+
+    // clamp()
+    i8v = clamp(i8v, -i8, i8);
+    i8v = clamp(i8v, -i8v, i8v);
+    u8v = clamp(u8v, -u8, u8);
+    u8v = clamp(u8v, -u8v, u8v);
+
+    // mix()
+    i8  = mix(i8v.x, i8v.y, true);
+    i8v = mix(i8vec2(i8), i8vec2(-i8), bvec2(false));
+    u8  = mix(u8v.x, u8v.y, true);
+    u8v = mix(u8vec3(u8), u8vec3(-u8), bvec3(false));
+
+    //pack
+    i16 = pack16(i8v);
+    i32 = pack32(i8v4);
+    u16 = pack16(u8v2);
+    u32 = pack32(u8v4);
+
+    i8v  = unpack8(i16);
+    i8v4 = unpack8(i32);
+    u8v2 = unpack8(u16);
+    u8v4 = unpack8(u32);
+
+    // lessThan()
+    bv    = lessThan(u8v, u8vec3(u8));
+    bv.xy = lessThan(i8v, i8vec2(i8));
+
+    // lessThanEqual()
+    bv    = lessThanEqual(u8v, u8vec3(u8));
+    bv.xy = lessThanEqual(i8v, i8vec2(i8));
+
+    // greaterThan()
+    bv    = greaterThan(u8v, u8vec3(u8));
+    bv.xy = greaterThan(i8v, i8vec2(i8));
+
+    // greaterThanEqual()
+    bv    = greaterThanEqual(u8v, u8vec3(u8));
+    bv.xy = greaterThanEqual(i8v, i8vec2(i8));
+
+    // equal()
+    bv    = equal(u8v, u8vec3(u8));
+    bv.xy = equal(i8v, i8vec2(i8));
+
+    // notEqual()
+    bv    = notEqual(u8v, u8vec3(u8));
+    bv.xy = notEqual(i8v, i8vec2(i8));
+}
+
+// Type conversion for specialization constant
+layout(constant_id = 100) const int8_t  si8 = int8_t(-10);
+layout(constant_id = 101) const uint8_t su8 = uint8_t(20);
diff --git a/Test/spv.subgroup.frag b/Test/spv.subgroup.frag
new file mode 100644
index 0000000..520052f
--- /dev/null
+++ b/Test/spv.subgroup.frag
@@ -0,0 +1,7 @@
+#version 450

+#extension GL_KHR_shader_subgroup_basic: enable

+layout(location = 0) out uvec4 data;

+void main (void)

+{

+  data = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);

+}

diff --git a/Test/spv.subgroup.geom b/Test/spv.subgroup.geom
new file mode 100644
index 0000000..70e9dd4
--- /dev/null
+++ b/Test/spv.subgroup.geom
@@ -0,0 +1,13 @@
+#version 450

+#extension GL_KHR_shader_subgroup_basic: enable

+layout(points) in;

+layout(points, max_vertices = 1) out;

+layout(set = 0, binding = 0, std430) buffer Output

+{

+  uvec4 result[];

+};

+

+void main (void)

+{

+  result[gl_PrimitiveIDIn] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);

+}

diff --git a/Test/spv.subgroup.tesc b/Test/spv.subgroup.tesc
new file mode 100644
index 0000000..63bf5e5
--- /dev/null
+++ b/Test/spv.subgroup.tesc
@@ -0,0 +1,12 @@
+#version 450

+#extension GL_KHR_shader_subgroup_basic: enable

+layout(vertices=1) out;

+layout(set = 0, binding = 0, std430) buffer Output

+{

+  uvec4 result[];

+};

+

+void main (void)

+{

+  result[gl_PrimitiveID] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);

+}

diff --git a/Test/spv.subgroup.tese b/Test/spv.subgroup.tese
new file mode 100644
index 0000000..e504df7
--- /dev/null
+++ b/Test/spv.subgroup.tese
@@ -0,0 +1,12 @@
+#version 450

+#extension GL_KHR_shader_subgroup_basic: enable

+layout(isolines) in;

+layout(set = 0, binding = 0, std430) buffer Output

+{

+  uvec4 result[];

+};

+

+void main (void)

+{

+  result[gl_PrimitiveID] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);

+}

diff --git a/Test/spv.subgroup.vert b/Test/spv.subgroup.vert
new file mode 100644
index 0000000..779b758
--- /dev/null
+++ b/Test/spv.subgroup.vert
@@ -0,0 +1,11 @@
+#version 450

+#extension GL_KHR_shader_subgroup_basic: enable

+layout(set = 0, binding = 0, std430) buffer Output

+{

+  uvec4 result[];

+};

+

+void main (void)

+{

+  result[gl_VertexIndex] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);

+}

diff --git a/Test/spv.subgroupArithmetic.comp b/Test/spv.subgroupArithmetic.comp
new file mode 100644
index 0000000..6cc9337
--- /dev/null
+++ b/Test/spv.subgroupArithmetic.comp
@@ -0,0 +1,393 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_arithmetic: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+    dvec4 d4;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    data[invocation].f4.x   = subgroupAdd(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupAdd(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupAdd(data[2].f4.xyz);

+    data[invocation].f4     = subgroupAdd(data[3].f4);

+

+    data[invocation].i4.x   = subgroupAdd(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupAdd(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupAdd(data[2].i4.xyz);

+    data[invocation].i4     = subgroupAdd(data[3].i4);

+

+    data[invocation].u4.x   = subgroupAdd(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupAdd(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupAdd(data[2].u4.xyz);

+    data[invocation].u4     = subgroupAdd(data[3].u4);

+

+    data[invocation].d4.x   = subgroupAdd(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupAdd(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupAdd(data[2].d4.xyz);

+    data[invocation].d4     = subgroupAdd(data[3].d4);

+

+    data[invocation].f4.x   = subgroupMul(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupMul(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupMul(data[2].f4.xyz);

+    data[invocation].f4     = subgroupMul(data[3].f4);

+

+    data[invocation].i4.x   = subgroupMul(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupMul(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupMul(data[2].i4.xyz);

+    data[invocation].i4     = subgroupMul(data[3].i4);

+

+    data[invocation].u4.x   = subgroupMul(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupMul(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupMul(data[2].u4.xyz);

+    data[invocation].u4     = subgroupMul(data[3].u4);

+

+    data[invocation].d4.x   = subgroupMul(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupMul(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupMul(data[2].d4.xyz);

+    data[invocation].d4     = subgroupMul(data[3].d4);

+

+    data[invocation].f4.x   = subgroupMin(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupMin(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupMin(data[2].f4.xyz);

+    data[invocation].f4     = subgroupMin(data[3].f4);

+

+    data[invocation].i4.x   = subgroupMin(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupMin(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupMin(data[2].i4.xyz);

+    data[invocation].i4     = subgroupMin(data[3].i4);

+

+    data[invocation].u4.x   = subgroupMin(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupMin(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupMin(data[2].u4.xyz);

+    data[invocation].u4     = subgroupMin(data[3].u4);

+

+    data[invocation].d4.x   = subgroupMin(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupMin(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupMin(data[2].d4.xyz);

+    data[invocation].d4     = subgroupMin(data[3].d4);

+

+    data[invocation].f4.x   = subgroupMax(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupMax(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupMax(data[2].f4.xyz);

+    data[invocation].f4     = subgroupMax(data[3].f4);

+

+    data[invocation].i4.x   = subgroupMax(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupMax(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupMax(data[2].i4.xyz);

+    data[invocation].i4     = subgroupMax(data[3].i4);

+

+    data[invocation].u4.x   = subgroupMax(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupMax(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupMax(data[2].u4.xyz);

+    data[invocation].u4     = subgroupMax(data[3].u4);

+

+    data[invocation].d4.x   = subgroupMax(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupMax(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupMax(data[2].d4.xyz);

+    data[invocation].d4     = subgroupMax(data[3].d4);

+

+    data[invocation].i4.x   = subgroupAnd(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupAnd(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupAnd(data[2].i4.xyz);

+    data[invocation].i4     = subgroupAnd(data[3].i4);

+

+    data[invocation].u4.x   = subgroupAnd(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupAnd(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupAnd(data[2].u4.xyz);

+    data[invocation].u4     = subgroupAnd(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupAnd(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupAnd(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupAnd(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupAnd(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].i4.x   = subgroupOr(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupOr(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupOr(data[2].i4.xyz);

+    data[invocation].i4     = subgroupOr(data[3].i4);

+

+    data[invocation].u4.x   = subgroupOr(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupOr(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupOr(data[2].u4.xyz);

+    data[invocation].u4     = subgroupOr(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupOr(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupOr(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupOr(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupOr(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].i4.x   = subgroupXor(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupXor(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupXor(data[2].i4.xyz);

+    data[invocation].i4     = subgroupXor(data[3].i4);

+

+    data[invocation].u4.x   = subgroupXor(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupXor(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupXor(data[2].u4.xyz);

+    data[invocation].u4     = subgroupXor(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupXor(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupXor(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupXor(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupXor(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].f4.x   = subgroupInclusiveAdd(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupInclusiveAdd(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupInclusiveAdd(data[2].f4.xyz);

+    data[invocation].f4     = subgroupInclusiveAdd(data[3].f4);

+

+    data[invocation].i4.x   = subgroupInclusiveAdd(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupInclusiveAdd(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupInclusiveAdd(data[2].i4.xyz);

+    data[invocation].i4     = subgroupInclusiveAdd(data[3].i4);

+

+    data[invocation].u4.x   = subgroupInclusiveAdd(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupInclusiveAdd(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupInclusiveAdd(data[2].u4.xyz);

+    data[invocation].u4     = subgroupInclusiveAdd(data[3].u4);

+

+    data[invocation].d4.x   = subgroupInclusiveAdd(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupInclusiveAdd(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupInclusiveAdd(data[2].d4.xyz);

+    data[invocation].d4     = subgroupInclusiveAdd(data[3].d4);

+

+    data[invocation].f4.x   = subgroupInclusiveMul(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupInclusiveMul(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupInclusiveMul(data[2].f4.xyz);

+    data[invocation].f4     = subgroupInclusiveMul(data[3].f4);

+

+    data[invocation].i4.x   = subgroupInclusiveMul(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupInclusiveMul(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupInclusiveMul(data[2].i4.xyz);

+    data[invocation].i4     = subgroupInclusiveMul(data[3].i4);

+

+    data[invocation].u4.x   = subgroupInclusiveMul(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupInclusiveMul(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupInclusiveMul(data[2].u4.xyz);

+    data[invocation].u4     = subgroupInclusiveMul(data[3].u4);

+

+    data[invocation].d4.x   = subgroupInclusiveMul(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupInclusiveMul(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupInclusiveMul(data[2].d4.xyz);

+    data[invocation].d4     = subgroupInclusiveMul(data[3].d4);

+

+    data[invocation].f4.x   = subgroupInclusiveMin(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupInclusiveMin(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupInclusiveMin(data[2].f4.xyz);

+    data[invocation].f4     = subgroupInclusiveMin(data[3].f4);

+

+    data[invocation].i4.x   = subgroupInclusiveMin(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupInclusiveMin(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupInclusiveMin(data[2].i4.xyz);

+    data[invocation].i4     = subgroupInclusiveMin(data[3].i4);

+

+    data[invocation].u4.x   = subgroupInclusiveMin(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupInclusiveMin(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupInclusiveMin(data[2].u4.xyz);

+    data[invocation].u4     = subgroupInclusiveMin(data[3].u4);

+

+    data[invocation].d4.x   = subgroupInclusiveMin(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupInclusiveMin(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupInclusiveMin(data[2].d4.xyz);

+    data[invocation].d4     = subgroupInclusiveMin(data[3].d4);

+

+    data[invocation].f4.x   = subgroupInclusiveMax(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupInclusiveMax(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupInclusiveMax(data[2].f4.xyz);

+    data[invocation].f4     = subgroupInclusiveMax(data[3].f4);

+

+    data[invocation].i4.x   = subgroupInclusiveMax(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupInclusiveMax(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupInclusiveMax(data[2].i4.xyz);

+    data[invocation].i4     = subgroupInclusiveMax(data[3].i4);

+

+    data[invocation].u4.x   = subgroupInclusiveMax(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupInclusiveMax(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupInclusiveMax(data[2].u4.xyz);

+    data[invocation].u4     = subgroupInclusiveMax(data[3].u4);

+

+    data[invocation].d4.x   = subgroupInclusiveMax(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupInclusiveMax(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupInclusiveMax(data[2].d4.xyz);

+    data[invocation].d4     = subgroupInclusiveMax(data[3].d4);

+

+    data[invocation].i4.x   = subgroupInclusiveAnd(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupInclusiveAnd(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupInclusiveAnd(data[2].i4.xyz);

+    data[invocation].i4     = subgroupInclusiveAnd(data[3].i4);

+

+    data[invocation].u4.x   = subgroupInclusiveAnd(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupInclusiveAnd(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupInclusiveAnd(data[2].u4.xyz);

+    data[invocation].u4     = subgroupInclusiveAnd(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupInclusiveAnd(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupInclusiveAnd(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupInclusiveAnd(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupInclusiveAnd(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].i4.x   = subgroupInclusiveOr(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupInclusiveOr(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupInclusiveOr(data[2].i4.xyz);

+    data[invocation].i4     = subgroupInclusiveOr(data[3].i4);

+

+    data[invocation].u4.x   = subgroupInclusiveOr(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupInclusiveOr(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupInclusiveOr(data[2].u4.xyz);

+    data[invocation].u4     = subgroupInclusiveOr(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupInclusiveOr(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupInclusiveOr(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupInclusiveOr(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupInclusiveOr(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].i4.x   = subgroupInclusiveXor(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupInclusiveXor(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupInclusiveXor(data[2].i4.xyz);

+    data[invocation].i4     = subgroupInclusiveXor(data[3].i4);

+

+    data[invocation].u4.x   = subgroupInclusiveXor(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupInclusiveXor(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupInclusiveXor(data[2].u4.xyz);

+    data[invocation].u4     = subgroupInclusiveXor(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupInclusiveXor(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupInclusiveXor(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupInclusiveXor(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupInclusiveXor(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].f4.x   = subgroupExclusiveAdd(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupExclusiveAdd(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupExclusiveAdd(data[2].f4.xyz);

+    data[invocation].f4     = subgroupExclusiveAdd(data[3].f4);

+

+    data[invocation].i4.x   = subgroupExclusiveAdd(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupExclusiveAdd(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupExclusiveAdd(data[2].i4.xyz);

+    data[invocation].i4     = subgroupExclusiveAdd(data[3].i4);

+

+    data[invocation].u4.x   = subgroupExclusiveAdd(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupExclusiveAdd(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupExclusiveAdd(data[2].u4.xyz);

+    data[invocation].u4     = subgroupExclusiveAdd(data[3].u4);

+

+    data[invocation].d4.x   = subgroupExclusiveAdd(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupExclusiveAdd(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupExclusiveAdd(data[2].d4.xyz);

+    data[invocation].d4     = subgroupExclusiveAdd(data[3].d4);

+

+    data[invocation].f4.x   = subgroupExclusiveMul(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupExclusiveMul(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupExclusiveMul(data[2].f4.xyz);

+    data[invocation].f4     = subgroupExclusiveMul(data[3].f4);

+

+    data[invocation].i4.x   = subgroupExclusiveMul(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupExclusiveMul(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupExclusiveMul(data[2].i4.xyz);

+    data[invocation].i4     = subgroupExclusiveMul(data[3].i4);

+

+    data[invocation].u4.x   = subgroupExclusiveMul(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupExclusiveMul(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupExclusiveMul(data[2].u4.xyz);

+    data[invocation].u4     = subgroupExclusiveMul(data[3].u4);

+

+    data[invocation].d4.x   = subgroupExclusiveMul(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupExclusiveMul(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupExclusiveMul(data[2].d4.xyz);

+    data[invocation].d4     = subgroupExclusiveMul(data[3].d4);

+

+    data[invocation].f4.x   = subgroupExclusiveMin(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupExclusiveMin(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupExclusiveMin(data[2].f4.xyz);

+    data[invocation].f4     = subgroupExclusiveMin(data[3].f4);

+

+    data[invocation].i4.x   = subgroupExclusiveMin(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupExclusiveMin(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupExclusiveMin(data[2].i4.xyz);

+    data[invocation].i4     = subgroupExclusiveMin(data[3].i4);

+

+    data[invocation].u4.x   = subgroupExclusiveMin(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupExclusiveMin(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupExclusiveMin(data[2].u4.xyz);

+    data[invocation].u4     = subgroupExclusiveMin(data[3].u4);

+

+    data[invocation].d4.x   = subgroupExclusiveMin(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupExclusiveMin(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupExclusiveMin(data[2].d4.xyz);

+    data[invocation].d4     = subgroupExclusiveMin(data[3].d4);

+

+    data[invocation].f4.x   = subgroupExclusiveMax(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupExclusiveMax(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupExclusiveMax(data[2].f4.xyz);

+    data[invocation].f4     = subgroupExclusiveMax(data[3].f4);

+

+    data[invocation].i4.x   = subgroupExclusiveMax(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupExclusiveMax(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupExclusiveMax(data[2].i4.xyz);

+    data[invocation].i4     = subgroupExclusiveMax(data[3].i4);

+

+    data[invocation].u4.x   = subgroupExclusiveMax(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupExclusiveMax(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupExclusiveMax(data[2].u4.xyz);

+    data[invocation].u4     = subgroupExclusiveMax(data[3].u4);

+

+    data[invocation].d4.x   = subgroupExclusiveMax(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupExclusiveMax(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupExclusiveMax(data[2].d4.xyz);

+    data[invocation].d4     = subgroupExclusiveMax(data[3].d4);

+

+    data[invocation].i4.x   = subgroupExclusiveAnd(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupExclusiveAnd(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupExclusiveAnd(data[2].i4.xyz);

+    data[invocation].i4     = subgroupExclusiveAnd(data[3].i4);

+

+    data[invocation].u4.x   = subgroupExclusiveAnd(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupExclusiveAnd(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupExclusiveAnd(data[2].u4.xyz);

+    data[invocation].u4     = subgroupExclusiveAnd(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupExclusiveAnd(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupExclusiveAnd(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupExclusiveAnd(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupExclusiveAnd(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].i4.x   = subgroupExclusiveOr(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupExclusiveOr(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupExclusiveOr(data[2].i4.xyz);

+    data[invocation].i4     = subgroupExclusiveOr(data[3].i4);

+

+    data[invocation].u4.x   = subgroupExclusiveOr(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupExclusiveOr(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupExclusiveOr(data[2].u4.xyz);

+    data[invocation].u4     = subgroupExclusiveOr(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupExclusiveOr(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupExclusiveOr(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupExclusiveOr(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupExclusiveOr(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].i4.x   = subgroupExclusiveXor(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupExclusiveXor(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupExclusiveXor(data[2].i4.xyz);

+    data[invocation].i4     = subgroupExclusiveXor(data[3].i4);

+

+    data[invocation].u4.x   = subgroupExclusiveXor(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupExclusiveXor(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupExclusiveXor(data[2].u4.xyz);

+    data[invocation].u4     = subgroupExclusiveXor(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupExclusiveXor(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupExclusiveXor(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupExclusiveXor(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupExclusiveXor(lessThan(data[1].i4, ivec4(0))));

+}

diff --git a/Test/spv.subgroupBallot.comp b/Test/spv.subgroupBallot.comp
new file mode 100644
index 0000000..2875468
--- /dev/null
+++ b/Test/spv.subgroupBallot.comp
@@ -0,0 +1,86 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_ballot: enable

+

+layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+    dvec4 d4;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    uvec4 relMask = gl_SubgroupEqMask +

+                       gl_SubgroupGeMask +

+                       gl_SubgroupGtMask +

+                       gl_SubgroupLeMask +

+                       gl_SubgroupLtMask;

+

+    uvec4 result = subgroupBallot(true);

+

+    data[invocation].u4.x = subgroupBallotBitCount(result);

+    data[invocation].u4.y = subgroupBallotBitExtract(result, 0) ? 1 : 0;

+    data[invocation].u4.z = subgroupBallotInclusiveBitCount(result) + subgroupBallotExclusiveBitCount(result);

+    data[invocation].u4.w = subgroupBallotFindLSB(result) + subgroupBallotFindMSB(result);

+

+    if ((relMask == result) && subgroupInverseBallot(data[0].u4))

+    {

+        data[invocation].f4.x   = subgroupBroadcast(data[0].f4.x,    invocation);

+        data[invocation].f4.xy  = subgroupBroadcast(data[1].f4.xy,   invocation);

+        data[invocation].f4.xyz = subgroupBroadcast(data[2].f4.xyz,  invocation);

+        data[invocation].f4     = subgroupBroadcast(data[3].f4,      invocation);

+

+        data[invocation].i4.x   = subgroupBroadcast(data[0].i4.x,    invocation);

+        data[invocation].i4.xy  = subgroupBroadcast(data[1].i4.xy,   invocation);

+        data[invocation].i4.xyz = subgroupBroadcast(data[2].i4.xyz,  invocation);

+        data[invocation].i4     = subgroupBroadcast(data[3].i4,      invocation);

+

+        data[invocation].u4.x   = subgroupBroadcast(data[0].u4.x,    invocation);

+        data[invocation].u4.xy  = subgroupBroadcast(data[1].u4.xy,   invocation);

+        data[invocation].u4.xyz = subgroupBroadcast(data[2].u4.xyz,  invocation);

+        data[invocation].u4     = subgroupBroadcast(data[3].u4,      invocation);

+

+        data[invocation].d4.x   = subgroupBroadcast(data[0].d4.x,    invocation);

+        data[invocation].d4.xy  = subgroupBroadcast(data[1].d4.xy,   invocation);

+        data[invocation].d4.xyz = subgroupBroadcast(data[2].d4.xyz,  invocation);

+        data[invocation].d4     = subgroupBroadcast(data[3].d4,      invocation);

+

+        data[invocation].i4.x   = int(subgroupBroadcast(data[0].i4.x < 0,            invocation));

+        data[invocation].i4.xy  = ivec2(subgroupBroadcast(lessThan(data[1].i4.xy, ivec2(0)), invocation));

+        data[invocation].i4.xyz = ivec3(subgroupBroadcast(lessThan(data[1].i4.xyz, ivec3(0)), invocation));

+        data[invocation].i4     = ivec4(subgroupBroadcast(lessThan(data[1].i4, ivec4(0)), invocation));

+    }

+    else

+    {

+        data[invocation].f4.x   = subgroupBroadcastFirst(data[0].f4.x);

+        data[invocation].f4.xy  = subgroupBroadcastFirst(data[1].f4.xy);

+        data[invocation].f4.xyz = subgroupBroadcastFirst(data[2].f4.xyz);

+        data[invocation].f4     = subgroupBroadcastFirst(data[3].f4);

+

+        data[invocation].i4.x   = subgroupBroadcastFirst(data[0].i4.x);

+        data[invocation].i4.xy  = subgroupBroadcastFirst(data[1].i4.xy);

+        data[invocation].i4.xyz = subgroupBroadcastFirst(data[2].i4.xyz);

+        data[invocation].i4     = subgroupBroadcastFirst(data[3].i4);

+

+        data[invocation].u4.x   = subgroupBroadcastFirst(data[0].u4.x);

+        data[invocation].u4.xy  = subgroupBroadcastFirst(data[1].u4.xy);

+        data[invocation].u4.xyz = subgroupBroadcastFirst(data[2].u4.xyz);

+        data[invocation].u4     = subgroupBroadcastFirst(data[3].u4);

+

+        data[invocation].d4.x   = subgroupBroadcastFirst(data[0].d4.x);

+        data[invocation].d4.xy  = subgroupBroadcastFirst(data[1].d4.xy);

+        data[invocation].d4.xyz = subgroupBroadcastFirst(data[2].d4.xyz);

+        data[invocation].d4     = subgroupBroadcastFirst(data[3].d4);

+

+        data[invocation].i4.x   = int(subgroupBroadcastFirst(data[0].i4.x < 0));

+        data[invocation].i4.xy  = ivec2(subgroupBroadcastFirst(lessThan(data[1].i4.xy, ivec2(0))));

+        data[invocation].i4.xyz = ivec3(subgroupBroadcastFirst(lessThan(data[1].i4.xyz, ivec3(0))));

+        data[invocation].i4     = ivec4(subgroupBroadcastFirst(lessThan(data[1].i4, ivec4(0))));

+    }

+}

diff --git a/Test/spv.subgroupBasic.comp b/Test/spv.subgroupBasic.comp
new file mode 100644
index 0000000..4801c10
--- /dev/null
+++ b/Test/spv.subgroupBasic.comp
@@ -0,0 +1,23 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_basic: enable

+

+layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;

+

+layout(binding = 0) buffer Buffer

+{

+    int a[];

+} data;

+

+void main()

+{

+    data.a[gl_SubgroupSize] = 1;

+    data.a[gl_SubgroupInvocationID] = 1;

+    data.a[gl_NumSubgroups] = 1;

+    data.a[gl_SubgroupID] = (subgroupElect()) ? 1 : 0;

+    subgroupBarrier();

+    subgroupMemoryBarrier();

+    subgroupMemoryBarrierBuffer();

+    subgroupMemoryBarrierShared();

+    subgroupMemoryBarrierImage();

+}

diff --git a/Test/spv.subgroupClustered.comp b/Test/spv.subgroupClustered.comp
new file mode 100644
index 0000000..128a24c
--- /dev/null
+++ b/Test/spv.subgroupClustered.comp
@@ -0,0 +1,143 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_clustered: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+    dvec4 d4;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    data[invocation].f4.x   = subgroupClusteredAdd(data[0].f4.x, 1);

+    data[invocation].f4.xy  = subgroupClusteredAdd(data[1].f4.xy, 1);

+    data[invocation].f4.xyz = subgroupClusteredAdd(data[2].f4.xyz, 1);

+    data[invocation].f4     = subgroupClusteredAdd(data[3].f4, 1);

+

+    data[invocation].i4.x   = subgroupClusteredAdd(data[0].i4.x, 1);

+    data[invocation].i4.xy  = subgroupClusteredAdd(data[1].i4.xy, 1);

+    data[invocation].i4.xyz = subgroupClusteredAdd(data[2].i4.xyz, 1);

+    data[invocation].i4     = subgroupClusteredAdd(data[3].i4, 1);

+

+    data[invocation].u4.x   = subgroupClusteredAdd(data[0].u4.x, 1);

+    data[invocation].u4.xy  = subgroupClusteredAdd(data[1].u4.xy, 1);

+    data[invocation].u4.xyz = subgroupClusteredAdd(data[2].u4.xyz, 1);

+    data[invocation].u4     = subgroupClusteredAdd(data[3].u4, 1);

+

+    data[invocation].d4.x   = subgroupClusteredAdd(data[0].d4.x, 1);

+    data[invocation].d4.xy  = subgroupClusteredAdd(data[1].d4.xy, 1);

+    data[invocation].d4.xyz = subgroupClusteredAdd(data[2].d4.xyz, 1);

+    data[invocation].d4     = subgroupClusteredAdd(data[3].d4, 1);

+

+    data[invocation].f4.x   = subgroupClusteredMul(data[0].f4.x, 1);

+    data[invocation].f4.xy  = subgroupClusteredMul(data[1].f4.xy, 1);

+    data[invocation].f4.xyz = subgroupClusteredMul(data[2].f4.xyz, 1);

+    data[invocation].f4     = subgroupClusteredMul(data[3].f4, 1);

+

+    data[invocation].i4.x   = subgroupClusteredMul(data[0].i4.x, 1);

+    data[invocation].i4.xy  = subgroupClusteredMul(data[1].i4.xy, 1);

+    data[invocation].i4.xyz = subgroupClusteredMul(data[2].i4.xyz, 1);

+    data[invocation].i4     = subgroupClusteredMul(data[3].i4, 1);

+

+    data[invocation].u4.x   = subgroupClusteredMul(data[0].u4.x, 1);

+    data[invocation].u4.xy  = subgroupClusteredMul(data[1].u4.xy, 1);

+    data[invocation].u4.xyz = subgroupClusteredMul(data[2].u4.xyz, 1);

+    data[invocation].u4     = subgroupClusteredMul(data[3].u4, 1);

+

+    data[invocation].d4.x   = subgroupClusteredMul(data[0].d4.x, 1);

+    data[invocation].d4.xy  = subgroupClusteredMul(data[1].d4.xy, 1);

+    data[invocation].d4.xyz = subgroupClusteredMul(data[2].d4.xyz, 1);

+    data[invocation].d4     = subgroupClusteredMul(data[3].d4, 1);

+

+    data[invocation].f4.x   = subgroupClusteredMin(data[0].f4.x, 1);

+    data[invocation].f4.xy  = subgroupClusteredMin(data[1].f4.xy, 1);

+    data[invocation].f4.xyz = subgroupClusteredMin(data[2].f4.xyz, 1);

+    data[invocation].f4     = subgroupClusteredMin(data[3].f4, 1);

+

+    data[invocation].i4.x   = subgroupClusteredMin(data[0].i4.x, 1);

+    data[invocation].i4.xy  = subgroupClusteredMin(data[1].i4.xy, 1);

+    data[invocation].i4.xyz = subgroupClusteredMin(data[2].i4.xyz, 1);

+    data[invocation].i4     = subgroupClusteredMin(data[3].i4, 1);

+

+    data[invocation].u4.x   = subgroupClusteredMin(data[0].u4.x, 1);

+    data[invocation].u4.xy  = subgroupClusteredMin(data[1].u4.xy, 1);

+    data[invocation].u4.xyz = subgroupClusteredMin(data[2].u4.xyz, 1);

+    data[invocation].u4     = subgroupClusteredMin(data[3].u4, 1);

+

+    data[invocation].d4.x   = subgroupClusteredMin(data[0].d4.x, 1);

+    data[invocation].d4.xy  = subgroupClusteredMin(data[1].d4.xy, 1);

+    data[invocation].d4.xyz = subgroupClusteredMin(data[2].d4.xyz, 1);

+    data[invocation].d4     = subgroupClusteredMin(data[3].d4, 1);

+

+    data[invocation].f4.x   = subgroupClusteredMax(data[0].f4.x, 1);

+    data[invocation].f4.xy  = subgroupClusteredMax(data[1].f4.xy, 1);

+    data[invocation].f4.xyz = subgroupClusteredMax(data[2].f4.xyz, 1);

+    data[invocation].f4     = subgroupClusteredMax(data[3].f4, 1);

+

+    data[invocation].i4.x   = subgroupClusteredMax(data[0].i4.x, 1);

+    data[invocation].i4.xy  = subgroupClusteredMax(data[1].i4.xy, 1);

+    data[invocation].i4.xyz = subgroupClusteredMax(data[2].i4.xyz, 1);

+    data[invocation].i4     = subgroupClusteredMax(data[3].i4, 1);

+

+    data[invocation].u4.x   = subgroupClusteredMax(data[0].u4.x, 1);

+    data[invocation].u4.xy  = subgroupClusteredMax(data[1].u4.xy, 1);

+    data[invocation].u4.xyz = subgroupClusteredMax(data[2].u4.xyz, 1);

+    data[invocation].u4     = subgroupClusteredMax(data[3].u4, 1);

+

+    data[invocation].d4.x   = subgroupClusteredMax(data[0].d4.x, 1);

+    data[invocation].d4.xy  = subgroupClusteredMax(data[1].d4.xy, 1);

+    data[invocation].d4.xyz = subgroupClusteredMax(data[2].d4.xyz, 1);

+    data[invocation].d4     = subgroupClusteredMax(data[3].d4, 1);

+

+    data[invocation].i4.x   = subgroupClusteredAnd(data[0].i4.x, 1);

+    data[invocation].i4.xy  = subgroupClusteredAnd(data[1].i4.xy, 1);

+    data[invocation].i4.xyz = subgroupClusteredAnd(data[2].i4.xyz, 1);

+    data[invocation].i4     = subgroupClusteredAnd(data[3].i4, 1);

+

+    data[invocation].u4.x   = subgroupClusteredAnd(data[0].u4.x, 1);

+    data[invocation].u4.xy  = subgroupClusteredAnd(data[1].u4.xy, 1);

+    data[invocation].u4.xyz = subgroupClusteredAnd(data[2].u4.xyz, 1);

+    data[invocation].u4     = subgroupClusteredAnd(data[3].u4, 1);

+

+    data[invocation].i4.x   =   int(subgroupClusteredAnd(data[0].i4.x < 0, 1));

+    data[invocation].i4.xy  = ivec2(subgroupClusteredAnd(lessThan(data[1].i4.xy, ivec2(0)), 1));

+    data[invocation].i4.xyz = ivec3(subgroupClusteredAnd(lessThan(data[1].i4.xyz, ivec3(0)), 1));

+    data[invocation].i4     = ivec4(subgroupClusteredAnd(lessThan(data[1].i4, ivec4(0)), 1));

+

+    data[invocation].i4.x   = subgroupClusteredOr(data[0].i4.x, 1);

+    data[invocation].i4.xy  = subgroupClusteredOr(data[1].i4.xy, 1);

+    data[invocation].i4.xyz = subgroupClusteredOr(data[2].i4.xyz, 1);

+    data[invocation].i4     = subgroupClusteredOr(data[3].i4, 1);

+

+    data[invocation].u4.x   = subgroupClusteredOr(data[0].u4.x, 1);

+    data[invocation].u4.xy  = subgroupClusteredOr(data[1].u4.xy, 1);

+    data[invocation].u4.xyz = subgroupClusteredOr(data[2].u4.xyz, 1);

+    data[invocation].u4     = subgroupClusteredOr(data[3].u4, 1);

+

+    data[invocation].i4.x   =   int(subgroupClusteredOr(data[0].i4.x < 0, 1));

+    data[invocation].i4.xy  = ivec2(subgroupClusteredOr(lessThan(data[1].i4.xy, ivec2(0)), 1));

+    data[invocation].i4.xyz = ivec3(subgroupClusteredOr(lessThan(data[1].i4.xyz, ivec3(0)), 1));

+    data[invocation].i4     = ivec4(subgroupClusteredOr(lessThan(data[1].i4, ivec4(0)), 1));

+

+    data[invocation].i4.x   = subgroupClusteredXor(data[0].i4.x, 1);

+    data[invocation].i4.xy  = subgroupClusteredXor(data[1].i4.xy, 1);

+    data[invocation].i4.xyz = subgroupClusteredXor(data[2].i4.xyz, 1);

+    data[invocation].i4     = subgroupClusteredXor(data[3].i4, 1);

+

+    data[invocation].u4.x   = subgroupClusteredXor(data[0].u4.x, 1);

+    data[invocation].u4.xy  = subgroupClusteredXor(data[1].u4.xy, 1);

+    data[invocation].u4.xyz = subgroupClusteredXor(data[2].u4.xyz, 1);

+    data[invocation].u4     = subgroupClusteredXor(data[3].u4, 1);

+

+    data[invocation].i4.x   =   int(subgroupClusteredXor(data[0].i4.x < 0, 1));

+    data[invocation].i4.xy  = ivec2(subgroupClusteredXor(lessThan(data[1].i4.xy, ivec2(0)), 1));

+    data[invocation].i4.xyz = ivec3(subgroupClusteredXor(lessThan(data[1].i4.xyz, ivec3(0)), 1));

+    data[invocation].i4     = ivec4(subgroupClusteredXor(lessThan(data[1].i4, ivec4(0)), 1));

+}

diff --git a/Test/spv.subgroupClusteredNeg.comp b/Test/spv.subgroupClusteredNeg.comp
new file mode 100644
index 0000000..ec15413
--- /dev/null
+++ b/Test/spv.subgroupClusteredNeg.comp
@@ -0,0 +1,39 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_clustered: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+    dvec4 d4;

+} data[4];

+

+void main()

+{

+    int a = 1;

+    const int aConst = 1;

+

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    data[invocation].f4.xy  = subgroupClusteredAdd(data[1].f4.xy, 0);          // ERROR, less than 1

+

+    data[invocation].f4.x   = subgroupClusteredMul(data[0].f4.x, 3);           // ERROR, not a power of 2

+

+    data[invocation].i4.xy  = subgroupClusteredMin(data[1].i4.xy, 8);

+    data[invocation].i4.xyz = subgroupClusteredMin(data[2].i4.xyz, 6);         // ERROR, not a power of 2

+

+    data[invocation].f4.x   = subgroupClusteredMax(data[0].f4.x, -1);          // ERROR, less than 1

+

+    data[invocation].i4     = subgroupClusteredAnd(data[3].i4, -3);            // ERROR, less than 1

+

+    data[invocation].i4.x   = subgroupClusteredOr(data[0].i4.x, a);            // ERROR, not constant

+    data[invocation].i4.xy  = subgroupClusteredOr(data[1].i4.xy, aConst);

+

+    data[invocation].i4.x   = subgroupClusteredXor(data[0].i4.x, 1 + a);       // ERROR, not constant

+    data[invocation].i4.xy  = subgroupClusteredXor(data[1].i4.xy, aConst + a); // ERROR, not constant

+    data[invocation].i4.xyz = subgroupClusteredXor(data[2].i4.xyz, 1 + aConst);

+}

diff --git a/Test/spv.subgroupQuad.comp b/Test/spv.subgroupQuad.comp
new file mode 100644
index 0000000..223a7cd
--- /dev/null
+++ b/Test/spv.subgroupQuad.comp
@@ -0,0 +1,118 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_quad: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+    dvec4 d4;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    data[invocation].f4.x   = subgroupQuadBroadcast(data[0].f4.x, 1);

+    data[invocation].f4.xy  = subgroupQuadBroadcast(data[1].f4.xy, 1);

+    data[invocation].f4.xyz = subgroupQuadBroadcast(data[2].f4.xyz, 1);

+    data[invocation].f4     = subgroupQuadBroadcast(data[3].f4, 1);

+

+    data[invocation].i4.x   = subgroupQuadBroadcast(data[0].i4.x, 1);

+    data[invocation].i4.xy  = subgroupQuadBroadcast(data[1].i4.xy, 1);

+    data[invocation].i4.xyz = subgroupQuadBroadcast(data[2].i4.xyz, 1);

+    data[invocation].i4     = subgroupQuadBroadcast(data[3].i4, 1);

+

+    data[invocation].u4.x   = subgroupQuadBroadcast(data[0].u4.x, 1);

+    data[invocation].u4.xy  = subgroupQuadBroadcast(data[1].u4.xy, 1);

+    data[invocation].u4.xyz = subgroupQuadBroadcast(data[2].u4.xyz, 1);

+    data[invocation].u4     = subgroupQuadBroadcast(data[3].u4, 1);

+

+    data[invocation].d4.x   = subgroupQuadBroadcast(data[0].d4.x, 1);

+    data[invocation].d4.xy  = subgroupQuadBroadcast(data[1].d4.xy, 1);

+    data[invocation].d4.xyz = subgroupQuadBroadcast(data[2].d4.xyz, 1);

+    data[invocation].d4     = subgroupQuadBroadcast(data[3].d4, 1);

+

+    data[invocation].i4.x   =   int(subgroupQuadBroadcast(data[0].i4.x < 0, 1));

+    data[invocation].i4.xy  = ivec2(subgroupQuadBroadcast(lessThan(data[1].i4.xy, ivec2(0)), 1));

+    data[invocation].i4.xyz = ivec3(subgroupQuadBroadcast(lessThan(data[1].i4.xyz, ivec3(0)), 1));

+    data[invocation].i4     = ivec4(subgroupQuadBroadcast(lessThan(data[1].i4, ivec4(0)), 1));

+

+    data[invocation].f4.x   = subgroupQuadSwapHorizontal(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupQuadSwapHorizontal(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupQuadSwapHorizontal(data[2].f4.xyz);

+    data[invocation].f4     = subgroupQuadSwapHorizontal(data[3].f4);

+

+    data[invocation].i4.x   = subgroupQuadSwapHorizontal(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupQuadSwapHorizontal(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupQuadSwapHorizontal(data[2].i4.xyz);

+    data[invocation].i4     = subgroupQuadSwapHorizontal(data[3].i4);

+

+    data[invocation].u4.x   = subgroupQuadSwapHorizontal(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupQuadSwapHorizontal(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupQuadSwapHorizontal(data[2].u4.xyz);

+    data[invocation].u4     = subgroupQuadSwapHorizontal(data[3].u4);

+

+    data[invocation].d4.x   = subgroupQuadSwapHorizontal(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupQuadSwapHorizontal(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupQuadSwapHorizontal(data[2].d4.xyz);

+    data[invocation].d4     = subgroupQuadSwapHorizontal(data[3].d4);

+

+    data[invocation].i4.x   =   int(subgroupQuadSwapHorizontal(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupQuadSwapHorizontal(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupQuadSwapHorizontal(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupQuadSwapHorizontal(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].f4.x   = subgroupQuadSwapVertical(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupQuadSwapVertical(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupQuadSwapVertical(data[2].f4.xyz);

+    data[invocation].f4     = subgroupQuadSwapVertical(data[3].f4);

+

+    data[invocation].i4.x   = subgroupQuadSwapVertical(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupQuadSwapVertical(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupQuadSwapVertical(data[2].i4.xyz);

+    data[invocation].i4     = subgroupQuadSwapVertical(data[3].i4);

+

+    data[invocation].u4.x   = subgroupQuadSwapVertical(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupQuadSwapVertical(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupQuadSwapVertical(data[2].u4.xyz);

+    data[invocation].u4     = subgroupQuadSwapVertical(data[3].u4);

+

+    data[invocation].d4.x   = subgroupQuadSwapVertical(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupQuadSwapVertical(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupQuadSwapVertical(data[2].d4.xyz);

+    data[invocation].d4     = subgroupQuadSwapVertical(data[3].d4);

+

+    data[invocation].i4.x   =   int(subgroupQuadSwapVertical(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupQuadSwapVertical(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupQuadSwapVertical(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupQuadSwapVertical(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].f4.x   = subgroupQuadSwapDiagonal(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupQuadSwapDiagonal(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupQuadSwapDiagonal(data[2].f4.xyz);

+    data[invocation].f4     = subgroupQuadSwapDiagonal(data[3].f4);

+

+    data[invocation].i4.x   = subgroupQuadSwapDiagonal(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupQuadSwapDiagonal(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupQuadSwapDiagonal(data[2].i4.xyz);

+    data[invocation].i4     = subgroupQuadSwapDiagonal(data[3].i4);

+

+    data[invocation].u4.x   = subgroupQuadSwapDiagonal(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupQuadSwapDiagonal(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupQuadSwapDiagonal(data[2].u4.xyz);

+    data[invocation].u4     = subgroupQuadSwapDiagonal(data[3].u4);

+

+    data[invocation].d4.x   = subgroupQuadSwapDiagonal(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupQuadSwapDiagonal(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupQuadSwapDiagonal(data[2].d4.xyz);

+    data[invocation].d4     = subgroupQuadSwapDiagonal(data[3].d4);

+

+    data[invocation].i4.x   =   int(subgroupQuadSwapDiagonal(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupQuadSwapDiagonal(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupQuadSwapDiagonal(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupQuadSwapDiagonal(lessThan(data[1].i4, ivec4(0))));

+}

diff --git a/Test/spv.subgroupShuffle.comp b/Test/spv.subgroupShuffle.comp
new file mode 100644
index 0000000..6d26488
--- /dev/null
+++ b/Test/spv.subgroupShuffle.comp
@@ -0,0 +1,68 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_shuffle: enable

+

+layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+    dvec4 d4;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    data[invocation].f4.x   = subgroupShuffle(data[0].f4.x,    invocation);

+    data[invocation].f4.xy  = subgroupShuffle(data[1].f4.xy,   invocation);

+    data[invocation].f4.xyz = subgroupShuffle(data[2].f4.xyz,  invocation);

+    data[invocation].f4     = subgroupShuffle(data[3].f4,      invocation);

+

+    data[invocation].i4.x   = subgroupShuffle(data[0].i4.x,    invocation);

+    data[invocation].i4.xy  = subgroupShuffle(data[1].i4.xy,   invocation);

+    data[invocation].i4.xyz = subgroupShuffle(data[2].i4.xyz,  invocation);

+    data[invocation].i4     = subgroupShuffle(data[3].i4,      invocation);

+

+    data[invocation].u4.x   = subgroupShuffle(data[0].u4.x,    invocation);

+    data[invocation].u4.xy  = subgroupShuffle(data[1].u4.xy,   invocation);

+    data[invocation].u4.xyz = subgroupShuffle(data[2].u4.xyz,  invocation);

+    data[invocation].u4     = subgroupShuffle(data[3].u4,      invocation);

+

+    data[invocation].d4.x   = subgroupShuffle(data[0].d4.x,    invocation);

+    data[invocation].d4.xy  = subgroupShuffle(data[1].d4.xy,   invocation);

+    data[invocation].d4.xyz = subgroupShuffle(data[2].d4.xyz,  invocation);

+    data[invocation].d4     = subgroupShuffle(data[3].d4,      invocation);

+

+    data[invocation].i4.x   =   int(subgroupShuffle(data[0].i4.x < 0,                   invocation));

+    data[invocation].i4.xy  = ivec2(subgroupShuffle(lessThan(data[1].i4.xy, ivec2(0)),  invocation));

+    data[invocation].i4.xyz = ivec3(subgroupShuffle(lessThan(data[1].i4.xyz, ivec3(0)), invocation));

+    data[invocation].i4     = ivec4(subgroupShuffle(lessThan(data[1].i4, ivec4(0)),     invocation));

+

+    data[invocation].f4.x   = subgroupShuffleXor(data[0].f4.x,    invocation);

+    data[invocation].f4.xy  = subgroupShuffleXor(data[1].f4.xy,   invocation);

+    data[invocation].f4.xyz = subgroupShuffleXor(data[2].f4.xyz,  invocation);

+    data[invocation].f4     = subgroupShuffleXor(data[3].f4,      invocation);

+

+    data[invocation].i4.x   = subgroupShuffleXor(data[0].i4.x,    invocation);

+    data[invocation].i4.xy  = subgroupShuffleXor(data[1].i4.xy,   invocation);

+    data[invocation].i4.xyz = subgroupShuffleXor(data[2].i4.xyz,  invocation);

+    data[invocation].i4     = subgroupShuffleXor(data[3].i4,      invocation);

+

+    data[invocation].u4.x   = subgroupShuffleXor(data[0].u4.x,    invocation);

+    data[invocation].u4.xy  = subgroupShuffleXor(data[1].u4.xy,   invocation);

+    data[invocation].u4.xyz = subgroupShuffleXor(data[2].u4.xyz,  invocation);

+    data[invocation].u4     = subgroupShuffleXor(data[3].u4,      invocation);

+

+    data[invocation].d4.x   = subgroupShuffleXor(data[0].d4.x,    invocation);

+    data[invocation].d4.xy  = subgroupShuffleXor(data[1].d4.xy,   invocation);

+    data[invocation].d4.xyz = subgroupShuffleXor(data[2].d4.xyz,  invocation);

+    data[invocation].d4     = subgroupShuffleXor(data[3].d4,      invocation);

+

+    data[invocation].i4.x   =   int(subgroupShuffleXor(data[0].i4.x < 0,                   invocation));

+    data[invocation].i4.xy  = ivec2(subgroupShuffleXor(lessThan(data[1].i4.xy, ivec2(0)),  invocation));

+    data[invocation].i4.xyz = ivec3(subgroupShuffleXor(lessThan(data[1].i4.xyz, ivec3(0)), invocation));

+    data[invocation].i4     = ivec4(subgroupShuffleXor(lessThan(data[1].i4, ivec4(0)),     invocation));

+}

diff --git a/Test/spv.subgroupShuffleRelative.comp b/Test/spv.subgroupShuffleRelative.comp
new file mode 100644
index 0000000..1864de1
--- /dev/null
+++ b/Test/spv.subgroupShuffleRelative.comp
@@ -0,0 +1,68 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_shuffle_relative: enable

+

+layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+    dvec4 d4;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    data[invocation].f4.x   = subgroupShuffleUp(data[0].f4.x,    invocation);

+    data[invocation].f4.xy  = subgroupShuffleUp(data[1].f4.xy,   invocation);

+    data[invocation].f4.xyz = subgroupShuffleUp(data[2].f4.xyz,  invocation);

+    data[invocation].f4     = subgroupShuffleUp(data[3].f4,      invocation);

+

+    data[invocation].i4.x   = subgroupShuffleUp(data[0].i4.x,    invocation);

+    data[invocation].i4.xy  = subgroupShuffleUp(data[1].i4.xy,   invocation);

+    data[invocation].i4.xyz = subgroupShuffleUp(data[2].i4.xyz,  invocation);

+    data[invocation].i4     = subgroupShuffleUp(data[3].i4,      invocation);

+

+    data[invocation].u4.x   = subgroupShuffleUp(data[0].u4.x,    invocation);

+    data[invocation].u4.xy  = subgroupShuffleUp(data[1].u4.xy,   invocation);

+    data[invocation].u4.xyz = subgroupShuffleUp(data[2].u4.xyz,  invocation);

+    data[invocation].u4     = subgroupShuffleUp(data[3].u4,      invocation);

+

+    data[invocation].d4.x   = subgroupShuffleUp(data[0].d4.x,    invocation);

+    data[invocation].d4.xy  = subgroupShuffleUp(data[1].d4.xy,   invocation);

+    data[invocation].d4.xyz = subgroupShuffleUp(data[2].d4.xyz,  invocation);

+    data[invocation].d4     = subgroupShuffleUp(data[3].d4,      invocation);

+

+    data[invocation].i4.x   =   int(subgroupShuffleUp(data[0].i4.x < 0,                   invocation));

+    data[invocation].i4.xy  = ivec2(subgroupShuffleUp(lessThan(data[1].i4.xy, ivec2(0)),  invocation));

+    data[invocation].i4.xyz = ivec3(subgroupShuffleUp(lessThan(data[1].i4.xyz, ivec3(0)), invocation));

+    data[invocation].i4     = ivec4(subgroupShuffleUp(lessThan(data[1].i4, ivec4(0)),     invocation));

+

+    data[invocation].f4.x   = subgroupShuffleDown(data[0].f4.x,    invocation);

+    data[invocation].f4.xy  = subgroupShuffleDown(data[1].f4.xy,   invocation);

+    data[invocation].f4.xyz = subgroupShuffleDown(data[2].f4.xyz,  invocation);

+    data[invocation].f4     = subgroupShuffleDown(data[3].f4,      invocation);

+

+    data[invocation].i4.x   = subgroupShuffleDown(data[0].i4.x,    invocation);

+    data[invocation].i4.xy  = subgroupShuffleDown(data[1].i4.xy,   invocation);

+    data[invocation].i4.xyz = subgroupShuffleDown(data[2].i4.xyz,  invocation);

+    data[invocation].i4     = subgroupShuffleDown(data[3].i4,      invocation);

+

+    data[invocation].u4.x   = subgroupShuffleDown(data[0].u4.x,    invocation);

+    data[invocation].u4.xy  = subgroupShuffleDown(data[1].u4.xy,   invocation);

+    data[invocation].u4.xyz = subgroupShuffleDown(data[2].u4.xyz,  invocation);

+    data[invocation].u4     = subgroupShuffleDown(data[3].u4,      invocation);

+

+    data[invocation].d4.x   = subgroupShuffleDown(data[0].d4.x,    invocation);

+    data[invocation].d4.xy  = subgroupShuffleDown(data[1].d4.xy,   invocation);

+    data[invocation].d4.xyz = subgroupShuffleDown(data[2].d4.xyz,  invocation);

+    data[invocation].d4     = subgroupShuffleDown(data[3].d4,      invocation);

+

+    data[invocation].i4.x   =   int(subgroupShuffleDown(data[0].i4.x < 0,                   invocation));

+    data[invocation].i4.xy  = ivec2(subgroupShuffleDown(lessThan(data[1].i4.xy, ivec2(0)),  invocation));

+    data[invocation].i4.xyz = ivec3(subgroupShuffleDown(lessThan(data[1].i4.xyz, ivec3(0)), invocation));

+    data[invocation].i4     = ivec4(subgroupShuffleDown(lessThan(data[1].i4, ivec4(0)),     invocation));

+}

diff --git a/Test/spv.subgroupVote.comp b/Test/spv.subgroupVote.comp
new file mode 100644
index 0000000..c1c877a
--- /dev/null
+++ b/Test/spv.subgroupVote.comp
@@ -0,0 +1,49 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_vote: enable

+

+layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+    dvec4 d4;

+    int r;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    if (subgroupAll(data[invocation].r < 0))

+    {

+        data[invocation].r = int(subgroupAllEqual(data[0].f4.x));

+        data[invocation].r = int(subgroupAllEqual(data[1].f4.xy));

+        data[invocation].r = int(subgroupAllEqual(data[2].f4.xyz));

+        data[invocation].r = int(subgroupAllEqual(data[3].f4));

+

+        data[invocation].r = int(subgroupAllEqual(data[0].i4.x));

+        data[invocation].r = int(subgroupAllEqual(data[1].i4.xy));

+        data[invocation].r = int(subgroupAllEqual(data[2].i4.xyz));

+        data[invocation].r = int(subgroupAllEqual(data[3].i4));

+

+        data[invocation].r = int(subgroupAllEqual(data[0].u4.x));

+        data[invocation].r = int(subgroupAllEqual(data[1].u4.xy));

+        data[invocation].r = int(subgroupAllEqual(data[2].u4.xyz));

+        data[invocation].r = int(subgroupAllEqual(data[3].u4));

+    }

+    else if (subgroupAny(data[invocation].r < 0))

+    {

+        data[invocation].r = int(subgroupAllEqual(data[0].d4.x));

+        data[invocation].r = int(subgroupAllEqual(data[1].d4.xy));

+        data[invocation].r = int(subgroupAllEqual(data[2].d4.xyz));

+        data[invocation].r = int(subgroupAllEqual(data[3].d4));

+

+        data[invocation].r = int(int(subgroupAllEqual(data[0].i4.x < 0)));

+        data[invocation].r = int(ivec2(subgroupAllEqual(lessThan(data[1].i4.xy, ivec2(0)))));

+        data[invocation].r = int(ivec3(subgroupAllEqual(lessThan(data[1].i4.xyz, ivec3(0)))));

+        data[invocation].r = int(ivec4(subgroupAllEqual(lessThan(data[1].i4, ivec4(0)))));

+    }

+}

diff --git a/Test/spv.vulkan100.subgroupArithmetic.comp b/Test/spv.vulkan100.subgroupArithmetic.comp
new file mode 100644
index 0000000..6cc9337
--- /dev/null
+++ b/Test/spv.vulkan100.subgroupArithmetic.comp
@@ -0,0 +1,393 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_arithmetic: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+    dvec4 d4;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    data[invocation].f4.x   = subgroupAdd(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupAdd(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupAdd(data[2].f4.xyz);

+    data[invocation].f4     = subgroupAdd(data[3].f4);

+

+    data[invocation].i4.x   = subgroupAdd(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupAdd(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupAdd(data[2].i4.xyz);

+    data[invocation].i4     = subgroupAdd(data[3].i4);

+

+    data[invocation].u4.x   = subgroupAdd(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupAdd(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupAdd(data[2].u4.xyz);

+    data[invocation].u4     = subgroupAdd(data[3].u4);

+

+    data[invocation].d4.x   = subgroupAdd(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupAdd(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupAdd(data[2].d4.xyz);

+    data[invocation].d4     = subgroupAdd(data[3].d4);

+

+    data[invocation].f4.x   = subgroupMul(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupMul(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupMul(data[2].f4.xyz);

+    data[invocation].f4     = subgroupMul(data[3].f4);

+

+    data[invocation].i4.x   = subgroupMul(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupMul(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupMul(data[2].i4.xyz);

+    data[invocation].i4     = subgroupMul(data[3].i4);

+

+    data[invocation].u4.x   = subgroupMul(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupMul(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupMul(data[2].u4.xyz);

+    data[invocation].u4     = subgroupMul(data[3].u4);

+

+    data[invocation].d4.x   = subgroupMul(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupMul(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupMul(data[2].d4.xyz);

+    data[invocation].d4     = subgroupMul(data[3].d4);

+

+    data[invocation].f4.x   = subgroupMin(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupMin(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupMin(data[2].f4.xyz);

+    data[invocation].f4     = subgroupMin(data[3].f4);

+

+    data[invocation].i4.x   = subgroupMin(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupMin(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupMin(data[2].i4.xyz);

+    data[invocation].i4     = subgroupMin(data[3].i4);

+

+    data[invocation].u4.x   = subgroupMin(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupMin(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupMin(data[2].u4.xyz);

+    data[invocation].u4     = subgroupMin(data[3].u4);

+

+    data[invocation].d4.x   = subgroupMin(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupMin(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupMin(data[2].d4.xyz);

+    data[invocation].d4     = subgroupMin(data[3].d4);

+

+    data[invocation].f4.x   = subgroupMax(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupMax(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupMax(data[2].f4.xyz);

+    data[invocation].f4     = subgroupMax(data[3].f4);

+

+    data[invocation].i4.x   = subgroupMax(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupMax(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupMax(data[2].i4.xyz);

+    data[invocation].i4     = subgroupMax(data[3].i4);

+

+    data[invocation].u4.x   = subgroupMax(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupMax(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupMax(data[2].u4.xyz);

+    data[invocation].u4     = subgroupMax(data[3].u4);

+

+    data[invocation].d4.x   = subgroupMax(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupMax(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupMax(data[2].d4.xyz);

+    data[invocation].d4     = subgroupMax(data[3].d4);

+

+    data[invocation].i4.x   = subgroupAnd(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupAnd(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupAnd(data[2].i4.xyz);

+    data[invocation].i4     = subgroupAnd(data[3].i4);

+

+    data[invocation].u4.x   = subgroupAnd(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupAnd(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupAnd(data[2].u4.xyz);

+    data[invocation].u4     = subgroupAnd(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupAnd(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupAnd(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupAnd(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupAnd(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].i4.x   = subgroupOr(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupOr(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupOr(data[2].i4.xyz);

+    data[invocation].i4     = subgroupOr(data[3].i4);

+

+    data[invocation].u4.x   = subgroupOr(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupOr(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupOr(data[2].u4.xyz);

+    data[invocation].u4     = subgroupOr(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupOr(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupOr(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupOr(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupOr(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].i4.x   = subgroupXor(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupXor(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupXor(data[2].i4.xyz);

+    data[invocation].i4     = subgroupXor(data[3].i4);

+

+    data[invocation].u4.x   = subgroupXor(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupXor(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupXor(data[2].u4.xyz);

+    data[invocation].u4     = subgroupXor(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupXor(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupXor(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupXor(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupXor(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].f4.x   = subgroupInclusiveAdd(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupInclusiveAdd(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupInclusiveAdd(data[2].f4.xyz);

+    data[invocation].f4     = subgroupInclusiveAdd(data[3].f4);

+

+    data[invocation].i4.x   = subgroupInclusiveAdd(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupInclusiveAdd(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupInclusiveAdd(data[2].i4.xyz);

+    data[invocation].i4     = subgroupInclusiveAdd(data[3].i4);

+

+    data[invocation].u4.x   = subgroupInclusiveAdd(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupInclusiveAdd(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupInclusiveAdd(data[2].u4.xyz);

+    data[invocation].u4     = subgroupInclusiveAdd(data[3].u4);

+

+    data[invocation].d4.x   = subgroupInclusiveAdd(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupInclusiveAdd(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupInclusiveAdd(data[2].d4.xyz);

+    data[invocation].d4     = subgroupInclusiveAdd(data[3].d4);

+

+    data[invocation].f4.x   = subgroupInclusiveMul(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupInclusiveMul(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupInclusiveMul(data[2].f4.xyz);

+    data[invocation].f4     = subgroupInclusiveMul(data[3].f4);

+

+    data[invocation].i4.x   = subgroupInclusiveMul(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupInclusiveMul(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupInclusiveMul(data[2].i4.xyz);

+    data[invocation].i4     = subgroupInclusiveMul(data[3].i4);

+

+    data[invocation].u4.x   = subgroupInclusiveMul(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupInclusiveMul(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupInclusiveMul(data[2].u4.xyz);

+    data[invocation].u4     = subgroupInclusiveMul(data[3].u4);

+

+    data[invocation].d4.x   = subgroupInclusiveMul(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupInclusiveMul(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupInclusiveMul(data[2].d4.xyz);

+    data[invocation].d4     = subgroupInclusiveMul(data[3].d4);

+

+    data[invocation].f4.x   = subgroupInclusiveMin(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupInclusiveMin(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupInclusiveMin(data[2].f4.xyz);

+    data[invocation].f4     = subgroupInclusiveMin(data[3].f4);

+

+    data[invocation].i4.x   = subgroupInclusiveMin(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupInclusiveMin(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupInclusiveMin(data[2].i4.xyz);

+    data[invocation].i4     = subgroupInclusiveMin(data[3].i4);

+

+    data[invocation].u4.x   = subgroupInclusiveMin(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupInclusiveMin(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupInclusiveMin(data[2].u4.xyz);

+    data[invocation].u4     = subgroupInclusiveMin(data[3].u4);

+

+    data[invocation].d4.x   = subgroupInclusiveMin(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupInclusiveMin(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupInclusiveMin(data[2].d4.xyz);

+    data[invocation].d4     = subgroupInclusiveMin(data[3].d4);

+

+    data[invocation].f4.x   = subgroupInclusiveMax(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupInclusiveMax(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupInclusiveMax(data[2].f4.xyz);

+    data[invocation].f4     = subgroupInclusiveMax(data[3].f4);

+

+    data[invocation].i4.x   = subgroupInclusiveMax(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupInclusiveMax(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupInclusiveMax(data[2].i4.xyz);

+    data[invocation].i4     = subgroupInclusiveMax(data[3].i4);

+

+    data[invocation].u4.x   = subgroupInclusiveMax(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupInclusiveMax(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupInclusiveMax(data[2].u4.xyz);

+    data[invocation].u4     = subgroupInclusiveMax(data[3].u4);

+

+    data[invocation].d4.x   = subgroupInclusiveMax(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupInclusiveMax(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupInclusiveMax(data[2].d4.xyz);

+    data[invocation].d4     = subgroupInclusiveMax(data[3].d4);

+

+    data[invocation].i4.x   = subgroupInclusiveAnd(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupInclusiveAnd(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupInclusiveAnd(data[2].i4.xyz);

+    data[invocation].i4     = subgroupInclusiveAnd(data[3].i4);

+

+    data[invocation].u4.x   = subgroupInclusiveAnd(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupInclusiveAnd(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupInclusiveAnd(data[2].u4.xyz);

+    data[invocation].u4     = subgroupInclusiveAnd(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupInclusiveAnd(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupInclusiveAnd(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupInclusiveAnd(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupInclusiveAnd(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].i4.x   = subgroupInclusiveOr(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupInclusiveOr(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupInclusiveOr(data[2].i4.xyz);

+    data[invocation].i4     = subgroupInclusiveOr(data[3].i4);

+

+    data[invocation].u4.x   = subgroupInclusiveOr(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupInclusiveOr(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupInclusiveOr(data[2].u4.xyz);

+    data[invocation].u4     = subgroupInclusiveOr(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupInclusiveOr(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupInclusiveOr(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupInclusiveOr(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupInclusiveOr(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].i4.x   = subgroupInclusiveXor(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupInclusiveXor(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupInclusiveXor(data[2].i4.xyz);

+    data[invocation].i4     = subgroupInclusiveXor(data[3].i4);

+

+    data[invocation].u4.x   = subgroupInclusiveXor(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupInclusiveXor(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupInclusiveXor(data[2].u4.xyz);

+    data[invocation].u4     = subgroupInclusiveXor(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupInclusiveXor(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupInclusiveXor(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupInclusiveXor(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupInclusiveXor(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].f4.x   = subgroupExclusiveAdd(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupExclusiveAdd(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupExclusiveAdd(data[2].f4.xyz);

+    data[invocation].f4     = subgroupExclusiveAdd(data[3].f4);

+

+    data[invocation].i4.x   = subgroupExclusiveAdd(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupExclusiveAdd(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupExclusiveAdd(data[2].i4.xyz);

+    data[invocation].i4     = subgroupExclusiveAdd(data[3].i4);

+

+    data[invocation].u4.x   = subgroupExclusiveAdd(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupExclusiveAdd(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupExclusiveAdd(data[2].u4.xyz);

+    data[invocation].u4     = subgroupExclusiveAdd(data[3].u4);

+

+    data[invocation].d4.x   = subgroupExclusiveAdd(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupExclusiveAdd(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupExclusiveAdd(data[2].d4.xyz);

+    data[invocation].d4     = subgroupExclusiveAdd(data[3].d4);

+

+    data[invocation].f4.x   = subgroupExclusiveMul(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupExclusiveMul(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupExclusiveMul(data[2].f4.xyz);

+    data[invocation].f4     = subgroupExclusiveMul(data[3].f4);

+

+    data[invocation].i4.x   = subgroupExclusiveMul(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupExclusiveMul(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupExclusiveMul(data[2].i4.xyz);

+    data[invocation].i4     = subgroupExclusiveMul(data[3].i4);

+

+    data[invocation].u4.x   = subgroupExclusiveMul(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupExclusiveMul(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupExclusiveMul(data[2].u4.xyz);

+    data[invocation].u4     = subgroupExclusiveMul(data[3].u4);

+

+    data[invocation].d4.x   = subgroupExclusiveMul(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupExclusiveMul(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupExclusiveMul(data[2].d4.xyz);

+    data[invocation].d4     = subgroupExclusiveMul(data[3].d4);

+

+    data[invocation].f4.x   = subgroupExclusiveMin(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupExclusiveMin(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupExclusiveMin(data[2].f4.xyz);

+    data[invocation].f4     = subgroupExclusiveMin(data[3].f4);

+

+    data[invocation].i4.x   = subgroupExclusiveMin(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupExclusiveMin(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupExclusiveMin(data[2].i4.xyz);

+    data[invocation].i4     = subgroupExclusiveMin(data[3].i4);

+

+    data[invocation].u4.x   = subgroupExclusiveMin(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupExclusiveMin(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupExclusiveMin(data[2].u4.xyz);

+    data[invocation].u4     = subgroupExclusiveMin(data[3].u4);

+

+    data[invocation].d4.x   = subgroupExclusiveMin(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupExclusiveMin(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupExclusiveMin(data[2].d4.xyz);

+    data[invocation].d4     = subgroupExclusiveMin(data[3].d4);

+

+    data[invocation].f4.x   = subgroupExclusiveMax(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupExclusiveMax(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupExclusiveMax(data[2].f4.xyz);

+    data[invocation].f4     = subgroupExclusiveMax(data[3].f4);

+

+    data[invocation].i4.x   = subgroupExclusiveMax(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupExclusiveMax(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupExclusiveMax(data[2].i4.xyz);

+    data[invocation].i4     = subgroupExclusiveMax(data[3].i4);

+

+    data[invocation].u4.x   = subgroupExclusiveMax(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupExclusiveMax(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupExclusiveMax(data[2].u4.xyz);

+    data[invocation].u4     = subgroupExclusiveMax(data[3].u4);

+

+    data[invocation].d4.x   = subgroupExclusiveMax(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupExclusiveMax(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupExclusiveMax(data[2].d4.xyz);

+    data[invocation].d4     = subgroupExclusiveMax(data[3].d4);

+

+    data[invocation].i4.x   = subgroupExclusiveAnd(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupExclusiveAnd(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupExclusiveAnd(data[2].i4.xyz);

+    data[invocation].i4     = subgroupExclusiveAnd(data[3].i4);

+

+    data[invocation].u4.x   = subgroupExclusiveAnd(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupExclusiveAnd(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupExclusiveAnd(data[2].u4.xyz);

+    data[invocation].u4     = subgroupExclusiveAnd(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupExclusiveAnd(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupExclusiveAnd(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupExclusiveAnd(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupExclusiveAnd(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].i4.x   = subgroupExclusiveOr(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupExclusiveOr(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupExclusiveOr(data[2].i4.xyz);

+    data[invocation].i4     = subgroupExclusiveOr(data[3].i4);

+

+    data[invocation].u4.x   = subgroupExclusiveOr(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupExclusiveOr(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupExclusiveOr(data[2].u4.xyz);

+    data[invocation].u4     = subgroupExclusiveOr(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupExclusiveOr(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupExclusiveOr(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupExclusiveOr(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupExclusiveOr(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].i4.x   = subgroupExclusiveXor(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupExclusiveXor(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupExclusiveXor(data[2].i4.xyz);

+    data[invocation].i4     = subgroupExclusiveXor(data[3].i4);

+

+    data[invocation].u4.x   = subgroupExclusiveXor(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupExclusiveXor(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupExclusiveXor(data[2].u4.xyz);

+    data[invocation].u4     = subgroupExclusiveXor(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupExclusiveXor(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupExclusiveXor(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupExclusiveXor(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupExclusiveXor(lessThan(data[1].i4, ivec4(0))));

+}

diff --git a/Test/spv.vulkan110.int16.frag b/Test/spv.vulkan110.int16.frag
new file mode 100644
index 0000000..d29894b
--- /dev/null
+++ b/Test/spv.vulkan110.int16.frag
@@ -0,0 +1,251 @@
+#version 450
+
+#extension GL_KHX_shader_explicit_arithmetic_types: enable
+#extension GL_KHX_shader_explicit_arithmetic_types_int8: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int16: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int32: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float16: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float32: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float64: require
+
+layout(binding = 0) uniform Uniforms
+{
+    uint index;
+};
+
+layout(std140, binding = 1) uniform Block
+{
+    int16_t   i16;
+    i16vec2   i16v2;
+    i16vec3   i16v3;
+    i16vec4   i16v4;
+    uint16_t  u16;
+    u16vec2   u16v2;
+    u16vec3   u16v3;
+    u16vec4   u16v4;
+} block;
+
+void main()
+{
+}
+
+void literal()
+{
+    const int16_t i16Const[3] =
+    {
+        int16_t(-0x1111),           // Hex
+        int16_t(-1),                // Dec
+        int16_t(040000),            // Oct
+    };
+
+    int16_t i16 = i16Const[index];
+
+    const uint16_t u16Const[] =
+    {
+        uint16_t(0xFFFF),             // Hex
+        uint16_t(65535),              // Dec
+        uint16_t(077777),             // Oct
+    };
+
+    uint16_t u16 = u16Const[index];
+}
+
+void typeCast16()
+{
+    i8vec2 i8v;
+    u8vec2 u8v;
+    i16vec2 i16v;
+    u16vec2 u16v;
+    i32vec2 i32v;
+    u32vec2 u32v;
+    i64vec2 i64v;
+    u64vec2 u64v;
+    f16vec2 f16v;
+    f32vec2 f32v;
+    f64vec2 f64v;
+    bvec2   bv;
+
+    i32v = i16v;     // int16_t  ->   int32_t
+    i32v = u16v;     // uint16_t ->   int32_t
+    u16v = i16v;     // int16_t  ->  uint16_t
+    u32v = i16v;     // int16_t  ->  uint32_t
+    i64v = i16v;     // int16_t  ->   int64_t
+    u64v = i16v;     // int16_t  ->  uint64_t
+    u32v = u16v;     // uint16_t ->  uint32_t
+    i64v = u16v;     // uint16_t ->   int64_t
+    u64v = u16v;     // uint16_t ->  uint64_t
+    f16v = i16v;     // int16_t  ->  float16_t
+    f32v = i16v;     // int16_t  ->  float32_t
+    f64v = i16v;     // int16_t  ->  float64_t
+    f16v = u16v;     // uint16_t ->  float16_t
+    f32v = u16v;     // uint16_t ->  float32_t
+    f64v = u16v;     // uint16_t ->  float64_t
+
+    i32v = i32vec2(i16v);     // int16_t  ->   int32_t
+    i32v = i32vec2(u16v);     // uint16_t ->   int32_t
+    u16v = u16vec2(i16v);     // int16_t  ->  uint16_t
+    u32v = u32vec2(i16v);     // int16_t  ->  uint32_t
+    i64v = i64vec2(i16v);     // int16_t  ->   int64_t
+    u64v = i64vec2(i16v);     // int16_t  ->  uint64_t
+    u32v = u32vec2(u16v);     // uint16_t ->  uint32_t
+    i64v = i64vec2(u16v);     // uint16_t ->   int64_t
+    u64v = i64vec2(u16v);     // uint16_t ->  uint64_t
+    f16v = f16vec2(i16v);     // int16_t  ->  float16_t
+    f32v = f32vec2(i16v);     // int16_t  ->  float32_t
+    f64v = f64vec2(i16v);     // int16_t  ->  float64_t
+    f16v = f16vec2(u16v);     // uint16_t ->  float16_t
+    f32v = f32vec2(u16v);     // uint16_t ->  float32_t
+    f64v = f64vec2(u16v);     // uint16_t ->  float64_t
+
+    i8v  = i8vec2(i16v);      // int16_t  ->   int8_t
+    i8v  = i8vec2(u16v);      // uint16_t ->   int8_t
+    u8v  = u8vec2(i16v);      // int16_t  ->  uint8_t
+    u8v  = u8vec2(u16v);      // uint16_t ->  uint8_t
+    i16v = u8vec2(u16v);      // uint16_t ->   int16_t
+    i16v = i16vec2(bv);       // bool     ->   int16
+    u16v = u16vec2(bv);       // bool     ->   uint16
+    bv   = bvec2(i16v);       // int16    ->   bool
+    bv   = bvec2(u16v);       // uint16   ->   bool
+}
+void operators()
+{
+    u16vec3 u16v;
+    int16_t i16;
+    uvec3   uv;
+    int32_t i;
+    int64_t i64;
+    bool    b;
+
+    // Unary
+    u16v++;
+    i16--;
+    ++i16;
+    --u16v;
+
+    u16v = ~u16v;
+
+    i16 = +i16;
+    u16v = -u16v;
+
+    // Arithmetic
+    i16  += i16;
+    u16v -= u16v;
+    i  *= i16;
+    uv /= u16v;
+    uv %= i16;
+
+    uv = u16v + uv;
+    i64  = i16 - i64;
+    uv = u16v * uv;
+    i64  = i16 * i64;
+    i  = i16 % i;
+
+    // Shift
+    u16v <<= i16;
+    i16  >>= u16v.y;
+
+    i16  = i16 << u16v.z;
+    uv = u16v << i;
+
+    // Relational
+    b = (u16v.x != i16);
+    b = (i16 == u16v.x);
+    b = (u16v.x > uv.y);
+    b = (i16 < i);
+    b = (u16v.y >= uv.x);
+    b = (i16 <= i);
+
+    // Bitwise
+    uv |= i16;
+    i  = i16 | i;
+    i64  &= i16;
+    uv = u16v & uv;
+    uv ^= i16;
+    u16v = u16v ^ i16;
+}
+
+void builtinFuncs()
+{
+    i16vec2  i16v;
+    i16vec4  i16v4;
+    u16vec3  u16v;
+    u16vec2  u16v2;
+    u16vec4  u16v4;
+    bvec3   bv;
+    int16_t i16;
+    uint16_t u16;
+    int32_t i32;
+    uint32_t u32;
+    int64_t i64;
+    uint64_t u64;
+
+    // abs()
+    i16v = abs(i16v);
+
+    // sign()
+    i16  = sign(i16);
+
+    // min()
+    i16v = min(i16v, i16);
+    i16v = min(i16v, i16vec2(-1));
+    u16v = min(u16v, u16);
+    u16v = min(u16v, u16vec3(0));
+
+    // max()
+    i16v = max(i16v, i16);
+    i16v = max(i16v, i16vec2(-1));
+    u16v = max(u16v, u16);
+    u16v = max(u16v, u16vec3(0));
+
+    // clamp()
+    i16v = clamp(i16v, -i16, i16);
+    i16v = clamp(i16v, -i16v, i16v);
+    u16v = clamp(u16v, -u16, u16);
+    u16v = clamp(u16v, -u16v, u16v);
+
+    // mix()
+    i16  = mix(i16v.x, i16v.y, true);
+    i16v = mix(i16vec2(i16), i16vec2(-i16), bvec2(false));
+    u16  = mix(u16v.x, u16v.y, true);
+    u16v = mix(u16vec3(u16), u16vec3(-u16), bvec3(false));
+
+    //pack
+    i32 = pack32(i16v);
+    i64 = pack64(i16v4);
+    u32 = pack32(u16v2);
+    u64 = pack64(u16v4);
+
+    i16v  = unpack16(i32);
+    i16v4 = unpack16(i64);
+    u16v2 = unpack16(u32);
+    u16v4 = unpack16(u64);
+
+    // lessThan()
+    bv    = lessThan(u16v, u16vec3(u16));
+    bv.xy = lessThan(i16v, i16vec2(i16));
+
+    // lessThanEqual()
+    bv    = lessThanEqual(u16v, u16vec3(u16));
+    bv.xy = lessThanEqual(i16v, i16vec2(i16));
+
+    // greaterThan()
+    bv    = greaterThan(u16v, u16vec3(u16));
+    bv.xy = greaterThan(i16v, i16vec2(i16));
+
+    // greaterThanEqual()
+    bv    = greaterThanEqual(u16v, u16vec3(u16));
+    bv.xy = greaterThanEqual(i16v, i16vec2(i16));
+
+    // equal()
+    bv    = equal(u16v, u16vec3(u16));
+    bv.xy = equal(i16v, i16vec2(i16));
+
+    // notEqual()
+    bv    = notEqual(u16v, u16vec3(u16));
+    bv.xy = notEqual(i16v, i16vec2(i16));
+}
+
+// Type conversion for specialization constant
+layout(constant_id = 100) const int16_t  si16 = int16_t(-10);
+layout(constant_id = 101) const uint16_t su16 = uint16_t(20);
diff --git a/Test/spv.vulkan110.storageBuffer.vert b/Test/spv.vulkan110.storageBuffer.vert
new file mode 100644
index 0000000..6dd629e
--- /dev/null
+++ b/Test/spv.vulkan110.storageBuffer.vert
@@ -0,0 +1,16 @@
+#version 450

+

+#pragma use_storage_buffer

+

+uniform ub {

+    vec4 a;

+} ubi;

+

+buffer bb {

+    vec4 b;

+} bbi;

+

+void main()

+{

+    gl_Position = ubi.a + bbi.b;

+}

diff --git a/glslang/Include/BaseTypes.h b/glslang/Include/BaseTypes.h
index 050c2c4..46fe159 100644
--- a/glslang/Include/BaseTypes.h
+++ b/glslang/Include/BaseTypes.h
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2013 LunarG, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -46,17 +47,15 @@
     EbtVoid,
     EbtFloat,
     EbtDouble,
-#ifdef AMD_EXTENSIONS
     EbtFloat16,
-#endif
+    EbtInt8,
+    EbtUint8,
+    EbtInt16,
+    EbtUint16,
     EbtInt,
     EbtUint,
     EbtInt64,
     EbtUint64,
-#ifdef AMD_EXTENSIONS
-    EbtInt16,
-    EbtUint16,
-#endif
     EbtBool,
     EbtAtomicUint,
     EbtSampler,
@@ -141,6 +140,8 @@
     EbvLocalInvocationId,
     EbvGlobalInvocationId,
     EbvLocalInvocationIndex,
+    EbvNumSubgroups,
+    EbvSubgroupID,
     EbvSubGroupSize,
     EbvSubGroupInvocation,
     EbvSubGroupEqMask,
@@ -148,6 +149,13 @@
     EbvSubGroupGtMask,
     EbvSubGroupLeMask,
     EbvSubGroupLtMask,
+    EbvSubgroupSize2,
+    EbvSubgroupInvocation2,
+    EbvSubgroupEqMask2,
+    EbvSubgroupGeMask2,
+    EbvSubgroupGtMask2,
+    EbvSubgroupLeMask2,
+    EbvSubgroupLtMask2,
     EbvVertexId,
     EbvInstanceId,
     EbvVertexIndex,
@@ -373,7 +381,7 @@
 
 __inline const char* GetPrecisionQualifierString(TPrecisionQualifier p)
 {
-    switch(p) {
+    switch (p) {
     case EpqNone:   return "";        break;
     case EpqLow:    return "lowp";    break;
     case EpqMedium: return "mediump"; break;
@@ -382,6 +390,75 @@
     }
 }
 
+__inline bool isTypeSignedInt(TBasicType type)
+{
+    switch (type) {
+    case EbtInt8:
+    case EbtInt16:
+    case EbtInt:
+    case EbtInt64:
+        return true;
+    default:
+        return false;
+    }
+}
+
+__inline bool isTypeUnsignedInt(TBasicType type)
+{
+    switch (type) {
+    case EbtUint8:
+    case EbtUint16:
+    case EbtUint:
+    case EbtUint64:
+        return true;
+    default:
+        return false;
+    }
+}
+
+__inline bool isTypeInt(TBasicType type)
+{
+    return isTypeSignedInt(type) || isTypeUnsignedInt(type);
+}
+
+__inline bool isTypeFloat(TBasicType type)
+{
+    switch (type) {
+    case EbtFloat:
+    case EbtDouble:
+    case EbtFloat16:
+        return true;
+    default:
+        return false;
+    }
+}
+
+__inline int getTypeRank(TBasicType type) {
+    int res = -1;
+    switch(type) {
+    case EbtInt8:
+    case EbtUint8:
+        res = 0;
+        break;
+    case EbtInt16:
+    case EbtUint16:
+        res = 1;
+        break;
+    case EbtInt:
+    case EbtUint:
+        res = 2;
+        break;
+    case EbtInt64:
+    case EbtUint64:
+        res = 3;
+        break;
+    default:
+        assert(false);
+        break;
+    }
+    return res;
+}
+
 } // end namespace glslang
 
 #endif // _BASICTYPES_INCLUDED_
diff --git a/glslang/Include/ConstantUnion.h b/glslang/Include/ConstantUnion.h
index 58c6094..3e93340 100644
--- a/glslang/Include/ConstantUnion.h
+++ b/glslang/Include/ConstantUnion.h
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2013 LunarG, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -48,6 +49,30 @@
 
     TConstUnion() : iConst(0), type(EbtInt) { }
 
+    void setI8Const(signed char i)
+    {
+       i8Const = i;
+       type = EbtInt8;
+    }
+
+    void setU8Const(unsigned char u)
+    {
+       u8Const = u;
+       type = EbtUint8;
+    }
+
+    void setI16Const(signed short i)
+    {
+       i16Const = i;
+       type = EbtInt16;
+    }
+
+    void setU16Const(unsigned short u)
+    {
+       u16Const = u;
+       type = EbtUint16;
+    }
+
     void setIConst(int i)
     {
         iConst = i;
@@ -90,6 +115,10 @@
         type = EbtString;
     }
 
+    signed char        getI8Const() const  { return i8Const; }
+    unsigned char      getU8Const() const  { return u8Const; }
+    signed short       getI16Const() const { return i16Const; }
+    unsigned short     getU16Const() const { return u16Const; }
     int                getIConst() const   { return iConst; }
     unsigned int       getUConst() const   { return uConst; }
     long long          getI64Const() const { return i64Const; }
@@ -98,6 +127,38 @@
     bool               getBConst() const   { return bConst; }
     const TString*     getSConst() const   { return sConst; }
 
+    bool operator==(const signed char i) const
+    {
+        if (i == i8Const)
+            return true;
+
+        return false;
+    }
+
+    bool operator==(const unsigned char u) const
+    {
+        if (u == u8Const)
+            return true;
+
+        return false;
+    }
+
+   bool operator==(const signed short i) const
+    {
+        if (i == i16Const)
+            return true;
+
+        return false;
+    }
+
+    bool operator==(const unsigned short u) const
+    {
+        if (u == u16Const)
+            return true;
+
+        return false;
+    }
+
     bool operator==(const int i) const
     {
         if (i == iConst)
@@ -152,6 +213,26 @@
             return false;
 
         switch (type) {
+        case EbtInt16:
+            if (constant.i16Const == i16Const)
+                return true;
+
+            break;
+         case EbtUint16:
+            if (constant.u16Const == u16Const)
+                return true;
+
+            break;
+        case EbtInt8:
+            if (constant.i8Const == i8Const)
+                return true;
+
+            break;
+         case EbtUint8:
+            if (constant.u8Const == u8Const)
+                return true;
+
+            break;
         case EbtInt:
             if (constant.iConst == iConst)
                 return true;
@@ -189,6 +270,26 @@
         return false;
     }
 
+    bool operator!=(const signed char i) const
+    {
+        return !operator==(i);
+    }
+
+    bool operator!=(const unsigned char u) const
+    {
+        return !operator==(u);
+    }
+
+    bool operator!=(const signed short i) const
+    {
+        return !operator==(i);
+    }
+
+    bool operator!=(const unsigned short u) const
+    {
+        return !operator==(u);
+    }
+
     bool operator!=(const int i) const
     {
         return !operator==(i);
@@ -228,6 +329,26 @@
     {
         assert(type == constant.type);
         switch (type) {
+        case EbtInt8:
+            if (i8Const > constant.i8Const)
+                return true;
+
+            return false;
+        case EbtUint8:
+            if (u8Const > constant.u8Const)
+                return true;
+
+            return false;
+        case EbtInt16:
+            if (i16Const > constant.i16Const)
+                return true;
+
+            return false;
+        case EbtUint16:
+            if (u16Const > constant.u16Const)
+                return true;
+
+            return false;
         case EbtInt:
             if (iConst > constant.iConst)
                 return true;
@@ -263,6 +384,26 @@
     {
         assert(type == constant.type);
         switch (type) {
+        case EbtInt8:
+            if (i8Const < constant.i8Const)
+                return true;
+
+            return false;
+        case EbtUint8:
+            if (u8Const < constant.u8Const)
+                return true;
+
+            return false;
+       case EbtInt16:
+            if (i16Const < constant.i16Const)
+                return true;
+
+            return false;
+        case EbtUint16:
+            if (u16Const < constant.u16Const)
+                return true;
+
+            return false;
         case EbtInt:
             if (iConst < constant.iConst)
                 return true;
@@ -299,9 +440,13 @@
         TConstUnion returnValue;
         assert(type == constant.type);
         switch (type) {
-        case EbtInt: returnValue.setIConst(iConst + constant.iConst); break;
-        case EbtInt64: returnValue.setI64Const(i64Const + constant.i64Const); break;
-        case EbtUint: returnValue.setUConst(uConst + constant.uConst); break;
+        case EbtInt8:   returnValue.setI8Const(i8Const + constant.i8Const); break;
+        case EbtInt16:  returnValue.setI16Const(i16Const + constant.i16Const); break;
+        case EbtInt:    returnValue.setIConst(iConst + constant.iConst); break;
+        case EbtInt64:  returnValue.setI64Const(i64Const + constant.i64Const); break;
+        case EbtUint8:  returnValue.setU8Const(u8Const + constant.u8Const); break;
+        case EbtUint16: returnValue.setU16Const(u16Const + constant.u16Const); break;
+        case EbtUint:   returnValue.setUConst(uConst + constant.uConst); break;
         case EbtUint64: returnValue.setU64Const(u64Const + constant.u64Const); break;
         case EbtDouble: returnValue.setDConst(dConst + constant.dConst); break;
         default: assert(false && "Default missing");
@@ -315,9 +460,13 @@
         TConstUnion returnValue;
         assert(type == constant.type);
         switch (type) {
-        case EbtInt: returnValue.setIConst(iConst - constant.iConst); break;
-        case EbtInt64: returnValue.setI64Const(i64Const - constant.i64Const); break;
-        case EbtUint: returnValue.setUConst(uConst - constant.uConst); break;
+        case EbtInt8:   returnValue.setI8Const(i8Const - constant.i8Const); break;
+        case EbtInt16:  returnValue.setI16Const(i16Const - constant.i16Const); break;
+        case EbtInt:    returnValue.setIConst(iConst - constant.iConst); break;
+        case EbtInt64:  returnValue.setI64Const(i64Const - constant.i64Const); break;
+        case EbtUint8:  returnValue.setU8Const(u8Const - constant.u8Const); break;
+        case EbtUint16: returnValue.setU16Const(u16Const - constant.u16Const); break;
+        case EbtUint:   returnValue.setUConst(uConst - constant.uConst); break;
         case EbtUint64: returnValue.setU64Const(u64Const - constant.u64Const); break;
         case EbtDouble: returnValue.setDConst(dConst - constant.dConst); break;
         default: assert(false && "Default missing");
@@ -331,9 +480,13 @@
         TConstUnion returnValue;
         assert(type == constant.type);
         switch (type) {
-        case EbtInt: returnValue.setIConst(iConst * constant.iConst); break;
-        case EbtInt64: returnValue.setI64Const(i64Const * constant.i64Const); break;
-        case EbtUint: returnValue.setUConst(uConst * constant.uConst); break;
+        case EbtInt8:   returnValue.setI8Const(i8Const * constant.i8Const); break;
+        case EbtInt16:  returnValue.setI16Const(i16Const * constant.i16Const); break;
+        case EbtInt:    returnValue.setIConst(iConst * constant.iConst); break;
+        case EbtInt64:  returnValue.setI64Const(i64Const * constant.i64Const); break;
+        case EbtUint8:  returnValue.setU8Const(u8Const * constant.u8Const); break;
+        case EbtUint16: returnValue.setU16Const(u16Const * constant.u16Const); break;
+        case EbtUint:   returnValue.setUConst(uConst * constant.uConst); break;
         case EbtUint64: returnValue.setU64Const(u64Const * constant.u64Const); break;
         case EbtDouble: returnValue.setDConst(dConst * constant.dConst); break;
         default: assert(false && "Default missing");
@@ -347,9 +500,13 @@
         TConstUnion returnValue;
         assert(type == constant.type);
         switch (type) {
-        case EbtInt: returnValue.setIConst(iConst % constant.iConst); break;
-        case EbtInt64: returnValue.setI64Const(i64Const % constant.i64Const); break;
-        case EbtUint: returnValue.setUConst(uConst % constant.uConst); break;
+        case EbtInt8:   returnValue.setI8Const(i8Const % constant.i8Const); break;
+        case EbtInt16:  returnValue.setI8Const(i8Const % constant.i16Const); break;
+        case EbtInt:    returnValue.setIConst(iConst % constant.iConst); break;
+        case EbtInt64:  returnValue.setI64Const(i64Const % constant.i64Const); break;
+        case EbtUint8:  returnValue.setU8Const(u8Const % constant.u8Const); break;
+        case EbtUint16: returnValue.setU16Const(u16Const % constant.u16Const); break;
+        case EbtUint:   returnValue.setUConst(uConst % constant.uConst); break;
         case EbtUint64: returnValue.setU64Const(u64Const % constant.u64Const); break;
         default:     assert(false && "Default missing");
         }
@@ -361,8 +518,64 @@
     {
         TConstUnion returnValue;
         switch (type) {
+        case EbtInt8:
+            switch (constant.type) {
+            case EbtInt8:   returnValue.setI8Const(i8Const >> constant.i8Const);  break;
+            case EbtUint8:  returnValue.setI8Const(i8Const >> constant.u8Const);  break;
+            case EbtInt16:  returnValue.setI8Const(i8Const >> constant.i16Const); break;
+            case EbtUint16: returnValue.setI8Const(i8Const >> constant.u16Const); break;
+            case EbtInt:    returnValue.setI8Const(i8Const >> constant.iConst);   break;
+            case EbtUint:   returnValue.setI8Const(i8Const >> constant.uConst);   break;
+            case EbtInt64:  returnValue.setI8Const(i8Const >> constant.i64Const); break;
+            case EbtUint64: returnValue.setI8Const(i8Const >> constant.u64Const); break;
+            default:       assert(false && "Default missing");
+            }
+            break;
+        case EbtUint8:
+            switch (constant.type) {
+            case EbtInt8:   returnValue.setU8Const(u8Const >> constant.i8Const);  break;
+            case EbtUint8:  returnValue.setU8Const(u8Const >> constant.u8Const);  break;
+            case EbtInt16:  returnValue.setU8Const(u8Const >> constant.i16Const); break;
+            case EbtUint16: returnValue.setU8Const(u8Const >> constant.u16Const); break;
+            case EbtInt:    returnValue.setU8Const(u8Const >> constant.iConst);   break;
+            case EbtUint:   returnValue.setU8Const(u8Const >> constant.uConst);   break;
+            case EbtInt64:  returnValue.setU8Const(u8Const >> constant.i64Const); break;
+            case EbtUint64: returnValue.setU8Const(u8Const >> constant.u64Const); break;
+            default:       assert(false && "Default missing");
+            }
+            break;
+        case EbtInt16:
+            switch (constant.type) {
+            case EbtInt8:   returnValue.setI16Const(i16Const >> constant.i8Const);  break;
+            case EbtUint8:  returnValue.setI16Const(i16Const >> constant.u8Const);  break;
+            case EbtInt16:  returnValue.setI16Const(i16Const >> constant.i16Const); break;
+            case EbtUint16: returnValue.setI16Const(i16Const >> constant.u16Const); break;
+            case EbtInt:    returnValue.setI16Const(i16Const >> constant.iConst);   break;
+            case EbtUint:   returnValue.setI16Const(i16Const >> constant.uConst);   break;
+            case EbtInt64:  returnValue.setI16Const(i16Const >> constant.i64Const); break;
+            case EbtUint64: returnValue.setI16Const(i16Const >> constant.u64Const); break;
+            default:       assert(false && "Default missing");
+            }
+            break;
+        case EbtUint16:
+            switch (constant.type) {
+            case EbtInt8:   returnValue.setU16Const(u16Const >> constant.i8Const);  break;
+            case EbtUint8:  returnValue.setU16Const(u16Const >> constant.u8Const);  break;
+            case EbtInt16:  returnValue.setU16Const(u16Const >> constant.i16Const); break;
+            case EbtUint16: returnValue.setU16Const(u16Const >> constant.u16Const); break;
+            case EbtInt:    returnValue.setU16Const(u16Const >> constant.iConst);   break;
+            case EbtUint:   returnValue.setU16Const(u16Const >> constant.uConst);   break;
+            case EbtInt64:  returnValue.setU16Const(u16Const >> constant.i64Const); break;
+            case EbtUint64: returnValue.setU16Const(u16Const >> constant.u64Const); break;
+            default:       assert(false && "Default missing");
+            }
+            break;
         case EbtInt:
             switch (constant.type) {
+            case EbtInt8:   returnValue.setIConst(iConst >> constant.i8Const);  break;
+            case EbtUint8:  returnValue.setIConst(iConst >> constant.u8Const);  break;
+            case EbtInt16:  returnValue.setIConst(iConst >> constant.i16Const); break;
+            case EbtUint16: returnValue.setIConst(iConst >> constant.u16Const); break;
             case EbtInt:    returnValue.setIConst(iConst >> constant.iConst);   break;
             case EbtUint:   returnValue.setIConst(iConst >> constant.uConst);   break;
             case EbtInt64:  returnValue.setIConst(iConst >> constant.i64Const); break;
@@ -372,6 +585,10 @@
             break;
         case EbtUint:
             switch (constant.type) {
+            case EbtInt8:   returnValue.setUConst(uConst >> constant.i8Const);  break;
+            case EbtUint8:  returnValue.setUConst(uConst >> constant.u8Const);  break;
+            case EbtInt16:  returnValue.setUConst(uConst >> constant.i16Const); break;
+            case EbtUint16: returnValue.setUConst(uConst >> constant.u16Const); break;
             case EbtInt:    returnValue.setUConst(uConst >> constant.iConst);   break;
             case EbtUint:   returnValue.setUConst(uConst >> constant.uConst);   break;
             case EbtInt64:  returnValue.setUConst(uConst >> constant.i64Const); break;
@@ -381,6 +598,10 @@
             break;
          case EbtInt64:
             switch (constant.type) {
+            case EbtInt8:   returnValue.setI64Const(i64Const >> constant.i8Const);  break;
+            case EbtUint8:  returnValue.setI64Const(i64Const >> constant.u8Const);  break;
+            case EbtInt16:  returnValue.setI64Const(i64Const >> constant.i16Const); break;
+            case EbtUint16: returnValue.setI64Const(i64Const >> constant.u16Const); break;
             case EbtInt:    returnValue.setI64Const(i64Const >> constant.iConst);   break;
             case EbtUint:   returnValue.setI64Const(i64Const >> constant.uConst);   break;
             case EbtInt64:  returnValue.setI64Const(i64Const >> constant.i64Const); break;
@@ -390,6 +611,10 @@
             break;
         case EbtUint64:
             switch (constant.type) {
+            case EbtInt8:   returnValue.setU64Const(u64Const >> constant.i8Const);  break;
+            case EbtUint8:  returnValue.setU64Const(u64Const >> constant.u8Const);  break;
+            case EbtInt16:  returnValue.setU64Const(u64Const >> constant.i16Const); break;
+            case EbtUint16: returnValue.setU64Const(u64Const >> constant.u16Const); break;
             case EbtInt:    returnValue.setU64Const(u64Const >> constant.iConst);   break;
             case EbtUint:   returnValue.setU64Const(u64Const >> constant.uConst);   break;
             case EbtInt64:  returnValue.setU64Const(u64Const >> constant.i64Const); break;
@@ -407,8 +632,64 @@
     {
         TConstUnion returnValue;
         switch (type) {
+        case EbtInt8:
+            switch (constant.type) {
+            case EbtInt8:   returnValue.setI8Const(i8Const << constant.i8Const);  break;
+            case EbtUint8:  returnValue.setI8Const(i8Const << constant.u8Const);  break;
+            case EbtInt16:  returnValue.setI8Const(i8Const << constant.i16Const); break;
+            case EbtUint16: returnValue.setI8Const(i8Const << constant.u16Const); break;
+            case EbtInt:    returnValue.setI8Const(i8Const << constant.iConst);   break;
+            case EbtUint:   returnValue.setI8Const(i8Const << constant.uConst);   break;
+            case EbtInt64:  returnValue.setI8Const(i8Const << constant.i64Const); break;
+            case EbtUint64: returnValue.setI8Const(i8Const << constant.u64Const); break;
+            default:       assert(false && "Default missing");
+            }
+            break;
+        case EbtUint8:
+            switch (constant.type) {
+            case EbtInt8:   returnValue.setU8Const(u8Const << constant.i8Const);  break;
+            case EbtUint8:  returnValue.setU8Const(u8Const << constant.u8Const);  break;
+            case EbtInt16:  returnValue.setU8Const(u8Const << constant.i16Const); break;
+            case EbtUint16: returnValue.setU8Const(u8Const << constant.u16Const); break;
+            case EbtInt:    returnValue.setU8Const(u8Const << constant.iConst);   break;
+            case EbtUint:   returnValue.setU8Const(u8Const << constant.uConst);   break;
+            case EbtInt64:  returnValue.setU8Const(u8Const << constant.i64Const); break;
+            case EbtUint64: returnValue.setU8Const(u8Const << constant.u64Const); break;
+            default:       assert(false && "Default missing");
+            }
+            break;
+        case EbtInt16:
+            switch (constant.type) {
+            case EbtInt8:   returnValue.setI16Const(i16Const << constant.i8Const);  break;
+            case EbtUint8:  returnValue.setI16Const(i16Const << constant.u8Const);  break;
+            case EbtInt16:  returnValue.setI16Const(i16Const << constant.i16Const); break;
+            case EbtUint16: returnValue.setI16Const(i16Const << constant.u16Const); break;
+            case EbtInt:    returnValue.setI16Const(i16Const << constant.iConst);   break;
+            case EbtUint:   returnValue.setI16Const(i16Const << constant.uConst);   break;
+            case EbtInt64:  returnValue.setI16Const(i16Const << constant.i64Const); break;
+            case EbtUint64: returnValue.setI16Const(i16Const << constant.u64Const); break;
+            default:       assert(false && "Default missing");
+            }
+            break;
+        case EbtUint16:
+            switch (constant.type) {
+            case EbtInt8:   returnValue.setU16Const(u16Const << constant.i8Const);  break;
+            case EbtUint8:  returnValue.setU16Const(u16Const << constant.u8Const);  break;
+            case EbtInt16:  returnValue.setU16Const(u16Const << constant.i16Const); break;
+            case EbtUint16: returnValue.setU16Const(u16Const << constant.u16Const); break;
+            case EbtInt:    returnValue.setU16Const(u16Const << constant.iConst);   break;
+            case EbtUint:   returnValue.setU16Const(u16Const << constant.uConst);   break;
+            case EbtInt64:  returnValue.setU16Const(u16Const << constant.i64Const); break;
+            case EbtUint64: returnValue.setU16Const(u16Const << constant.u64Const); break;
+            default:       assert(false && "Default missing");
+            }
+            break;
         case EbtInt:
             switch (constant.type) {
+            case EbtInt8:   returnValue.setIConst(iConst << constant.i8Const);  break;
+            case EbtUint8:  returnValue.setIConst(iConst << constant.u8Const);  break;
+            case EbtInt16:  returnValue.setIConst(iConst << constant.i16Const); break;
+            case EbtUint16: returnValue.setIConst(iConst << constant.u16Const); break;
             case EbtInt:    returnValue.setIConst(iConst << constant.iConst);   break;
             case EbtUint:   returnValue.setIConst(iConst << constant.uConst);   break;
             case EbtInt64:  returnValue.setIConst(iConst << constant.i64Const); break;
@@ -418,6 +699,10 @@
             break;
         case EbtUint:
             switch (constant.type) {
+            case EbtInt8:   returnValue.setUConst(uConst << constant.i8Const);  break;
+            case EbtUint8:  returnValue.setUConst(uConst << constant.u8Const);  break;
+            case EbtInt16:  returnValue.setUConst(uConst << constant.i16Const); break;
+            case EbtUint16: returnValue.setUConst(uConst << constant.u16Const); break;
             case EbtInt:    returnValue.setUConst(uConst << constant.iConst);   break;
             case EbtUint:   returnValue.setUConst(uConst << constant.uConst);   break;
             case EbtInt64:  returnValue.setUConst(uConst << constant.i64Const); break;
@@ -425,8 +710,12 @@
             default:       assert(false && "Default missing");
             }
             break;
-        case EbtInt64:
+         case EbtInt64:
             switch (constant.type) {
+            case EbtInt8:   returnValue.setI64Const(i64Const << constant.i8Const);  break;
+            case EbtUint8:  returnValue.setI64Const(i64Const << constant.u8Const);  break;
+            case EbtInt16:  returnValue.setI64Const(i64Const << constant.i16Const); break;
+            case EbtUint16: returnValue.setI64Const(i64Const << constant.u16Const); break;
             case EbtInt:    returnValue.setI64Const(i64Const << constant.iConst);   break;
             case EbtUint:   returnValue.setI64Const(i64Const << constant.uConst);   break;
             case EbtInt64:  returnValue.setI64Const(i64Const << constant.i64Const); break;
@@ -436,6 +725,10 @@
             break;
         case EbtUint64:
             switch (constant.type) {
+            case EbtInt8:   returnValue.setU64Const(u64Const << constant.i8Const);  break;
+            case EbtUint8:  returnValue.setU64Const(u64Const << constant.u8Const);  break;
+            case EbtInt16:  returnValue.setU64Const(u64Const << constant.i16Const); break;
+            case EbtUint16: returnValue.setU64Const(u64Const << constant.u16Const); break;
             case EbtInt:    returnValue.setU64Const(u64Const << constant.iConst);   break;
             case EbtUint:   returnValue.setU64Const(u64Const << constant.uConst);   break;
             case EbtInt64:  returnValue.setU64Const(u64Const << constant.i64Const); break;
@@ -454,8 +747,12 @@
         TConstUnion returnValue;
         assert(type == constant.type);
         switch (type) {
-        case EbtInt:  returnValue.setIConst(iConst & constant.iConst); break;
-        case EbtUint: returnValue.setUConst(uConst & constant.uConst); break;
+        case EbtInt8:   returnValue.setI8Const(i8Const & constant.i8Const); break;
+        case EbtUint8:  returnValue.setU8Const(u8Const & constant.u8Const); break;
+        case EbtInt16:  returnValue.setI16Const(i16Const & constant.i16Const); break;
+        case EbtUint16: returnValue.setU16Const(u16Const & constant.u16Const); break;
+        case EbtInt:    returnValue.setIConst(iConst & constant.iConst); break;
+        case EbtUint:   returnValue.setUConst(uConst & constant.uConst); break;
         case EbtInt64:  returnValue.setI64Const(i64Const & constant.i64Const); break;
         case EbtUint64: returnValue.setU64Const(u64Const & constant.u64Const); break;
         default:     assert(false && "Default missing");
@@ -469,8 +766,12 @@
         TConstUnion returnValue;
         assert(type == constant.type);
         switch (type) {
-        case EbtInt:  returnValue.setIConst(iConst | constant.iConst); break;
-        case EbtUint: returnValue.setUConst(uConst | constant.uConst); break;
+        case EbtInt8:   returnValue.setI8Const(i8Const | constant.i8Const); break;
+        case EbtUint8:  returnValue.setU8Const(u8Const | constant.u8Const); break;
+        case EbtInt16:  returnValue.setI16Const(i16Const | constant.i16Const); break;
+        case EbtUint16: returnValue.setU16Const(u16Const | constant.u16Const); break;
+        case EbtInt:    returnValue.setIConst(iConst | constant.iConst); break;
+        case EbtUint:   returnValue.setUConst(uConst | constant.uConst); break;
         case EbtInt64:  returnValue.setI64Const(i64Const | constant.i64Const); break;
         case EbtUint64: returnValue.setU64Const(u64Const | constant.u64Const); break;
         default:     assert(false && "Default missing");
@@ -484,8 +785,12 @@
         TConstUnion returnValue;
         assert(type == constant.type);
         switch (type) {
-        case EbtInt:  returnValue.setIConst(iConst ^ constant.iConst); break;
-        case EbtUint: returnValue.setUConst(uConst ^ constant.uConst); break;
+        case EbtInt8:   returnValue.setI8Const(i8Const ^ constant.i8Const); break;
+        case EbtUint8:  returnValue.setU8Const(u8Const ^ constant.u8Const); break;
+        case EbtInt16:  returnValue.setI16Const(i16Const ^ constant.i16Const); break;
+        case EbtUint16: returnValue.setU16Const(u16Const ^ constant.u16Const); break;
+        case EbtInt:    returnValue.setIConst(iConst ^ constant.iConst); break;
+        case EbtUint:   returnValue.setUConst(uConst ^ constant.uConst); break;
         case EbtInt64:  returnValue.setI64Const(i64Const ^ constant.i64Const); break;
         case EbtUint64: returnValue.setU64Const(u64Const ^ constant.u64Const); break;
         default:     assert(false && "Default missing");
@@ -498,8 +803,12 @@
     {
         TConstUnion returnValue;
         switch (type) {
-        case EbtInt:  returnValue.setIConst(~iConst); break;
-        case EbtUint: returnValue.setUConst(~uConst); break;
+        case EbtInt8:   returnValue.setI8Const(~i8Const); break;
+        case EbtUint8:  returnValue.setU8Const(~u8Const); break;
+        case EbtInt16:  returnValue.setI16Const(~i16Const); break;
+        case EbtUint16: returnValue.setU16Const(~u16Const); break;
+        case EbtInt:    returnValue.setIConst(~iConst); break;
+        case EbtUint:   returnValue.setUConst(~uConst); break;
         case EbtInt64:  returnValue.setI64Const(~i64Const); break;
         case EbtUint64: returnValue.setU64Const(~u64Const); break;
         default:     assert(false && "Default missing");
@@ -536,6 +845,10 @@
 
 private:
     union  {
+        signed char        i8Const;     // used for i8vec, scalar int8s
+        unsigned char      u8Const;     // used for u8vec, scalar uint8s
+        signed short       i16Const;    // used for i16vec, scalar int16s
+        unsigned short     u16Const;    // used for u16vec, scalar uint16s
         int                iConst;      // used for ivec, scalar ints
         unsigned int       uConst;      // used for uvec, scalar uints
         long long          i64Const;    // used for i64vec, scalar int64s
diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h
index c3d0acb..9c3cc19 100644
--- a/glslang/Include/Types.h
+++ b/glslang/Include/Types.h
@@ -2,6 +2,7 @@
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2016 LunarG, Inc.
 // Copyright (C) 2015-2016 Google, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -204,12 +205,18 @@
         }
 
         switch (type) {
-        case EbtFloat:               break;
+        case EbtFloat:                   break;
 #ifdef AMD_EXTENSIONS
         case EbtFloat16: s.append("f16"); break;
 #endif
-        case EbtInt:  s.append("i"); break;
-        case EbtUint: s.append("u"); break;
+        case EbtInt8:   s.append("i8");  break;
+        case EbtUint16: s.append("u8");  break;
+        case EbtInt16:  s.append("i16"); break;
+        case EbtUint8:  s.append("u16"); break;
+        case EbtInt:    s.append("i");   break;
+        case EbtUint:   s.append("u");   break;
+        case EbtInt64:  s.append("i64"); break;
+        case EbtUint64: s.append("u64"); break;
         default:  break;  // some compilers want this
         }
         if (image) {
@@ -1373,22 +1380,18 @@
     virtual bool isImplicitlySizedArray() const { return isArray() && getOuterArraySize() == UnsizedArraySize && qualifier.storage != EvqBuffer; }
     virtual bool isRuntimeSizedArray()    const { return isArray() && getOuterArraySize() == UnsizedArraySize && qualifier.storage == EvqBuffer; }
     virtual bool isStruct() const { return structure != nullptr; }
-#ifdef AMD_EXTENSIONS
     virtual bool isFloatingDomain() const { return basicType == EbtFloat || basicType == EbtDouble || basicType == EbtFloat16; }
-#else
-    virtual bool isFloatingDomain() const { return basicType == EbtFloat || basicType == EbtDouble; }
-#endif
     virtual bool isIntegerDomain() const
     {
         switch (basicType) {
+        case EbtInt8:
+        case EbtUint8:
+        case EbtInt16:
+        case EbtUint16:
         case EbtInt:
         case EbtUint:
         case EbtInt64:
         case EbtUint64:
-#ifdef AMD_EXTENSIONS
-        case EbtInt16:
-        case EbtUint16:
-#endif
         case EbtAtomicUint:
             return true;
         default:
@@ -1404,7 +1407,7 @@
     virtual bool isSubpass() const { return basicType == EbtSampler && getSampler().isSubpass(); }
 
     // return true if this type contains any subtype which satisfies the given predicate.
-    template <typename P> 
+    template <typename P>
     bool contains(P predicate) const
     {
         if (predicate(this))
@@ -1457,17 +1460,15 @@
             case EbtVoid:
             case EbtFloat:
             case EbtDouble:
-#ifdef AMD_EXTENSIONS
             case EbtFloat16:
-#endif
+            case EbtInt8:
+            case EbtUint8:
+            case EbtInt16:
+            case EbtUint16:
             case EbtInt:
             case EbtUint:
             case EbtInt64:
             case EbtUint64:
-#ifdef AMD_EXTENSIONS
-            case EbtInt16:
-            case EbtUint16:
-#endif
             case EbtBool:
                 return true;
             default:
@@ -1544,17 +1545,15 @@
         case EbtVoid:              return "void";
         case EbtFloat:             return "float";
         case EbtDouble:            return "double";
-#ifdef AMD_EXTENSIONS
         case EbtFloat16:           return "float16_t";
-#endif
+        case EbtInt8:              return "int8_t";
+        case EbtUint8:             return "uint8_t";
+        case EbtInt16:             return "int16_t";
+        case EbtUint16:            return "uint16_t";
         case EbtInt:               return "int";
         case EbtUint:              return "uint";
         case EbtInt64:             return "int64_t";
         case EbtUint64:            return "uint64_t";
-#ifdef AMD_EXTENSIONS
-        case EbtInt16:             return "int16_t";
-        case EbtUint16:            return "uint16_t";
-#endif
         case EbtBool:              return "bool";
         case EbtAtomicUint:        return "atomic_uint";
         case EbtSampler:           return "sampler/image";
diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h
index ea3e82e..72f83e9 100644
--- a/glslang/Include/intermediate.h
+++ b/glslang/Include/intermediate.h
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2016 LunarG, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -84,100 +85,189 @@
     EOpPreIncrement,
     EOpPreDecrement,
 
+    // (u)int* -> bool
+    EOpConvInt8ToBool,
+    EOpConvUint8ToBool,
+    EOpConvInt16ToBool,
+    EOpConvUint16ToBool,
     EOpConvIntToBool,
     EOpConvUintToBool,
-    EOpConvFloatToBool,
-    EOpConvDoubleToBool,
     EOpConvInt64ToBool,
     EOpConvUint64ToBool,
-    EOpConvBoolToFloat,
-    EOpConvIntToFloat,
-    EOpConvUintToFloat,
-    EOpConvDoubleToFloat,
-    EOpConvInt64ToFloat,
-    EOpConvUint64ToFloat,
-    EOpConvUintToInt,
-    EOpConvFloatToInt,
-    EOpConvBoolToInt,
-    EOpConvDoubleToInt,
-    EOpConvInt64ToInt,
-    EOpConvUint64ToInt,
-    EOpConvIntToUint,
-    EOpConvFloatToUint,
-    EOpConvBoolToUint,
-    EOpConvDoubleToUint,
-    EOpConvInt64ToUint,
-    EOpConvUint64ToUint,
-    EOpConvIntToDouble,
-    EOpConvUintToDouble,
-    EOpConvFloatToDouble,
-    EOpConvBoolToDouble,
-    EOpConvInt64ToDouble,
-    EOpConvUint64ToDouble,
-    EOpConvBoolToInt64,
-    EOpConvIntToInt64,
-    EOpConvUintToInt64,
-    EOpConvFloatToInt64,
-    EOpConvDoubleToInt64,
-    EOpConvUint64ToInt64,
-    EOpConvBoolToUint64,
-    EOpConvIntToUint64,
-    EOpConvUintToUint64,
-    EOpConvFloatToUint64,
-    EOpConvDoubleToUint64,
-    EOpConvInt64ToUint64,
-#ifdef AMD_EXTENSIONS
-    EOpConvBoolToFloat16,
-    EOpConvIntToFloat16,
-    EOpConvUintToFloat16,
-    EOpConvFloatToFloat16,
-    EOpConvDoubleToFloat16,
-    EOpConvInt64ToFloat16,
-    EOpConvUint64ToFloat16,
-    EOpConvFloat16ToBool,
-    EOpConvFloat16ToInt,
-    EOpConvFloat16ToUint,
-    EOpConvFloat16ToFloat,
-    EOpConvFloat16ToDouble,
-    EOpConvFloat16ToInt64,
-    EOpConvFloat16ToUint64,
 
+    // float* -> bool
+    EOpConvFloat16ToBool,
+    EOpConvFloatToBool,
+    EOpConvDoubleToBool,
+
+    // bool -> (u)int*
+    EOpConvBoolToInt8,
+    EOpConvBoolToUint8,
     EOpConvBoolToInt16,
-    EOpConvIntToInt16,
-    EOpConvUintToInt16,
-    EOpConvFloatToInt16,
-    EOpConvDoubleToInt16,
-    EOpConvFloat16ToInt16,
-    EOpConvInt64ToInt16,
-    EOpConvUint64ToInt16,
-    EOpConvUint16ToInt16,
-    EOpConvInt16ToBool,
+    EOpConvBoolToUint16,
+    EOpConvBoolToInt,
+    EOpConvBoolToUint,
+    EOpConvBoolToInt64,
+    EOpConvBoolToUint64,
+
+    // bool -> float*
+    EOpConvBoolToFloat16,
+    EOpConvBoolToFloat,
+    EOpConvBoolToDouble,
+
+    // int8_t -> (u)int*
+    EOpConvInt8ToInt16,
+    EOpConvInt8ToInt,
+    EOpConvInt8ToInt64,
+    EOpConvInt8ToUint8,
+    EOpConvInt8ToUint16,
+    EOpConvInt8ToUint,
+    EOpConvInt8ToUint64,
+
+    // uint8_t -> (u)int*
+    EOpConvUint8ToInt8,
+    EOpConvUint8ToInt16,
+    EOpConvUint8ToInt,
+    EOpConvUint8ToInt64,
+    EOpConvUint8ToUint16,
+    EOpConvUint8ToUint,
+    EOpConvUint8ToUint64,
+
+    // int8_t -> float*
+    EOpConvInt8ToFloat16,
+    EOpConvInt8ToFloat,
+    EOpConvInt8ToDouble,
+
+    // uint8_t -> float*
+    EOpConvUint8ToFloat16,
+    EOpConvUint8ToFloat,
+    EOpConvUint8ToDouble,
+
+    // int16_t -> (u)int*
+    EOpConvInt16ToInt8,
     EOpConvInt16ToInt,
-    EOpConvInt16ToUint,
-    EOpConvInt16ToFloat,
-    EOpConvInt16ToDouble,
-    EOpConvInt16ToFloat16,
     EOpConvInt16ToInt64,
+    EOpConvInt16ToUint8,
+    EOpConvInt16ToUint16,
+    EOpConvInt16ToUint,
     EOpConvInt16ToUint64,
 
-    EOpConvBoolToUint16,
-    EOpConvIntToUint16,
-    EOpConvUintToUint16,
-    EOpConvFloatToUint16,
-    EOpConvDoubleToUint16,
-    EOpConvFloat16ToUint16,
-    EOpConvInt64ToUint16,
-    EOpConvUint64ToUint16,
-    EOpConvInt16ToUint16,
-    EOpConvUint16ToBool,
+    // uint16_t -> (u)int*
+    EOpConvUint16ToInt8,
+    EOpConvUint16ToInt16,
     EOpConvUint16ToInt,
+    EOpConvUint16ToInt64,
+    EOpConvUint16ToUint8,
     EOpConvUint16ToUint,
+    EOpConvUint16ToUint64,
+
+    // int16_t -> float*
+    EOpConvInt16ToFloat16,
+    EOpConvInt16ToFloat,
+    EOpConvInt16ToDouble,
+
+    // uint16_t -> float*
+    EOpConvUint16ToFloat16,
     EOpConvUint16ToFloat,
     EOpConvUint16ToDouble,
-    EOpConvUint16ToFloat16,
-    EOpConvUint16ToInt64,
-    EOpConvUint16ToUint64,
-#endif
+
+    // int32_t -> (u)int*
+    EOpConvIntToInt8,
+    EOpConvIntToInt16,
+    EOpConvIntToInt64,
+    EOpConvIntToUint8,
+    EOpConvIntToUint16,
+    EOpConvIntToUint,
+    EOpConvIntToUint64,
+
+    // uint32_t -> (u)int*
+    EOpConvUintToInt8,
+    EOpConvUintToInt16,
+    EOpConvUintToInt,
+    EOpConvUintToInt64,
+    EOpConvUintToUint8,
+    EOpConvUintToUint16,
+    EOpConvUintToUint64,
+
+    // int32_t -> float*
+    EOpConvIntToFloat16,
+    EOpConvIntToFloat,
+    EOpConvIntToDouble,
+
+    // uint32_t -> float*
+    EOpConvUintToFloat16,
+    EOpConvUintToFloat,
+    EOpConvUintToDouble,
+
+    // int64_t -> (u)int*
+    EOpConvInt64ToInt8,
+    EOpConvInt64ToInt16,
+    EOpConvInt64ToInt,
+    EOpConvInt64ToUint8,
+    EOpConvInt64ToUint16,
+    EOpConvInt64ToUint,
+    EOpConvInt64ToUint64,
+
+    // uint64_t -> (u)int*
+    EOpConvUint64ToInt8,
+    EOpConvUint64ToInt16,
+    EOpConvUint64ToInt,
+    EOpConvUint64ToInt64,
+    EOpConvUint64ToUint8,
+    EOpConvUint64ToUint16,
+    EOpConvUint64ToUint,
+
+    // int64_t -> float*
+    EOpConvInt64ToFloat16,
+    EOpConvInt64ToFloat,
+    EOpConvInt64ToDouble,
+
+    // uint64_t -> float*
+    EOpConvUint64ToFloat16,
+    EOpConvUint64ToFloat,
+    EOpConvUint64ToDouble,
+
+    // float16_t -> (u)int*
+    EOpConvFloat16ToInt8,
+    EOpConvFloat16ToInt16,
+    EOpConvFloat16ToInt,
+    EOpConvFloat16ToInt64,
+    EOpConvFloat16ToUint8,
+    EOpConvFloat16ToUint16,
+    EOpConvFloat16ToUint,
+    EOpConvFloat16ToUint64,
+
+    // float16_t -> float*
+    EOpConvFloat16ToFloat,
+    EOpConvFloat16ToDouble,
+
+    // float -> (u)int*
+    EOpConvFloatToInt8,
+    EOpConvFloatToInt16,
+    EOpConvFloatToInt,
+    EOpConvFloatToInt64,
+    EOpConvFloatToUint8,
+    EOpConvFloatToUint16,
+    EOpConvFloatToUint,
+    EOpConvFloatToUint64,
+
+    // float -> float*
+    EOpConvFloatToFloat16,
+    EOpConvFloatToDouble,
+
+    // float64 _t-> (u)int*
+    EOpConvDoubleToInt8,
+    EOpConvDoubleToInt16,
+    EOpConvDoubleToInt,
+    EOpConvDoubleToInt64,
+    EOpConvDoubleToUint8,
+    EOpConvDoubleToUint16,
+    EOpConvDoubleToUint,
+    EOpConvDoubleToUint64,
+
+    // float64_t -> float*
+    EOpConvDoubleToFloat16,
+    EOpConvDoubleToFloat,
 
     //
     // binary operations
@@ -280,12 +370,10 @@
     EOpDoubleBitsToUint64,
     EOpInt64BitsToDouble,
     EOpUint64BitsToDouble,
-#ifdef AMD_EXTENSIONS
     EOpFloat16BitsToInt16,
     EOpFloat16BitsToUint16,
     EOpInt16BitsToFloat16,
     EOpUint16BitsToFloat16,
-#endif
     EOpPackSnorm2x16,
     EOpUnpackSnorm2x16,
     EOpPackUnorm2x16,
@@ -302,7 +390,6 @@
     EOpUnpackInt2x32,
     EOpPackUint2x32,
     EOpUnpackUint2x32,
-#ifdef AMD_EXTENSIONS
     EOpPackFloat2x16,
     EOpUnpackFloat2x16,
     EOpPackInt2x16,
@@ -313,7 +400,12 @@
     EOpUnpackInt4x16,
     EOpPackUint4x16,
     EOpUnpackUint4x16,
-#endif
+    EOpPack16,
+    EOpPack32,
+    EOpPack64,
+    EOpUnpack32,
+    EOpUnpack16,
+    EOpUnpack8,
 
     EOpLength,
     EOpDistance,
@@ -379,6 +471,64 @@
     EOpAllInvocations,
     EOpAllInvocationsEqual,
 
+    EOpSubgroupGuardStart,
+    EOpSubgroupBarrier,
+    EOpSubgroupMemoryBarrier,
+    EOpSubgroupMemoryBarrierBuffer,
+    EOpSubgroupMemoryBarrierImage,
+    EOpSubgroupMemoryBarrierShared, // compute only
+    EOpSubgroupElect,
+    EOpSubgroupAll,
+    EOpSubgroupAny,
+    EOpSubgroupAllEqual,
+    EOpSubgroupBroadcast,
+    EOpSubgroupBroadcastFirst,
+    EOpSubgroupBallot,
+    EOpSubgroupInverseBallot,
+    EOpSubgroupBallotBitExtract,
+    EOpSubgroupBallotBitCount,
+    EOpSubgroupBallotInclusiveBitCount,
+    EOpSubgroupBallotExclusiveBitCount,
+    EOpSubgroupBallotFindLSB,
+    EOpSubgroupBallotFindMSB,
+    EOpSubgroupShuffle,
+    EOpSubgroupShuffleXor,
+    EOpSubgroupShuffleUp,
+    EOpSubgroupShuffleDown,
+    EOpSubgroupAdd,
+    EOpSubgroupMul,
+    EOpSubgroupMin,
+    EOpSubgroupMax,
+    EOpSubgroupAnd,
+    EOpSubgroupOr,
+    EOpSubgroupXor,
+    EOpSubgroupInclusiveAdd,
+    EOpSubgroupInclusiveMul,
+    EOpSubgroupInclusiveMin,
+    EOpSubgroupInclusiveMax,
+    EOpSubgroupInclusiveAnd,
+    EOpSubgroupInclusiveOr,
+    EOpSubgroupInclusiveXor,
+    EOpSubgroupExclusiveAdd,
+    EOpSubgroupExclusiveMul,
+    EOpSubgroupExclusiveMin,
+    EOpSubgroupExclusiveMax,
+    EOpSubgroupExclusiveAnd,
+    EOpSubgroupExclusiveOr,
+    EOpSubgroupExclusiveXor,
+    EOpSubgroupClusteredAdd,
+    EOpSubgroupClusteredMul,
+    EOpSubgroupClusteredMin,
+    EOpSubgroupClusteredMax,
+    EOpSubgroupClusteredAnd,
+    EOpSubgroupClusteredOr,
+    EOpSubgroupClusteredXor,
+    EOpSubgroupQuadBroadcast,
+    EOpSubgroupQuadSwapHorizontal,
+    EOpSubgroupQuadSwapVertical,
+    EOpSubgroupQuadSwapDiagonal,
+    EOpSubgroupGuardStop,
+
 #ifdef AMD_EXTENSIONS
     EOpMinInvocations,
     EOpMaxInvocations,
@@ -451,32 +601,36 @@
     EOpConstructGuardStart,
     EOpConstructInt,          // these first scalar forms also identify what implicit conversion is needed
     EOpConstructUint,
-    EOpConstructInt64,
-    EOpConstructUint64,
-#ifdef AMD_EXTENSIONS
+    EOpConstructInt8,
+    EOpConstructUint8,
     EOpConstructInt16,
     EOpConstructUint16,
-#endif
+    EOpConstructInt64,
+    EOpConstructUint64,
     EOpConstructBool,
     EOpConstructFloat,
     EOpConstructDouble,
-#ifdef AMD_EXTENSIONS
-    EOpConstructFloat16,
-#endif
     EOpConstructVec2,
     EOpConstructVec3,
     EOpConstructVec4,
     EOpConstructDVec2,
     EOpConstructDVec3,
     EOpConstructDVec4,
-#ifdef AMD_EXTENSIONS
-    EOpConstructF16Vec2,
-    EOpConstructF16Vec3,
-    EOpConstructF16Vec4,
-#endif
     EOpConstructBVec2,
     EOpConstructBVec3,
     EOpConstructBVec4,
+    EOpConstructI8Vec2,
+    EOpConstructI8Vec3,
+    EOpConstructI8Vec4,
+    EOpConstructU8Vec2,
+    EOpConstructU8Vec3,
+    EOpConstructU8Vec4,
+    EOpConstructI16Vec2,
+    EOpConstructI16Vec3,
+    EOpConstructI16Vec4,
+    EOpConstructU16Vec2,
+    EOpConstructU16Vec3,
+    EOpConstructU16Vec4,
     EOpConstructIVec2,
     EOpConstructIVec3,
     EOpConstructIVec4,
@@ -489,14 +643,6 @@
     EOpConstructU64Vec2,
     EOpConstructU64Vec3,
     EOpConstructU64Vec4,
-#ifdef AMD_EXTENSIONS
-    EOpConstructI16Vec2,
-    EOpConstructI16Vec3,
-    EOpConstructI16Vec4,
-    EOpConstructU16Vec2,
-    EOpConstructU16Vec3,
-    EOpConstructU16Vec4,
-#endif
     EOpConstructMat2x2,
     EOpConstructMat2x3,
     EOpConstructMat2x4,
@@ -542,7 +688,10 @@
     EOpConstructBMat4x2,
     EOpConstructBMat4x3,
     EOpConstructBMat4x4,
-#ifdef AMD_EXTENSIONS
+    EOpConstructFloat16,
+    EOpConstructF16Vec2,
+    EOpConstructF16Vec3,
+    EOpConstructF16Vec4,
     EOpConstructF16Mat2x2,
     EOpConstructF16Mat2x3,
     EOpConstructF16Mat2x4,
@@ -552,7 +701,6 @@
     EOpConstructF16Mat4x2,
     EOpConstructF16Mat4x3,
     EOpConstructF16Mat4x4,
-#endif
     EOpConstructStruct,
     EOpConstructTextureSampler,
     EOpConstructGuardEnd,
@@ -777,6 +925,12 @@
 
     // matrix
     EOpMatrixSwizzle,                    // select multiple matrix components (non-column)
+
+    // SM6 wave ops
+    EOpWaveGetLaneCount,                 // Will decompose to gl_SubgroupSize.
+    EOpWaveGetLaneIndex,                 // Will decompose to gl_SubgroupInvocationID.
+    EOpWaveActiveCountBits,              // Will decompose to subgroupBallotBitCount(subgroupBallot()).
+    EOpWavePrefixCountBits,              // Will decompose to subgroupBallotInclusiveBitCount(subgroupBallot()).
 };
 
 class TIntermTraverser;
diff --git a/glslang/Include/revision.h b/glslang/Include/revision.h
index 5e94323..d6d362a 100644
--- a/glslang/Include/revision.h
+++ b/glslang/Include/revision.h
@@ -1,3 +1,3 @@
 // This header is generated by the make-revision script.
 
-#define GLSLANG_PATCH_LEVEL 2583
+#define GLSLANG_PATCH_LEVEL 2593
diff --git a/glslang/MachineIndependent/Constant.cpp b/glslang/MachineIndependent/Constant.cpp
index 1b73d96..142492d 100644
--- a/glslang/MachineIndependent/Constant.cpp
+++ b/glslang/MachineIndependent/Constant.cpp
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2013 LunarG, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -177,11 +178,40 @@
             switch (getType().getBasicType()) {
             case EbtDouble:
             case EbtFloat:
-#ifdef AMD_EXTENSIONS
             case EbtFloat16:
-#endif
                 newConstArray[i].setDConst(leftUnionArray[i].getDConst() / rightUnionArray[i].getDConst());
                 break;
+            case EbtInt8:
+                if (rightUnionArray[i] == 0)
+                    newConstArray[i].setI8Const(0x7F);
+                else if (rightUnionArray[i].getI8Const() == -1 && leftUnionArray[i].getI8Const() == (signed char)0x80)
+                    newConstArray[i].setI8Const((signed char)0x80);
+                else
+                    newConstArray[i].setI8Const(leftUnionArray[i].getI8Const() / rightUnionArray[i].getI8Const());
+                break;
+
+            case EbtUint8:
+                if (rightUnionArray[i] == 0) {
+                    newConstArray[i].setU8Const(0xFF);
+                } else
+                    newConstArray[i].setU8Const(leftUnionArray[i].getU8Const() / rightUnionArray[i].getU8Const());
+                break;
+
+           case EbtInt16:
+                if (rightUnionArray[i] == 0)
+                    newConstArray[i].setI16Const(0x7FFF);
+                else if (rightUnionArray[i].getI16Const() == -1 && leftUnionArray[i].getI16Const() == (signed short)0x8000)
+                    newConstArray[i].setI16Const(short(0x8000));
+                else
+                    newConstArray[i].setI16Const(leftUnionArray[i].getI16Const() / rightUnionArray[i].getI16Const());
+                break;
+
+            case EbtUint16:
+                if (rightUnionArray[i] == 0) {
+                    newConstArray[i].setU16Const(0xFFFF);
+                } else
+                    newConstArray[i].setU16Const(leftUnionArray[i].getU16Const() / rightUnionArray[i].getU16Const());
+                break;
 
             case EbtInt:
                 if (rightUnionArray[i] == 0)
@@ -214,23 +244,6 @@
                 } else
                     newConstArray[i].setU64Const(leftUnionArray[i].getU64Const() / rightUnionArray[i].getU64Const());
                 break;
-#ifdef AMD_EXTENSIONS
-            case EbtInt16:
-                if (rightUnionArray[i] == 0)
-                    newConstArray[i].setIConst(0x7FFF);
-                else if (rightUnionArray[i].getIConst() == -1 && leftUnionArray[i].getIConst() == (int)0x8000)
-                    newConstArray[i].setIConst(0x8000);
-                else
-                    newConstArray[i].setIConst(leftUnionArray[i].getIConst() / rightUnionArray[i].getIConst());
-                break;
-
-            case EbtUint16:
-                if (rightUnionArray[i] == 0) {
-                    newConstArray[i].setUConst(0xFFFFu);
-                } else
-                    newConstArray[i].setUConst(leftUnionArray[i].getUConst() / rightUnionArray[i].getUConst());
-                break;
-#endif
             default:
                 return 0;
             }
@@ -411,6 +424,12 @@
         resultSize = 2;
         break;
 
+    case EOpPack16:
+    case EOpPack32:
+    case EOpPack64:
+    case EOpUnpack32:
+    case EOpUnpack16:
+    case EOpUnpack8:
     case EOpNormalize:
         componentWise = false;
         resultSize = objectSize;
@@ -469,6 +488,12 @@
     case EOpPackSnorm2x16:
     case EOpPackUnorm2x16:
     case EOpPackHalf2x16:
+    case EOpPack16:
+    case EOpPack32:
+    case EOpPack64:
+    case EOpUnpack32:
+    case EOpUnpack16:
+    case EOpUnpack8:
 
     case EOpUnpackSnorm2x16:
     case EOpUnpackUnorm2x16:
@@ -494,17 +519,13 @@
         case EOpNegative:
             switch (getType().getBasicType()) {
             case EbtDouble:
-#ifdef AMD_EXTENSIONS
             case EbtFloat16:
-#endif
             case EbtFloat: newConstArray[i].setDConst(-unionArray[i].getDConst()); break;
-#ifdef AMD_EXTENSIONS
-            case EbtInt16:
-#endif
+            case EbtInt8:  newConstArray[i].setI8Const(-unionArray[i].getI8Const()); break;
+            case EbtUint8: newConstArray[i].setU8Const(static_cast<unsigned int>(-static_cast<signed int>(unionArray[i].getU8Const())));  break;
+            case EbtInt16: newConstArray[i].setI16Const(-unionArray[i].getI16Const()); break;
+            case EbtUint16:newConstArray[i].setU16Const(static_cast<unsigned int>(-static_cast<signed int>(unionArray[i].getU16Const())));  break;
             case EbtInt:   newConstArray[i].setIConst(-unionArray[i].getIConst()); break;
-#ifdef AMD_EXTENSIONS
-            case EbtUint16:
-#endif
             case EbtUint:  newConstArray[i].setUConst(static_cast<unsigned int>(-static_cast<int>(unionArray[i].getUConst())));  break;
             case EbtInt64: newConstArray[i].setI64Const(-unionArray[i].getI64Const()); break;
             case EbtUint64: newConstArray[i].setU64Const(static_cast<unsigned long long>(-static_cast<long long>(unionArray[i].getU64Const())));  break;
@@ -659,13 +680,10 @@
         case EOpDoubleBitsToUint64:
         case EOpInt64BitsToDouble:
         case EOpUint64BitsToDouble:
-#ifdef AMD_EXTENSIONS
         case EOpFloat16BitsToInt16:
         case EOpFloat16BitsToUint16:
         case EOpInt16BitsToFloat16:
         case EOpUint16BitsToFloat16:
-#endif
-
         default:
             return 0;
         }
@@ -749,20 +767,6 @@
     for (unsigned int arg = 0; arg < children.size(); ++arg)
         childConstUnions.push_back(children[arg]->getAsConstantUnion()->getConstArray());
 
-    // Second, do the actual folding
-
-    bool isFloatingPoint = children[0]->getAsTyped()->getBasicType() == EbtFloat ||
-#ifdef AMD_EXTENSIONS
-                           children[0]->getAsTyped()->getBasicType() == EbtFloat16 ||
-#endif
-                           children[0]->getAsTyped()->getBasicType() == EbtDouble;
-    bool isSigned = children[0]->getAsTyped()->getBasicType() == EbtInt ||
-#ifdef AMD_EXTENSIONS
-                    children[0]->getAsTyped()->getBasicType() == EbtInt16 ||
-#endif
-                    children[0]->getAsTyped()->getBasicType() == EbtInt64;
-    bool isInt64 = children[0]->getAsTyped()->getBasicType() == EbtInt64 ||
-                   children[0]->getAsTyped()->getBasicType() == EbtUint64;
     if (componentwise) {
         for (int comp = 0; comp < objectSize; comp++) {
 
@@ -783,53 +787,114 @@
                 newConstArray[comp].setDConst(pow(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()));
                 break;
             case EOpMin:
-                if (isFloatingPoint)
+                switch(children[0]->getAsTyped()->getBasicType()) {
+                case EbtFloat16:
+                case EbtFloat:
+                case EbtDouble:
                     newConstArray[comp].setDConst(std::min(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()));
-                else if (isSigned) {
-                    if (isInt64)
-                        newConstArray[comp].setI64Const(std::min(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const()));
-                    else
-                        newConstArray[comp].setIConst(std::min(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst()));
-                } else {
-                    if (isInt64)
-                        newConstArray[comp].setU64Const(std::min(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const()));
-                    else
-                        newConstArray[comp].setUConst(std::min(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()));
+                    break;
+                case EbtInt8:
+                    newConstArray[comp].setI8Const(std::min(childConstUnions[0][arg0comp].getI8Const(), childConstUnions[1][arg1comp].getI8Const()));
+                    break;
+                case EbtUint8:
+                    newConstArray[comp].setU8Const(std::min(childConstUnions[0][arg0comp].getU8Const(), childConstUnions[1][arg1comp].getU8Const()));
+                    break;
+                case EbtInt16:
+                    newConstArray[comp].setI16Const(std::min(childConstUnions[0][arg0comp].getI16Const(), childConstUnions[1][arg1comp].getI16Const()));
+                    break;
+                case EbtUint16:
+                    newConstArray[comp].setU16Const(std::min(childConstUnions[0][arg0comp].getU16Const(), childConstUnions[1][arg1comp].getU16Const()));
+                    break;
+                case EbtInt:
+                    newConstArray[comp].setIConst(std::min(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst()));
+                    break;
+                case EbtUint:
+                    newConstArray[comp].setUConst(std::min(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()));
+                    break;
+                case EbtInt64:
+                    newConstArray[comp].setI64Const(std::min(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const()));
+                    break;
+                case EbtUint64:
+                    newConstArray[comp].setU64Const(std::min(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const()));
+                    break;
+                default: assert(false && "Default missing");
                 }
                 break;
             case EOpMax:
-                if (isFloatingPoint)
+                switch(children[0]->getAsTyped()->getBasicType()) {
+                case EbtFloat16:
+                case EbtFloat:
+                case EbtDouble:
                     newConstArray[comp].setDConst(std::max(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()));
-                else if (isSigned) {
-                    if (isInt64)
-                        newConstArray[comp].setI64Const(std::max(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const()));
-                    else
-                        newConstArray[comp].setIConst(std::max(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst()));
-                } else {
-                    if (isInt64)
-                        newConstArray[comp].setU64Const(std::max(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const()));
-                    else
-                        newConstArray[comp].setUConst(std::max(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()));
+                    break;
+                case EbtInt8:
+                    newConstArray[comp].setI8Const(std::max(childConstUnions[0][arg0comp].getI8Const(), childConstUnions[1][arg1comp].getI8Const()));
+                    break;
+                case EbtUint8:
+                    newConstArray[comp].setU8Const(std::max(childConstUnions[0][arg0comp].getU8Const(), childConstUnions[1][arg1comp].getU8Const()));
+                    break;
+                case EbtInt16:
+                    newConstArray[comp].setI16Const(std::max(childConstUnions[0][arg0comp].getI16Const(), childConstUnions[1][arg1comp].getI16Const()));
+                    break;
+                case EbtUint16:
+                    newConstArray[comp].setU16Const(std::max(childConstUnions[0][arg0comp].getU16Const(), childConstUnions[1][arg1comp].getU16Const()));
+                    break;
+                case EbtInt:
+                    newConstArray[comp].setIConst(std::max(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst()));
+                    break;
+                case EbtUint:
+                    newConstArray[comp].setUConst(std::max(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()));
+                    break;
+                case EbtInt64:
+                    newConstArray[comp].setI64Const(std::max(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const()));
+                    break;
+                case EbtUint64:
+                    newConstArray[comp].setU64Const(std::max(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const()));
+                    break;
+                default: assert(false && "Default missing");
                 }
                 break;
             case EOpClamp:
-                if (isFloatingPoint)
+                switch(children[0]->getAsTyped()->getBasicType()) {
+                case EbtFloat16:
+                case EbtFloat:
+                case EbtDouble:
                     newConstArray[comp].setDConst(std::min(std::max(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()),
                                                                                                                childConstUnions[2][arg2comp].getDConst()));
-                else if (isSigned) {
-                    if (isInt64)
-                        newConstArray[comp].setI64Const(std::min(std::max(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const()),
-                                                                                                                       childConstUnions[2][arg2comp].getI64Const()));
-                    else
-                        newConstArray[comp].setIConst(std::min(std::max(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst()),
+                    break;
+                case EbtInt8:
+                    newConstArray[comp].setI8Const(std::min(std::max(childConstUnions[0][arg0comp].getI8Const(), childConstUnions[1][arg1comp].getI8Const()),
+                                                                                                                   childConstUnions[2][arg2comp].getI8Const()));
+                    break;
+                case EbtUint8:
+                     newConstArray[comp].setU8Const(std::min(std::max(childConstUnions[0][arg0comp].getU8Const(), childConstUnions[1][arg1comp].getU8Const()),
+                                                                                                                   childConstUnions[2][arg2comp].getU8Const()));
+                    break;
+                case EbtInt16:
+                    newConstArray[comp].setI16Const(std::min(std::max(childConstUnions[0][arg0comp].getI16Const(), childConstUnions[1][arg1comp].getI16Const()),
+                                                                                                                   childConstUnions[2][arg2comp].getI16Const()));
+                    break;
+                case EbtUint16:
+                    newConstArray[comp].setU16Const(std::min(std::max(childConstUnions[0][arg0comp].getU16Const(), childConstUnions[1][arg1comp].getU16Const()),
+                                                                                                                   childConstUnions[2][arg2comp].getU16Const()));
+                    break;
+                case EbtInt:
+                    newConstArray[comp].setIConst(std::min(std::max(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst()),
                                                                                                                    childConstUnions[2][arg2comp].getIConst()));
-                } else {
-                    if (isInt64)
-                        newConstArray[comp].setU64Const(std::min(std::max(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const()),
-                                                                                                                       childConstUnions[2][arg2comp].getU64Const()));
-                    else
-                        newConstArray[comp].setUConst(std::min(std::max(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()),
+                    break;
+                case EbtUint:
+                    newConstArray[comp].setUConst(std::min(std::max(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()),
                                                                                                                    childConstUnions[2][arg2comp].getUConst()));
+                    break;
+                case EbtInt64:
+                    newConstArray[comp].setI64Const(std::min(std::max(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const()),
+                                                                                                                       childConstUnions[2][arg2comp].getI64Const()));
+                    break;
+                case EbtUint64:
+                    newConstArray[comp].setU64Const(std::min(std::max(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const()),
+                                                                                                                       childConstUnions[2][arg2comp].getU64Const()));
+                    break;
+                default: assert(false && "Default missing");
                 }
                 break;
             case EOpLessThan:
diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp
index 66f824f..b231898 100644
--- a/glslang/MachineIndependent/Initialize.cpp
+++ b/glslang/MachineIndependent/Initialize.cpp
@@ -2,6 +2,7 @@
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2016 LunarG, Inc.
 // Copyright (C) 2015-2017 Google, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -82,10 +83,14 @@
 {
     // Set up textual representations for making all the permutations
     // of texturing/imaging functions.
-    prefixes[EbtFloat] = "";
+    prefixes[EbtFloat] =  "";
 #ifdef AMD_EXTENSIONS
     prefixes[EbtFloat16] = "f16";
 #endif
+    prefixes[EbtInt8]  = "i8";
+    prefixes[EbtUint8] = "u8";
+    prefixes[EbtInt16]  = "i16";
+    prefixes[EbtUint16] = "u16";
     prefixes[EbtInt]   = "i";
     prefixes[EbtUint]  = "u";
     postfixes[2] = "2";
@@ -802,7 +807,6 @@
             "bvec3 notEqual(u64vec3, u64vec3);"
             "bvec4 notEqual(u64vec4, u64vec4);"
 
-#ifdef AMD_EXTENSIONS
             "int   findLSB(int64_t);"
             "ivec2 findLSB(i64vec2);"
             "ivec3 findLSB(i64vec3);"
@@ -822,7 +826,7 @@
             "ivec2 findMSB(u64vec2);"
             "ivec3 findMSB(u64vec3);"
             "ivec4 findMSB(u64vec4);"
-#endif
+
             "\n"
         );
     }
@@ -1630,6 +1634,727 @@
             "\n");
     }
 
+    // GL_KHR_shader_subgroup
+    if (spvVersion.vulkan > 0) {
+        commonBuiltins.append(
+            "void subgroupBarrier();"
+            "void subgroupMemoryBarrier();"
+            "void subgroupMemoryBarrierBuffer();"
+            "void subgroupMemoryBarrierImage();"
+            "bool subgroupElect();"
+
+            "bool   subgroupAll(bool);\n"
+            "bool   subgroupAny(bool);\n"
+
+            "bool   subgroupAllEqual(float);\n"
+            "bool   subgroupAllEqual(vec2);\n"
+            "bool   subgroupAllEqual(vec3);\n"
+            "bool   subgroupAllEqual(vec4);\n"
+            "bool   subgroupAllEqual(int);\n"
+            "bool   subgroupAllEqual(ivec2);\n"
+            "bool   subgroupAllEqual(ivec3);\n"
+            "bool   subgroupAllEqual(ivec4);\n"
+            "bool   subgroupAllEqual(uint);\n"
+            "bool   subgroupAllEqual(uvec2);\n"
+            "bool   subgroupAllEqual(uvec3);\n"
+            "bool   subgroupAllEqual(uvec4);\n"
+            "bool   subgroupAllEqual(bool);\n"
+            "bool   subgroupAllEqual(bvec2);\n"
+            "bool   subgroupAllEqual(bvec3);\n"
+            "bool   subgroupAllEqual(bvec4);\n"
+
+            "float  subgroupBroadcast(float, uint);\n"
+            "vec2   subgroupBroadcast(vec2, uint);\n"
+            "vec3   subgroupBroadcast(vec3, uint);\n"
+            "vec4   subgroupBroadcast(vec4, uint);\n"
+            "int    subgroupBroadcast(int, uint);\n"
+            "ivec2  subgroupBroadcast(ivec2, uint);\n"
+            "ivec3  subgroupBroadcast(ivec3, uint);\n"
+            "ivec4  subgroupBroadcast(ivec4, uint);\n"
+            "uint   subgroupBroadcast(uint, uint);\n"
+            "uvec2  subgroupBroadcast(uvec2, uint);\n"
+            "uvec3  subgroupBroadcast(uvec3, uint);\n"
+            "uvec4  subgroupBroadcast(uvec4, uint);\n"
+            "bool   subgroupBroadcast(bool, uint);\n"
+            "bvec2  subgroupBroadcast(bvec2, uint);\n"
+            "bvec3  subgroupBroadcast(bvec3, uint);\n"
+            "bvec4  subgroupBroadcast(bvec4, uint);\n"
+
+            "float  subgroupBroadcastFirst(float);\n"
+            "vec2   subgroupBroadcastFirst(vec2);\n"
+            "vec3   subgroupBroadcastFirst(vec3);\n"
+            "vec4   subgroupBroadcastFirst(vec4);\n"
+            "int    subgroupBroadcastFirst(int);\n"
+            "ivec2  subgroupBroadcastFirst(ivec2);\n"
+            "ivec3  subgroupBroadcastFirst(ivec3);\n"
+            "ivec4  subgroupBroadcastFirst(ivec4);\n"
+            "uint   subgroupBroadcastFirst(uint);\n"
+            "uvec2  subgroupBroadcastFirst(uvec2);\n"
+            "uvec3  subgroupBroadcastFirst(uvec3);\n"
+            "uvec4  subgroupBroadcastFirst(uvec4);\n"
+            "bool   subgroupBroadcastFirst(bool);\n"
+            "bvec2  subgroupBroadcastFirst(bvec2);\n"
+            "bvec3  subgroupBroadcastFirst(bvec3);\n"
+            "bvec4  subgroupBroadcastFirst(bvec4);\n"
+
+            "uvec4  subgroupBallot(bool);\n"
+            "bool   subgroupInverseBallot(uvec4);\n"
+            "bool   subgroupBallotBitExtract(uvec4, uint);\n"
+            "uint   subgroupBallotBitCount(uvec4);\n"
+            "uint   subgroupBallotInclusiveBitCount(uvec4);\n"
+            "uint   subgroupBallotExclusiveBitCount(uvec4);\n"
+            "uint   subgroupBallotFindLSB(uvec4);\n"
+            "uint   subgroupBallotFindMSB(uvec4);\n"
+
+            "float  subgroupShuffle(float, uint);\n"
+            "vec2   subgroupShuffle(vec2, uint);\n"
+            "vec3   subgroupShuffle(vec3, uint);\n"
+            "vec4   subgroupShuffle(vec4, uint);\n"
+            "int    subgroupShuffle(int, uint);\n"
+            "ivec2  subgroupShuffle(ivec2, uint);\n"
+            "ivec3  subgroupShuffle(ivec3, uint);\n"
+            "ivec4  subgroupShuffle(ivec4, uint);\n"
+            "uint   subgroupShuffle(uint, uint);\n"
+            "uvec2  subgroupShuffle(uvec2, uint);\n"
+            "uvec3  subgroupShuffle(uvec3, uint);\n"
+            "uvec4  subgroupShuffle(uvec4, uint);\n"
+            "bool   subgroupShuffle(bool, uint);\n"
+            "bvec2  subgroupShuffle(bvec2, uint);\n"
+            "bvec3  subgroupShuffle(bvec3, uint);\n"
+            "bvec4  subgroupShuffle(bvec4, uint);\n"
+
+            "float  subgroupShuffleXor(float, uint);\n"
+            "vec2   subgroupShuffleXor(vec2, uint);\n"
+            "vec3   subgroupShuffleXor(vec3, uint);\n"
+            "vec4   subgroupShuffleXor(vec4, uint);\n"
+            "int    subgroupShuffleXor(int, uint);\n"
+            "ivec2  subgroupShuffleXor(ivec2, uint);\n"
+            "ivec3  subgroupShuffleXor(ivec3, uint);\n"
+            "ivec4  subgroupShuffleXor(ivec4, uint);\n"
+            "uint   subgroupShuffleXor(uint, uint);\n"
+            "uvec2  subgroupShuffleXor(uvec2, uint);\n"
+            "uvec3  subgroupShuffleXor(uvec3, uint);\n"
+            "uvec4  subgroupShuffleXor(uvec4, uint);\n"
+            "bool   subgroupShuffleXor(bool, uint);\n"
+            "bvec2  subgroupShuffleXor(bvec2, uint);\n"
+            "bvec3  subgroupShuffleXor(bvec3, uint);\n"
+            "bvec4  subgroupShuffleXor(bvec4, uint);\n"
+
+            "float  subgroupShuffleUp(float, uint delta);\n"
+            "vec2   subgroupShuffleUp(vec2, uint delta);\n"
+            "vec3   subgroupShuffleUp(vec3, uint delta);\n"
+            "vec4   subgroupShuffleUp(vec4, uint delta);\n"
+            "int    subgroupShuffleUp(int, uint delta);\n"
+            "ivec2  subgroupShuffleUp(ivec2, uint delta);\n"
+            "ivec3  subgroupShuffleUp(ivec3, uint delta);\n"
+            "ivec4  subgroupShuffleUp(ivec4, uint delta);\n"
+            "uint   subgroupShuffleUp(uint, uint delta);\n"
+            "uvec2  subgroupShuffleUp(uvec2, uint delta);\n"
+            "uvec3  subgroupShuffleUp(uvec3, uint delta);\n"
+            "uvec4  subgroupShuffleUp(uvec4, uint delta);\n"
+            "bool   subgroupShuffleUp(bool, uint delta);\n"
+            "bvec2  subgroupShuffleUp(bvec2, uint delta);\n"
+            "bvec3  subgroupShuffleUp(bvec3, uint delta);\n"
+            "bvec4  subgroupShuffleUp(bvec4, uint delta);\n"
+
+            "float  subgroupShuffleDown(float, uint delta);\n"
+            "vec2   subgroupShuffleDown(vec2, uint delta);\n"
+            "vec3   subgroupShuffleDown(vec3, uint delta);\n"
+            "vec4   subgroupShuffleDown(vec4, uint delta);\n"
+            "int    subgroupShuffleDown(int, uint delta);\n"
+            "ivec2  subgroupShuffleDown(ivec2, uint delta);\n"
+            "ivec3  subgroupShuffleDown(ivec3, uint delta);\n"
+            "ivec4  subgroupShuffleDown(ivec4, uint delta);\n"
+            "uint   subgroupShuffleDown(uint, uint delta);\n"
+            "uvec2  subgroupShuffleDown(uvec2, uint delta);\n"
+            "uvec3  subgroupShuffleDown(uvec3, uint delta);\n"
+            "uvec4  subgroupShuffleDown(uvec4, uint delta);\n"
+            "bool   subgroupShuffleDown(bool, uint delta);\n"
+            "bvec2  subgroupShuffleDown(bvec2, uint delta);\n"
+            "bvec3  subgroupShuffleDown(bvec3, uint delta);\n"
+            "bvec4  subgroupShuffleDown(bvec4, uint delta);\n"
+
+            "float  subgroupAdd(float);\n"
+            "vec2   subgroupAdd(vec2);\n"
+            "vec3   subgroupAdd(vec3);\n"
+            "vec4   subgroupAdd(vec4);\n"
+            "int    subgroupAdd(int);\n"
+            "ivec2  subgroupAdd(ivec2);\n"
+            "ivec3  subgroupAdd(ivec3);\n"
+            "ivec4  subgroupAdd(ivec4);\n"
+            "uint   subgroupAdd(uint);\n"
+            "uvec2  subgroupAdd(uvec2);\n"
+            "uvec3  subgroupAdd(uvec3);\n"
+            "uvec4  subgroupAdd(uvec4);\n"
+
+            "float  subgroupMul(float);\n"
+            "vec2   subgroupMul(vec2);\n"
+            "vec3   subgroupMul(vec3);\n"
+            "vec4   subgroupMul(vec4);\n"
+            "int    subgroupMul(int);\n"
+            "ivec2  subgroupMul(ivec2);\n"
+            "ivec3  subgroupMul(ivec3);\n"
+            "ivec4  subgroupMul(ivec4);\n"
+            "uint   subgroupMul(uint);\n"
+            "uvec2  subgroupMul(uvec2);\n"
+            "uvec3  subgroupMul(uvec3);\n"
+            "uvec4  subgroupMul(uvec4);\n"
+
+            "float  subgroupMin(float);\n"
+            "vec2   subgroupMin(vec2);\n"
+            "vec3   subgroupMin(vec3);\n"
+            "vec4   subgroupMin(vec4);\n"
+            "int    subgroupMin(int);\n"
+            "ivec2  subgroupMin(ivec2);\n"
+            "ivec3  subgroupMin(ivec3);\n"
+            "ivec4  subgroupMin(ivec4);\n"
+            "uint   subgroupMin(uint);\n"
+            "uvec2  subgroupMin(uvec2);\n"
+            "uvec3  subgroupMin(uvec3);\n"
+            "uvec4  subgroupMin(uvec4);\n"
+
+            "float  subgroupMax(float);\n"
+            "vec2   subgroupMax(vec2);\n"
+            "vec3   subgroupMax(vec3);\n"
+            "vec4   subgroupMax(vec4);\n"
+            "int    subgroupMax(int);\n"
+            "ivec2  subgroupMax(ivec2);\n"
+            "ivec3  subgroupMax(ivec3);\n"
+            "ivec4  subgroupMax(ivec4);\n"
+            "uint   subgroupMax(uint);\n"
+            "uvec2  subgroupMax(uvec2);\n"
+            "uvec3  subgroupMax(uvec3);\n"
+            "uvec4  subgroupMax(uvec4);\n"
+
+            "int    subgroupAnd(int);\n"
+            "ivec2  subgroupAnd(ivec2);\n"
+            "ivec3  subgroupAnd(ivec3);\n"
+            "ivec4  subgroupAnd(ivec4);\n"
+            "uint   subgroupAnd(uint);\n"
+            "uvec2  subgroupAnd(uvec2);\n"
+            "uvec3  subgroupAnd(uvec3);\n"
+            "uvec4  subgroupAnd(uvec4);\n"
+            "bool   subgroupAnd(bool);\n"
+            "bvec2  subgroupAnd(bvec2);\n"
+            "bvec3  subgroupAnd(bvec3);\n"
+            "bvec4  subgroupAnd(bvec4);\n"
+
+            "int    subgroupOr(int);\n"
+            "ivec2  subgroupOr(ivec2);\n"
+            "ivec3  subgroupOr(ivec3);\n"
+            "ivec4  subgroupOr(ivec4);\n"
+            "uint   subgroupOr(uint);\n"
+            "uvec2  subgroupOr(uvec2);\n"
+            "uvec3  subgroupOr(uvec3);\n"
+            "uvec4  subgroupOr(uvec4);\n"
+            "bool   subgroupOr(bool);\n"
+            "bvec2  subgroupOr(bvec2);\n"
+            "bvec3  subgroupOr(bvec3);\n"
+            "bvec4  subgroupOr(bvec4);\n"
+
+            "int    subgroupXor(int);\n"
+            "ivec2  subgroupXor(ivec2);\n"
+            "ivec3  subgroupXor(ivec3);\n"
+            "ivec4  subgroupXor(ivec4);\n"
+            "uint   subgroupXor(uint);\n"
+            "uvec2  subgroupXor(uvec2);\n"
+            "uvec3  subgroupXor(uvec3);\n"
+            "uvec4  subgroupXor(uvec4);\n"
+            "bool   subgroupXor(bool);\n"
+            "bvec2  subgroupXor(bvec2);\n"
+            "bvec3  subgroupXor(bvec3);\n"
+            "bvec4  subgroupXor(bvec4);\n"
+
+            "float  subgroupInclusiveAdd(float);\n"
+            "vec2   subgroupInclusiveAdd(vec2);\n"
+            "vec3   subgroupInclusiveAdd(vec3);\n"
+            "vec4   subgroupInclusiveAdd(vec4);\n"
+            "int    subgroupInclusiveAdd(int);\n"
+            "ivec2  subgroupInclusiveAdd(ivec2);\n"
+            "ivec3  subgroupInclusiveAdd(ivec3);\n"
+            "ivec4  subgroupInclusiveAdd(ivec4);\n"
+            "uint   subgroupInclusiveAdd(uint);\n"
+            "uvec2  subgroupInclusiveAdd(uvec2);\n"
+            "uvec3  subgroupInclusiveAdd(uvec3);\n"
+            "uvec4  subgroupInclusiveAdd(uvec4);\n"
+
+            "float  subgroupInclusiveMul(float);\n"
+            "vec2   subgroupInclusiveMul(vec2);\n"
+            "vec3   subgroupInclusiveMul(vec3);\n"
+            "vec4   subgroupInclusiveMul(vec4);\n"
+            "int    subgroupInclusiveMul(int);\n"
+            "ivec2  subgroupInclusiveMul(ivec2);\n"
+            "ivec3  subgroupInclusiveMul(ivec3);\n"
+            "ivec4  subgroupInclusiveMul(ivec4);\n"
+            "uint   subgroupInclusiveMul(uint);\n"
+            "uvec2  subgroupInclusiveMul(uvec2);\n"
+            "uvec3  subgroupInclusiveMul(uvec3);\n"
+            "uvec4  subgroupInclusiveMul(uvec4);\n"
+
+            "float  subgroupInclusiveMin(float);\n"
+            "vec2   subgroupInclusiveMin(vec2);\n"
+            "vec3   subgroupInclusiveMin(vec3);\n"
+            "vec4   subgroupInclusiveMin(vec4);\n"
+            "int    subgroupInclusiveMin(int);\n"
+            "ivec2  subgroupInclusiveMin(ivec2);\n"
+            "ivec3  subgroupInclusiveMin(ivec3);\n"
+            "ivec4  subgroupInclusiveMin(ivec4);\n"
+            "uint   subgroupInclusiveMin(uint);\n"
+            "uvec2  subgroupInclusiveMin(uvec2);\n"
+            "uvec3  subgroupInclusiveMin(uvec3);\n"
+            "uvec4  subgroupInclusiveMin(uvec4);\n"
+
+            "float  subgroupInclusiveMax(float);\n"
+            "vec2   subgroupInclusiveMax(vec2);\n"
+            "vec3   subgroupInclusiveMax(vec3);\n"
+            "vec4   subgroupInclusiveMax(vec4);\n"
+            "int    subgroupInclusiveMax(int);\n"
+            "ivec2  subgroupInclusiveMax(ivec2);\n"
+            "ivec3  subgroupInclusiveMax(ivec3);\n"
+            "ivec4  subgroupInclusiveMax(ivec4);\n"
+            "uint   subgroupInclusiveMax(uint);\n"
+            "uvec2  subgroupInclusiveMax(uvec2);\n"
+            "uvec3  subgroupInclusiveMax(uvec3);\n"
+            "uvec4  subgroupInclusiveMax(uvec4);\n"
+
+            "int    subgroupInclusiveAnd(int);\n"
+            "ivec2  subgroupInclusiveAnd(ivec2);\n"
+            "ivec3  subgroupInclusiveAnd(ivec3);\n"
+            "ivec4  subgroupInclusiveAnd(ivec4);\n"
+            "uint   subgroupInclusiveAnd(uint);\n"
+            "uvec2  subgroupInclusiveAnd(uvec2);\n"
+            "uvec3  subgroupInclusiveAnd(uvec3);\n"
+            "uvec4  subgroupInclusiveAnd(uvec4);\n"
+            "bool   subgroupInclusiveAnd(bool);\n"
+            "bvec2  subgroupInclusiveAnd(bvec2);\n"
+            "bvec3  subgroupInclusiveAnd(bvec3);\n"
+            "bvec4  subgroupInclusiveAnd(bvec4);\n"
+
+            "int    subgroupInclusiveOr(int);\n"
+            "ivec2  subgroupInclusiveOr(ivec2);\n"
+            "ivec3  subgroupInclusiveOr(ivec3);\n"
+            "ivec4  subgroupInclusiveOr(ivec4);\n"
+            "uint   subgroupInclusiveOr(uint);\n"
+            "uvec2  subgroupInclusiveOr(uvec2);\n"
+            "uvec3  subgroupInclusiveOr(uvec3);\n"
+            "uvec4  subgroupInclusiveOr(uvec4);\n"
+            "bool   subgroupInclusiveOr(bool);\n"
+            "bvec2  subgroupInclusiveOr(bvec2);\n"
+            "bvec3  subgroupInclusiveOr(bvec3);\n"
+            "bvec4  subgroupInclusiveOr(bvec4);\n"
+
+            "int    subgroupInclusiveXor(int);\n"
+            "ivec2  subgroupInclusiveXor(ivec2);\n"
+            "ivec3  subgroupInclusiveXor(ivec3);\n"
+            "ivec4  subgroupInclusiveXor(ivec4);\n"
+            "uint   subgroupInclusiveXor(uint);\n"
+            "uvec2  subgroupInclusiveXor(uvec2);\n"
+            "uvec3  subgroupInclusiveXor(uvec3);\n"
+            "uvec4  subgroupInclusiveXor(uvec4);\n"
+            "bool   subgroupInclusiveXor(bool);\n"
+            "bvec2  subgroupInclusiveXor(bvec2);\n"
+            "bvec3  subgroupInclusiveXor(bvec3);\n"
+            "bvec4  subgroupInclusiveXor(bvec4);\n"
+
+            "float  subgroupExclusiveAdd(float);\n"
+            "vec2   subgroupExclusiveAdd(vec2);\n"
+            "vec3   subgroupExclusiveAdd(vec3);\n"
+            "vec4   subgroupExclusiveAdd(vec4);\n"
+            "int    subgroupExclusiveAdd(int);\n"
+            "ivec2  subgroupExclusiveAdd(ivec2);\n"
+            "ivec3  subgroupExclusiveAdd(ivec3);\n"
+            "ivec4  subgroupExclusiveAdd(ivec4);\n"
+            "uint   subgroupExclusiveAdd(uint);\n"
+            "uvec2  subgroupExclusiveAdd(uvec2);\n"
+            "uvec3  subgroupExclusiveAdd(uvec3);\n"
+            "uvec4  subgroupExclusiveAdd(uvec4);\n"
+
+            "float  subgroupExclusiveMul(float);\n"
+            "vec2   subgroupExclusiveMul(vec2);\n"
+            "vec3   subgroupExclusiveMul(vec3);\n"
+            "vec4   subgroupExclusiveMul(vec4);\n"
+            "int    subgroupExclusiveMul(int);\n"
+            "ivec2  subgroupExclusiveMul(ivec2);\n"
+            "ivec3  subgroupExclusiveMul(ivec3);\n"
+            "ivec4  subgroupExclusiveMul(ivec4);\n"
+            "uint   subgroupExclusiveMul(uint);\n"
+            "uvec2  subgroupExclusiveMul(uvec2);\n"
+            "uvec3  subgroupExclusiveMul(uvec3);\n"
+            "uvec4  subgroupExclusiveMul(uvec4);\n"
+
+            "float  subgroupExclusiveMin(float);\n"
+            "vec2   subgroupExclusiveMin(vec2);\n"
+            "vec3   subgroupExclusiveMin(vec3);\n"
+            "vec4   subgroupExclusiveMin(vec4);\n"
+            "int    subgroupExclusiveMin(int);\n"
+            "ivec2  subgroupExclusiveMin(ivec2);\n"
+            "ivec3  subgroupExclusiveMin(ivec3);\n"
+            "ivec4  subgroupExclusiveMin(ivec4);\n"
+            "uint   subgroupExclusiveMin(uint);\n"
+            "uvec2  subgroupExclusiveMin(uvec2);\n"
+            "uvec3  subgroupExclusiveMin(uvec3);\n"
+            "uvec4  subgroupExclusiveMin(uvec4);\n"
+
+            "float  subgroupExclusiveMax(float);\n"
+            "vec2   subgroupExclusiveMax(vec2);\n"
+            "vec3   subgroupExclusiveMax(vec3);\n"
+            "vec4   subgroupExclusiveMax(vec4);\n"
+            "int    subgroupExclusiveMax(int);\n"
+            "ivec2  subgroupExclusiveMax(ivec2);\n"
+            "ivec3  subgroupExclusiveMax(ivec3);\n"
+            "ivec4  subgroupExclusiveMax(ivec4);\n"
+            "uint   subgroupExclusiveMax(uint);\n"
+            "uvec2  subgroupExclusiveMax(uvec2);\n"
+            "uvec3  subgroupExclusiveMax(uvec3);\n"
+            "uvec4  subgroupExclusiveMax(uvec4);\n"
+
+            "int    subgroupExclusiveAnd(int);\n"
+            "ivec2  subgroupExclusiveAnd(ivec2);\n"
+            "ivec3  subgroupExclusiveAnd(ivec3);\n"
+            "ivec4  subgroupExclusiveAnd(ivec4);\n"
+            "uint   subgroupExclusiveAnd(uint);\n"
+            "uvec2  subgroupExclusiveAnd(uvec2);\n"
+            "uvec3  subgroupExclusiveAnd(uvec3);\n"
+            "uvec4  subgroupExclusiveAnd(uvec4);\n"
+            "bool   subgroupExclusiveAnd(bool);\n"
+            "bvec2  subgroupExclusiveAnd(bvec2);\n"
+            "bvec3  subgroupExclusiveAnd(bvec3);\n"
+            "bvec4  subgroupExclusiveAnd(bvec4);\n"
+
+            "int    subgroupExclusiveOr(int);\n"
+            "ivec2  subgroupExclusiveOr(ivec2);\n"
+            "ivec3  subgroupExclusiveOr(ivec3);\n"
+            "ivec4  subgroupExclusiveOr(ivec4);\n"
+            "uint   subgroupExclusiveOr(uint);\n"
+            "uvec2  subgroupExclusiveOr(uvec2);\n"
+            "uvec3  subgroupExclusiveOr(uvec3);\n"
+            "uvec4  subgroupExclusiveOr(uvec4);\n"
+            "bool   subgroupExclusiveOr(bool);\n"
+            "bvec2  subgroupExclusiveOr(bvec2);\n"
+            "bvec3  subgroupExclusiveOr(bvec3);\n"
+            "bvec4  subgroupExclusiveOr(bvec4);\n"
+
+            "int    subgroupExclusiveXor(int);\n"
+            "ivec2  subgroupExclusiveXor(ivec2);\n"
+            "ivec3  subgroupExclusiveXor(ivec3);\n"
+            "ivec4  subgroupExclusiveXor(ivec4);\n"
+            "uint   subgroupExclusiveXor(uint);\n"
+            "uvec2  subgroupExclusiveXor(uvec2);\n"
+            "uvec3  subgroupExclusiveXor(uvec3);\n"
+            "uvec4  subgroupExclusiveXor(uvec4);\n"
+            "bool   subgroupExclusiveXor(bool);\n"
+            "bvec2  subgroupExclusiveXor(bvec2);\n"
+            "bvec3  subgroupExclusiveXor(bvec3);\n"
+            "bvec4  subgroupExclusiveXor(bvec4);\n"
+
+            "float  subgroupClusteredAdd(float, uint);\n"
+            "vec2   subgroupClusteredAdd(vec2, uint);\n"
+            "vec3   subgroupClusteredAdd(vec3, uint);\n"
+            "vec4   subgroupClusteredAdd(vec4, uint);\n"
+            "int    subgroupClusteredAdd(int, uint);\n"
+            "ivec2  subgroupClusteredAdd(ivec2, uint);\n"
+            "ivec3  subgroupClusteredAdd(ivec3, uint);\n"
+            "ivec4  subgroupClusteredAdd(ivec4, uint);\n"
+            "uint   subgroupClusteredAdd(uint, uint);\n"
+            "uvec2  subgroupClusteredAdd(uvec2, uint);\n"
+            "uvec3  subgroupClusteredAdd(uvec3, uint);\n"
+            "uvec4  subgroupClusteredAdd(uvec4, uint);\n"
+
+            "float  subgroupClusteredMul(float, uint);\n"
+            "vec2   subgroupClusteredMul(vec2, uint);\n"
+            "vec3   subgroupClusteredMul(vec3, uint);\n"
+            "vec4   subgroupClusteredMul(vec4, uint);\n"
+            "int    subgroupClusteredMul(int, uint);\n"
+            "ivec2  subgroupClusteredMul(ivec2, uint);\n"
+            "ivec3  subgroupClusteredMul(ivec3, uint);\n"
+            "ivec4  subgroupClusteredMul(ivec4, uint);\n"
+            "uint   subgroupClusteredMul(uint, uint);\n"
+            "uvec2  subgroupClusteredMul(uvec2, uint);\n"
+            "uvec3  subgroupClusteredMul(uvec3, uint);\n"
+            "uvec4  subgroupClusteredMul(uvec4, uint);\n"
+
+            "float  subgroupClusteredMin(float, uint);\n"
+            "vec2   subgroupClusteredMin(vec2, uint);\n"
+            "vec3   subgroupClusteredMin(vec3, uint);\n"
+            "vec4   subgroupClusteredMin(vec4, uint);\n"
+            "int    subgroupClusteredMin(int, uint);\n"
+            "ivec2  subgroupClusteredMin(ivec2, uint);\n"
+            "ivec3  subgroupClusteredMin(ivec3, uint);\n"
+            "ivec4  subgroupClusteredMin(ivec4, uint);\n"
+            "uint   subgroupClusteredMin(uint, uint);\n"
+            "uvec2  subgroupClusteredMin(uvec2, uint);\n"
+            "uvec3  subgroupClusteredMin(uvec3, uint);\n"
+            "uvec4  subgroupClusteredMin(uvec4, uint);\n"
+
+            "float  subgroupClusteredMax(float, uint);\n"
+            "vec2   subgroupClusteredMax(vec2, uint);\n"
+            "vec3   subgroupClusteredMax(vec3, uint);\n"
+            "vec4   subgroupClusteredMax(vec4, uint);\n"
+            "int    subgroupClusteredMax(int, uint);\n"
+            "ivec2  subgroupClusteredMax(ivec2, uint);\n"
+            "ivec3  subgroupClusteredMax(ivec3, uint);\n"
+            "ivec4  subgroupClusteredMax(ivec4, uint);\n"
+            "uint   subgroupClusteredMax(uint, uint);\n"
+            "uvec2  subgroupClusteredMax(uvec2, uint);\n"
+            "uvec3  subgroupClusteredMax(uvec3, uint);\n"
+            "uvec4  subgroupClusteredMax(uvec4, uint);\n"
+
+            "int    subgroupClusteredAnd(int, uint);\n"
+            "ivec2  subgroupClusteredAnd(ivec2, uint);\n"
+            "ivec3  subgroupClusteredAnd(ivec3, uint);\n"
+            "ivec4  subgroupClusteredAnd(ivec4, uint);\n"
+            "uint   subgroupClusteredAnd(uint, uint);\n"
+            "uvec2  subgroupClusteredAnd(uvec2, uint);\n"
+            "uvec3  subgroupClusteredAnd(uvec3, uint);\n"
+            "uvec4  subgroupClusteredAnd(uvec4, uint);\n"
+            "bool   subgroupClusteredAnd(bool, uint);\n"
+            "bvec2  subgroupClusteredAnd(bvec2, uint);\n"
+            "bvec3  subgroupClusteredAnd(bvec3, uint);\n"
+            "bvec4  subgroupClusteredAnd(bvec4, uint);\n"
+
+            "int    subgroupClusteredOr(int, uint);\n"
+            "ivec2  subgroupClusteredOr(ivec2, uint);\n"
+            "ivec3  subgroupClusteredOr(ivec3, uint);\n"
+            "ivec4  subgroupClusteredOr(ivec4, uint);\n"
+            "uint   subgroupClusteredOr(uint, uint);\n"
+            "uvec2  subgroupClusteredOr(uvec2, uint);\n"
+            "uvec3  subgroupClusteredOr(uvec3, uint);\n"
+            "uvec4  subgroupClusteredOr(uvec4, uint);\n"
+            "bool   subgroupClusteredOr(bool, uint);\n"
+            "bvec2  subgroupClusteredOr(bvec2, uint);\n"
+            "bvec3  subgroupClusteredOr(bvec3, uint);\n"
+            "bvec4  subgroupClusteredOr(bvec4, uint);\n"
+
+            "int    subgroupClusteredXor(int, uint);\n"
+            "ivec2  subgroupClusteredXor(ivec2, uint);\n"
+            "ivec3  subgroupClusteredXor(ivec3, uint);\n"
+            "ivec4  subgroupClusteredXor(ivec4, uint);\n"
+            "uint   subgroupClusteredXor(uint, uint);\n"
+            "uvec2  subgroupClusteredXor(uvec2, uint);\n"
+            "uvec3  subgroupClusteredXor(uvec3, uint);\n"
+            "uvec4  subgroupClusteredXor(uvec4, uint);\n"
+            "bool   subgroupClusteredXor(bool, uint);\n"
+            "bvec2  subgroupClusteredXor(bvec2, uint);\n"
+            "bvec3  subgroupClusteredXor(bvec3, uint);\n"
+            "bvec4  subgroupClusteredXor(bvec4, uint);\n"
+
+            "float  subgroupQuadBroadcast(float, uint);\n"
+            "vec2   subgroupQuadBroadcast(vec2, uint);\n"
+            "vec3   subgroupQuadBroadcast(vec3, uint);\n"
+            "vec4   subgroupQuadBroadcast(vec4, uint);\n"
+            "int    subgroupQuadBroadcast(int, uint);\n"
+            "ivec2  subgroupQuadBroadcast(ivec2, uint);\n"
+            "ivec3  subgroupQuadBroadcast(ivec3, uint);\n"
+            "ivec4  subgroupQuadBroadcast(ivec4, uint);\n"
+            "uint   subgroupQuadBroadcast(uint, uint);\n"
+            "uvec2  subgroupQuadBroadcast(uvec2, uint);\n"
+            "uvec3  subgroupQuadBroadcast(uvec3, uint);\n"
+            "uvec4  subgroupQuadBroadcast(uvec4, uint);\n"
+            "bool   subgroupQuadBroadcast(bool, uint);\n"
+            "bvec2  subgroupQuadBroadcast(bvec2, uint);\n"
+            "bvec3  subgroupQuadBroadcast(bvec3, uint);\n"
+            "bvec4  subgroupQuadBroadcast(bvec4, uint);\n"
+
+            "float  subgroupQuadSwapHorizontal(float);\n"
+            "vec2   subgroupQuadSwapHorizontal(vec2);\n"
+            "vec3   subgroupQuadSwapHorizontal(vec3);\n"
+            "vec4   subgroupQuadSwapHorizontal(vec4);\n"
+            "int    subgroupQuadSwapHorizontal(int);\n"
+            "ivec2  subgroupQuadSwapHorizontal(ivec2);\n"
+            "ivec3  subgroupQuadSwapHorizontal(ivec3);\n"
+            "ivec4  subgroupQuadSwapHorizontal(ivec4);\n"
+            "uint   subgroupQuadSwapHorizontal(uint);\n"
+            "uvec2  subgroupQuadSwapHorizontal(uvec2);\n"
+            "uvec3  subgroupQuadSwapHorizontal(uvec3);\n"
+            "uvec4  subgroupQuadSwapHorizontal(uvec4);\n"
+            "bool   subgroupQuadSwapHorizontal(bool);\n"
+            "bvec2  subgroupQuadSwapHorizontal(bvec2);\n"
+            "bvec3  subgroupQuadSwapHorizontal(bvec3);\n"
+            "bvec4  subgroupQuadSwapHorizontal(bvec4);\n"
+
+            "float  subgroupQuadSwapVertical(float);\n"
+            "vec2   subgroupQuadSwapVertical(vec2);\n"
+            "vec3   subgroupQuadSwapVertical(vec3);\n"
+            "vec4   subgroupQuadSwapVertical(vec4);\n"
+            "int    subgroupQuadSwapVertical(int);\n"
+            "ivec2  subgroupQuadSwapVertical(ivec2);\n"
+            "ivec3  subgroupQuadSwapVertical(ivec3);\n"
+            "ivec4  subgroupQuadSwapVertical(ivec4);\n"
+            "uint   subgroupQuadSwapVertical(uint);\n"
+            "uvec2  subgroupQuadSwapVertical(uvec2);\n"
+            "uvec3  subgroupQuadSwapVertical(uvec3);\n"
+            "uvec4  subgroupQuadSwapVertical(uvec4);\n"
+            "bool   subgroupQuadSwapVertical(bool);\n"
+            "bvec2  subgroupQuadSwapVertical(bvec2);\n"
+            "bvec3  subgroupQuadSwapVertical(bvec3);\n"
+            "bvec4  subgroupQuadSwapVertical(bvec4);\n"
+
+            "float  subgroupQuadSwapDiagonal(float);\n"
+            "vec2   subgroupQuadSwapDiagonal(vec2);\n"
+            "vec3   subgroupQuadSwapDiagonal(vec3);\n"
+            "vec4   subgroupQuadSwapDiagonal(vec4);\n"
+            "int    subgroupQuadSwapDiagonal(int);\n"
+            "ivec2  subgroupQuadSwapDiagonal(ivec2);\n"
+            "ivec3  subgroupQuadSwapDiagonal(ivec3);\n"
+            "ivec4  subgroupQuadSwapDiagonal(ivec4);\n"
+            "uint   subgroupQuadSwapDiagonal(uint);\n"
+            "uvec2  subgroupQuadSwapDiagonal(uvec2);\n"
+            "uvec3  subgroupQuadSwapDiagonal(uvec3);\n"
+            "uvec4  subgroupQuadSwapDiagonal(uvec4);\n"
+            "bool   subgroupQuadSwapDiagonal(bool);\n"
+            "bvec2  subgroupQuadSwapDiagonal(bvec2);\n"
+            "bvec3  subgroupQuadSwapDiagonal(bvec3);\n"
+            "bvec4  subgroupQuadSwapDiagonal(bvec4);\n"
+
+            "\n");
+
+        if (profile != EEsProfile && version >= 400) {
+            commonBuiltins.append(
+                "bool   subgroupAllEqual(double);\n"
+                "bool   subgroupAllEqual(dvec2);\n"
+                "bool   subgroupAllEqual(dvec3);\n"
+                "bool   subgroupAllEqual(dvec4);\n"
+
+                "double subgroupBroadcast(double, uint);\n"
+                "dvec2  subgroupBroadcast(dvec2, uint);\n"
+                "dvec3  subgroupBroadcast(dvec3, uint);\n"
+                "dvec4  subgroupBroadcast(dvec4, uint);\n"
+
+                "double subgroupBroadcastFirst(double);\n"
+                "dvec2  subgroupBroadcastFirst(dvec2);\n"
+                "dvec3  subgroupBroadcastFirst(dvec3);\n"
+                "dvec4  subgroupBroadcastFirst(dvec4);\n"
+
+                "double subgroupShuffle(double, uint);\n"
+                "dvec2  subgroupShuffle(dvec2, uint);\n"
+                "dvec3  subgroupShuffle(dvec3, uint);\n"
+                "dvec4  subgroupShuffle(dvec4, uint);\n"
+
+                "double subgroupShuffleXor(double, uint);\n"
+                "dvec2  subgroupShuffleXor(dvec2, uint);\n"
+                "dvec3  subgroupShuffleXor(dvec3, uint);\n"
+                "dvec4  subgroupShuffleXor(dvec4, uint);\n"
+
+                "double subgroupShuffleUp(double, uint delta);\n"
+                "dvec2  subgroupShuffleUp(dvec2, uint delta);\n"
+                "dvec3  subgroupShuffleUp(dvec3, uint delta);\n"
+                "dvec4  subgroupShuffleUp(dvec4, uint delta);\n"
+
+                "double subgroupShuffleDown(double, uint delta);\n"
+                "dvec2  subgroupShuffleDown(dvec2, uint delta);\n"
+                "dvec3  subgroupShuffleDown(dvec3, uint delta);\n"
+                "dvec4  subgroupShuffleDown(dvec4, uint delta);\n"
+
+                "double subgroupAdd(double);\n"
+                "dvec2  subgroupAdd(dvec2);\n"
+                "dvec3  subgroupAdd(dvec3);\n"
+                "dvec4  subgroupAdd(dvec4);\n"
+
+                "double subgroupMul(double);\n"
+                "dvec2  subgroupMul(dvec2);\n"
+                "dvec3  subgroupMul(dvec3);\n"
+                "dvec4  subgroupMul(dvec4);\n"
+
+                "double subgroupMin(double);\n"
+                "dvec2  subgroupMin(dvec2);\n"
+                "dvec3  subgroupMin(dvec3);\n"
+                "dvec4  subgroupMin(dvec4);\n"
+
+                "double subgroupMax(double);\n"
+                "dvec2  subgroupMax(dvec2);\n"
+                "dvec3  subgroupMax(dvec3);\n"
+                "dvec4  subgroupMax(dvec4);\n"
+
+                "double subgroupInclusiveAdd(double);\n"
+                "dvec2  subgroupInclusiveAdd(dvec2);\n"
+                "dvec3  subgroupInclusiveAdd(dvec3);\n"
+                "dvec4  subgroupInclusiveAdd(dvec4);\n"
+
+                "double subgroupInclusiveMul(double);\n"
+                "dvec2  subgroupInclusiveMul(dvec2);\n"
+                "dvec3  subgroupInclusiveMul(dvec3);\n"
+                "dvec4  subgroupInclusiveMul(dvec4);\n"
+
+                "double subgroupInclusiveMin(double);\n"
+                "dvec2  subgroupInclusiveMin(dvec2);\n"
+                "dvec3  subgroupInclusiveMin(dvec3);\n"
+                "dvec4  subgroupInclusiveMin(dvec4);\n"
+
+                "double subgroupInclusiveMax(double);\n"
+                "dvec2  subgroupInclusiveMax(dvec2);\n"
+                "dvec3  subgroupInclusiveMax(dvec3);\n"
+                "dvec4  subgroupInclusiveMax(dvec4);\n"
+
+                "double subgroupExclusiveAdd(double);\n"
+                "dvec2  subgroupExclusiveAdd(dvec2);\n"
+                "dvec3  subgroupExclusiveAdd(dvec3);\n"
+                "dvec4  subgroupExclusiveAdd(dvec4);\n"
+
+                "double subgroupExclusiveMul(double);\n"
+                "dvec2  subgroupExclusiveMul(dvec2);\n"
+                "dvec3  subgroupExclusiveMul(dvec3);\n"
+                "dvec4  subgroupExclusiveMul(dvec4);\n"
+
+                "double subgroupExclusiveMin(double);\n"
+                "dvec2  subgroupExclusiveMin(dvec2);\n"
+                "dvec3  subgroupExclusiveMin(dvec3);\n"
+                "dvec4  subgroupExclusiveMin(dvec4);\n"
+
+                "double subgroupExclusiveMax(double);\n"
+                "dvec2  subgroupExclusiveMax(dvec2);\n"
+                "dvec3  subgroupExclusiveMax(dvec3);\n"
+                "dvec4  subgroupExclusiveMax(dvec4);\n"
+
+                "double subgroupClusteredAdd(double, uint);\n"
+                "dvec2  subgroupClusteredAdd(dvec2, uint);\n"
+                "dvec3  subgroupClusteredAdd(dvec3, uint);\n"
+                "dvec4  subgroupClusteredAdd(dvec4, uint);\n"
+
+                "double subgroupClusteredMul(double, uint);\n"
+                "dvec2  subgroupClusteredMul(dvec2, uint);\n"
+                "dvec3  subgroupClusteredMul(dvec3, uint);\n"
+                "dvec4  subgroupClusteredMul(dvec4, uint);\n"
+
+                "double subgroupClusteredMin(double, uint);\n"
+                "dvec2  subgroupClusteredMin(dvec2, uint);\n"
+                "dvec3  subgroupClusteredMin(dvec3, uint);\n"
+                "dvec4  subgroupClusteredMin(dvec4, uint);\n"
+
+                "double subgroupClusteredMax(double, uint);\n"
+                "dvec2  subgroupClusteredMax(dvec2, uint);\n"
+                "dvec3  subgroupClusteredMax(dvec3, uint);\n"
+                "dvec4  subgroupClusteredMax(dvec4, uint);\n"
+
+                "double subgroupQuadBroadcast(double, uint);\n"
+                "dvec2  subgroupQuadBroadcast(dvec2, uint);\n"
+                "dvec3  subgroupQuadBroadcast(dvec3, uint);\n"
+                "dvec4  subgroupQuadBroadcast(dvec4, uint);\n"
+
+                "double subgroupQuadSwapHorizontal(double);\n"
+                "dvec2  subgroupQuadSwapHorizontal(dvec2);\n"
+                "dvec3  subgroupQuadSwapHorizontal(dvec3);\n"
+                "dvec4  subgroupQuadSwapHorizontal(dvec4);\n"
+
+                "double subgroupQuadSwapVertical(double);\n"
+                "dvec2  subgroupQuadSwapVertical(dvec2);\n"
+                "dvec3  subgroupQuadSwapVertical(dvec3);\n"
+                "dvec4  subgroupQuadSwapVertical(dvec4);\n"
+
+                "double subgroupQuadSwapDiagonal(double);\n"
+                "dvec2  subgroupQuadSwapDiagonal(dvec2);\n"
+                "dvec3  subgroupQuadSwapDiagonal(dvec3);\n"
+                "dvec4  subgroupQuadSwapDiagonal(dvec4);\n"
+
+                "\n");
+            }
+
+        stageBuiltins[EShLangCompute].append(
+            "void subgroupMemoryBarrierShared();"
+
+            "\n"
+            );
+    }
+
     if (profile != EEsProfile && version >= 460) {
         commonBuiltins.append(
             "bool anyInvocation(bool);"
@@ -2333,7 +3058,31 @@
             "\n");
     }
 
-    // GL_AMD_gpu_shader_half_float
+    // GL_AMD_shader_fragment_mask
+    if (profile != EEsProfile && version >= 450) {
+        commonBuiltins.append(
+            "uint fragmentMaskFetchAMD(sampler2DMS,       ivec2);"
+            "uint fragmentMaskFetchAMD(isampler2DMS,      ivec2);"
+            "uint fragmentMaskFetchAMD(usampler2DMS,      ivec2);"
+
+            "uint fragmentMaskFetchAMD(sampler2DMSArray,  ivec3);"
+            "uint fragmentMaskFetchAMD(isampler2DMSArray, ivec3);"
+            "uint fragmentMaskFetchAMD(usampler2DMSArray, ivec3);"
+
+            "vec4  fragmentFetchAMD(sampler2DMS,       ivec2, uint);"
+            "ivec4 fragmentFetchAMD(isampler2DMS,      ivec2, uint);"
+            "uvec4 fragmentFetchAMD(usampler2DMS,      ivec2, uint);"
+
+            "vec4  fragmentFetchAMD(sampler2DMSArray,  ivec3, uint);"
+            "ivec4 fragmentFetchAMD(isampler2DMSArray, ivec3, uint);"
+            "uvec4 fragmentFetchAMD(usampler2DMSArray, ivec3, uint);"
+
+            "\n");
+    }
+
+#endif  // AMD_EXTENSIONS
+
+    // GL_AMD_gpu_shader_half_float/Explicit types
     if (profile != EEsProfile && version >= 450) {
         commonBuiltins.append(
             "float16_t radians(float16_t);"
@@ -2681,9 +3430,168 @@
             "\n");
     }
 
-    // GL_AMD_gpu_shader_int16
+    // Explicit types
     if (profile != EEsProfile && version >= 450) {
         commonBuiltins.append(
+            "int8_t abs(int8_t);"
+            "i8vec2 abs(i8vec2);"
+            "i8vec3 abs(i8vec3);"
+            "i8vec4 abs(i8vec4);"
+
+            "int8_t sign(int8_t);"
+            "i8vec2 sign(i8vec2);"
+            "i8vec3 sign(i8vec3);"
+            "i8vec4 sign(i8vec4);"
+
+            "int8_t min(int8_t x, int8_t y);"
+            "i8vec2 min(i8vec2 x, int8_t y);"
+            "i8vec3 min(i8vec3 x, int8_t y);"
+            "i8vec4 min(i8vec4 x, int8_t y);"
+            "i8vec2 min(i8vec2 x, i8vec2 y);"
+            "i8vec3 min(i8vec3 x, i8vec3 y);"
+            "i8vec4 min(i8vec4 x, i8vec4 y);"
+
+            "uint8_t min(uint8_t x, uint8_t y);"
+            "u8vec2 min(u8vec2 x, uint8_t y);"
+            "u8vec3 min(u8vec3 x, uint8_t y);"
+            "u8vec4 min(u8vec4 x, uint8_t y);"
+            "u8vec2 min(u8vec2 x, u8vec2 y);"
+            "u8vec3 min(u8vec3 x, u8vec3 y);"
+            "u8vec4 min(u8vec4 x, u8vec4 y);"
+
+            "int8_t max(int8_t x, int8_t y);"
+            "i8vec2 max(i8vec2 x, int8_t y);"
+            "i8vec3 max(i8vec3 x, int8_t y);"
+            "i8vec4 max(i8vec4 x, int8_t y);"
+            "i8vec2 max(i8vec2 x, i8vec2 y);"
+            "i8vec3 max(i8vec3 x, i8vec3 y);"
+            "i8vec4 max(i8vec4 x, i8vec4 y);"
+
+            "uint8_t max(uint8_t x, uint8_t y);"
+            "u8vec2 max(u8vec2 x, uint8_t y);"
+            "u8vec3 max(u8vec3 x, uint8_t y);"
+            "u8vec4 max(u8vec4 x, uint8_t y);"
+            "u8vec2 max(u8vec2 x, u8vec2 y);"
+            "u8vec3 max(u8vec3 x, u8vec3 y);"
+            "u8vec4 max(u8vec4 x, u8vec4 y);"
+
+            "int8_t    clamp(int8_t x, int8_t minVal, int8_t maxVal);"
+            "i8vec2  clamp(i8vec2  x, int8_t minVal, int8_t maxVal);"
+            "i8vec3  clamp(i8vec3  x, int8_t minVal, int8_t maxVal);"
+            "i8vec4  clamp(i8vec4  x, int8_t minVal, int8_t maxVal);"
+            "i8vec2  clamp(i8vec2  x, i8vec2  minVal, i8vec2  maxVal);"
+            "i8vec3  clamp(i8vec3  x, i8vec3  minVal, i8vec3  maxVal);"
+            "i8vec4  clamp(i8vec4  x, i8vec4  minVal, i8vec4  maxVal);"
+
+            "uint8_t   clamp(uint8_t x, uint8_t minVal, uint8_t maxVal);"
+            "u8vec2  clamp(u8vec2  x, uint8_t minVal, uint8_t maxVal);"
+            "u8vec3  clamp(u8vec3  x, uint8_t minVal, uint8_t maxVal);"
+            "u8vec4  clamp(u8vec4  x, uint8_t minVal, uint8_t maxVal);"
+            "u8vec2  clamp(u8vec2  x, u8vec2  minVal, u8vec2  maxVal);"
+            "u8vec3  clamp(u8vec3  x, u8vec3  minVal, u8vec3  maxVal);"
+            "u8vec4  clamp(u8vec4  x, u8vec4  minVal, u8vec4  maxVal);"
+
+            "int8_t  mix(int8_t,  int8_t,  bool);"
+            "i8vec2  mix(i8vec2,  i8vec2,  bvec2);"
+            "i8vec3  mix(i8vec3,  i8vec3,  bvec3);"
+            "i8vec4  mix(i8vec4,  i8vec4,  bvec4);"
+            "uint8_t mix(uint8_t, uint8_t, bool);"
+            "u8vec2  mix(u8vec2,  u8vec2,  bvec2);"
+            "u8vec3  mix(u8vec3,  u8vec3,  bvec3);"
+            "u8vec4  mix(u8vec4,  u8vec4,  bvec4);"
+
+            "bvec2 lessThan(i8vec2, i8vec2);"
+            "bvec3 lessThan(i8vec3, i8vec3);"
+            "bvec4 lessThan(i8vec4, i8vec4);"
+            "bvec2 lessThan(u8vec2, u8vec2);"
+            "bvec3 lessThan(u8vec3, u8vec3);"
+            "bvec4 lessThan(u8vec4, u8vec4);"
+
+            "bvec2 lessThanEqual(i8vec2, i8vec2);"
+            "bvec3 lessThanEqual(i8vec3, i8vec3);"
+            "bvec4 lessThanEqual(i8vec4, i8vec4);"
+            "bvec2 lessThanEqual(u8vec2, u8vec2);"
+            "bvec3 lessThanEqual(u8vec3, u8vec3);"
+            "bvec4 lessThanEqual(u8vec4, u8vec4);"
+
+            "bvec2 greaterThan(i8vec2, i8vec2);"
+            "bvec3 greaterThan(i8vec3, i8vec3);"
+            "bvec4 greaterThan(i8vec4, i8vec4);"
+            "bvec2 greaterThan(u8vec2, u8vec2);"
+            "bvec3 greaterThan(u8vec3, u8vec3);"
+            "bvec4 greaterThan(u8vec4, u8vec4);"
+
+            "bvec2 greaterThanEqual(i8vec2, i8vec2);"
+            "bvec3 greaterThanEqual(i8vec3, i8vec3);"
+            "bvec4 greaterThanEqual(i8vec4, i8vec4);"
+            "bvec2 greaterThanEqual(u8vec2, u8vec2);"
+            "bvec3 greaterThanEqual(u8vec3, u8vec3);"
+            "bvec4 greaterThanEqual(u8vec4, u8vec4);"
+
+            "bvec2 equal(i8vec2, i8vec2);"
+            "bvec3 equal(i8vec3, i8vec3);"
+            "bvec4 equal(i8vec4, i8vec4);"
+            "bvec2 equal(u8vec2, u8vec2);"
+            "bvec3 equal(u8vec3, u8vec3);"
+            "bvec4 equal(u8vec4, u8vec4);"
+
+            "bvec2 notEqual(i8vec2, i8vec2);"
+            "bvec3 notEqual(i8vec3, i8vec3);"
+            "bvec4 notEqual(i8vec4, i8vec4);"
+            "bvec2 notEqual(u8vec2, u8vec2);"
+            "bvec3 notEqual(u8vec3, u8vec3);"
+            "bvec4 notEqual(u8vec4, u8vec4);"
+
+            "  int8_t bitfieldExtract(  int8_t, int8_t, int8_t);"
+            "i8vec2 bitfieldExtract(i8vec2, int8_t, int8_t);"
+            "i8vec3 bitfieldExtract(i8vec3, int8_t, int8_t);"
+            "i8vec4 bitfieldExtract(i8vec4, int8_t, int8_t);"
+
+            " uint8_t bitfieldExtract( uint8_t, int8_t, int8_t);"
+            "u8vec2 bitfieldExtract(u8vec2, int8_t, int8_t);"
+            "u8vec3 bitfieldExtract(u8vec3, int8_t, int8_t);"
+            "u8vec4 bitfieldExtract(u8vec4, int8_t, int8_t);"
+
+            "  int8_t bitfieldInsert(  int8_t base,   int8_t, int8_t, int8_t);"
+            "i8vec2 bitfieldInsert(i8vec2 base, i8vec2, int8_t, int8_t);"
+            "i8vec3 bitfieldInsert(i8vec3 base, i8vec3, int8_t, int8_t);"
+            "i8vec4 bitfieldInsert(i8vec4 base, i8vec4, int8_t, int8_t);"
+
+            " uint8_t bitfieldInsert( uint8_t base,  uint8_t, int8_t, int8_t);"
+            "u8vec2 bitfieldInsert(u8vec2 base, u8vec2, int8_t, int8_t);"
+            "u8vec3 bitfieldInsert(u8vec3 base, u8vec3, int8_t, int8_t);"
+            "u8vec4 bitfieldInsert(u8vec4 base, u8vec4, int8_t, int8_t);"
+
+            "  int8_t bitCount(  int8_t);"
+            "i8vec2 bitCount(i8vec2);"
+            "i8vec3 bitCount(i8vec3);"
+            "i8vec4 bitCount(i8vec4);"
+
+            "  int8_t bitCount( uint8_t);"
+            "i8vec2 bitCount(u8vec2);"
+            "i8vec3 bitCount(u8vec3);"
+            "i8vec4 bitCount(u8vec4);"
+
+            "  int8_t findLSB(  int8_t);"
+            "i8vec2 findLSB(i8vec2);"
+            "i8vec3 findLSB(i8vec3);"
+            "i8vec4 findLSB(i8vec4);"
+
+            "  int8_t findLSB( uint8_t);"
+            "i8vec2 findLSB(u8vec2);"
+            "i8vec3 findLSB(u8vec3);"
+            "i8vec4 findLSB(u8vec4);"
+
+            "  int8_t findMSB(  int8_t);"
+            "i8vec2 findMSB(i8vec2);"
+            "i8vec3 findMSB(i8vec3);"
+            "i8vec4 findMSB(i8vec4);"
+
+            "  int8_t findMSB( uint8_t);"
+            "i8vec2 findMSB(u8vec2);"
+            "i8vec3 findMSB(u8vec3);"
+            "i8vec4 findMSB(u8vec4);"
+
             "int16_t abs(int16_t);"
             "i16vec2 abs(i16vec2);"
             "i16vec3 abs(i16vec3);"
@@ -2694,50 +3602,53 @@
             "i16vec3 sign(i16vec3);"
             "i16vec4 sign(i16vec4);"
 
-            "int16_t  min(int16_t,  int16_t);"
-            "i16vec2  min(i16vec2,  int16_t);"
-            "i16vec3  min(i16vec3,  int16_t);"
-            "i16vec4  min(i16vec4,  int16_t);"
-            "i16vec2  min(i16vec2,  i16vec2);"
-            "i16vec3  min(i16vec3,  i16vec3);"
-            "i16vec4  min(i16vec4,  i16vec4);"
-            "uint16_t min(uint16_t, uint16_t);"
-            "u16vec2  min(u16vec2,  uint16_t);"
-            "u16vec3  min(u16vec3,  uint16_t);"
-            "u16vec4  min(u16vec4,  uint16_t);"
-            "u16vec2  min(u16vec2,  u16vec2);"
-            "u16vec3  min(u16vec3,  u16vec3);"
-            "u16vec4  min(u16vec4,  u16vec4);"
+            "int16_t min(int16_t x, int16_t y);"
+            "i16vec2 min(i16vec2 x, int16_t y);"
+            "i16vec3 min(i16vec3 x, int16_t y);"
+            "i16vec4 min(i16vec4 x, int16_t y);"
+            "i16vec2 min(i16vec2 x, i16vec2 y);"
+            "i16vec3 min(i16vec3 x, i16vec3 y);"
+            "i16vec4 min(i16vec4 x, i16vec4 y);"
 
-            "int16_t  max(int16_t,  int16_t);"
-            "i16vec2  max(i16vec2,  int16_t);"
-            "i16vec3  max(i16vec3,  int16_t);"
-            "i16vec4  max(i16vec4,  int16_t);"
-            "i16vec2  max(i16vec2,  i16vec2);"
-            "i16vec3  max(i16vec3,  i16vec3);"
-            "i16vec4  max(i16vec4,  i16vec4);"
-            "uint16_t max(uint16_t, uint16_t);"
-            "u16vec2  max(u16vec2,  uint16_t);"
-            "u16vec3  max(u16vec3,  uint16_t);"
-            "u16vec4  max(u16vec4,  uint16_t);"
-            "u16vec2  max(u16vec2,  u16vec2);"
-            "u16vec3  max(u16vec3,  u16vec3);"
-            "u16vec4  max(u16vec4,  u16vec4);"
+            "uint16_t min(uint16_t x, uint16_t y);"
+            "u16vec2 min(u16vec2 x, uint16_t y);"
+            "u16vec3 min(u16vec3 x, uint16_t y);"
+            "u16vec4 min(u16vec4 x, uint16_t y);"
+            "u16vec2 min(u16vec2 x, u16vec2 y);"
+            "u16vec3 min(u16vec3 x, u16vec3 y);"
+            "u16vec4 min(u16vec4 x, u16vec4 y);"
 
-            "int16_t  clamp(int16_t,  int16_t,  int16_t);"
-            "i16vec2  clamp(i16vec2,  int16_t,  int16_t);"
-            "i16vec3  clamp(i16vec3,  int16_t,  int16_t);"
-            "i16vec4  clamp(i16vec4,  int16_t,  int16_t);"
-            "i16vec2  clamp(i16vec2,  i16vec2,  i16vec2);"
-            "i16vec3  clamp(i16vec3,  i16vec3,  i16vec3);"
-            "i16vec4  clamp(i16vec4,  i16vec4,  i16vec4);"
-            "uint16_t clamp(uint16_t, uint16_t, uint16_t);"
-            "u16vec2  clamp(u16vec2,  uint16_t, uint16_t);"
-            "u16vec3  clamp(u16vec3,  uint16_t, uint16_t);"
-            "u16vec4  clamp(u16vec4,  uint16_t, uint16_t);"
-            "u16vec2  clamp(u16vec2,  u16vec2,  u16vec2);"
-            "u16vec3  clamp(u16vec3,  u16vec3,  u16vec3);"
-            "u16vec4  clamp(u16vec4,  u16vec4,  u16vec4);"
+            "int16_t max(int16_t x, int16_t y);"
+            "i16vec2 max(i16vec2 x, int16_t y);"
+            "i16vec3 max(i16vec3 x, int16_t y);"
+            "i16vec4 max(i16vec4 x, int16_t y);"
+            "i16vec2 max(i16vec2 x, i16vec2 y);"
+            "i16vec3 max(i16vec3 x, i16vec3 y);"
+            "i16vec4 max(i16vec4 x, i16vec4 y);"
+
+            "uint16_t max(uint16_t x, uint16_t y);"
+            "u16vec2 max(u16vec2 x, uint16_t y);"
+            "u16vec3 max(u16vec3 x, uint16_t y);"
+            "u16vec4 max(u16vec4 x, uint16_t y);"
+            "u16vec2 max(u16vec2 x, u16vec2 y);"
+            "u16vec3 max(u16vec3 x, u16vec3 y);"
+            "u16vec4 max(u16vec4 x, u16vec4 y);"
+
+            "int16_t    clamp(int16_t x, int16_t minVal, int16_t maxVal);"
+            "i16vec2  clamp(i16vec2  x, int16_t minVal, int16_t maxVal);"
+            "i16vec3  clamp(i16vec3  x, int16_t minVal, int16_t maxVal);"
+            "i16vec4  clamp(i16vec4  x, int16_t minVal, int16_t maxVal);"
+            "i16vec2  clamp(i16vec2  x, i16vec2  minVal, i16vec2  maxVal);"
+            "i16vec3  clamp(i16vec3  x, i16vec3  minVal, i16vec3  maxVal);"
+            "i16vec4  clamp(i16vec4  x, i16vec4  minVal, i16vec4  maxVal);"
+
+            "uint16_t   clamp(uint16_t x, uint16_t minVal, uint16_t maxVal);"
+            "u16vec2  clamp(u16vec2  x, uint16_t minVal, uint16_t maxVal);"
+            "u16vec3  clamp(u16vec3  x, uint16_t minVal, uint16_t maxVal);"
+            "u16vec4  clamp(u16vec4  x, uint16_t minVal, uint16_t maxVal);"
+            "u16vec2  clamp(u16vec2  x, u16vec2  minVal, u16vec2  maxVal);"
+            "u16vec3  clamp(u16vec3  x, u16vec3  minVal, u16vec3  maxVal);"
+            "u16vec4  clamp(u16vec4  x, u16vec4  minVal, u16vec4  maxVal);"
 
             "int16_t  mix(int16_t,  int16_t,  bool);"
             "i16vec2  mix(i16vec2,  i16vec2,  bvec2);"
@@ -2758,6 +3669,16 @@
             "f16vec3   ldexp(f16vec3,   i16vec3);"
             "f16vec4   ldexp(f16vec4,   i16vec4);"
 
+            "int16_t halfBitsToInt16(float16_t);"
+            "i16vec2 halfBitsToInt16(f16vec2);"
+            "i16vec3 halhBitsToInt16(f16vec3);"
+            "i16vec4 halfBitsToInt16(f16vec4);"
+
+            "uint16_t halfBitsToUint16(float16_t);"
+            "u16vec2  halfBitsToUint16(f16vec2);"
+            "u16vec3  halfBitsToUint16(f16vec3);"
+            "u16vec4  halfBitsToUint16(f16vec4);"
+
             "int16_t float16BitsToInt16(float16_t);"
             "i16vec2 float16BitsToInt16(f16vec2);"
             "i16vec3 float16BitsToInt16(f16vec3);"
@@ -2778,6 +3699,16 @@
             "f16vec3   uint16BitsToFloat16(u16vec3);"
             "f16vec4   uint16BitsToFloat16(u16vec4);"
 
+            "float16_t int16BitsToHalf(int16_t);"
+            "f16vec2   int16BitsToHalf(i16vec2);"
+            "f16vec3   int16BitsToHalf(i16vec3);"
+            "f16vec4   int16BitsToHalf(i16vec4);"
+
+            "float16_t uint16BitsToHalf(uint16_t);"
+            "f16vec2   uint16BitsToHalf(u16vec2);"
+            "f16vec3   uint16BitsToHalf(u16vec3);"
+            "f16vec4   uint16BitsToHalf(u16vec4);"
+
             "int      packInt2x16(i16vec2);"
             "uint     packUint2x16(u16vec2);"
             "int64_t  packInt4x16(i16vec4);"
@@ -2829,33 +3760,245 @@
             "bvec3 notEqual(u16vec3, u16vec3);"
             "bvec4 notEqual(u16vec4, u16vec4);"
 
+            "  int16_t bitfieldExtract(  int16_t, int16_t, int16_t);"
+            "i16vec2 bitfieldExtract(i16vec2, int16_t, int16_t);"
+            "i16vec3 bitfieldExtract(i16vec3, int16_t, int16_t);"
+            "i16vec4 bitfieldExtract(i16vec4, int16_t, int16_t);"
+
+            " uint16_t bitfieldExtract( uint16_t, int16_t, int16_t);"
+            "u16vec2 bitfieldExtract(u16vec2, int16_t, int16_t);"
+            "u16vec3 bitfieldExtract(u16vec3, int16_t, int16_t);"
+            "u16vec4 bitfieldExtract(u16vec4, int16_t, int16_t);"
+
+            "  int16_t bitfieldInsert(  int16_t base,   int16_t, int16_t, int16_t);"
+            "i16vec2 bitfieldInsert(i16vec2 base, i16vec2, int16_t, int16_t);"
+            "i16vec3 bitfieldInsert(i16vec3 base, i16vec3, int16_t, int16_t);"
+            "i16vec4 bitfieldInsert(i16vec4 base, i16vec4, int16_t, int16_t);"
+
+            " uint16_t bitfieldInsert( uint16_t base,  uint16_t, int16_t, int16_t);"
+            "u16vec2 bitfieldInsert(u16vec2 base, u16vec2, int16_t, int16_t);"
+            "u16vec3 bitfieldInsert(u16vec3 base, u16vec3, int16_t, int16_t);"
+            "u16vec4 bitfieldInsert(u16vec4 base, u16vec4, int16_t, int16_t);"
+
+            "  int16_t bitCount(  int16_t);"
+            "i16vec2 bitCount(i16vec2);"
+            "i16vec3 bitCount(i16vec3);"
+            "i16vec4 bitCount(i16vec4);"
+
+            "  int16_t bitCount( uint16_t);"
+            "i16vec2 bitCount(u16vec2);"
+            "i16vec3 bitCount(u16vec3);"
+            "i16vec4 bitCount(u16vec4);"
+
+            "  int16_t findLSB(  int16_t);"
+            "i16vec2 findLSB(i16vec2);"
+            "i16vec3 findLSB(i16vec3);"
+            "i16vec4 findLSB(i16vec4);"
+
+            "  int16_t findLSB( uint16_t);"
+            "i16vec2 findLSB(u16vec2);"
+            "i16vec3 findLSB(u16vec3);"
+            "i16vec4 findLSB(u16vec4);"
+
+            "  int16_t findMSB(  int16_t);"
+            "i16vec2 findMSB(i16vec2);"
+            "i16vec3 findMSB(i16vec3);"
+            "i16vec4 findMSB(i16vec4);"
+
+            "  int16_t findMSB( uint16_t);"
+            "i16vec2 findMSB(u16vec2);"
+            "i16vec3 findMSB(u16vec3);"
+            "i16vec4 findMSB(u16vec4);"
+
+            "int16_t  pack16(i8vec2);"
+            "uint16_t pack16(u8vec2);"
+            "int32_t  pack32(i8vec4);"
+            "uint32_t pack32(u8vec4);"
+            "int32_t  pack32(i16vec2);"
+            "uint32_t pack32(u16vec2);"
+            "int64_t  pack64(i16vec4);"
+            "uint64_t pack64(u16vec4);"
+            "int64_t  pack64(i32vec2);"
+            "uint64_t pack64(u32vec2);"
+
+            "i8vec2   unpack8(int16_t);"
+            "u8vec2   unpack8(uint16_t);"
+            "i8vec4   unpack8(int32_t);"
+            "u8vec4   unpack8(uint32_t);"
+            "i16vec2  unpack16(int32_t);"
+            "u16vec2  unpack16(uint32_t);"
+            "i16vec4  unpack16(int64_t);"
+            "u16vec4  unpack16(uint64_t);"
+            "i32vec2  unpack32(int64_t);"
+            "u32vec2  unpack32(uint64_t);"
+
+            "float64_t radians(float64_t);"
+            "f64vec2   radians(f64vec2);"
+            "f64vec3   radians(f64vec3);"
+            "f64vec4   radians(f64vec4);"
+
+            "float64_t degrees(float64_t);"
+            "f64vec2   degrees(f64vec2);"
+            "f64vec3   degrees(f64vec3);"
+            "f64vec4   degrees(f64vec4);"
+
+            "float64_t sin(float64_t);"
+            "f64vec2   sin(f64vec2);"
+            "f64vec3   sin(f64vec3);"
+            "f64vec4   sin(f64vec4);"
+
+            "float64_t cos(float64_t);"
+            "f64vec2   cos(f64vec2);"
+            "f64vec3   cos(f64vec3);"
+            "f64vec4   cos(f64vec4);"
+
+            "float64_t tan(float64_t);"
+            "f64vec2   tan(f64vec2);"
+            "f64vec3   tan(f64vec3);"
+            "f64vec4   tan(f64vec4);"
+
+            "float64_t asin(float64_t);"
+            "f64vec2   asin(f64vec2);"
+            "f64vec3   asin(f64vec3);"
+            "f64vec4   asin(f64vec4);"
+
+            "float64_t acos(float64_t);"
+            "f64vec2   acos(f64vec2);"
+            "f64vec3   acos(f64vec3);"
+            "f64vec4   acos(f64vec4);"
+
+            "float64_t atan(float64_t, float64_t);"
+            "f64vec2   atan(f64vec2,   f64vec2);"
+            "f64vec3   atan(f64vec3,   f64vec3);"
+            "f64vec4   atan(f64vec4,   f64vec4);"
+
+            "float64_t atan(float64_t);"
+            "f64vec2   atan(f64vec2);"
+            "f64vec3   atan(f64vec3);"
+            "f64vec4   atan(f64vec4);"
+
+            "float64_t sinh(float64_t);"
+            "f64vec2   sinh(f64vec2);"
+            "f64vec3   sinh(f64vec3);"
+            "f64vec4   sinh(f64vec4);"
+
+            "float64_t cosh(float64_t);"
+            "f64vec2   cosh(f64vec2);"
+            "f64vec3   cosh(f64vec3);"
+            "f64vec4   cosh(f64vec4);"
+
+            "float64_t tanh(float64_t);"
+            "f64vec2   tanh(f64vec2);"
+            "f64vec3   tanh(f64vec3);"
+            "f64vec4   tanh(f64vec4);"
+
+            "float64_t asinh(float64_t);"
+            "f64vec2   asinh(f64vec2);"
+            "f64vec3   asinh(f64vec3);"
+            "f64vec4   asinh(f64vec4);"
+
+            "float64_t acosh(float64_t);"
+            "f64vec2   acosh(f64vec2);"
+            "f64vec3   acosh(f64vec3);"
+            "f64vec4   acosh(f64vec4);"
+
+            "float64_t atanh(float64_t);"
+            "f64vec2   atanh(f64vec2);"
+            "f64vec3   atanh(f64vec3);"
+            "f64vec4   atanh(f64vec4);"
+
+            "float64_t pow(float64_t, float64_t);"
+            "f64vec2   pow(f64vec2,   f64vec2);"
+            "f64vec3   pow(f64vec3,   f64vec3);"
+            "f64vec4   pow(f64vec4,   f64vec4);"
+
+            "float64_t exp(float64_t);"
+            "f64vec2   exp(f64vec2);"
+            "f64vec3   exp(f64vec3);"
+            "f64vec4   exp(f64vec4);"
+
+            "float64_t log(float64_t);"
+            "f64vec2   log(f64vec2);"
+            "f64vec3   log(f64vec3);"
+            "f64vec4   log(f64vec4);"
+
+            "float64_t exp2(float64_t);"
+            "f64vec2   exp2(f64vec2);"
+            "f64vec3   exp2(f64vec3);"
+            "f64vec4   exp2(f64vec4);"
+
+            "float64_t log2(float64_t);"
+            "f64vec2   log2(f64vec2);"
+            "f64vec3   log2(f64vec3);"
+            "f64vec4   log2(f64vec4);"
             "\n");
+        }
+        if (profile != EEsProfile && version >= 450) {
+            stageBuiltins[EShLangFragment].append(
+                "float64_t dFdx(float64_t);"
+                "f64vec2   dFdx(f64vec2);"
+                "f64vec3   dFdx(f64vec3);"
+                "f64vec4   dFdx(f64vec4);"
+
+                "float64_t dFdy(float64_t);"
+                "f64vec2   dFdy(f64vec2);"
+                "f64vec3   dFdy(f64vec3);"
+                "f64vec4   dFdy(f64vec4);"
+
+                "float64_t dFdxFine(float64_t);"
+                "f64vec2   dFdxFine(f64vec2);"
+                "f64vec3   dFdxFine(f64vec3);"
+                "f64vec4   dFdxFine(f64vec4);"
+
+                "float64_t dFdyFine(float64_t);"
+                "f64vec2   dFdyFine(f64vec2);"
+                "f64vec3   dFdyFine(f64vec3);"
+                "f64vec4   dFdyFine(f64vec4);"
+
+                "float64_t dFdxCoarse(float64_t);"
+                "f64vec2   dFdxCoarse(f64vec2);"
+                "f64vec3   dFdxCoarse(f64vec3);"
+                "f64vec4   dFdxCoarse(f64vec4);"
+
+                "float64_t dFdyCoarse(float64_t);"
+                "f64vec2   dFdyCoarse(f64vec2);"
+                "f64vec3   dFdyCoarse(f64vec3);"
+                "f64vec4   dFdyCoarse(f64vec4);"
+
+                "float64_t fwidth(float64_t);"
+                "f64vec2   fwidth(f64vec2);"
+                "f64vec3   fwidth(f64vec3);"
+                "f64vec4   fwidth(f64vec4);"
+
+                "float64_t fwidthFine(float64_t);"
+                "f64vec2   fwidthFine(f64vec2);"
+                "f64vec3   fwidthFine(f64vec3);"
+                "f64vec4   fwidthFine(f64vec4);"
+
+                "float64_t fwidthCoarse(float64_t);"
+                "f64vec2   fwidthCoarse(f64vec2);"
+                "f64vec3   fwidthCoarse(f64vec3);"
+                "f64vec4   fwidthCoarse(f64vec4);"
+
+                "float64_t interpolateAtCentroid(float64_t);"
+                "f64vec2   interpolateAtCentroid(f64vec2);"
+                "f64vec3   interpolateAtCentroid(f64vec3);"
+                "f64vec4   interpolateAtCentroid(f64vec4);"
+
+                "float64_t interpolateAtSample(float64_t, int);"
+                "f64vec2   interpolateAtSample(f64vec2,   int);"
+                "f64vec3   interpolateAtSample(f64vec3,   int);"
+                "f64vec4   interpolateAtSample(f64vec4,   int);"
+
+                "float64_t interpolateAtOffset(float64_t, f64vec2);"
+                "f64vec2   interpolateAtOffset(f64vec2,   f64vec2);"
+                "f64vec3   interpolateAtOffset(f64vec3,   f64vec2);"
+                "f64vec4   interpolateAtOffset(f64vec4,   f64vec2);"
+
+                "\n");
+
     }
 
-    // GL_AMD_shader_fragment_mask
-    if (profile != EEsProfile && version >= 450) {
-        commonBuiltins.append(
-            "uint fragmentMaskFetchAMD(sampler2DMS,       ivec2);"
-            "uint fragmentMaskFetchAMD(isampler2DMS,      ivec2);"
-            "uint fragmentMaskFetchAMD(usampler2DMS,      ivec2);"
-
-            "uint fragmentMaskFetchAMD(sampler2DMSArray,  ivec3);"
-            "uint fragmentMaskFetchAMD(isampler2DMSArray, ivec3);"
-            "uint fragmentMaskFetchAMD(usampler2DMSArray, ivec3);"
-
-            "vec4  fragmentFetchAMD(sampler2DMS,       ivec2, uint);"
-            "ivec4 fragmentFetchAMD(isampler2DMS,      ivec2, uint);"
-            "uvec4 fragmentFetchAMD(usampler2DMS,      ivec2, uint);"
-
-            "vec4  fragmentFetchAMD(sampler2DMSArray,  ivec3, uint);"
-            "ivec4 fragmentFetchAMD(isampler2DMSArray, ivec3, uint);"
-            "uvec4 fragmentFetchAMD(usampler2DMSArray, ivec3, uint);"
-
-            "\n");
-    }
-
-#endif
-
     //============================================================================
     //
     // Prototypes for built-in functions seen by vertex shaders only.
@@ -4021,17 +5164,30 @@
 
     // GL_ARB_shader_ballot
     if (profile != EEsProfile && version >= 450) {
-        commonBuiltins.append(
+        const char* ballotDecls = 
             "uniform uint gl_SubGroupSizeARB;"
-
             "in uint     gl_SubGroupInvocationARB;"
             "in uint64_t gl_SubGroupEqMaskARB;"
             "in uint64_t gl_SubGroupGeMaskARB;"
             "in uint64_t gl_SubGroupGtMaskARB;"
             "in uint64_t gl_SubGroupLeMaskARB;"
             "in uint64_t gl_SubGroupLtMaskARB;"
-
-            "\n");
+            "\n";
+        const char* fragmentBallotDecls = 
+            "uniform uint gl_SubGroupSizeARB;"
+            "flat in uint     gl_SubGroupInvocationARB;"
+            "flat in uint64_t gl_SubGroupEqMaskARB;"
+            "flat in uint64_t gl_SubGroupGeMaskARB;"
+            "flat in uint64_t gl_SubGroupGtMaskARB;"
+            "flat in uint64_t gl_SubGroupLeMaskARB;"
+            "flat in uint64_t gl_SubGroupLtMaskARB;"
+            "\n";
+        stageBuiltins[EShLangVertex]        .append(ballotDecls);
+        stageBuiltins[EShLangTessControl]   .append(ballotDecls);
+        stageBuiltins[EShLangTessEvaluation].append(ballotDecls);
+        stageBuiltins[EShLangGeometry]      .append(ballotDecls);
+        stageBuiltins[EShLangCompute]       .append(ballotDecls);
+        stageBuiltins[EShLangFragment]      .append(fragmentBallotDecls);
     }
 
     if ((profile != EEsProfile && version >= 140) ||
@@ -4042,6 +5198,39 @@
             "\n");
     }
 
+    // GL_KHR_shader_subgroup
+    if (spvVersion.vulkan > 0) {
+        const char* ballotDecls = 
+            "in mediump uint  gl_SubgroupSize;"
+            "in mediump uint  gl_SubgroupInvocationID;"
+            "in highp   uvec4 gl_SubgroupEqMask;"
+            "in highp   uvec4 gl_SubgroupGeMask;"
+            "in highp   uvec4 gl_SubgroupGtMask;"
+            "in highp   uvec4 gl_SubgroupLeMask;"
+            "in highp   uvec4 gl_SubgroupLtMask;"
+            "\n";
+        const char* fragmentBallotDecls = 
+            "flat in mediump uint  gl_SubgroupSize;"
+            "flat in mediump uint  gl_SubgroupInvocationID;"
+            "flat in highp   uvec4 gl_SubgroupEqMask;"
+            "flat in highp   uvec4 gl_SubgroupGeMask;"
+            "flat in highp   uvec4 gl_SubgroupGtMask;"
+            "flat in highp   uvec4 gl_SubgroupLeMask;"
+            "flat in highp   uvec4 gl_SubgroupLtMask;"
+            "\n";
+        stageBuiltins[EShLangVertex]        .append(ballotDecls);
+        stageBuiltins[EShLangTessControl]   .append(ballotDecls);
+        stageBuiltins[EShLangTessEvaluation].append(ballotDecls);
+        stageBuiltins[EShLangGeometry]      .append(ballotDecls);
+        stageBuiltins[EShLangCompute]       .append(ballotDecls);
+        stageBuiltins[EShLangFragment]      .append(fragmentBallotDecls);
+
+        stageBuiltins[EShLangCompute].append(
+            "highp   in uint  gl_NumSubgroups;"
+            "highp   in uint  gl_SubgroupID;"
+            "\n");
+    }
+
     if (version >= 300 /* both ES and non-ES */) {
         stageBuiltins[EShLangFragment].append(
             "flat in highp uint gl_ViewID_OVR;"     // GL_OVR_multiview, GL_OVR_multiview2
@@ -5572,6 +6761,8 @@
             if (spvVersion.vulkan > 0)
                 // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
                 SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
+            else
+                BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
 
             if (version >= 430) {
                 symbolTable.setFunctionExtensions("anyInvocationARB",       1, &E_GL_ARB_shader_group_vote);
@@ -5810,6 +7001,25 @@
             symbolTable.setVariableExtensions("gl_ViewIndex", 1, &E_GL_EXT_multiview);
             BuiltInVariable("gl_ViewIndex", EbvViewIndex, symbolTable);
         }
+        
+        // GL_KHR_shader_subgroup
+        if (spvVersion.vulkan > 0) {
+            symbolTable.setVariableExtensions("gl_SubgroupSize",         1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setVariableExtensions("gl_SubgroupInvocationID", 1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setVariableExtensions("gl_SubgroupEqMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupGeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupGtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupLeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupLtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+
+            BuiltInVariable("gl_SubgroupSize",         EbvSubgroupSize2,       symbolTable);
+            BuiltInVariable("gl_SubgroupInvocationID", EbvSubgroupInvocation2, symbolTable);
+            BuiltInVariable("gl_SubgroupEqMask",       EbvSubgroupEqMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupGeMask",       EbvSubgroupGeMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupGtMask",       EbvSubgroupGtMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupLeMask",       EbvSubgroupLeMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupLtMask",       EbvSubgroupLtMask2,     symbolTable);
+        }
 
         break;
 
@@ -6055,6 +7265,104 @@
             BuiltInVariable("gl_ViewID_OVR", EbvViewIndex, symbolTable);
         }
 
+        // GL_ARB_shader_ballot
+        if (profile != EEsProfile) {
+            symbolTable.setVariableExtensions("gl_SubGroupSizeARB",       1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupInvocationARB", 1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupEqMaskARB",     1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupGeMaskARB",     1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupGtMaskARB",     1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupLeMaskARB",     1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupLtMaskARB",     1, &E_GL_ARB_shader_ballot);
+
+            BuiltInVariable("gl_SubGroupInvocationARB", EbvSubGroupInvocation, symbolTable);
+            BuiltInVariable("gl_SubGroupEqMaskARB",     EbvSubGroupEqMask,     symbolTable);
+            BuiltInVariable("gl_SubGroupGeMaskARB",     EbvSubGroupGeMask,     symbolTable);
+            BuiltInVariable("gl_SubGroupGtMaskARB",     EbvSubGroupGtMask,     symbolTable);
+            BuiltInVariable("gl_SubGroupLeMaskARB",     EbvSubGroupLeMask,     symbolTable);
+            BuiltInVariable("gl_SubGroupLtMaskARB",     EbvSubGroupLtMask,     symbolTable);
+
+            if (spvVersion.vulkan > 0)
+                // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
+                SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
+            else
+                BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
+        }
+
+        // GL_KHR_shader_subgroup
+        if (spvVersion.vulkan > 0) {
+            symbolTable.setVariableExtensions("gl_SubgroupSize",         1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setVariableExtensions("gl_SubgroupInvocationID", 1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setVariableExtensions("gl_SubgroupEqMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupGeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupGtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupLeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupLtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+
+            BuiltInVariable("gl_SubgroupSize",         EbvSubgroupSize2,       symbolTable);
+            BuiltInVariable("gl_SubgroupInvocationID", EbvSubgroupInvocation2, symbolTable);
+            BuiltInVariable("gl_SubgroupEqMask",       EbvSubgroupEqMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupGeMask",       EbvSubgroupGeMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupGtMask",       EbvSubgroupGtMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupLeMask",       EbvSubgroupLeMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupLtMask",       EbvSubgroupLtMask2,     symbolTable);
+
+            symbolTable.setFunctionExtensions("subgroupBarrier",                 1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setFunctionExtensions("subgroupMemoryBarrier",           1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setFunctionExtensions("subgroupMemoryBarrierBuffer",     1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setFunctionExtensions("subgroupMemoryBarrierImage",      1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setFunctionExtensions("subgroupElect",                   1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setFunctionExtensions("subgroupAll",                     1, &E_GL_KHR_shader_subgroup_vote);
+            symbolTable.setFunctionExtensions("subgroupAny",                     1, &E_GL_KHR_shader_subgroup_vote);
+            symbolTable.setFunctionExtensions("subgroupAllEqual",                1, &E_GL_KHR_shader_subgroup_vote);
+            symbolTable.setFunctionExtensions("subgroupBroadcast",               1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setFunctionExtensions("subgroupBroadcastFirst",          1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setFunctionExtensions("subgroupBallot",                  1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setFunctionExtensions("subgroupInverseBallot",           1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setFunctionExtensions("subgroupBallotBitExtract",        1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setFunctionExtensions("subgroupBallotBitCount",          1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setFunctionExtensions("subgroupBallotInclusiveBitCount", 1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setFunctionExtensions("subgroupBallotExclusiveBitCount", 1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setFunctionExtensions("subgroupBallotFindLSB",           1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setFunctionExtensions("subgroupBallotFindMSB",           1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setFunctionExtensions("subgroupShuffle",                 1, &E_GL_KHR_shader_subgroup_shuffle);
+            symbolTable.setFunctionExtensions("subgroupShuffleXor",              1, &E_GL_KHR_shader_subgroup_shuffle);
+            symbolTable.setFunctionExtensions("subgroupShuffleUp",               1, &E_GL_KHR_shader_subgroup_shuffle_relative);
+            symbolTable.setFunctionExtensions("subgroupShuffleDown",             1, &E_GL_KHR_shader_subgroup_shuffle_relative);
+            symbolTable.setFunctionExtensions("subgroupAdd",                     1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupMul",                     1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupMin",                     1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupMax",                     1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupAnd",                     1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupOr",                      1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupXor",                     1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupInclusiveAdd",            1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupInclusiveMul",            1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupInclusiveMin",            1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupInclusiveMax",            1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupInclusiveAnd",            1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupInclusiveOr",             1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupInclusiveXor",            1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupExclusiveAdd",            1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupExclusiveMul",            1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupExclusiveMin",            1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupExclusiveMax",            1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupExclusiveAnd",            1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupExclusiveOr",             1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupExclusiveXor",            1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupClusteredAdd",            1, &E_GL_KHR_shader_subgroup_clustered);
+            symbolTable.setFunctionExtensions("subgroupClusteredMul",            1, &E_GL_KHR_shader_subgroup_clustered);
+            symbolTable.setFunctionExtensions("subgroupClusteredMin",            1, &E_GL_KHR_shader_subgroup_clustered);
+            symbolTable.setFunctionExtensions("subgroupClusteredMax",            1, &E_GL_KHR_shader_subgroup_clustered);
+            symbolTable.setFunctionExtensions("subgroupClusteredAnd",            1, &E_GL_KHR_shader_subgroup_clustered);
+            symbolTable.setFunctionExtensions("subgroupClusteredOr",             1, &E_GL_KHR_shader_subgroup_clustered);
+            symbolTable.setFunctionExtensions("subgroupClusteredXor",            1, &E_GL_KHR_shader_subgroup_clustered);
+            symbolTable.setFunctionExtensions("subgroupQuadBroadcast",           1, &E_GL_KHR_shader_subgroup_quad);
+            symbolTable.setFunctionExtensions("subgroupQuadSwapHorizontal",      1, &E_GL_KHR_shader_subgroup_quad);
+            symbolTable.setFunctionExtensions("subgroupQuadSwapVertical",        1, &E_GL_KHR_shader_subgroup_quad);
+            symbolTable.setFunctionExtensions("subgroupQuadSwapDiagonal",        1, &E_GL_KHR_shader_subgroup_quad);
+        }
+
         if (profile == EEsProfile) {
             symbolTable.setFunctionExtensions("shadow2DEXT",        1, &E_GL_EXT_shadow_samplers);
             symbolTable.setFunctionExtensions("shadow2DProjEXT",    1, &E_GL_EXT_shadow_samplers);
@@ -6093,6 +7401,49 @@
             symbolTable.setFunctionExtensions("groupMemoryBarrier",         1, &E_GL_ARB_compute_shader);
         }
 
+        // GL_ARB_shader_ballot
+        if (profile != EEsProfile) {
+            symbolTable.setVariableExtensions("gl_SubGroupSizeARB",       1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupInvocationARB", 1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupEqMaskARB",     1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupGeMaskARB",     1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupGtMaskARB",     1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupLeMaskARB",     1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupLtMaskARB",     1, &E_GL_ARB_shader_ballot);
+
+            BuiltInVariable("gl_SubGroupInvocationARB", EbvSubGroupInvocation, symbolTable);
+            BuiltInVariable("gl_SubGroupEqMaskARB",     EbvSubGroupEqMask,     symbolTable);
+            BuiltInVariable("gl_SubGroupGeMaskARB",     EbvSubGroupGeMask,     symbolTable);
+            BuiltInVariable("gl_SubGroupGtMaskARB",     EbvSubGroupGtMask,     symbolTable);
+            BuiltInVariable("gl_SubGroupLeMaskARB",     EbvSubGroupLeMask,     symbolTable);
+            BuiltInVariable("gl_SubGroupLtMaskARB",     EbvSubGroupLtMask,     symbolTable);
+
+            if (spvVersion.vulkan > 0)
+                // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
+                SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
+            else
+                BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
+        }
+
+        // GL_ARB_shader_ballot
+        if (spvVersion.vulkan > 0) {
+            symbolTable.setVariableExtensions("gl_SubgroupSize",         1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setVariableExtensions("gl_SubgroupInvocationID", 1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setVariableExtensions("gl_SubgroupEqMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupGeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupGtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupLeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupLtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+
+            BuiltInVariable("gl_SubgroupSize",         EbvSubgroupSize2,       symbolTable);
+            BuiltInVariable("gl_SubgroupInvocationID", EbvSubgroupInvocation2, symbolTable);
+            BuiltInVariable("gl_SubgroupEqMask",       EbvSubgroupEqMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupGeMask",       EbvSubgroupGeMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupGtMask",       EbvSubgroupGtMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupLeMask",       EbvSubgroupLeMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupLtMask",       EbvSubgroupLtMask2,     symbolTable);
+        }
+
         if ((profile != EEsProfile && version >= 140) ||
             (profile == EEsProfile && version >= 310)) {
             symbolTable.setVariableExtensions("gl_DeviceIndex",  1, &E_GL_EXT_device_group);
@@ -6101,6 +7452,16 @@
             BuiltInVariable("gl_ViewIndex", EbvViewIndex, symbolTable);
         }
 
+        // GL_KHR_shader_subgroup
+        if (spvVersion.vulkan > 0) {
+            symbolTable.setVariableExtensions("gl_NumSubgroups", 1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setVariableExtensions("gl_SubgroupID",   1, &E_GL_KHR_shader_subgroup_basic);
+
+            BuiltInVariable("gl_NumSubgroups", EbvNumSubgroups, symbolTable);
+            BuiltInVariable("gl_SubgroupID",   EbvSubgroupID,   symbolTable);
+
+            symbolTable.setFunctionExtensions("subgroupMemoryBarrierShared", 1, &E_GL_KHR_shader_subgroup_basic);
+        }
         break;
 
     default:
@@ -6186,12 +7547,15 @@
     symbolTable.relateToOperator("doubleBitsToUint64", EOpDoubleBitsToUint64);
     symbolTable.relateToOperator("int64BitsToDouble",  EOpInt64BitsToDouble);
     symbolTable.relateToOperator("uint64BitsToDouble", EOpUint64BitsToDouble);
-#ifdef AMD_EXTENSIONS
+    symbolTable.relateToOperator("halfBitsToInt16",  EOpFloat16BitsToInt16);
+    symbolTable.relateToOperator("halfBitsToUint16", EOpFloat16BitsToUint16);
     symbolTable.relateToOperator("float16BitsToInt16",  EOpFloat16BitsToInt16);
     symbolTable.relateToOperator("float16BitsToUint16", EOpFloat16BitsToUint16);
     symbolTable.relateToOperator("int16BitsToFloat16",  EOpInt16BitsToFloat16);
     symbolTable.relateToOperator("uint16BitsToFloat16", EOpUint16BitsToFloat16);
-#endif
+
+    symbolTable.relateToOperator("int16BitsToHalf",  EOpInt16BitsToFloat16);
+    symbolTable.relateToOperator("uint16BitsToHalf", EOpUint16BitsToFloat16);
 
     symbolTable.relateToOperator("packSnorm2x16",   EOpPackSnorm2x16);
     symbolTable.relateToOperator("unpackSnorm2x16", EOpUnpackSnorm2x16);
@@ -6214,7 +7578,6 @@
     symbolTable.relateToOperator("packUint2x32",    EOpPackUint2x32);
     symbolTable.relateToOperator("unpackUint2x32",  EOpUnpackUint2x32);
 
-#ifdef AMD_EXTENSIONS
     symbolTable.relateToOperator("packInt2x16",     EOpPackInt2x16);
     symbolTable.relateToOperator("unpackInt2x16",   EOpUnpackInt2x16);
     symbolTable.relateToOperator("packUint2x16",    EOpPackUint2x16);
@@ -6224,10 +7587,16 @@
     symbolTable.relateToOperator("unpackInt4x16",   EOpUnpackInt4x16);
     symbolTable.relateToOperator("packUint4x16",    EOpPackUint4x16);
     symbolTable.relateToOperator("unpackUint4x16",  EOpUnpackUint4x16);
-
     symbolTable.relateToOperator("packFloat2x16",   EOpPackFloat2x16);
     symbolTable.relateToOperator("unpackFloat2x16", EOpUnpackFloat2x16);
-#endif
+
+    symbolTable.relateToOperator("pack16",          EOpPack16);
+    symbolTable.relateToOperator("pack32",          EOpPack32);
+    symbolTable.relateToOperator("pack64",          EOpPack64);
+
+    symbolTable.relateToOperator("unpack32",        EOpUnpack32);
+    symbolTable.relateToOperator("unpack16",        EOpUnpack16);
+    symbolTable.relateToOperator("unpack8",         EOpUnpack8);
 
     symbolTable.relateToOperator("length",       EOpLength);
     symbolTable.relateToOperator("distance",     EOpDistance);
@@ -6471,6 +7840,65 @@
             symbolTable.relateToOperator("fragmentFetchAMD",                    EOpFragmentFetch);
 #endif
         }
+
+        // GL_KHR_shader_subgroup
+        if (spvVersion.vulkan > 0) {
+            symbolTable.relateToOperator("subgroupBarrier",                 EOpSubgroupBarrier);
+            symbolTable.relateToOperator("subgroupMemoryBarrier",           EOpSubgroupMemoryBarrier);
+            symbolTable.relateToOperator("subgroupMemoryBarrierBuffer",     EOpSubgroupMemoryBarrierBuffer);
+            symbolTable.relateToOperator("subgroupMemoryBarrierImage",      EOpSubgroupMemoryBarrierImage);
+            symbolTable.relateToOperator("subgroupElect",                   EOpSubgroupElect);
+            symbolTable.relateToOperator("subgroupAll",                     EOpSubgroupAll);
+            symbolTable.relateToOperator("subgroupAny",                     EOpSubgroupAny);
+            symbolTable.relateToOperator("subgroupAllEqual",                EOpSubgroupAllEqual);
+            symbolTable.relateToOperator("subgroupBroadcast",               EOpSubgroupBroadcast);
+            symbolTable.relateToOperator("subgroupBroadcastFirst",          EOpSubgroupBroadcastFirst);
+            symbolTable.relateToOperator("subgroupBallot",                  EOpSubgroupBallot);
+            symbolTable.relateToOperator("subgroupInverseBallot",           EOpSubgroupInverseBallot);
+            symbolTable.relateToOperator("subgroupBallotBitExtract",        EOpSubgroupBallotBitExtract);
+            symbolTable.relateToOperator("subgroupBallotBitCount",          EOpSubgroupBallotBitCount);
+            symbolTable.relateToOperator("subgroupBallotInclusiveBitCount", EOpSubgroupBallotInclusiveBitCount);
+            symbolTable.relateToOperator("subgroupBallotExclusiveBitCount", EOpSubgroupBallotExclusiveBitCount);
+            symbolTable.relateToOperator("subgroupBallotFindLSB",           EOpSubgroupBallotFindLSB);
+            symbolTable.relateToOperator("subgroupBallotFindMSB",           EOpSubgroupBallotFindMSB);
+            symbolTable.relateToOperator("subgroupShuffle",                 EOpSubgroupShuffle);
+            symbolTable.relateToOperator("subgroupShuffleXor",              EOpSubgroupShuffleXor);
+            symbolTable.relateToOperator("subgroupShuffleUp",               EOpSubgroupShuffleUp);
+            symbolTable.relateToOperator("subgroupShuffleDown",             EOpSubgroupShuffleDown);
+            symbolTable.relateToOperator("subgroupAdd",                     EOpSubgroupAdd);
+            symbolTable.relateToOperator("subgroupMul",                     EOpSubgroupMul);
+            symbolTable.relateToOperator("subgroupMin",                     EOpSubgroupMin);
+            symbolTable.relateToOperator("subgroupMax",                     EOpSubgroupMax);
+            symbolTable.relateToOperator("subgroupAnd",                     EOpSubgroupAnd);
+            symbolTable.relateToOperator("subgroupOr",                      EOpSubgroupOr);
+            symbolTable.relateToOperator("subgroupXor",                     EOpSubgroupXor);
+            symbolTable.relateToOperator("subgroupInclusiveAdd",            EOpSubgroupInclusiveAdd);
+            symbolTable.relateToOperator("subgroupInclusiveMul",            EOpSubgroupInclusiveMul);
+            symbolTable.relateToOperator("subgroupInclusiveMin",            EOpSubgroupInclusiveMin);
+            symbolTable.relateToOperator("subgroupInclusiveMax",            EOpSubgroupInclusiveMax);
+            symbolTable.relateToOperator("subgroupInclusiveAnd",            EOpSubgroupInclusiveAnd);
+            symbolTable.relateToOperator("subgroupInclusiveOr",             EOpSubgroupInclusiveOr);
+            symbolTable.relateToOperator("subgroupInclusiveXor",            EOpSubgroupInclusiveXor);
+            symbolTable.relateToOperator("subgroupExclusiveAdd",            EOpSubgroupExclusiveAdd);
+            symbolTable.relateToOperator("subgroupExclusiveMul",            EOpSubgroupExclusiveMul);
+            symbolTable.relateToOperator("subgroupExclusiveMin",            EOpSubgroupExclusiveMin);
+            symbolTable.relateToOperator("subgroupExclusiveMax",            EOpSubgroupExclusiveMax);
+            symbolTable.relateToOperator("subgroupExclusiveAnd",            EOpSubgroupExclusiveAnd);
+            symbolTable.relateToOperator("subgroupExclusiveOr",             EOpSubgroupExclusiveOr);
+            symbolTable.relateToOperator("subgroupExclusiveXor",            EOpSubgroupExclusiveXor);
+            symbolTable.relateToOperator("subgroupClusteredAdd",            EOpSubgroupClusteredAdd);
+            symbolTable.relateToOperator("subgroupClusteredMul",            EOpSubgroupClusteredMul);
+            symbolTable.relateToOperator("subgroupClusteredMin",            EOpSubgroupClusteredMin);
+            symbolTable.relateToOperator("subgroupClusteredMax",            EOpSubgroupClusteredMax);
+            symbolTable.relateToOperator("subgroupClusteredAnd",            EOpSubgroupClusteredAnd);
+            symbolTable.relateToOperator("subgroupClusteredOr",             EOpSubgroupClusteredOr);
+            symbolTable.relateToOperator("subgroupClusteredXor",            EOpSubgroupClusteredXor);
+            symbolTable.relateToOperator("subgroupQuadBroadcast",           EOpSubgroupQuadBroadcast);
+            symbolTable.relateToOperator("subgroupQuadSwapHorizontal",      EOpSubgroupQuadSwapHorizontal);
+            symbolTable.relateToOperator("subgroupQuadSwapVertical",        EOpSubgroupQuadSwapVertical);
+            symbolTable.relateToOperator("subgroupQuadSwapDiagonal",        EOpSubgroupQuadSwapDiagonal);
+        }
+
         if (profile == EEsProfile) {
             symbolTable.relateToOperator("shadow2DEXT",              EOpTexture);
             symbolTable.relateToOperator("shadow2DProjEXT",          EOpTextureProj);
@@ -6515,8 +7943,9 @@
         break;
 
     case EShLangCompute:
-        symbolTable.relateToOperator("memoryBarrierShared",     EOpMemoryBarrierShared);
-        symbolTable.relateToOperator("groupMemoryBarrier",      EOpGroupMemoryBarrier);
+        symbolTable.relateToOperator("memoryBarrierShared",         EOpMemoryBarrierShared);
+        symbolTable.relateToOperator("groupMemoryBarrier",          EOpGroupMemoryBarrier);
+        symbolTable.relateToOperator("subgroupMemoryBarrierShared", EOpSubgroupMemoryBarrierShared);
         break;
 
     default:
diff --git a/glslang/MachineIndependent/Initialize.h b/glslang/MachineIndependent/Initialize.h
index 6b54c4d..b5de324 100644
--- a/glslang/MachineIndependent/Initialize.h
+++ b/glslang/MachineIndependent/Initialize.h
@@ -67,7 +67,6 @@
     virtual const TString& getStageString(EShLanguage language) const { return stageBuiltins[language]; }
 
     virtual void identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable) = 0;
-
     virtual void identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources) = 0;
 
 protected:
@@ -89,7 +88,6 @@
     void initialize(const TBuiltInResource& resources, int version, EProfile, const SpvVersion& spvVersion, EShLanguage);
 
     void identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable);
-
     void identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources);
 
 protected:
diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp
index a867399..cd5060e 100644
--- a/glslang/MachineIndependent/Intermediate.cpp
+++ b/glslang/MachineIndependent/Intermediate.cpp
@@ -2,6 +2,7 @@
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2015 LunarG, Inc.
 // Copyright (C) 2015-2016 Google, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -118,16 +119,12 @@
         return nullptr;
 
     // Try converting the children's base types to compatible types.
-    TIntermTyped* child = addConversion(op, left->getType(), right);
-    if (child)
-        right = child;
-    else {
-        child = addConversion(op, right->getType(), left);
-        if (child)
-            left = child;
-        else
-            return nullptr;
-    }
+    auto children = addConversion(op, left, right);
+    left = std::get<0>(children);
+    right = std::get<1>(children);
+
+    if (left == nullptr || right == nullptr)
+        return nullptr;
 
     // Convert the children's type shape to be compatible.
     addBiShapeConversion(op, left, right);
@@ -304,20 +301,18 @@
     //
     TBasicType newType = EbtVoid;
     switch (op) {
+    case EOpConstructInt8:   newType = EbtInt8;   break;
+    case EOpConstructUint8:  newType = EbtUint8;  break;
+    case EOpConstructInt16:  newType = EbtInt16;    break;
+    case EOpConstructUint16: newType = EbtUint16;   break;
     case EOpConstructInt:    newType = EbtInt;    break;
     case EOpConstructUint:   newType = EbtUint;   break;
     case EOpConstructInt64:  newType = EbtInt64;  break;
     case EOpConstructUint64: newType = EbtUint64; break;
-#ifdef AMD_EXTENSIONS
-    case EOpConstructInt16:  newType = EbtInt16;  break;
-    case EOpConstructUint16: newType = EbtUint16; break;
-#endif
     case EOpConstructBool:   newType = EbtBool;   break;
     case EOpConstructFloat:  newType = EbtFloat;  break;
     case EOpConstructDouble: newType = EbtDouble; break;
-#ifdef AMD_EXTENSIONS
     case EOpConstructFloat16: newType = EbtFloat16; break;
-#endif
     default: break; // some compilers want this
     }
 
@@ -336,20 +331,18 @@
     // TODO: but, did this bypass constant folding?
     //
     switch (op) {
+    case EOpConstructInt8:
+    case EOpConstructUint8:
+    case EOpConstructInt16:
+    case EOpConstructUint16:
     case EOpConstructInt:
     case EOpConstructUint:
     case EOpConstructInt64:
     case EOpConstructUint64:
-#ifdef AMD_EXTENSIONS
-    case EOpConstructInt16:
-    case EOpConstructUint16:
-#endif
     case EOpConstructBool:
     case EOpConstructFloat:
     case EOpConstructDouble:
-#ifdef AMD_EXTENSIONS
     case EOpConstructFloat16:
-#endif
         return child;
     default: break; // some compilers want this
     }
@@ -447,27 +440,14 @@
     return fold(aggNode);
 }
 
-//
-// Convert the node's type to the given type, as allowed by the operation involved: 'op'.
-// For implicit conversions, 'op' is not the requested conversion, it is the explicit
-// operation requiring the implicit conversion.
-//
-// Returns a node representing the conversion, which could be the same
-// node passed in if no conversion was needed.
-//
-// Generally, this is focused on basic type conversion, not shape conversion.
-// See addShapeConversion().
-//
-// Return nullptr if a conversion can't be done.
-//
-TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TIntermTyped* node) const
+bool TIntermediate::isConversionAllowed(TOperator op, TIntermTyped* node) const
 {
     //
     // Does the base type even allow the operation?
     //
     switch (node->getBasicType()) {
     case EbtVoid:
-        return nullptr;
+        return false;
     case EbtAtomicUint:
     case EbtSampler:
         // opaque types can be passed to functions
@@ -485,11 +465,422 @@
             break;
 
         // otherwise, opaque types can't even be operated on, let alone converted
-        return nullptr;
+        return false;
     default:
         break;
     }
 
+    return true;
+}
+
+// This is 'mechanism' here, it does any conversion told.
+// It is about basic type, not about shape.
+// The policy comes from the shader or the above code.
+TIntermUnary* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped* node) const
+{
+    //
+    // Add a new newNode for the conversion.
+    //
+    TIntermUnary* newNode = nullptr;
+
+    TOperator newOp = EOpNull;
+
+    switch (convertTo) {
+    case EbtDouble:
+        switch (node->getBasicType()) {
+        case EbtInt8:  newOp = EOpConvInt8ToDouble;  break;
+        case EbtUint8: newOp = EOpConvUint8ToDouble; break;
+        case EbtInt16: newOp = EOpConvInt16ToDouble; break;
+        case EbtUint16:newOp = EOpConvUint16ToDouble;break;
+        case EbtInt:   newOp = EOpConvIntToDouble;   break;
+        case EbtUint:  newOp = EOpConvUintToDouble;  break;
+        case EbtBool:  newOp = EOpConvBoolToDouble;  break;
+        case EbtFloat: newOp = EOpConvFloatToDouble; break;
+        case EbtFloat16: newOp = EOpConvFloat16ToDouble; break;
+        case EbtInt64: newOp = EOpConvInt64ToDouble; break;
+        case EbtUint64: newOp = EOpConvUint64ToDouble; break;
+        default:
+            return nullptr;
+        }
+        break;
+    case EbtFloat:
+        switch (node->getBasicType()) {
+        case EbtInt8:   newOp = EOpConvInt8ToFloat;    break;
+        case EbtUint8:  newOp = EOpConvUint8ToFloat;   break;
+        case EbtInt16:  newOp = EOpConvInt16ToFloat;    break;
+        case EbtUint16: newOp = EOpConvUint16ToFloat;   break;
+        case EbtInt:    newOp = EOpConvIntToFloat;    break;
+        case EbtUint:   newOp = EOpConvUintToFloat;   break;
+        case EbtBool:   newOp = EOpConvBoolToFloat;   break;
+        case EbtDouble: newOp = EOpConvDoubleToFloat; break;
+        case EbtFloat16: newOp = EOpConvFloat16ToFloat; break;
+        case EbtInt64:  newOp = EOpConvInt64ToFloat;  break;
+        case EbtUint64: newOp = EOpConvUint64ToFloat; break;
+        default:
+            return nullptr;
+        }
+        break;
+    case EbtFloat16:
+        switch (node->getBasicType()) {
+        case EbtInt8:   newOp = EOpConvInt8ToFloat16;    break;
+        case EbtUint8:  newOp = EOpConvUint8ToFloat16;   break;
+        case EbtInt16:  newOp = EOpConvInt16ToFloat16;    break;
+        case EbtUint16: newOp = EOpConvUint16ToFloat16;   break;
+        case EbtInt:    newOp = EOpConvIntToFloat16;    break;
+        case EbtUint:   newOp = EOpConvUintToFloat16;   break;
+        case EbtBool:   newOp = EOpConvBoolToFloat16;   break;
+        case EbtFloat:  newOp = EOpConvFloatToFloat16;  break;
+        case EbtDouble: newOp = EOpConvDoubleToFloat16; break;
+        case EbtInt64:  newOp = EOpConvInt64ToFloat16;  break;
+        case EbtUint64: newOp = EOpConvUint64ToFloat16; break;
+        default:
+            return nullptr;
+        }
+        break;
+    case EbtBool:
+        switch (node->getBasicType()) {
+        case EbtInt8:   newOp = EOpConvInt8ToBool;   break;
+        case EbtUint8:  newOp = EOpConvUint8ToBool;  break;
+        case EbtInt16:  newOp = EOpConvInt16ToBool;  break;
+        case EbtUint16: newOp = EOpConvUint16ToBool; break;
+        case EbtInt:    newOp = EOpConvIntToBool;    break;
+        case EbtUint:   newOp = EOpConvUintToBool;   break;
+        case EbtFloat:  newOp = EOpConvFloatToBool;  break;
+        case EbtDouble: newOp = EOpConvDoubleToBool; break;
+        case EbtFloat16: newOp = EOpConvFloat16ToBool; break;
+        case EbtInt64:  newOp = EOpConvInt64ToBool;  break;
+        case EbtUint64: newOp = EOpConvUint64ToBool; break;
+        default:
+            return nullptr;
+        }
+        break;
+    case EbtInt8:
+        switch (node->getBasicType()) {
+        case EbtUint8:  newOp = EOpConvUint8ToInt8;   break;
+        case EbtInt16:  newOp = EOpConvInt16ToInt8;   break;
+        case EbtUint16: newOp = EOpConvUint16ToInt8;  break;
+        case EbtInt:    newOp = EOpConvIntToInt8;   break;
+        case EbtUint:   newOp = EOpConvUintToInt8;   break;
+        case EbtInt64:  newOp = EOpConvInt64ToInt8;  break;
+        case EbtUint64: newOp = EOpConvUint64ToInt8; break;
+        case EbtBool:   newOp = EOpConvBoolToInt8;   break;
+        case EbtFloat:  newOp = EOpConvFloatToInt8;  break;
+        case EbtDouble: newOp = EOpConvDoubleToInt8; break;
+        case EbtFloat16: newOp = EOpConvFloat16ToInt8; break;
+        default:
+            return nullptr;
+        }
+        break;
+    case EbtUint8:
+        switch (node->getBasicType()) {
+        case EbtInt8:   newOp = EOpConvInt8ToUint8;   break;
+        case EbtInt16:  newOp = EOpConvInt16ToUint8;  break;
+        case EbtUint16: newOp = EOpConvUint16ToUint8; break;
+        case EbtInt:    newOp = EOpConvIntToUint8;    break;
+        case EbtUint:   newOp = EOpConvUintToUint8;   break;
+        case EbtInt64:  newOp = EOpConvInt64ToUint8;  break;
+        case EbtUint64: newOp = EOpConvUint64ToUint8; break;
+        case EbtBool:   newOp = EOpConvBoolToUint8;   break;
+        case EbtFloat:  newOp = EOpConvFloatToUint8;  break;
+        case EbtDouble: newOp = EOpConvDoubleToUint8; break;
+        case EbtFloat16: newOp = EOpConvFloat16ToUint8; break;
+        default:
+            return nullptr;
+        }
+        break;
+
+    case EbtInt16:
+        switch (node->getBasicType()) {
+        case EbtUint8:  newOp = EOpConvUint8ToInt16;   break;
+        case EbtInt8:   newOp = EOpConvInt8ToInt16;   break;
+        case EbtUint16: newOp = EOpConvUint16ToInt16;  break;
+        case EbtInt:    newOp = EOpConvIntToInt16;   break;
+        case EbtUint:   newOp = EOpConvUintToInt16;   break;
+        case EbtInt64:  newOp = EOpConvInt64ToInt16;  break;
+        case EbtUint64: newOp = EOpConvUint64ToInt16; break;
+        case EbtBool:   newOp = EOpConvBoolToInt16;   break;
+        case EbtFloat:  newOp = EOpConvFloatToInt16;  break;
+        case EbtDouble: newOp = EOpConvDoubleToInt16; break;
+        case EbtFloat16: newOp = EOpConvFloat16ToInt16; break;
+        default:
+            return nullptr;
+        }
+        break;
+    case EbtUint16:
+        switch (node->getBasicType()) {
+        case EbtInt8:   newOp = EOpConvInt8ToUint16;   break;
+        case EbtUint8:  newOp = EOpConvUint8ToUint16;  break;
+        case EbtInt16:  newOp = EOpConvInt16ToUint16; break;
+        case EbtInt:    newOp = EOpConvIntToUint16;    break;
+        case EbtUint:   newOp = EOpConvUintToUint16;   break;
+        case EbtInt64:  newOp = EOpConvInt64ToUint16;  break;
+        case EbtUint64: newOp = EOpConvUint64ToUint16; break;
+        case EbtBool:   newOp = EOpConvBoolToUint16;   break;
+        case EbtFloat:  newOp = EOpConvFloatToUint16;  break;
+        case EbtDouble: newOp = EOpConvDoubleToUint16; break;
+        case EbtFloat16: newOp = EOpConvFloat16ToUint16; break;
+        default:
+            return nullptr;
+        }
+        break;
+
+    case EbtInt:
+        switch (node->getBasicType()) {
+        case EbtInt8:   newOp = EOpConvInt8ToInt;    break;
+        case EbtUint8:  newOp = EOpConvUint8ToInt;   break;
+        case EbtInt16:  newOp = EOpConvInt16ToInt;   break;
+        case EbtUint16: newOp = EOpConvUint16ToInt;  break;
+        case EbtUint:   newOp = EOpConvUintToInt;   break;
+        case EbtBool:   newOp = EOpConvBoolToInt;   break;
+        case EbtFloat:  newOp = EOpConvFloatToInt;  break;
+        case EbtDouble: newOp = EOpConvDoubleToInt; break;
+        case EbtFloat16: newOp = EOpConvFloat16ToInt; break;
+        case EbtInt64:  newOp = EOpConvInt64ToInt;  break;
+        case EbtUint64: newOp = EOpConvUint64ToInt; break;
+        default:
+            return nullptr;
+        }
+        break;
+    case EbtUint:
+        switch (node->getBasicType()) {
+        case EbtInt8:   newOp = EOpConvInt8ToUint;   break;
+        case EbtUint8:  newOp = EOpConvUint8ToUint;  break;
+        case EbtInt16:  newOp = EOpConvInt16ToUint;  break;
+        case EbtUint16: newOp = EOpConvUint16ToUint; break;
+        case EbtInt:    newOp = EOpConvIntToUint;    break;
+        case EbtBool:   newOp = EOpConvBoolToUint;   break;
+        case EbtFloat:  newOp = EOpConvFloatToUint;  break;
+        case EbtDouble: newOp = EOpConvDoubleToUint; break;
+        case EbtFloat16: newOp = EOpConvFloat16ToUint; break;
+        case EbtInt64:  newOp = EOpConvInt64ToUint;  break;
+        case EbtUint64: newOp = EOpConvUint64ToUint; break;
+        default:
+            return nullptr;
+        }
+        break;
+    case EbtInt64:
+        switch (node->getBasicType()) {
+        case EbtInt8:   newOp = EOpConvInt8ToInt64;   break;
+        case EbtUint8:  newOp = EOpConvUint8ToInt64;  break;
+        case EbtInt16:  newOp = EOpConvInt16ToInt64;  break;
+        case EbtUint16: newOp = EOpConvUint16ToInt64; break;
+        case EbtInt:    newOp = EOpConvIntToInt64;    break;
+        case EbtUint:   newOp = EOpConvUintToInt64;   break;
+        case EbtBool:   newOp = EOpConvBoolToInt64;   break;
+        case EbtFloat:  newOp = EOpConvFloatToInt64;  break;
+        case EbtDouble: newOp = EOpConvDoubleToInt64; break;
+        case EbtFloat16: newOp = EOpConvFloat16ToInt64; break;
+        case EbtUint64: newOp = EOpConvUint64ToInt64; break;
+        default:
+            return nullptr;
+        }
+        break;
+    case EbtUint64:
+        switch (node->getBasicType()) {
+        case EbtInt8:   newOp = EOpConvInt8ToUint64;   break;
+        case EbtUint8:  newOp = EOpConvUint8ToUint64;  break;
+        case EbtInt16:  newOp = EOpConvInt16ToUint64;  break;
+        case EbtUint16: newOp = EOpConvUint16ToUint64; break;
+        case EbtInt:    newOp = EOpConvIntToUint64;    break;
+        case EbtUint:   newOp = EOpConvUintToUint64;   break;
+        case EbtBool:   newOp = EOpConvBoolToUint64;   break;
+        case EbtFloat:  newOp = EOpConvFloatToUint64;  break;
+        case EbtDouble: newOp = EOpConvDoubleToUint64; break;
+        case EbtFloat16: newOp = EOpConvFloat16ToUint64; break;
+        case EbtInt64:  newOp = EOpConvInt64ToUint64;  break;
+        default:
+            return nullptr;
+        }
+        break;
+    default:
+        return nullptr;
+    }
+
+    TType newType(convertTo, EvqTemporary, node->getVectorSize(), node->getMatrixCols(), node->getMatrixRows());
+    newNode = addUnaryNode(newOp, node, node->getLoc(), newType);
+
+    // TODO: it seems that some unary folding operations should occur here, but are not
+
+    // Propagate specialization-constant-ness, if allowed
+    if (node->getType().getQualifier().isSpecConstant() && isSpecializationOperation(*newNode))
+        newNode->getWritableType().getQualifier().makeSpecConstant();
+
+    // TODO: it seems that some unary folding operations should occur here, but are not
+
+    // Propagate specialization-constant-ness, if allowed
+    if (node->getType().getQualifier().isSpecConstant() && isSpecializationOperation(*newNode))
+        newNode->getWritableType().getQualifier().makeSpecConstant();
+
+    return newNode;
+}
+
+std::tuple<TIntermTyped*, TIntermTyped*>
+TIntermediate::addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* node1) const
+{
+    if (!isConversionAllowed(op, node0) || !isConversionAllowed(op, node1)) {
+        return std::make_tuple(nullptr, nullptr);
+    }
+
+    // If types are identical, no problem
+    if (node0->getType() == node1->getType())
+        return std::make_tuple(node0, node1);
+
+    // If one's a structure, then no conversions.
+    if (node0->isStruct() || node1->isStruct())
+        return std::make_tuple(nullptr, nullptr);
+
+    // If one's an array, then no conversions.
+    if (node0->getType().isArray() || node1->getType().isArray())
+        return std::make_tuple(nullptr, nullptr);
+
+    auto promoteTo = std::make_tuple(EbtNumTypes, EbtNumTypes);
+
+    TBasicType type0 = node0->getType().getBasicType();
+    TBasicType type1 = node1->getType().getBasicType();
+
+    switch (op) {
+    //
+    // List all the binary ops that can implicitly convert one operand to the other's type;
+    // This implements the 'policy' for implicit type conversion.
+    //
+    case EOpLessThan:
+    case EOpGreaterThan:
+    case EOpLessThanEqual:
+    case EOpGreaterThanEqual:
+    case EOpEqual:
+    case EOpNotEqual:
+
+    case EOpAdd:
+    case EOpSub:
+    case EOpMul:
+    case EOpDiv:
+    case EOpMod:
+
+    case EOpVectorTimesScalar:
+    case EOpVectorTimesMatrix:
+    case EOpMatrixTimesVector:
+    case EOpMatrixTimesScalar:
+
+    case EOpAnd:
+    case EOpInclusiveOr:
+    case EOpExclusiveOr:
+    case EOpAndAssign:
+    case EOpInclusiveOrAssign:
+    case EOpExclusiveOrAssign:
+    case EOpLogicalNot:
+    case EOpLogicalAnd:
+    case EOpLogicalOr:
+    case EOpLogicalXor:
+
+    case EOpFunctionCall:
+    case EOpReturn:
+    case EOpAssign:
+    case EOpAddAssign:
+    case EOpSubAssign:
+    case EOpMulAssign:
+    case EOpVectorTimesScalarAssign:
+    case EOpMatrixTimesScalarAssign:
+    case EOpDivAssign:
+    case EOpModAssign:
+
+    case EOpAtan:
+    case EOpClamp:
+    case EOpCross:
+    case EOpDistance:
+    case EOpDot:
+    case EOpDst:
+    case EOpFaceForward:
+    case EOpFma:
+    case EOpFrexp:
+    case EOpLdexp:
+    case EOpMix:
+    case EOpLit:
+    case EOpMax:
+    case EOpMin:
+    case EOpModf:
+    case EOpPow:
+    case EOpReflect:
+    case EOpRefract:
+    case EOpSmoothStep:
+    case EOpStep:
+
+    case EOpSequence:
+    case EOpConstructStruct:
+
+        if (type0 == type1)
+            return std::make_tuple(node0, node1);
+
+        promoteTo = getConversionDestinatonType(type0, type1, op);
+        if (std::get<0>(promoteTo) == EbtNumTypes || std::get<1>(promoteTo) == EbtNumTypes)
+            return std::make_tuple(nullptr, nullptr);
+
+        break;
+
+    // Shifts can have mixed types as long as they are integer and of the same rank,
+    // without converting.
+    // It's the left operand's type that determines the resulting type, so no issue
+    // with assign shift ops either.
+    case EOpLeftShift:
+    case EOpRightShift:
+    case EOpLeftShiftAssign:
+    case EOpRightShiftAssign:
+
+        if (isTypeInt(type0) && isTypeInt(type1)) {
+            if (getTypeRank(type0) == getTypeRank(type1)) {
+                return std::make_tuple(node0, node1);
+            } else {
+                promoteTo = getConversionDestinatonType(type0, type1, op);
+                if (std::get<0>(promoteTo) == EbtNumTypes || std::get<1>(promoteTo) == EbtNumTypes)
+                    return std::make_tuple(nullptr, nullptr);
+            }
+        } else
+            return std::make_tuple(nullptr, nullptr);
+        break;
+
+    default:
+        return std::make_tuple(nullptr, nullptr);
+    }
+
+    TIntermTyped* newNode0;
+    TIntermTyped* newNode1;
+
+    if (std::get<0>(promoteTo) != node0->getType().getBasicType()) {
+        if (node0->getAsConstantUnion())
+            newNode0 = promoteConstantUnion(std::get<0>(promoteTo), node0->getAsConstantUnion());
+        else
+            newNode0 = createConversion(std::get<0>(promoteTo), node0);
+    } else
+        newNode0 = node0;
+
+    if (std::get<1>(promoteTo) != node1->getType().getBasicType()) {
+        if (node1->getAsConstantUnion())
+            newNode1 = promoteConstantUnion(std::get<1>(promoteTo), node1->getAsConstantUnion());
+        else
+            newNode1 = createConversion(std::get<1>(promoteTo), node1);
+    } else
+        newNode1 = node1;
+
+    return std::make_tuple(newNode0, newNode1);
+}
+
+//
+// Convert the node's type to the given type, as allowed by the operation involved: 'op'.
+// For implicit conversions, 'op' is not the requested conversion, it is the explicit
+// operation requiring the implicit conversion.
+//
+// Returns a node representing the conversion, which could be the same
+// node passed in if no conversion was needed.
+//
+// Generally, this is focused on basic type conversion, not shape conversion.
+// See addShapeConversion().
+//
+// Return nullptr if a conversion can't be done.
+//
+TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TIntermTyped* node) const
+{
+    if (!isConversionAllowed(op, node))
+        return nullptr;
+
     // Otherwise, if types are identical, no problem
     if (type == node->getType())
         return node;
@@ -520,11 +911,21 @@
     case EOpConstructDouble:
         promoteTo = EbtDouble;
         break;
-#ifdef AMD_EXTENSIONS
     case EOpConstructFloat16:
         promoteTo = EbtFloat16;
         break;
-#endif
+    case EOpConstructInt8:
+        promoteTo = EbtInt8;
+        break;
+    case EOpConstructUint8:
+        promoteTo = EbtUint8;
+        break;
+    case EOpConstructInt16:
+        promoteTo = EbtInt16;
+        break;
+    case EOpConstructUint16:
+        promoteTo = EbtUint16;
+        break;
     case EOpConstructInt:
         promoteTo = EbtInt;
         break;
@@ -537,14 +938,6 @@
     case EOpConstructUint64:
         promoteTo = EbtUint64;
         break;
-#ifdef AMD_EXTENSIONS
-    case EOpConstructInt16:
-        promoteTo = EbtInt16;
-        break;
-    case EOpConstructUint16:
-        promoteTo = EbtUint16;
-        break;
-#endif
 
     //
     // List all the binary ops that can implicitly convert one operand to the other's type;
@@ -620,40 +1013,38 @@
         if (canImplicitlyPromote(node->getType().getBasicType(), type.getBasicType(), op))
             promoteTo = type.getBasicType();
         else
-            return nullptr;
-
+           return nullptr;
         break;
 
-    // Shifts can have mixed types as long as they are integer, without converting.
+    // Shifts can have mixed types as long as they are integer and of the same rank,
+    // without converting.
     // It's the left operand's type that determines the resulting type, so no issue
     // with assign shift ops either.
     case EOpLeftShift:
     case EOpRightShift:
     case EOpLeftShiftAssign:
     case EOpRightShiftAssign:
-        if ((type.getBasicType() == EbtInt ||
-             type.getBasicType() == EbtUint ||
-#ifdef AMD_EXTENSIONS
-             type.getBasicType() == EbtInt16 ||
-             type.getBasicType() == EbtUint16 ||
-#endif
-             type.getBasicType() == EbtInt64 ||
-             type.getBasicType() == EbtUint64) &&
-            (node->getType().getBasicType() == EbtInt ||
-             node->getType().getBasicType() == EbtUint ||
-#ifdef AMD_EXTENSIONS
-             node->getType().getBasicType() == EbtInt16 ||
-             node->getType().getBasicType() == EbtUint16 ||
-#endif
-             node->getType().getBasicType() == EbtInt64 ||
-             node->getType().getBasicType() == EbtUint64))
+    {
+        TBasicType type0 = type.getBasicType();
+        TBasicType type1 = node->getType().getBasicType();
 
-            return node;
-        else if (source == EShSourceHlsl && node->getType().getBasicType() == EbtBool) {
-            promoteTo = type.getBasicType();
-            break;
-        } else
-            return nullptr;
+        if (source == EShSourceHlsl && node->getType().getBasicType() == EbtBool) {
+            promoteTo = type0;            
+        } else {
+            if (isTypeInt(type0) && isTypeInt(type1)) {
+                if (getTypeRank(type0) == getTypeRank(type1)) {
+                    return node;
+                } else {
+                    if (canImplicitlyPromote(type1, type0, op))
+                        promoteTo = type0;
+                    else
+                        return nullptr;
+                }
+            } else
+                return nullptr;
+        }
+        break;
+    }
 
     default:
         // default is to require a match; all exceptions should have case statements above
@@ -670,207 +1061,7 @@
     //
     // Add a new newNode for the conversion.
     //
-    TIntermUnary* newNode = nullptr;
-
-    TOperator newOp = EOpNull;
-
-    // This is 'mechanism' here, it does any conversion told.  The policy comes
-    // from the shader or the above code.
-    switch (promoteTo) {
-    case EbtDouble:
-        switch (node->getBasicType()) {
-        case EbtInt:   newOp = EOpConvIntToDouble;   break;
-        case EbtUint:  newOp = EOpConvUintToDouble;  break;
-        case EbtBool:  newOp = EOpConvBoolToDouble;  break;
-        case EbtFloat: newOp = EOpConvFloatToDouble; break;
-#ifdef AMD_EXTENSIONS
-        case EbtFloat16: newOp = EOpConvFloat16ToDouble; break;
-#endif
-        case EbtInt64: newOp = EOpConvInt64ToDouble; break;
-        case EbtUint64: newOp = EOpConvUint64ToDouble; break;
-#ifdef AMD_EXTENSIONS
-        case EbtInt16:  newOp = EOpConvInt16ToDouble;  break;
-        case EbtUint16: newOp = EOpConvUint16ToDouble; break;
-#endif
-        default:
-            return nullptr;
-        }
-        break;
-    case EbtFloat:
-        switch (node->getBasicType()) {
-        case EbtInt:    newOp = EOpConvIntToFloat;    break;
-        case EbtUint:   newOp = EOpConvUintToFloat;   break;
-        case EbtBool:   newOp = EOpConvBoolToFloat;   break;
-        case EbtDouble: newOp = EOpConvDoubleToFloat; break;
-#ifdef AMD_EXTENSIONS
-        case EbtFloat16: newOp = EOpConvFloat16ToFloat; break;
-#endif
-        case EbtInt64:  newOp = EOpConvInt64ToFloat;  break;
-        case EbtUint64: newOp = EOpConvUint64ToFloat; break;
-#ifdef AMD_EXTENSIONS
-        case EbtInt16:  newOp = EOpConvInt16ToFloat;  break;
-        case EbtUint16: newOp = EOpConvUint16ToFloat; break;
-#endif
-        default:
-            return nullptr;
-        }
-        break;
-#ifdef AMD_EXTENSIONS
-    case EbtFloat16:
-        switch (node->getBasicType()) {
-        case EbtInt:    newOp = EOpConvIntToFloat16;    break;
-        case EbtUint:   newOp = EOpConvUintToFloat16;   break;
-        case EbtBool:   newOp = EOpConvBoolToFloat16;   break;
-        case EbtFloat:  newOp = EOpConvFloatToFloat16;  break;
-        case EbtDouble: newOp = EOpConvDoubleToFloat16; break;
-        case EbtInt64:  newOp = EOpConvInt64ToFloat16;  break;
-        case EbtUint64: newOp = EOpConvUint64ToFloat16; break;
-        case EbtInt16:  newOp = EOpConvInt16ToFloat16;  break;
-        case EbtUint16: newOp = EOpConvUint16ToFloat16; break;
-        default:
-            return nullptr;
-        }
-        break;
-#endif
-    case EbtBool:
-        switch (node->getBasicType()) {
-        case EbtInt:    newOp = EOpConvIntToBool;    break;
-        case EbtUint:   newOp = EOpConvUintToBool;   break;
-        case EbtFloat:  newOp = EOpConvFloatToBool;  break;
-        case EbtDouble: newOp = EOpConvDoubleToBool; break;
-#ifdef AMD_EXTENSIONS
-        case EbtFloat16: newOp = EOpConvFloat16ToBool; break;
-#endif
-        case EbtInt64:  newOp = EOpConvInt64ToBool;  break;
-        case EbtUint64: newOp = EOpConvUint64ToBool; break;
-#ifdef AMD_EXTENSIONS
-        case EbtInt16:  newOp = EOpConvInt16ToBool;  break;
-        case EbtUint16: newOp = EOpConvUint16ToBool; break;
-#endif
-        default:
-            return nullptr;
-        }
-        break;
-    case EbtInt:
-        switch (node->getBasicType()) {
-        case EbtUint:   newOp = EOpConvUintToInt;   break;
-        case EbtBool:   newOp = EOpConvBoolToInt;   break;
-        case EbtFloat:  newOp = EOpConvFloatToInt;  break;
-        case EbtDouble: newOp = EOpConvDoubleToInt; break;
-#ifdef AMD_EXTENSIONS
-        case EbtFloat16: newOp = EOpConvFloat16ToInt; break;
-#endif
-        case EbtInt64:  newOp = EOpConvInt64ToInt;  break;
-        case EbtUint64: newOp = EOpConvUint64ToInt; break;
-#ifdef AMD_EXTENSIONS
-        case EbtInt16:  newOp = EOpConvInt16ToInt;  break;
-        case EbtUint16: newOp = EOpConvUint16ToInt; break;
-#endif
-        default:
-            return nullptr;
-        }
-        break;
-    case EbtUint:
-        switch (node->getBasicType()) {
-        case EbtInt:    newOp = EOpConvIntToUint;    break;
-        case EbtBool:   newOp = EOpConvBoolToUint;   break;
-        case EbtFloat:  newOp = EOpConvFloatToUint;  break;
-        case EbtDouble: newOp = EOpConvDoubleToUint; break;
-#ifdef AMD_EXTENSIONS
-        case EbtFloat16: newOp = EOpConvFloat16ToUint; break;
-#endif
-        case EbtInt64:  newOp = EOpConvInt64ToUint;  break;
-        case EbtUint64: newOp = EOpConvUint64ToUint; break;
-#ifdef AMD_EXTENSIONS
-        case EbtInt16:  newOp = EOpConvInt16ToUint;  break;
-        case EbtUint16: newOp = EOpConvUint16ToUint; break;
-#endif
-        default:
-            return nullptr;
-        }
-        break;
-    case EbtInt64:
-        switch (node->getBasicType()) {
-        case EbtInt:    newOp = EOpConvIntToInt64;    break;
-        case EbtUint:   newOp = EOpConvUintToInt64;   break;
-        case EbtBool:   newOp = EOpConvBoolToInt64;   break;
-        case EbtFloat:  newOp = EOpConvFloatToInt64;  break;
-        case EbtDouble: newOp = EOpConvDoubleToInt64; break;
-#ifdef AMD_EXTENSIONS
-        case EbtFloat16: newOp = EOpConvFloat16ToInt64; break;
-#endif
-        case EbtUint64: newOp = EOpConvUint64ToInt64; break;
-#ifdef AMD_EXTENSIONS
-        case EbtInt16:  newOp = EOpConvInt16ToInt64;  break;
-        case EbtUint16: newOp = EOpConvUint16ToInt64; break;
-#endif
-        default:
-            return nullptr;
-        }
-        break;
-    case EbtUint64:
-        switch (node->getBasicType()) {
-        case EbtInt:    newOp = EOpConvIntToUint64;    break;
-        case EbtUint:   newOp = EOpConvUintToUint64;   break;
-        case EbtBool:   newOp = EOpConvBoolToUint64;   break;
-        case EbtFloat:  newOp = EOpConvFloatToUint64;  break;
-        case EbtDouble: newOp = EOpConvDoubleToUint64; break;
-#ifdef AMD_EXTENSIONS
-        case EbtFloat16: newOp = EOpConvFloat16ToUint64; break;
-#endif
-        case EbtInt64:  newOp = EOpConvInt64ToUint64;  break;
-#ifdef AMD_EXTENSIONS
-        case EbtInt16:  newOp = EOpConvInt16ToUint64;  break;
-        case EbtUint16: newOp = EOpConvUint16ToUint64; break;
-#endif
-        default:
-            return nullptr;
-        }
-        break;
-#ifdef AMD_EXTENSIONS
-    case EbtInt16:
-        switch (node->getBasicType()) {
-        case EbtInt:     newOp = EOpConvIntToInt16;     break;
-        case EbtUint:    newOp = EOpConvUintToInt16;    break;
-        case EbtBool:    newOp = EOpConvBoolToInt16;    break;
-        case EbtFloat:   newOp = EOpConvFloatToInt16;   break;
-        case EbtDouble:  newOp = EOpConvDoubleToInt16;  break;
-        case EbtFloat16: newOp = EOpConvFloat16ToInt16; break;
-        case EbtInt64:   newOp = EOpConvInt64ToInt16;   break;
-        case EbtUint64:  newOp = EOpConvUint64ToInt16;  break;
-        case EbtUint16:  newOp = EOpConvUint16ToInt16;  break;
-        default:
-            return nullptr;
-        }
-        break;
-    case EbtUint16:
-        switch (node->getBasicType()) {
-        case EbtInt:     newOp = EOpConvIntToUint16;     break;
-        case EbtUint:    newOp = EOpConvUintToUint16;    break;
-        case EbtBool:    newOp = EOpConvBoolToUint16;    break;
-        case EbtFloat:   newOp = EOpConvFloatToUint16;   break;
-        case EbtDouble:  newOp = EOpConvDoubleToUint16;  break;
-        case EbtFloat16: newOp = EOpConvFloat16ToUint16; break;
-        case EbtInt64:   newOp = EOpConvInt64ToUint16;   break;
-        case EbtUint64:  newOp = EOpConvUint64ToUint16;  break;
-        case EbtInt16:   newOp = EOpConvInt16ToUint16;   break;
-        default:
-            return nullptr;
-        }
-        break;
-#endif
-    default:
-        return nullptr;
-    }
-
-    TType newType(promoteTo, EvqTemporary, node->getVectorSize(), node->getMatrixCols(), node->getMatrixRows());
-    newNode = addUnaryNode(newOp, node, node->getLoc(), newType);
-
-    // TODO: it seems that some unary folding operations should occur here, but are not
-
-    // Propagate specialization-constant-ness, if allowed
-    if (node->getType().getQualifier().isSpecConstant() && isSpecializationOperation(*newNode))
-        newNode->getWritableType().getQualifier().makeSpecConstant();
+    TIntermUnary* newNode = createConversion(promoteTo, node);
 
     return newNode;
 }
@@ -1020,12 +1211,11 @@
     rhsNode = addShapeConversion(lhsNode->getType(), rhsNode);
 }
 
-// Convert the node's shape of type for the given type. It's not necessarily
-// an error if they are different and not converted, as some operations accept
-// mixed types.  Promotion will do final shape checking.
+// Convert the node's shape of type for the given type, as allowed by the
+// operation involved: 'op'.
 //
-// If there is a chance of two nodes, with conversions possible in each direction,
-// the policy for what to ask for must be in the caller; this will do what is asked.
+// Generally, the AST represents allowed GLSL shapes, so this isn't needed
+// for GLSL.  Bad shapes are caught in conversion or promotion.
 //
 // Return 'node' if no conversion was done. Promotion handles final shape
 // checking.
@@ -1081,6 +1271,166 @@
     return node;
 }
 
+bool TIntermediate::isIntegralPromotion(TBasicType from, TBasicType to) const
+{
+    // integral promotions
+    if (to == EbtInt) {
+        switch(from) {
+        case EbtInt8:
+        case EbtInt16:
+        case EbtUint8:
+        case EbtUint16:
+            return true;
+        default:
+            break;
+        }
+    }
+    return false;
+}
+
+bool TIntermediate::isFPPromotion(TBasicType from, TBasicType to) const
+{
+    // floating-point promotions
+    if (to == EbtDouble) {
+        switch(from) {
+        case EbtFloat16:
+        case EbtFloat:
+            return true;
+        default:
+            break;
+        }
+    }
+    return false;
+}
+
+bool TIntermediate::isIntegralConversion(TBasicType from, TBasicType to) const
+{
+    switch (from) {
+    case EbtInt8:
+        switch (to) {
+        case EbtUint8:
+        case EbtInt16:
+        case EbtUint16:
+        case EbtUint:
+        case EbtInt64:
+        case EbtUint64:
+            return true;
+        default:
+            break;
+        }
+        break;
+    case EbtUint8:
+        switch (to) {
+        case EbtInt16:
+        case EbtUint16:
+        case EbtUint:
+        case EbtInt64:
+        case EbtUint64:
+            return true;
+        default:
+            break;
+        }
+        break;
+    case EbtInt16:
+        switch(to) {
+        case EbtUint16:
+        case EbtUint:
+        case EbtInt64:
+        case EbtUint64:
+            return true;
+        default:
+            break;
+        }
+        break;
+    case EbtUint16:
+        switch(to) {
+        case EbtUint:
+        case EbtInt64:
+        case EbtUint64:
+            return true;
+        default:
+            break;
+        }
+        break;
+    case EbtInt:
+        switch(to) {
+        case EbtUint:
+            return version >= 400 || (source == EShSourceHlsl);
+        case EbtInt64:
+        case EbtUint64:
+            return true;
+        default:
+            break;
+        }
+        break;
+    case EbtUint:
+        switch(to) {
+        case EbtInt64:
+        case EbtUint64:
+            return true;
+        default:
+            break;
+        }
+        break;
+    case EbtInt64:
+        if (to == EbtUint64) {
+            return true;
+        }
+        break;
+    default:
+        break;
+    }
+    return false;
+}
+
+bool TIntermediate::isFPConversion(TBasicType from, TBasicType to) const
+{
+    if (to == EbtFloat && from == EbtFloat16) {
+        return true;
+    } else {
+        return false;
+    }
+}
+
+bool TIntermediate::isFPIntegralConversion(TBasicType from, TBasicType to) const
+{
+    switch (from) {
+    case EbtInt8:
+    case EbtUint8:
+    case EbtInt16:
+    case EbtUint16:
+        switch (to) {
+        case EbtFloat16:
+        case EbtFloat:
+        case EbtDouble:
+            return true;
+        default:
+            break;
+        }
+        break;
+    case EbtInt:
+    case EbtUint:
+        switch(to) {
+        case EbtFloat:
+        case EbtDouble:
+            return true;
+        default:
+            break;
+        }
+        break;
+    case EbtInt64:
+    case EbtUint64:
+        if (to == EbtDouble) {
+            return true;
+        }
+        break;
+
+    default:
+        break;
+    }
+    return false;
+}
+
 //
 // See if the 'from' type is allowed to be implicitly converted to the
 // 'to' type.  This is not about vector/array/struct, only about basic type.
@@ -1126,120 +1476,339 @@
         }
     }
 
-    switch (to) {
-    case EbtDouble:
-        switch (from) {
-        case EbtInt:
-        case EbtUint:
-        case EbtInt64:
-        case EbtUint64:
-#ifdef AMD_EXTENSIONS
-        case EbtInt16:
-        case EbtUint16:
-#endif
-        case EbtFloat:
+    bool explicitTypesEnabled = extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types) ||
+                                extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_int8) ||
+                                extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_int16) ||
+                                extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_int32) ||
+                                extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_int64) ||
+                                extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_float16) ||
+                                extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_float32) ||
+                                extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_float64);
+
+    if(explicitTypesEnabled)
+    {
+
+        // integral promotions
+        if (isIntegralPromotion(from, to)) {
+            return true;
+        }
+
+        // floating-point promotions
+        if (isFPPromotion(from, to)) {
+            return true;
+        }
+
+        // integral conversions
+        if (isIntegralConversion(from, to)) {
+            return true;
+        }
+
+        // floating-point conversions
+        if (isFPConversion(from, to)) {
+           return true;
+        }
+
+        // floating-integral conversions
+        if (isFPIntegralConversion(from, to)) {
+           return true;
+        }
+
+        // hlsl supported conversions
+        if (source == EShSourceHlsl) {
+            if (from == EbtBool && (to == EbtInt || to == EbtUint || to == EbtFloat))
+                return true;
+        }
+    } else {
+        switch (to) {
         case EbtDouble:
+            switch (from) {
+            case EbtInt:
+            case EbtUint:
+            case EbtInt64:
+            case EbtUint64:
 #ifdef AMD_EXTENSIONS
-        case EbtFloat16:
+            case EbtInt16:
+            case EbtUint16:
 #endif
-            return true;
-        default:
-            return false;
-        }
-    case EbtFloat:
-        switch (from) {
-        case EbtInt:
-        case EbtUint:
+             case EbtFloat:
+             case EbtDouble:
 #ifdef AMD_EXTENSIONS
-        case EbtInt16:
-        case EbtUint16:
+             case EbtFloat16:
 #endif
+                return true;
+            default:
+                return false;
+           }
         case EbtFloat:
+            switch (from) {
+            case EbtInt:
+            case EbtUint:
 #ifdef AMD_EXTENSIONS
-        case EbtFloat16:
+            case EbtInt16:
+            case EbtUint16:
 #endif
-            return true;
-        case EbtBool:
-            return (source == EShSourceHlsl);
-        default:
-            return false;
-        }
-    case EbtUint:
-        switch (from) {
-        case EbtInt:
-            return version >= 400 || (source == EShSourceHlsl);
+            case EbtFloat:
+#ifdef AMD_EXTENSIONS
+            case EbtFloat16:
+#endif
+                 return true;
+            case EbtBool:
+                 return (source == EShSourceHlsl);
+            default:
+                 return false;
+            }
         case EbtUint:
+            switch (from) {
+            case EbtInt:
+                 return version >= 400 || (source == EShSourceHlsl);
+            case EbtUint:
 #ifdef AMD_EXTENSIONS
-        case EbtInt16:
-        case EbtUint16:
+            case EbtInt16:
+            case EbtUint16:
 #endif
-            return true;
-        case EbtBool:
-            return (source == EShSourceHlsl);
-        default:
-            return false;
-        }
-    case EbtInt:
-        switch (from) {
+                return true;
+            case EbtBool:
+                return (source == EShSourceHlsl);
+            default:
+                return false;
+            }
         case EbtInt:
+            switch (from) {
+            case EbtInt:
 #ifdef AMD_EXTENSIONS
-        case EbtInt16:
+            case EbtInt16:
 #endif
-            return true;
-        case EbtBool:
-            return (source == EShSourceHlsl);
-        default:
-            return false;
-        }
-    case EbtUint64:
-        switch (from) {
-        case EbtInt:
-        case EbtUint:
-        case EbtInt64:
+                return true;
+            case EbtBool:
+                return (source == EShSourceHlsl);
+            default:
+                return false;
+            }
         case EbtUint64:
+            switch (from) {
+            case EbtInt:
+            case EbtUint:
+            case EbtInt64:
+            case EbtUint64:
 #ifdef AMD_EXTENSIONS
-        case EbtInt16:
-        case EbtUint16:
+            case EbtInt16:
+            case EbtUint16:
 #endif
-            return true;
-        default:
-            return false;
-        }
-    case EbtInt64:
-        switch (from) {
-        case EbtInt:
+                return true;
+            default:
+                return false;
+            }
         case EbtInt64:
+            switch (from) {
+            case EbtInt:
+            case EbtInt64:
 #ifdef AMD_EXTENSIONS
-        case EbtInt16:
+            case EbtInt16:
 #endif
-            return true;
-        default:
-            return false;
-        }
+                return true;
+            default:
+                return false;
+            }
 #ifdef AMD_EXTENSIONS
-    case EbtFloat16:
-        switch (from) {
-        case EbtInt16:
-        case EbtUint16:
         case EbtFloat16:
-            return true;
-        default:
-            return false;
+            switch (from) {
+            case EbtInt16:
+            case EbtUint16:
+            case EbtFloat16:
+                return true;
+            default:
+                return false;
         }
-    case EbtUint16:
-        switch (from) {
-        case EbtInt16:
         case EbtUint16:
-            return true;
-        default:
-            return false;
+            switch (from) {
+            case EbtInt16:
+            case EbtUint16:
+                return true;
+            default:
+                return false;
         }
 #endif
+        default:
+            return false;
+        }
+    }
+
+    return false;
+}
+
+static bool canSignedIntTypeRepresentAllUnsignedValues(TBasicType sintType, TBasicType uintType) {
+    switch(sintType) {
+    case EbtInt8:
+        switch(uintType) {
+        case EbtUint8:
+        case EbtUint16:
+        case EbtUint:
+        case EbtUint64:
+            return false;
+        default:
+            assert(false);
+            return false;
+        }
+        break;
+    case EbtInt16:
+        switch(uintType) {
+        case EbtUint8:
+            return true;
+        case EbtUint16:
+        case EbtUint:
+        case EbtUint64:
+            return false;
+        default:
+            assert(false);
+            return false;
+        }
+        break;
+    case EbtInt:
+        switch(uintType) {
+        case EbtUint8:
+        case EbtUint16:
+            return true;
+        case EbtUint:
+            return false;
+        default:
+            assert(false);
+            return false;
+        }
+        break;
+    case EbtInt64:
+        switch(uintType) {
+        case EbtUint8:
+        case EbtUint16:
+        case EbtUint:
+            return true;
+        case EbtUint64:
+            return false;
+        default:
+            assert(false);
+            return false;
+        }
+        break;
     default:
+        assert(false);
         return false;
     }
 }
 
+
+static TBasicType getCorrespondingUnsignedType(TBasicType type) {
+    switch(type) {
+    case EbtInt8:
+        return EbtUint8;
+    case EbtInt16:
+        return EbtUint16;
+    case EbtInt:
+        return EbtUint;
+    case EbtInt64:
+        return EbtUint64;
+    default:
+        assert(false);
+        return EbtNumTypes;
+    }
+}
+
+// Implements the following rules
+//    - If either operand has type float64_t or derived from float64_t,
+//      the other shall be converted to float64_t or derived type.
+//    - Otherwise, if either operand has type float32_t or derived from
+//      float32_t, the other shall be converted to float32_t or derived type.
+//    - Otherwise, if either operand has type float16_t or derived from
+//      float16_t, the other shall be converted to float16_t or derived type.
+//    - Otherwise, if both operands have integer types the following rules
+//      shall be applied to the operands:
+//      - If both operands have the same type, no further conversion
+//        is needed.
+//      - Otherwise, if both operands have signed integer types or both
+//        have unsigned integer types, the operand with the type of lesser
+//        integer conversion rank shall be converted to the type of the
+//        operand with greater rank.
+//      - Otherwise, if the operand that has unsigned integer type has rank
+//        greater than or equal to the rank of the type of the other
+//        operand, the operand with signed integer type shall be converted
+//        to the type of the operand with unsigned integer type.
+//      - Otherwise, if the type of the operand with signed integer type can
+//        represent all of the values of the type of the operand with
+//        unsigned integer type, the operand with unsigned integer type
+//        shall be converted to the type of the operand with signed
+//        integer type.
+//      - Otherwise, both operands shall be converted to the unsigned
+//        integer type corresponding to the type of the operand with signed
+//        integer type.
+
+std::tuple<TBasicType, TBasicType> TIntermediate::getConversionDestinatonType(TBasicType type0, TBasicType type1, TOperator op) const
+{
+    TBasicType res0 = EbtNumTypes;
+    TBasicType res1 = EbtNumTypes;
+
+    if (profile == EEsProfile || version == 110)
+        return std::make_tuple(res0, res1);;
+
+    if (source == EShSourceHlsl) {
+        if (canImplicitlyPromote(type1, type0, op)) {
+            res0 = type0;
+            res1 = type0;
+        } else if (canImplicitlyPromote(type0, type1, op)) {
+            res0 = type1;
+            res1 = type1;
+        }
+        return std::make_tuple(res0, res1);
+    }
+
+    if ((type0 == EbtDouble && canImplicitlyPromote(type1, EbtDouble, op)) ||
+        (type1 == EbtDouble && canImplicitlyPromote(type0, EbtDouble, op)) ) {
+        res0 = EbtDouble;
+        res1 = EbtDouble;
+    } else if ((type0 == EbtFloat && canImplicitlyPromote(type1, EbtFloat, op)) ||
+               (type1 == EbtFloat && canImplicitlyPromote(type0, EbtFloat, op)) ) {
+        res0 = EbtFloat;
+        res1 = EbtFloat;
+    } else if ((type0 == EbtFloat16 && canImplicitlyPromote(type1, EbtFloat16, op)) ||
+               (type1 == EbtFloat16 && canImplicitlyPromote(type0, EbtFloat16, op)) ) {
+        res0 = EbtFloat16;
+        res1 = EbtFloat16;
+    } else if (isTypeInt(type0) && isTypeInt(type1) &&
+               (canImplicitlyPromote(type0, type1, op) || canImplicitlyPromote(type1, type0, op))) {
+        if ((isTypeSignedInt(type0) && isTypeSignedInt(type1)) ||
+            (isTypeUnsignedInt(type0) && isTypeUnsignedInt(type1))) {
+            if (getTypeRank(type0) < getTypeRank(type1)) {
+                res0 = type1;
+                res1 = type1;
+            } else {
+                res0 = type0;
+                res1 = type0;
+            }
+        } else if (isTypeUnsignedInt(type0) && (getTypeRank(type0) > getTypeRank(type1))) {
+            res0 = type0;
+            res1 = type0;
+        } else if (isTypeUnsignedInt(type1) && (getTypeRank(type1) > getTypeRank(type0))) {
+            res0 = type1;
+            res1 = type1;
+        } else if (isTypeSignedInt(type0)) {
+            if (canSignedIntTypeRepresentAllUnsignedValues(type0, type1)) {
+                res0 = type0;
+                res1 = type0;
+            } else {
+                res0 = getCorrespondingUnsignedType(type0);
+                res1 = getCorrespondingUnsignedType(type0);
+            }
+        } else if (isTypeSignedInt(type1)) {
+            if (canSignedIntTypeRepresentAllUnsignedValues(type1, type0)) {
+                res0 = type1;
+                res1 = type1;
+            } else {
+                res0 = getCorrespondingUnsignedType(type1);
+                res1 = getCorrespondingUnsignedType(type1);
+            }
+        }
+    }
+
+    return std::make_tuple(res0, res1);
+}
+
 //
 // Given a type, find what operation would fully construct it.
 //
@@ -1332,7 +1901,6 @@
             }
         }
         break;
-#ifdef AMD_EXTENSIONS
     case EbtFloat16:
         if (type.getMatrixCols()) {
             switch (type.getMatrixCols()) {
@@ -1372,7 +1940,42 @@
             }
         }
         break;
-#endif
+    case EbtInt8:
+        switch(type.getVectorSize()) {
+        case 1: op = EOpConstructInt8;   break;
+        case 2: op = EOpConstructI8Vec2; break;
+        case 3: op = EOpConstructI8Vec3; break;
+        case 4: op = EOpConstructI8Vec4; break;
+        default: break; // some compilers want this
+        }
+        break;
+    case EbtUint8:
+        switch(type.getVectorSize()) {
+        case 1: op = EOpConstructUint8;  break;
+        case 2: op = EOpConstructU8Vec2; break;
+        case 3: op = EOpConstructU8Vec3; break;
+        case 4: op = EOpConstructU8Vec4; break;
+        default: break; // some compilers want this
+        }
+        break;
+    case EbtInt16:
+        switch(type.getVectorSize()) {
+        case 1: op = EOpConstructInt16;   break;
+        case 2: op = EOpConstructI16Vec2; break;
+        case 3: op = EOpConstructI16Vec3; break;
+        case 4: op = EOpConstructI16Vec4; break;
+        default: break; // some compilers want this
+        }
+        break;
+    case EbtUint16:
+        switch(type.getVectorSize()) {
+        case 1: op = EOpConstructUint16;  break;
+        case 2: op = EOpConstructU16Vec2; break;
+        case 3: op = EOpConstructU16Vec3; break;
+        case 4: op = EOpConstructU16Vec4; break;
+        default: break; // some compilers want this
+        }
+        break;
     case EbtInt:
         if (type.getMatrixCols()) {
             switch (type.getMatrixCols()) {
@@ -1467,26 +2070,6 @@
         default: break; // some compilers want this
         }
         break;
-#ifdef AMD_EXTENSIONS
-    case EbtInt16:
-        switch(type.getVectorSize()) {
-        case 1: op = EOpConstructInt16;   break;
-        case 2: op = EOpConstructI16Vec2; break;
-        case 3: op = EOpConstructI16Vec3; break;
-        case 4: op = EOpConstructI16Vec4; break;
-        default: break; // some compilers want this
-        }
-        break;
-    case EbtUint16:
-        switch(type.getVectorSize()) {
-        case 1: op = EOpConstructUint16;  break;
-        case 2: op = EOpConstructU16Vec2; break;
-        case 3: op = EOpConstructU16Vec3; break;
-        case 4: op = EOpConstructU16Vec4; break;
-        default: break; // some compilers want this
-        }
-        break;
-#endif
     case EbtBool:
         if (type.getMatrixCols()) {
             switch (type.getMatrixCols()) {
@@ -1682,16 +2265,12 @@
     //
     // Get compatible types.
     //
-    TIntermTyped* child = addConversion(EOpSequence, trueBlock->getType(), falseBlock);
-    if (child)
-        falseBlock = child;
-    else {
-        child = addConversion(EOpSequence, falseBlock->getType(), trueBlock);
-        if (child)
-            trueBlock = child;
-        else
-            return nullptr;
-    }
+    auto children = addConversion(EOpSequence, trueBlock, falseBlock);
+    trueBlock = std::get<0>(children);
+    falseBlock = std::get<1>(children);
+
+    if (trueBlock == nullptr || falseBlock == nullptr)
+        return nullptr;
 
     // Handle a vector condition as a mix
     if (!cond->getType().isScalarOrVec1()) {
@@ -1769,6 +2348,37 @@
 
     return node;
 }
+TIntermConstantUnion* TIntermediate::addConstantUnion(signed char i8, const TSourceLoc& loc, bool literal) const
+{
+    TConstUnionArray unionArray(1);
+    unionArray[0].setI8Const(i8);
+
+    return addConstantUnion(unionArray, TType(EbtInt8, EvqConst), loc, literal);
+}
+
+TIntermConstantUnion* TIntermediate::addConstantUnion(unsigned char u8, const TSourceLoc& loc, bool literal) const
+{
+    TConstUnionArray unionArray(1);
+    unionArray[0].setUConst(u8);
+
+    return addConstantUnion(unionArray, TType(EbtUint8, EvqConst), loc, literal);
+}
+
+TIntermConstantUnion* TIntermediate::addConstantUnion(signed short i16, const TSourceLoc& loc, bool literal) const
+{
+    TConstUnionArray unionArray(1);
+    unionArray[0].setI16Const(i16);
+
+    return addConstantUnion(unionArray, TType(EbtInt16, EvqConst), loc, literal);
+}
+
+TIntermConstantUnion* TIntermediate::addConstantUnion(unsigned short u16, const TSourceLoc& loc, bool literal) const
+{
+    TConstUnionArray unionArray(1);
+    unionArray[0].setU16Const(u16);
+
+    return addConstantUnion(unionArray, TType(EbtUint16, EvqConst), loc, literal);
+}
 
 TIntermConstantUnion* TIntermediate::addConstantUnion(int i, const TSourceLoc& loc, bool literal) const
 {
@@ -1802,24 +2412,6 @@
     return addConstantUnion(unionArray, TType(EbtUint64, EvqConst), loc, literal);
 }
 
-#ifdef AMD_EXTENSIONS
-TIntermConstantUnion* TIntermediate::addConstantUnion(short i16, const TSourceLoc& loc, bool literal) const
-{
-    TConstUnionArray unionArray(1);
-    unionArray[0].setIConst(i16);
-
-    return addConstantUnion(unionArray, TType(EbtInt16, EvqConst), loc, literal);
-}
-
-TIntermConstantUnion* TIntermediate::addConstantUnion(unsigned short u16, const TSourceLoc& loc, bool literal) const
-{
-    TConstUnionArray unionArray(1);
-    unionArray[0].setUConst(u16);
-
-    return addConstantUnion(unionArray, TType(EbtUint16, EvqConst), loc, literal);
-}
-#endif
-
 TIntermConstantUnion* TIntermediate::addConstantUnion(bool b, const TSourceLoc& loc, bool literal) const
 {
     TConstUnionArray unionArray(1);
@@ -1830,11 +2422,7 @@
 
 TIntermConstantUnion* TIntermediate::addConstantUnion(double d, TBasicType baseType, const TSourceLoc& loc, bool literal) const
 {
-#ifdef AMD_EXTENSIONS
     assert(baseType == EbtFloat || baseType == EbtDouble || baseType == EbtFloat16);
-#else
-    assert(baseType == EbtFloat || baseType == EbtDouble);
-#endif
 
     TConstUnionArray unionArray(1);
     unionArray[0].setDConst(d);
@@ -2129,12 +2717,10 @@
         case EOpVectorSwizzle:
         case EOpConvFloatToDouble:
         case EOpConvDoubleToFloat:
-#ifdef AMD_EXTENSIONS
         case EOpConvFloat16ToFloat:
         case EOpConvFloatToFloat16:
         case EOpConvFloat16ToDouble:
         case EOpConvDoubleToFloat16:
-#endif
             return true;
         default:
             return false;
@@ -2158,51 +2744,97 @@
     case EOpIndexDirectStruct:
     case EOpVectorSwizzle:
 
-    // conversion constructors
-    case EOpConvIntToBool:
-    case EOpConvUintToBool:
-    case EOpConvUintToInt:
-    case EOpConvBoolToInt:
-    case EOpConvIntToUint:
-    case EOpConvBoolToUint:
-    case EOpConvInt64ToBool:
-    case EOpConvBoolToInt64:
-    case EOpConvUint64ToBool:
-    case EOpConvBoolToUint64:
-    case EOpConvInt64ToInt:
-    case EOpConvIntToInt64:
-    case EOpConvUint64ToUint:
-    case EOpConvUintToUint64:
-    case EOpConvInt64ToUint64:
-    case EOpConvUint64ToInt64:
-    case EOpConvInt64ToUint:
-    case EOpConvUintToInt64:
-    case EOpConvUint64ToInt:
-    case EOpConvIntToUint64:
-#ifdef AMD_EXTENSIONS
+    // (u)int* -> bool
+    case EOpConvInt8ToBool:
     case EOpConvInt16ToBool:
-    case EOpConvBoolToInt16:
-    case EOpConvInt16ToInt:
-    case EOpConvIntToInt16:
-    case EOpConvInt16ToUint:
-    case EOpConvUintToInt16:
-    case EOpConvInt16ToInt64:
-    case EOpConvInt64ToInt16:
-    case EOpConvInt16ToUint64:
-    case EOpConvUint64ToInt16:
+    case EOpConvIntToBool:
+    case EOpConvInt64ToBool:
+    case EOpConvUint8ToBool:
     case EOpConvUint16ToBool:
+    case EOpConvUintToBool:
+    case EOpConvUint64ToBool:
+
+    // bool -> (u)int*
+    case EOpConvBoolToInt8:
+    case EOpConvBoolToInt16:
+    case EOpConvBoolToInt:
+    case EOpConvBoolToInt64:
+    case EOpConvBoolToUint8:
     case EOpConvBoolToUint16:
-    case EOpConvUint16ToInt:
-    case EOpConvIntToUint16:
-    case EOpConvUint16ToUint:
-    case EOpConvUintToUint16:
-    case EOpConvUint16ToInt64:
-    case EOpConvInt64ToUint16:
-    case EOpConvUint16ToUint64:
-    case EOpConvUint64ToUint16:
+    case EOpConvBoolToUint:
+    case EOpConvBoolToUint64:
+
+    // int8_t -> (u)int*
+    case EOpConvInt8ToInt16:
+    case EOpConvInt8ToInt:
+    case EOpConvInt8ToInt64:
+    case EOpConvInt8ToUint8:
+    case EOpConvInt8ToUint16:
+    case EOpConvInt8ToUint:
+    case EOpConvInt8ToUint64:
+
+    // int16_t -> (u)int*
+    case EOpConvInt16ToInt8:
+    case EOpConvInt16ToInt:
+    case EOpConvInt16ToInt64:
+    case EOpConvInt16ToUint8:
     case EOpConvInt16ToUint16:
+    case EOpConvInt16ToUint:
+    case EOpConvInt16ToUint64:
+
+    // int32_t -> (u)int*
+    case EOpConvIntToInt8:
+    case EOpConvIntToInt16:
+    case EOpConvIntToInt64:
+    case EOpConvIntToUint8:
+    case EOpConvIntToUint16:
+    case EOpConvIntToUint:
+    case EOpConvIntToUint64:
+
+    // int64_t -> (u)int*
+    case EOpConvInt64ToInt8:
+    case EOpConvInt64ToInt16:
+    case EOpConvInt64ToInt:
+    case EOpConvInt64ToUint8:
+    case EOpConvInt64ToUint16:
+    case EOpConvInt64ToUint:
+    case EOpConvInt64ToUint64:
+
+    // uint8_t -> (u)int*
+    case EOpConvUint8ToInt8:
+    case EOpConvUint8ToInt16:
+    case EOpConvUint8ToInt:
+    case EOpConvUint8ToInt64:
+    case EOpConvUint8ToUint16:
+    case EOpConvUint8ToUint:
+    case EOpConvUint8ToUint64:
+
+    // uint16_t -> (u)int*
+    case EOpConvUint16ToInt8:
     case EOpConvUint16ToInt16:
-#endif
+    case EOpConvUint16ToInt:
+    case EOpConvUint16ToInt64:
+    case EOpConvUint16ToUint8:
+    case EOpConvUint16ToUint:
+    case EOpConvUint16ToUint64:
+
+    // uint32_t -> (u)int*
+    case EOpConvUintToInt8:
+    case EOpConvUintToInt16:
+    case EOpConvUintToInt:
+    case EOpConvUintToInt64:
+    case EOpConvUintToUint8:
+    case EOpConvUintToUint16:
+    case EOpConvUintToUint64:
+
+    // uint64_t -> (u)int*
+    case EOpConvUint64ToInt8:
+    case EOpConvUint64ToInt16:
+    case EOpConvUint64ToInt:
+    case EOpConvUint64ToInt64:
+    case EOpConvUint64ToUint8:
+    case EOpConvUint64ToUint16:
+    case EOpConvUint64ToUint:
 
     // unary operations
     case EOpNegative:
@@ -2329,15 +2961,7 @@
         }
         break;
     case EOpBitwiseNot:
-        if (operand->getBasicType() != EbtInt &&
-            operand->getBasicType() != EbtUint &&
-#ifdef AMD_EXTENSIONS
-            operand->getBasicType() != EbtInt16 &&
-            operand->getBasicType() != EbtUint16 &&
-#endif
-            operand->getBasicType() != EbtInt64 &&
-            operand->getBasicType() != EbtUint64)
-
+        if (!isTypeInt(operand->getBasicType()))
             return false;
         break;
     case EOpNegative:
@@ -2345,18 +2969,9 @@
     case EOpPostDecrement:
     case EOpPreIncrement:
     case EOpPreDecrement:
-        if (operand->getBasicType() != EbtInt &&
-            operand->getBasicType() != EbtUint &&
-            operand->getBasicType() != EbtInt64 &&
-            operand->getBasicType() != EbtUint64 &&
-#ifdef AMD_EXTENSIONS
-            operand->getBasicType() != EbtInt16 &&
-            operand->getBasicType() != EbtUint16 &&
-#endif
+        if (!isTypeInt(operand->getBasicType()) &&
             operand->getBasicType() != EbtFloat &&
-#ifdef AMD_EXTENSIONS
             operand->getBasicType() != EbtFloat16 &&
-#endif
             operand->getBasicType() != EbtDouble)
 
             return false;
@@ -2376,11 +2991,7 @@
 
 void TIntermUnary::updatePrecision()
 {
-#ifdef AMD_EXTENSIONS
     if (getBasicType() == EbtInt || getBasicType() == EbtUint || getBasicType() == EbtFloat || getBasicType() == EbtFloat16) {
-#else
-    if (getBasicType() == EbtInt || getBasicType() == EbtUint || getBasicType() == EbtFloat) {
-#endif
         if (operand->getQualifier().precision > getQualifier().precision)
             getQualifier().precision = operand->getQualifier().precision;
     }
@@ -2563,16 +3174,7 @@
             break;
 
         // Check for integer-only operands.
-        if ((left->getBasicType() != EbtInt &&  left->getBasicType() != EbtUint &&
-#ifdef AMD_EXTENSIONS
-             left->getBasicType() != EbtInt16 && left->getBasicType() != EbtUint16 &&
-#endif
-             left->getBasicType() != EbtInt64 && left->getBasicType() != EbtUint64) ||
-            (right->getBasicType() != EbtInt && right->getBasicType() != EbtUint &&
-#ifdef AMD_EXTENSIONS
-             right->getBasicType() != EbtInt16 && right->getBasicType() != EbtUint16 &&
-#endif
-             right->getBasicType() != EbtInt64 && right->getBasicType() != EbtUint64))
+        if (!isTypeInt(left->getBasicType()) && !isTypeInt(right->getBasicType()))
             return false;
         if (left->isMatrix() || right->isMatrix())
             return false;
@@ -2873,11 +3475,7 @@
 
 void TIntermBinary::updatePrecision()
 {
-#ifdef AMD_EXTENSIONS
     if (getBasicType() == EbtInt || getBasicType() == EbtUint || getBasicType() == EbtFloat || getBasicType() == EbtFloat16) {
-#else
-    if (getBasicType() == EbtInt || getBasicType() == EbtUint || getBasicType() == EbtFloat) {
-#endif
         getQualifier().precision = std::max(right->getQualifier().precision, left->getQualifier().precision);
         if (getQualifier().precision != EpqNone) {
             left->propagatePrecision(getQualifier().precision);
@@ -2888,11 +3486,7 @@
 
 void TIntermTyped::propagatePrecision(TPrecisionQualifier newPrecision)
 {
-#ifdef AMD_EXTENSIONS
     if (getQualifier().precision != EpqNone || (getBasicType() != EbtInt && getBasicType() != EbtUint && getBasicType() != EbtFloat && getBasicType() != EbtFloat16))
-#else
-    if (getQualifier().precision != EpqNone || (getBasicType() != EbtInt && getBasicType() != EbtUint && getBasicType() != EbtFloat))
-#endif
         return;
 
     getQualifier().precision = newPrecision;
@@ -2967,9 +3561,7 @@
                 break;
             case EbtFloat:
             case EbtDouble:
-#ifdef AMD_EXTENSIONS
             case EbtFloat16:
-#endif
                 leftUnionArray[i] = rightUnionArray[i];
                 break;
             default:
@@ -2995,16 +3587,13 @@
                 break;
             case EbtFloat:
             case EbtDouble:
-#ifdef AMD_EXTENSIONS
             case EbtFloat16:
-#endif
                 leftUnionArray[i] = rightUnionArray[i];
                 break;
             default:
                 return node;
             }
             break;
-#ifdef AMD_EXTENSIONS
         case EbtFloat16:
             switch (node->getType().getBasicType()) {
             case EbtInt:
@@ -3031,7 +3620,6 @@
                 return node;
             }
             break;
-#endif
         case EbtInt:
             switch (node->getType().getBasicType()) {
             case EbtInt:
@@ -3051,9 +3639,7 @@
                 break;
             case EbtFloat:
             case EbtDouble:
-#ifdef AMD_EXTENSIONS
             case EbtFloat16:
-#endif
                 leftUnionArray[i].setIConst(static_cast<int>(rightUnionArray[i].getDConst()));
                 break;
             default:
@@ -3079,9 +3665,7 @@
                 break;
             case EbtFloat:
             case EbtDouble:
-#ifdef AMD_EXTENSIONS
             case EbtFloat16:
-#endif
                 leftUnionArray[i].setUConst(static_cast<unsigned int>(rightUnionArray[i].getDConst()));
                 break;
             default:
@@ -3107,9 +3691,7 @@
                 break;
             case EbtFloat:
             case EbtDouble:
-#ifdef AMD_EXTENSIONS
             case EbtFloat16:
-#endif
                 leftUnionArray[i].setBConst(rightUnionArray[i].getDConst() != 0.0);
                 break;
             default:
@@ -3135,9 +3717,7 @@
                 break;
             case EbtFloat:
             case EbtDouble:
-#ifdef AMD_EXTENSIONS
             case EbtFloat16:
-#endif
                 leftUnionArray[i].setI64Const(static_cast<long long>(rightUnionArray[i].getDConst()));
                 break;
             default:
@@ -3163,9 +3743,7 @@
                 break;
             case EbtFloat:
             case EbtDouble:
-#ifdef AMD_EXTENSIONS
             case EbtFloat16:
-#endif
                 leftUnionArray[i].setU64Const(static_cast<unsigned long long>(rightUnionArray[i].getDConst()));
                 break;
             default:
diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp
index 0d9cea7..fe0f21a 100644
--- a/glslang/MachineIndependent/ParseHelper.cpp
+++ b/glslang/MachineIndependent/ParseHelper.cpp
@@ -2,6 +2,7 @@
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2015 LunarG, Inc.
 // Copyright (C) 2015-2016 Google, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -1632,9 +1633,33 @@
         intermediate.setMultiStream();
         break;
 
+    case EOpSubgroupClusteredAdd:
+    case EOpSubgroupClusteredMul:
+    case EOpSubgroupClusteredMin:
+    case EOpSubgroupClusteredMax:
+    case EOpSubgroupClusteredAnd:
+    case EOpSubgroupClusteredOr:
+    case EOpSubgroupClusteredXor:
+        if ((*argp)[1]->getAsConstantUnion() == nullptr)
+            error(loc, "argument must be compile-time constant", "cluster size", "");
+        else {
+            int size = (*argp)[1]->getAsConstantUnion()->getConstArray()[0].getIConst();
+            if (size < 1)
+                error(loc, "argument must be at least 1", "cluster size", "");
+            else if (!IsPow2(size))
+                error(loc, "argument must be a power of 2", "cluster size", "");
+        }
+        break;
+
     default:
         break;
     }
+
+    if (callNode.getOp() > EOpSubgroupGuardStart && callNode.getOp() < EOpSubgroupGuardStop) {
+        // these require SPIR-V 1.3
+        if (spvVersion.spv > 0 && spvVersion.spv < EShTargetSpv_1_3)
+            error(loc, "requires SPIR-V 1.3", "subgroup op", "");
+    }
 }
 
 extern bool PureOperatorBuiltins;
@@ -2196,7 +2221,6 @@
     case EOpConstructDMat4x2:
     case EOpConstructDMat4x3:
     case EOpConstructDMat4x4:
-#ifdef AMD_EXTENSIONS
     case EOpConstructF16Mat2x2:
     case EOpConstructF16Mat2x3:
     case EOpConstructF16Mat2x4:
@@ -2206,7 +2230,6 @@
     case EOpConstructF16Mat4x2:
     case EOpConstructF16Mat4x3:
     case EOpConstructF16Mat4x4:
-#endif
         constructingMatrix = true;
         break;
     default:
@@ -2263,18 +2286,30 @@
         // Finish pinning down spec-const semantics
         if (specConstType) {
             switch (op) {
+            case EOpConstructInt8:
+            case EOpConstructUint8:
+            case EOpConstructInt16:
+            case EOpConstructUint16:
             case EOpConstructInt:
             case EOpConstructUint:
             case EOpConstructInt64:
             case EOpConstructUint64:
-#ifdef AMD_EXTENSIONS
-            case EOpConstructInt16:
-            case EOpConstructUint16:
-#endif
             case EOpConstructBool:
             case EOpConstructBVec2:
             case EOpConstructBVec3:
             case EOpConstructBVec4:
+            case EOpConstructI8Vec2:
+            case EOpConstructI8Vec3:
+            case EOpConstructI8Vec4:
+            case EOpConstructU8Vec2:
+            case EOpConstructU8Vec3:
+            case EOpConstructU8Vec4:
+            case EOpConstructI16Vec2:
+            case EOpConstructI16Vec3:
+            case EOpConstructI16Vec4:
+            case EOpConstructU16Vec2:
+            case EOpConstructU16Vec3:
+            case EOpConstructU16Vec4:
             case EOpConstructIVec2:
             case EOpConstructIVec3:
             case EOpConstructIVec4:
@@ -2287,14 +2322,6 @@
             case EOpConstructU64Vec2:
             case EOpConstructU64Vec3:
             case EOpConstructU64Vec4:
-#ifdef AMD_EXTENSIONS
-            case EOpConstructI16Vec2:
-            case EOpConstructI16Vec3:
-            case EOpConstructI16Vec4:
-            case EOpConstructU16Vec2:
-            case EOpConstructU16Vec3:
-            case EOpConstructU16Vec4:
-#endif
                 // This was the list of valid ones, if they aren't converting from float
                 // and aren't making an array.
                 makeSpecConst = ! floatArgument && ! type.isArray();
@@ -2602,12 +2629,7 @@
         return;
     }
 
-    if (publicType.basicType == EbtInt   || publicType.basicType == EbtUint   ||
-#ifdef AMD_EXTENSIONS
-        publicType.basicType == EbtInt16 || publicType.basicType == EbtUint16 ||
-#endif
-        publicType.basicType == EbtInt64 || publicType.basicType == EbtUint64 ||
-        publicType.basicType == EbtDouble)
+    if (isTypeInt(publicType.basicType) || publicType.basicType == EbtDouble)
         profileRequires(loc, EEsProfile, 300, nullptr, "shader input/output");
 
 #ifdef AMD_EXTENSIONS
@@ -2615,13 +2637,13 @@
 #else
     if (!qualifier.flat) {
 #endif
-        if (publicType.basicType == EbtInt    || publicType.basicType == EbtUint   ||
-#ifdef AMD_EXTENSIONS
-            publicType.basicType == EbtInt16  || publicType.basicType == EbtUint16 ||
-#endif
-            publicType.basicType == EbtInt64  || publicType.basicType == EbtUint64 ||
+        if (isTypeInt(publicType.basicType) ||
             publicType.basicType == EbtDouble ||
-            (publicType.userDef && (publicType.userDef->containsBasicType(EbtInt)    ||
+            (publicType.userDef && (publicType.userDef->containsBasicType(EbtInt8)   ||
+                                    publicType.userDef->containsBasicType(EbtUint8)  ||
+                                    publicType.userDef->containsBasicType(EbtInt16)  ||
+                                    publicType.userDef->containsBasicType(EbtUint16) ||
+                                    publicType.userDef->containsBasicType(EbtInt)    ||
                                     publicType.userDef->containsBasicType(EbtUint)   ||
                                     publicType.userDef->containsBasicType(EbtInt64)  ||
                                     publicType.userDef->containsBasicType(EbtUint64) ||
@@ -4643,11 +4665,9 @@
         // containing a double, the offset must also be a multiple of 8..."
         if (type.containsBasicType(EbtDouble) && ! IsMultipleOfPow2(qualifier.layoutXfbOffset, 8))
             error(loc, "type contains double; xfb_offset must be a multiple of 8", "xfb_offset", "");
-#ifdef AMD_EXTENSIONS
         // ..., if applied to an aggregate containing a float16_t, the offset must also be a multiple of 2..."
         else if (type.containsBasicType(EbtFloat16) && !IsMultipleOfPow2(qualifier.layoutXfbOffset, 2))
             error(loc, "type contains half float; xfb_offset must be a multiple of 2", "xfb_offset", "");
-#endif
         else if (! IsMultipleOfPow2(qualifier.layoutXfbOffset, 4))
             error(loc, "must be a multiple of size of first component", "xfb_offset", "");
     }
@@ -4758,20 +4778,18 @@
             error(loc, "can only be applied to a scalar", "constant_id", "");
         switch (type.getBasicType())
         {
+        case EbtInt8:
+        case EbtUint8:
+        case EbtInt16:
+        case EbtUint16:
         case EbtInt:
         case EbtUint:
         case EbtInt64:
         case EbtUint64:
-#ifdef AMD_EXTENSIONS
-        case EbtInt16:
-        case EbtUint16:
-#endif
         case EbtBool:
         case EbtFloat:
         case EbtDouble:
-#ifdef AMD_EXTENSIONS
         case EbtFloat16:
-#endif
             break;
         default:
             error(loc, "cannot be applied to this type", "constant_id", "");
@@ -4968,10 +4986,21 @@
         return nullptr;
     }
 
+    bool explicitTypesEnabled = extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
+                                extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int8) ||
+                                extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int16) ||
+                                extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int32) ||
+                                extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int64) ||
+                                extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_float16) ||
+                                extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_float32) ||
+                                extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_float64);
+
     if (profile == EEsProfile || version < 120)
         function = findFunctionExact(loc, call, builtIn);
     else if (version < 400)
         function = findFunction120(loc, call, builtIn);
+    else if (explicitTypesEnabled)
+        function = findFunctionExplicitTypes(loc, call, builtIn);
     else
         function = findFunction400(loc, call, builtIn);
 
@@ -5156,6 +5185,85 @@
     return bestMatch;
 }
 
+// "To determine whether the conversion for a single argument in one match
+//  is better than that for another match, the conversion is assigned of the
+//  three ranks ordered from best to worst:
+//   1. Exact match: no conversion.
+//    2. Promotion: integral or floating-point promotion.
+//    3. Conversion: integral conversion, floating-point conversion,
+//       floating-integral conversion.
+//  A conversion C1 is better than a conversion C2 if the rank of C1 is
+//  better than the rank of C2."
+const TFunction* TParseContext::findFunctionExplicitTypes(const TSourceLoc& loc, const TFunction& call, bool& builtIn)
+{
+    // first, look for an exact match
+    TSymbol* symbol = symbolTable.find(call.getMangledName(), &builtIn);
+    if (symbol)
+        return symbol->getAsFunction();
+
+    // no exact match, use the generic selector, parameterized by the GLSL rules
+
+    // create list of candidates to send
+    TVector<const TFunction*> candidateList;
+    symbolTable.findFunctionNameList(call.getMangledName(), candidateList, builtIn);
+
+    // can 'from' convert to 'to'?
+    const auto convertible = [this](const TType& from, const TType& to, TOperator, int) -> bool {
+        if (from == to)
+            return true;
+        if (from.isArray() || to.isArray() || ! from.sameElementShape(to))
+            return false;
+        return intermediate.canImplicitlyPromote(from.getBasicType(), to.getBasicType());
+    };
+
+    // Is 'to2' a better conversion than 'to1'?
+    // Ties should not be considered as better.
+    // Assumes 'convertible' already said true.
+    const auto better = [this](const TType& from, const TType& to1, const TType& to2) -> bool {
+        // 1. exact match
+        if (from == to2)
+            return from != to1;
+        if (from == to1)
+            return false;
+
+        // 2. Promotion (integral, floating-point) is better
+        TBasicType from_type = from.getBasicType();
+        TBasicType to1_type = to1.getBasicType();
+        TBasicType to2_type = to2.getBasicType();
+        bool isPromotion1 = (intermediate.isIntegralPromotion(from_type, to1_type) ||
+                             intermediate.isFPPromotion(from_type, to1_type));
+        bool isPromotion2 = (intermediate.isIntegralPromotion(from_type, to2_type) ||
+                             intermediate.isFPPromotion(from_type, to2_type));
+        if (isPromotion2)
+            return !isPromotion1;
+        if(isPromotion1)
+            return false;
+
+        // 3. Conversion (integral, floating-point , floating-integral)
+        bool isConversion1 = (intermediate.isIntegralConversion(from_type, to1_type) ||
+                              intermediate.isFPConversion(from_type, to1_type) ||
+                              intermediate.isFPIntegralConversion(from_type, to1_type));
+        bool isConversion2 = (intermediate.isIntegralConversion(from_type, to2_type) ||
+                              intermediate.isFPConversion(from_type, to2_type) ||
+                              intermediate.isFPIntegralConversion(from_type, to2_type));
+
+        return isConversion2 && !isConversion1;
+    };
+
+    // for ambiguity reporting
+    bool tie = false;
+
+    // send to the generic selector
+    const TFunction* bestMatch = selectFunction(candidateList, call, convertible, better, tie);
+
+    if (bestMatch == nullptr)
+        error(loc, "no matching overloaded function found", call.getName().c_str(), "");
+    else if (tie)
+        error(loc, "ambiguous best function under implicit type conversion", call.getName().c_str(), "");
+
+    return bestMatch;
+}
+
 // When a declaration includes a type, but not a variable name, it can be
 // to establish defaults.
 void TParseContext::declareTypeDefaults(const TSourceLoc& loc, const TPublicType& publicType)
@@ -5680,7 +5788,6 @@
         basicOp = EOpConstructDouble;
         break;
 
-#ifdef AMD_EXTENSIONS
     case EOpConstructF16Vec2:
     case EOpConstructF16Vec3:
     case EOpConstructF16Vec4:
@@ -5696,7 +5803,34 @@
     case EOpConstructFloat16:
         basicOp = EOpConstructFloat16;
         break;
-#endif
+
+    case EOpConstructI8Vec2:
+    case EOpConstructI8Vec3:
+    case EOpConstructI8Vec4:
+    case EOpConstructInt8:
+        basicOp = EOpConstructInt8;
+        break;
+
+    case EOpConstructU8Vec2:
+    case EOpConstructU8Vec3:
+    case EOpConstructU8Vec4:
+    case EOpConstructUint8:
+        basicOp = EOpConstructUint8;
+        break;
+
+    case EOpConstructI16Vec2:
+    case EOpConstructI16Vec3:
+    case EOpConstructI16Vec4:
+    case EOpConstructInt16:
+        basicOp = EOpConstructInt16;
+        break;
+
+    case EOpConstructU16Vec2:
+    case EOpConstructU16Vec3:
+    case EOpConstructU16Vec4:
+    case EOpConstructUint16:
+        basicOp = EOpConstructUint16;
+        break;
 
     case EOpConstructIVec2:
     case EOpConstructIVec3:
@@ -5726,22 +5860,6 @@
         basicOp = EOpConstructUint64;
         break;
 
-#ifdef AMD_EXTENSIONS
-    case EOpConstructI16Vec2:
-    case EOpConstructI16Vec3:
-    case EOpConstructI16Vec4:
-    case EOpConstructInt16:
-        basicOp = EOpConstructInt16;
-        break;
-
-    case EOpConstructU16Vec2:
-    case EOpConstructU16Vec3:
-    case EOpConstructU16Vec4:
-    case EOpConstructUint16:
-        basicOp = EOpConstructUint16;
-        break;
-#endif
-
     case EOpConstructBVec2:
     case EOpConstructBVec3:
     case EOpConstructBVec4:
diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h
index 3ef3e26..c70afc2 100644
--- a/glslang/MachineIndependent/ParseHelper.h
+++ b/glslang/MachineIndependent/ParseHelper.h
@@ -392,6 +392,7 @@
     const TFunction* findFunctionExact(const TSourceLoc& loc, const TFunction& call, bool& builtIn);
     const TFunction* findFunction120(const TSourceLoc& loc, const TFunction& call, bool& builtIn);
     const TFunction* findFunction400(const TSourceLoc& loc, const TFunction& call, bool& builtIn);
+    const TFunction* findFunctionExplicitTypes(const TSourceLoc& loc, const TFunction& call, bool& builtIn);
     void declareTypeDefaults(const TSourceLoc&, const TPublicType&);
     TIntermNode* declareVariable(const TSourceLoc&, TString& identifier, const TPublicType&, TArraySizes* typeArray = 0, TIntermTyped* initializer = 0);
     TIntermTyped* addConstructor(const TSourceLoc&, TIntermNode*, const TType&);
diff --git a/glslang/MachineIndependent/Scan.cpp b/glslang/MachineIndependent/Scan.cpp
index db1642f..92824ef 100644
--- a/glslang/MachineIndependent/Scan.cpp
+++ b/glslang/MachineIndependent/Scan.cpp
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2013 LunarG, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -464,16 +465,34 @@
     (*KeywordMap)["u64vec3"] =                 U64VEC3;
     (*KeywordMap)["u64vec4"] =                 U64VEC4;
 
-#ifdef AMD_EXTENSIONS
+    // GL_KHX_shader_explicit_arithmetic_types
+    (*KeywordMap)["int8_t"] =                  INT8_T;
+    (*KeywordMap)["i8vec2"] =                  I8VEC2;
+    (*KeywordMap)["i8vec3"] =                  I8VEC3;
+    (*KeywordMap)["i8vec4"] =                  I8VEC4;
+    (*KeywordMap)["uint8_t"] =                 UINT8_T;
+    (*KeywordMap)["u8vec2"] =                  U8VEC2;
+    (*KeywordMap)["u8vec3"] =                  U8VEC3;
+    (*KeywordMap)["u8vec4"] =                  U8VEC4;
+
     (*KeywordMap)["int16_t"] =                 INT16_T;
-    (*KeywordMap)["uint16_t"] =                UINT16_T;
     (*KeywordMap)["i16vec2"] =                 I16VEC2;
     (*KeywordMap)["i16vec3"] =                 I16VEC3;
     (*KeywordMap)["i16vec4"] =                 I16VEC4;
+    (*KeywordMap)["uint16_t"] =                UINT16_T;
     (*KeywordMap)["u16vec2"] =                 U16VEC2;
     (*KeywordMap)["u16vec3"] =                 U16VEC3;
     (*KeywordMap)["u16vec4"] =                 U16VEC4;
 
+    (*KeywordMap)["int32_t"] =                 INT32_T;
+    (*KeywordMap)["i32vec2"] =                 I32VEC2;
+    (*KeywordMap)["i32vec3"] =                 I32VEC3;
+    (*KeywordMap)["i32vec4"] =                 I32VEC4;
+    (*KeywordMap)["uint32_t"] =                UINT32_T;
+    (*KeywordMap)["u32vec2"] =                 U32VEC2;
+    (*KeywordMap)["u32vec3"] =                 U32VEC3;
+    (*KeywordMap)["u32vec4"] =                 U32VEC4;
+
     (*KeywordMap)["float16_t"] =               FLOAT16_T;
     (*KeywordMap)["f16vec2"] =                 F16VEC2;
     (*KeywordMap)["f16vec3"] =                 F16VEC3;
@@ -490,7 +509,39 @@
     (*KeywordMap)["f16mat4x2"] =               F16MAT4X2;
     (*KeywordMap)["f16mat4x3"] =               F16MAT4X3;
     (*KeywordMap)["f16mat4x4"] =               F16MAT4X4;
-#endif
+
+    (*KeywordMap)["float32_t"] =               FLOAT32_T;
+    (*KeywordMap)["f32vec2"] =                 F32VEC2;
+    (*KeywordMap)["f32vec3"] =                 F32VEC3;
+    (*KeywordMap)["f32vec4"] =                 F32VEC4;
+    (*KeywordMap)["f32mat2"] =                 F32MAT2;
+    (*KeywordMap)["f32mat3"] =                 F32MAT3;
+    (*KeywordMap)["f32mat4"] =                 F32MAT4;
+    (*KeywordMap)["f32mat2x2"] =               F32MAT2X2;
+    (*KeywordMap)["f32mat2x3"] =               F32MAT2X3;
+    (*KeywordMap)["f32mat2x4"] =               F32MAT2X4;
+    (*KeywordMap)["f32mat3x2"] =               F32MAT3X2;
+    (*KeywordMap)["f32mat3x3"] =               F32MAT3X3;
+    (*KeywordMap)["f32mat3x4"] =               F32MAT3X4;
+    (*KeywordMap)["f32mat4x2"] =               F32MAT4X2;
+    (*KeywordMap)["f32mat4x3"] =               F32MAT4X3;
+    (*KeywordMap)["f32mat4x4"] =               F32MAT4X4;
+    (*KeywordMap)["float64_t"] =               FLOAT64_T;
+    (*KeywordMap)["f64vec2"] =                 F64VEC2;
+    (*KeywordMap)["f64vec3"] =                 F64VEC3;
+    (*KeywordMap)["f64vec4"] =                 F64VEC4;
+    (*KeywordMap)["f64mat2"] =                 F64MAT2;
+    (*KeywordMap)["f64mat3"] =                 F64MAT3;
+    (*KeywordMap)["f64mat4"] =                 F64MAT4;
+    (*KeywordMap)["f64mat2x2"] =               F64MAT2X2;
+    (*KeywordMap)["f64mat2x3"] =               F64MAT2X3;
+    (*KeywordMap)["f64mat2x4"] =               F64MAT2X4;
+    (*KeywordMap)["f64mat3x2"] =               F64MAT3X2;
+    (*KeywordMap)["f64mat3x3"] =               F64MAT3X3;
+    (*KeywordMap)["f64mat3x4"] =               F64MAT3X4;
+    (*KeywordMap)["f64mat4x2"] =               F64MAT4X2;
+    (*KeywordMap)["f64mat4x3"] =               F64MAT4X3;
+    (*KeywordMap)["f64mat4x4"] =               F64MAT4X4;
 
     (*KeywordMap)["sampler2D"] =               SAMPLER2D;
     (*KeywordMap)["samplerCube"] =             SAMPLERCUBE;
@@ -763,19 +814,15 @@
             parseContext.error(loc, "not supported", "::", "");
             break;
 
-        case PpAtomConstInt:           parserToken->sType.lex.i   = ppToken.ival;       return INTCONSTANT;
-        case PpAtomConstUint:          parserToken->sType.lex.i   = ppToken.ival;       return UINTCONSTANT;
-        case PpAtomConstInt64:         parserToken->sType.lex.i64 = ppToken.i64val;     return INT64CONSTANT;
-        case PpAtomConstUint64:        parserToken->sType.lex.i64 = ppToken.i64val;     return UINT64CONSTANT;
-#ifdef AMD_EXTENSIONS
-        case PpAtomConstInt16:         parserToken->sType.lex.i   = ppToken.ival;       return INT16CONSTANT;
-        case PpAtomConstUint16:        parserToken->sType.lex.i   = ppToken.ival;       return UINT16CONSTANT;
-#endif
-        case PpAtomConstFloat:         parserToken->sType.lex.d   = ppToken.dval;       return FLOATCONSTANT;
-        case PpAtomConstDouble:        parserToken->sType.lex.d   = ppToken.dval;       return DOUBLECONSTANT;
-#ifdef AMD_EXTENSIONS
-        case PpAtomConstFloat16:       parserToken->sType.lex.d   = ppToken.dval;       return FLOAT16CONSTANT;
-#endif
+        case PpAtomConstInt:           parserToken->sType.lex.i    = ppToken.ival;       return INTCONSTANT;
+        case PpAtomConstUint:          parserToken->sType.lex.i    = ppToken.ival;       return UINTCONSTANT;
+        case PpAtomConstInt16:         parserToken->sType.lex.i    = ppToken.ival;       return INT16CONSTANT;
+        case PpAtomConstUint16:        parserToken->sType.lex.i    = ppToken.ival;       return UINT16CONSTANT;
+        case PpAtomConstInt64:         parserToken->sType.lex.i64  = ppToken.i64val;     return INT64CONSTANT;
+        case PpAtomConstUint64:        parserToken->sType.lex.i64  = ppToken.i64val;     return UINT64CONSTANT;
+        case PpAtomConstFloat:         parserToken->sType.lex.d    = ppToken.dval;       return FLOATCONSTANT;
+        case PpAtomConstDouble:        parserToken->sType.lex.d    = ppToken.dval;       return DOUBLECONSTANT;
+        case PpAtomConstFloat16:       parserToken->sType.lex.d    = ppToken.dval;       return FLOAT16CONSTANT;
         case PpAtomIdentifier:
         {
             int token = tokenizeIdentifier();
@@ -1036,11 +1083,28 @@
         afterType = true;
         if (parseContext.symbolTable.atBuiltInLevel() ||
             (parseContext.profile != EEsProfile && parseContext.version >= 450 &&
-             parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_int64)))
+             (parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_int64) ||
+              parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
+              parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int64))))
             return keyword;
         return identifierOrType();
 
-#ifdef AMD_EXTENSIONS
+    case INT8_T:
+    case UINT8_T:
+    case I8VEC2:
+    case I8VEC3:
+    case I8VEC4:
+    case U8VEC2:
+    case U8VEC3:
+    case U8VEC4:
+        afterType = true;
+        if (parseContext.symbolTable.atBuiltInLevel() ||
+            ((parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
+              parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int8)) &&
+              parseContext.profile != EEsProfile && parseContext.version >= 450))
+            return keyword;
+        return identifierOrType();
+
     case INT16_T:
     case UINT16_T:
     case I16VEC2:
@@ -1052,7 +1116,74 @@
         afterType = true;
         if (parseContext.symbolTable.atBuiltInLevel() ||
             (parseContext.profile != EEsProfile && parseContext.version >= 450 &&
-             parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_int16)))
+             (
+#ifdef AMD_EXTENSIONS
+              parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_int16) ||
+#endif
+              parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
+              parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int16))))
+            return keyword;
+        return identifierOrType();
+    case INT32_T:
+    case UINT32_T:
+    case I32VEC2:
+    case I32VEC3:
+    case I32VEC4:
+    case U32VEC2:
+    case U32VEC3:
+    case U32VEC4:
+        afterType = true;
+        if (parseContext.symbolTable.atBuiltInLevel() ||
+           ((parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
+             parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int32)) &&
+             parseContext.profile != EEsProfile && parseContext.version >= 450))
+            return keyword;
+        return identifierOrType();
+    case FLOAT32_T:
+    case F32VEC2:
+    case F32VEC3:
+    case F32VEC4:
+    case F32MAT2:
+    case F32MAT3:
+    case F32MAT4:
+    case F32MAT2X2:
+    case F32MAT2X3:
+    case F32MAT2X4:
+    case F32MAT3X2:
+    case F32MAT3X3:
+    case F32MAT3X4:
+    case F32MAT4X2:
+    case F32MAT4X3:
+    case F32MAT4X4:
+        afterType = true;
+        if (parseContext.symbolTable.atBuiltInLevel() ||
+            ((parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
+              parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_float32)) &&
+              parseContext.profile != EEsProfile && parseContext.version >= 450))
+            return keyword;
+        return identifierOrType();
+
+    case FLOAT64_T:
+    case F64VEC2:
+    case F64VEC3:
+    case F64VEC4:
+    case F64MAT2:
+    case F64MAT3:
+    case F64MAT4:
+    case F64MAT2X2:
+    case F64MAT2X3:
+    case F64MAT2X4:
+    case F64MAT3X2:
+    case F64MAT3X3:
+    case F64MAT3X4:
+    case F64MAT4X2:
+    case F64MAT4X3:
+    case F64MAT4X4:
+        afterType = true;
+        if (parseContext.symbolTable.atBuiltInLevel() ||
+            ((parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
+              parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_float64)) &&
+              parseContext.profile != EEsProfile && parseContext.version >= 450))
             return keyword;
         return identifierOrType();
 
@@ -1075,11 +1206,15 @@
         afterType = true;
         if (parseContext.symbolTable.atBuiltInLevel() ||
             (parseContext.profile != EEsProfile && parseContext.version >= 450 &&
-             parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float)))
+             (
+#ifdef AMD_EXTENSIONS
+              parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float) ||
+#endif
+              parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
+              parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_float16))))
             return keyword;
 
         return identifierOrType();
-#endif
 
     case SAMPLERCUBEARRAY:
     case SAMPLERCUBEARRAYSHADOW:
diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp
index 0bf428e..7525396 100644
--- a/glslang/MachineIndependent/ShaderLang.cpp
+++ b/glslang/MachineIndependent/ShaderLang.cpp
@@ -619,9 +619,9 @@
 {
     // Set up environmental defaults, first ignoring 'environment'.
     if (messages & EShMsgSpvRules)
-        spvVersion.spv = 0x00010000;
+        spvVersion.spv = EShTargetSpv_1_0;
     if (messages & EShMsgVulkanRules) {
-        spvVersion.vulkan = 100;
+        spvVersion.vulkan = EShTargetVulkan_1_0;
         spvVersion.vulkanGlsl = 100;
     } else if (spvVersion.spv != 0)
         spvVersion.openGl = 100;
diff --git a/glslang/MachineIndependent/SymbolTable.cpp b/glslang/MachineIndependent/SymbolTable.cpp
index 832a0c7..db46e10 100644
--- a/glslang/MachineIndependent/SymbolTable.cpp
+++ b/glslang/MachineIndependent/SymbolTable.cpp
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2013 LunarG, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -60,17 +61,15 @@
     switch (basicType) {
     case EbtFloat:              mangledName += 'f';      break;
     case EbtDouble:             mangledName += 'd';      break;
-#ifdef AMD_EXTENSIONS
     case EbtFloat16:            mangledName += "f16";    break;
-#endif
     case EbtInt:                mangledName += 'i';      break;
     case EbtUint:               mangledName += 'u';      break;
-    case EbtInt64:              mangledName += "i64";    break;
-    case EbtUint64:             mangledName += "u64";    break;
-#ifdef AMD_EXTENSIONS
+    case EbtInt8:               mangledName += "i8";     break;
+    case EbtUint8:              mangledName += "u8";     break;
     case EbtInt16:              mangledName += "i16";    break;
     case EbtUint16:             mangledName += "u16";    break;
-#endif
+    case EbtInt64:              mangledName += "i64";    break;
+    case EbtUint64:             mangledName += "u64";    break;
     case EbtBool:               mangledName += 'b';      break;
     case EbtAtomicUint:         mangledName += "au";     break;
     case EbtSampler:
diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp
index c67b378..1f44cc3 100644
--- a/glslang/MachineIndependent/Versions.cpp
+++ b/glslang/MachineIndependent/Versions.cpp
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2013 LunarG, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -185,6 +186,15 @@
     extensionBehavior[E_GL_ARB_post_depth_coverage]          = EBhDisable;
     extensionBehavior[E_GL_ARB_shader_viewport_layer_array]  = EBhDisable;
 
+    extensionBehavior[E_GL_KHR_shader_subgroup_basic]            = EBhDisable;
+    extensionBehavior[E_GL_KHR_shader_subgroup_vote]             = EBhDisable;
+    extensionBehavior[E_GL_KHR_shader_subgroup_arithmetic]       = EBhDisable;
+    extensionBehavior[E_GL_KHR_shader_subgroup_ballot]           = EBhDisable;
+    extensionBehavior[E_GL_KHR_shader_subgroup_shuffle]          = EBhDisable;
+    extensionBehavior[E_GL_KHR_shader_subgroup_shuffle_relative] = EBhDisable;
+    extensionBehavior[E_GL_KHR_shader_subgroup_clustered]        = EBhDisable;
+    extensionBehavior[E_GL_KHR_shader_subgroup_quad]             = EBhDisable;
+
     extensionBehavior[E_GL_EXT_shader_non_constant_global_initializers] = EBhDisable;
     extensionBehavior[E_GL_EXT_shader_image_load_formatted]             = EBhDisable;
     extensionBehavior[E_GL_EXT_post_depth_coverage]                     = EBhDisable;
@@ -252,6 +262,16 @@
     // OVR extensions
     extensionBehavior[E_GL_OVR_multiview]                = EBhDisable;
     extensionBehavior[E_GL_OVR_multiview2]               = EBhDisable;
+
+    // explicit types
+    extensionBehavior[E_GL_KHX_shader_explicit_arithmetic_types]         = EBhDisable;
+    extensionBehavior[E_GL_KHX_shader_explicit_arithmetic_types_int8]    = EBhDisable;
+    extensionBehavior[E_GL_KHX_shader_explicit_arithmetic_types_int16]   = EBhDisable;
+    extensionBehavior[E_GL_KHX_shader_explicit_arithmetic_types_int32]   = EBhDisable;
+    extensionBehavior[E_GL_KHX_shader_explicit_arithmetic_types_int64]   = EBhDisable;
+    extensionBehavior[E_GL_KHX_shader_explicit_arithmetic_types_float16] = EBhDisable;
+    extensionBehavior[E_GL_KHX_shader_explicit_arithmetic_types_float32] = EBhDisable;
+    extensionBehavior[E_GL_KHX_shader_explicit_arithmetic_types_float64] = EBhDisable;
 }
 
 // Get code that is not part of a shared symbol table, is specific to this shader,
@@ -332,6 +352,16 @@
             "#define GL_EXT_post_depth_coverage 1\n"
             "#define GL_EXT_control_flow_attributes 1\n"
 
+            // GL_KHR_shader_subgroup
+            "#define GL_KHR_shader_subgroup_basic 1\n"
+            "#define GL_KHR_shader_subgroup_vote 1\n"
+            "#define GL_KHR_shader_subgroup_arithmetic 1\n"
+            "#define GL_KHR_shader_subgroup_ballot 1\n"
+            "#define GL_KHR_shader_subgroup_shuffle 1\n"
+            "#define GL_KHR_shader_subgroup_shuffle_relative 1\n"
+            "#define GL_KHR_shader_subgroup_clustered 1\n"
+            "#define GL_KHR_shader_subgroup_quad 1\n"
+
 #ifdef AMD_EXTENSIONS
             "#define GL_AMD_shader_ballot 1\n"
             "#define GL_AMD_shader_trinary_minmax 1\n"
@@ -352,6 +382,14 @@
             "#define GL_NV_shader_atomic_int64 1\n"
             "#define GL_NV_conservative_raster_underestimation 1\n"
 #endif
+            "#define GL_KHX_shader_explicit_arithmetic_types 1\n"
+            "#define GL_KHX_shader_explicit_arithmetic_types_int8 1\n"
+            "#define GL_KHX_shader_explicit_arithmetic_types_int16 1\n"
+            "#define GL_KHX_shader_explicit_arithmetic_types_int32 1\n"
+            "#define GL_KHX_shader_explicit_arithmetic_types_int64 1\n"
+            "#define GL_KHX_shader_explicit_arithmetic_types_float16 1\n"
+            "#define GL_KHX_shader_explicit_arithmetic_types_float32 1\n"
+            "#define GL_KHX_shader_explicit_arithmetic_types_float64 1\n"
             ;
 
         if (version >= 150) {
@@ -689,6 +727,21 @@
         updateExtensionBehavior(line, "GL_OES_shader_io_blocks", behaviorString);
     else if (strcmp(extension, "GL_GOOGLE_include_directive") == 0)
         updateExtensionBehavior(line, "GL_GOOGLE_cpp_style_line_directive", behaviorString);
+    // subgroup_* to subgroup_basic
+    else if (strcmp(extension, "GL_KHR_shader_subgroup_vote") == 0)
+        updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
+    else if (strcmp(extension, "GL_KHR_shader_subgroup_arithmetic") == 0)
+        updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
+    else if (strcmp(extension, "GL_KHR_shader_subgroup_ballot") == 0)
+        updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
+    else if (strcmp(extension, "GL_KHR_shader_subgroup_shuffle") == 0)
+        updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
+    else if (strcmp(extension, "GL_KHR_shader_subgroup_shuffle_relative") == 0)
+        updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
+    else if (strcmp(extension, "GL_KHR_shader_subgroup_clustered") == 0)
+        updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
+    else if (strcmp(extension, "GL_KHR_shader_subgroup_quad") == 0)
+        updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
 }
 
 void TParseVersions::updateExtensionBehavior(const char* extension, TExtensionBehavior behavior)
@@ -746,29 +799,66 @@
     profileRequires(loc, ECompatibilityProfile, 400, nullptr, op);
 }
 
-#ifdef AMD_EXTENSIONS
-// Call for any operation needing GLSL 16-bit integer data-type support.
-void TParseVersions::int16Check(const TSourceLoc& loc, const char* op, bool builtIn)
-{
-    if (! builtIn) {
-        requireExtensions(loc, 1, &E_GL_AMD_gpu_shader_int16, op);
-        requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
-        profileRequires(loc, ECoreProfile, 450, nullptr, op);
-        profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
-    }
-}
-
 // Call for any operation needing GLSL float16 data-type support.
 void TParseVersions::float16Check(const TSourceLoc& loc, const char* op, bool builtIn)
 {
-    if (! builtIn) {
-        requireExtensions(loc, 1, &E_GL_AMD_gpu_shader_half_float, op);
+    if (!builtIn) {
+#if AMD_EXTENSIONS
+        const char* const extensions[3] = {E_GL_AMD_gpu_shader_half_float,
+                                           E_GL_KHX_shader_explicit_arithmetic_types,
+                                           E_GL_KHX_shader_explicit_arithmetic_types_float16};
+
+#else
+        const char* const extensions[2] = {E_GL_KHX_shader_explicit_arithmetic_types,
+                                           E_GL_KHX_shader_explicit_arithmetic_types_float16};
+#endif
+        requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, "explicit types");
         requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
         profileRequires(loc, ECoreProfile, 450, nullptr, op);
         profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
     }
 }
 
+// Call for any operation needing GLSL float32 data-type support.
+void TParseVersions::explicitFloat32Check(const TSourceLoc& loc, const char* op, bool builtIn)
+{
+    if (!builtIn) {
+        const char* const extensions[2] = {E_GL_KHX_shader_explicit_arithmetic_types,
+                                           E_GL_KHX_shader_explicit_arithmetic_types_float32};
+        requireExtensions(loc, 2, extensions, "explicit types");
+        requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
+        profileRequires(loc, ECoreProfile, 450, nullptr, op);
+        profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
+    }
+}
+
+// Call for any operation needing GLSL float64 data-type support.
+void TParseVersions::explicitFloat64Check(const TSourceLoc& loc, const char* op, bool builtIn)
+{
+    if (!builtIn) {
+        const char* const extensions[2] = {E_GL_KHX_shader_explicit_arithmetic_types,
+                                           E_GL_KHX_shader_explicit_arithmetic_types_float64};
+        requireExtensions(loc, 2, extensions, "explicit types");
+        requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
+        profileRequires(loc, ECoreProfile, 450, nullptr, op);
+        profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
+    }
+}
+
+// Call for any operation needing GLSL explicit int8 data-type support.
+void TParseVersions::explicitInt8Check(const TSourceLoc& loc, const char* op, bool builtIn)
+{
+    if (! builtIn) {
+        const char* const extensions[2] = {E_GL_KHX_shader_explicit_arithmetic_types,
+                                           E_GL_KHX_shader_explicit_arithmetic_types_int8};
+        requireExtensions(loc, 2, extensions, "explicit types");
+        requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
+        profileRequires(loc, ECoreProfile, 450, nullptr, op);
+        profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
+    }
+}
+
+#ifdef AMD_EXTENSIONS
 // Call for any operation needing GLSL float16 opaque-type support
 void TParseVersions::float16OpaqueCheck(const TSourceLoc& loc, const char* op, bool builtIn)
 {
@@ -781,11 +871,46 @@
 }
 #endif
 
+// Call for any operation needing GLSL explicit int16 data-type support.
+void TParseVersions::explicitInt16Check(const TSourceLoc& loc, const char* op, bool builtIn)
+{
+    if (! builtIn) {
+#if AMD_EXTENSIONS
+	const char* const extensions[3] = {E_GL_AMD_gpu_shader_int16,
+                                           E_GL_KHX_shader_explicit_arithmetic_types,
+                                           E_GL_KHX_shader_explicit_arithmetic_types_int16};
+#else
+        const char* const extensions[2] = {E_GL_KHX_shader_explicit_arithmetic_types,
+                                           E_GL_KHX_shader_explicit_arithmetic_types_int16};
+#endif
+        requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, "explicit types");
+        requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
+        profileRequires(loc, ECoreProfile, 450, nullptr, op);
+        profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
+    }
+}
+
+// Call for any operation needing GLSL explicit int32 data-type support.
+void TParseVersions::explicitInt32Check(const TSourceLoc& loc, const char* op, bool builtIn)
+{
+    if (! builtIn) {
+        const char* const extensions[2] = {E_GL_KHX_shader_explicit_arithmetic_types,
+                                           E_GL_KHX_shader_explicit_arithmetic_types_int32};
+        requireExtensions(loc, 2, extensions, "explicit types");
+        requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
+        profileRequires(loc, ECoreProfile, 450, nullptr, op);
+        profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
+    }
+}
+
 // Call for any operation needing GLSL 64-bit integer data-type support.
 void TParseVersions::int64Check(const TSourceLoc& loc, const char* op, bool builtIn)
 {
     if (! builtIn) {
-        requireExtensions(loc, 1, &E_GL_ARB_gpu_shader_int64, op);
+        const char* const extensions[3] = {E_GL_ARB_gpu_shader_int64,
+                                           E_GL_KHX_shader_explicit_arithmetic_types,
+                                           E_GL_KHX_shader_explicit_arithmetic_types_int64};
+        requireExtensions(loc, 3, extensions, "shader int64");
         requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
         profileRequires(loc, ECoreProfile, 450, nullptr, op);
         profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h
index ae96ec2..c9f4e3e 100644
--- a/glslang/MachineIndependent/Versions.h
+++ b/glslang/MachineIndependent/Versions.h
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2013 LunarG, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -139,6 +140,15 @@
 const char* const E_GL_ARB_post_depth_coverage          = "GL_ARB_post_depth_coverage";
 const char* const E_GL_ARB_shader_viewport_layer_array  = "GL_ARB_shader_viewport_layer_array";
 
+const char* const E_GL_KHR_shader_subgroup_basic            = "GL_KHR_shader_subgroup_basic";
+const char* const E_GL_KHR_shader_subgroup_vote             = "GL_KHR_shader_subgroup_vote";
+const char* const E_GL_KHR_shader_subgroup_arithmetic       = "GL_KHR_shader_subgroup_arithmetic";
+const char* const E_GL_KHR_shader_subgroup_ballot           = "GL_KHR_shader_subgroup_ballot";
+const char* const E_GL_KHR_shader_subgroup_shuffle          = "GL_KHR_shader_subgroup_shuffle";
+const char* const E_GL_KHR_shader_subgroup_shuffle_relative = "GL_KHR_shader_subgroup_shuffle_relative";
+const char* const E_GL_KHR_shader_subgroup_clustered        = "GL_KHR_shader_subgroup_clustered";
+const char* const E_GL_KHR_shader_subgroup_quad             = "GL_KHR_shader_subgroup_quad";
+
 const char* const E_GL_EXT_shader_non_constant_global_initializers = "GL_EXT_shader_non_constant_global_initializers";
 const char* const E_GL_EXT_shader_image_load_formatted = "GL_EXT_shader_image_load_formatted";
 
@@ -221,6 +231,16 @@
 const char* const E_GL_OES_texture_buffer                       = "GL_OES_texture_buffer";
 const char* const E_GL_OES_texture_cube_map_array               = "GL_OES_texture_cube_map_array";
 
+// KHX
+const char* const E_GL_KHX_shader_explicit_arithmetic_types          = "GL_KHX_shader_explicit_arithmetic_types";
+const char* const E_GL_KHX_shader_explicit_arithmetic_types_int8     = "GL_KHX_shader_explicit_arithmetic_types_int8";
+const char* const E_GL_KHX_shader_explicit_arithmetic_types_int16    = "GL_KHX_shader_explicit_arithmetic_types_int16";
+const char* const E_GL_KHX_shader_explicit_arithmetic_types_int32    = "GL_KHX_shader_explicit_arithmetic_types_int32";
+const char* const E_GL_KHX_shader_explicit_arithmetic_types_int64    = "GL_KHX_shader_explicit_arithmetic_types_int64";
+const char* const E_GL_KHX_shader_explicit_arithmetic_types_float16  = "GL_KHX_shader_explicit_arithmetic_types_float16";
+const char* const E_GL_KHX_shader_explicit_arithmetic_types_float32  = "GL_KHX_shader_explicit_arithmetic_types_float32";
+const char* const E_GL_KHX_shader_explicit_arithmetic_types_float64  = "GL_KHX_shader_explicit_arithmetic_types_float64";
+
 // Arrays of extensions for the above AEP duplications
 
 const char* const AEP_geometry_shader[] = { E_GL_EXT_geometry_shader, E_GL_OES_geometry_shader };
diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y
index cabcb78..909871e 100644
--- a/glslang/MachineIndependent/glslang.y
+++ b/glslang/MachineIndependent/glslang.y
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2013 LunarG, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -123,15 +124,28 @@
 %expect 1     // One shift reduce conflict because of if | else
 
 %token <lex> ATTRIBUTE VARYING
-%token <lex> CONST BOOL FLOAT DOUBLE INT UINT INT64_T UINT64_T INT16_T UINT16_T FLOAT16_T
+%token <lex> FLOAT16_T FLOAT FLOAT32_T DOUBLE FLOAT64_T
+%token <lex> CONST BOOL INT UINT INT64_T UINT64_T INT32_T UINT32_T INT16_T UINT16_T INT8_T UINT8_T
 %token <lex> BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT SUBROUTINE
-%token <lex> BVEC2 BVEC3 BVEC4 IVEC2 IVEC3 IVEC4 I64VEC2 I64VEC3 I64VEC4 UVEC2 UVEC3 UVEC4 U64VEC2 U64VEC3 U64VEC4 VEC2 VEC3 VEC4
+%token <lex> BVEC2 BVEC3 BVEC4
+%token <lex> IVEC2 IVEC3 IVEC4
+%token <lex> UVEC2 UVEC3 UVEC4
+%token <lex> I64VEC2 I64VEC3 I64VEC4
+%token <lex> U64VEC2 U64VEC3 U64VEC4
+%token <lex> I32VEC2 I32VEC3 I32VEC4
+%token <lex> U32VEC2 U32VEC3 U32VEC4
+%token <lex> I16VEC2 I16VEC3 I16VEC4
+%token <lex> U16VEC2 U16VEC3 U16VEC4
+%token <lex> I8VEC2  I8VEC3  I8VEC4
+%token <lex> U8VEC2  U8VEC3  U8VEC4
+%token <lex> VEC2 VEC3 VEC4
 %token <lex> MAT2 MAT3 MAT4 CENTROID IN OUT INOUT
 %token <lex> UNIFORM PATCH SAMPLE BUFFER SHARED
 %token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY
 %token <lex> DVEC2 DVEC3 DVEC4 DMAT2 DMAT3 DMAT4
 %token <lex> F16VEC2 F16VEC3 F16VEC4 F16MAT2 F16MAT3 F16MAT4
-%token <lex> I16VEC2 I16VEC3 I16VEC4 U16VEC2 U16VEC3 U16VEC4
+%token <lex> F32VEC2 F32VEC3 F32VEC4 F32MAT2 F32MAT3 F32MAT4
+%token <lex> F64VEC2 F64VEC3 F64VEC4 F64MAT2 F64MAT3 F64MAT4
 %token <lex> NOPERSPECTIVE FLAT SMOOTH LAYOUT __EXPLICITINTERPAMD
 
 %token <lex> MAT2X2 MAT2X3 MAT2X4
@@ -143,6 +157,12 @@
 %token <lex> F16MAT2X2 F16MAT2X3 F16MAT2X4
 %token <lex> F16MAT3X2 F16MAT3X3 F16MAT3X4
 %token <lex> F16MAT4X2 F16MAT4X3 F16MAT4X4
+%token <lex> F32MAT2X2 F32MAT2X3 F32MAT2X4
+%token <lex> F32MAT3X2 F32MAT3X3 F32MAT3X4
+%token <lex> F32MAT4X2 F32MAT4X3 F32MAT4X4
+%token <lex> F64MAT2X2 F64MAT2X3 F64MAT2X4
+%token <lex> F64MAT3X2 F64MAT3X3 F64MAT3X4
+%token <lex> F64MAT4X2 F64MAT4X3 F64MAT4X4
 %token <lex> ATOMIC_UINT
 
 // combined image/sampler
@@ -206,7 +226,7 @@
 %token <lex> STRUCT VOID WHILE
 
 %token <lex> IDENTIFIER TYPE_NAME
-%token <lex> FLOATCONSTANT DOUBLECONSTANT INTCONSTANT UINTCONSTANT INT64CONSTANT UINT64CONSTANT INT16CONSTANT UINT16CONSTANT BOOLCONSTANT FLOAT16CONSTANT
+%token <lex> FLOATCONSTANT DOUBLECONSTANT INT16CONSTANT UINT16CONSTANT INT32CONSTANT UINT32CONSTANT INTCONSTANT UINTCONSTANT INT64CONSTANT UINT64CONSTANT BOOLCONSTANT FLOAT16CONSTANT
 %token <lex> LEFT_OP RIGHT_OP
 %token <lex> INC_OP DEC_OP LE_OP GE_OP EQ_OP NE_OP
 %token <lex> AND_OP OR_OP XOR_OP MUL_ASSIGN DIV_ASSIGN ADD_ASSIGN
@@ -278,6 +298,14 @@
     : variable_identifier {
         $$ = $1;
     }
+    | INT32CONSTANT {
+        parseContext.explicitInt32Check($1.loc, "32-bit signed literal");
+        $$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true);
+    }
+    | UINT32CONSTANT {
+        parseContext.explicitInt32Check($1.loc, "32-bit signed literal");
+        $$ = parseContext.intermediate.addConstantUnion($1.u, $1.loc, true);
+    }
     | INTCONSTANT {
         $$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true);
     }
@@ -294,16 +322,12 @@
         $$ = parseContext.intermediate.addConstantUnion($1.u64, $1.loc, true);
     }
     | INT16CONSTANT {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check($1.loc, "16-bit integer literal");
+        parseContext.explicitInt16Check($1.loc, "16-bit integer literal");
         $$ = parseContext.intermediate.addConstantUnion((short)$1.i, $1.loc, true);
-#endif
     }
     | UINT16CONSTANT {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check($1.loc, "16-bit unsigned integer literal");
+        parseContext.explicitInt16Check($1.loc, "16-bit unsigned integer literal");
         $$ = parseContext.intermediate.addConstantUnion((unsigned short)$1.u, $1.loc, true);
-#endif
     }
     | FLOATCONSTANT {
         $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat, $1.loc, true);
@@ -313,10 +337,8 @@
         $$ = parseContext.intermediate.addConstantUnion($1.d, EbtDouble, $1.loc, true);
     }
     | FLOAT16CONSTANT {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check($1.loc, "half float literal");
         $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat16, $1.loc, true);
-#endif
     }
     | BOOLCONSTANT {
         $$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true);
@@ -1375,11 +1397,19 @@
         $$.basicType = EbtDouble;
     }
     | FLOAT16_T {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check($1.loc, "half float", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.float16Check($1.loc, "float16_t", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
-#endif
+    }
+    | FLOAT32_T {
+        parseContext.explicitFloat32Check($1.loc, "float32_t", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+    }
+    | FLOAT64_T {
+        parseContext.explicitFloat64Check($1.loc, "float64_t", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
     }
     | INT {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -1390,6 +1420,36 @@
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtUint;
     }
+    | INT8_T {
+        parseContext.explicitInt8Check($1.loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt8;
+    }
+    | UINT8_T {
+        parseContext.explicitInt8Check($1.loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint8;
+    }
+    | INT16_T {
+        parseContext.explicitInt16Check($1.loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt16;
+    }
+    | UINT16_T {
+        parseContext.explicitInt16Check($1.loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint16;
+    }
+    | INT32_T {
+        parseContext.explicitInt32Check($1.loc, "32-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt;
+    }
+    | UINT32_T {
+        parseContext.explicitInt32Check($1.loc, "32-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint;
+    }
     | INT64_T {
         parseContext.int64Check($1.loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -1400,20 +1460,6 @@
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtUint64;
     }
-    | INT16_T {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check($1.loc, "16-bit integer", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtInt16;
-#endif
-    }
-    | UINT16_T {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check($1.loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtUint16;
-#endif
-    }
     | BOOL {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtBool;
@@ -1452,28 +1498,58 @@
         $$.setVector(4);
     }
     | F16VEC2 {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setVector(2);
-#endif
     }
     | F16VEC3 {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setVector(3);
-#endif
     }
     | F16VEC4 {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setVector(4);
-#endif
+    }
+    | F32VEC2 {
+    	parseContext.explicitFloat32Check($1.loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
+    	$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+    	$$.basicType = EbtFloat;
+    	$$.setVector(2);
+    }
+    | F32VEC3 {
+    	parseContext.explicitFloat32Check($1.loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
+    	$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+    	$$.basicType = EbtFloat;
+    	$$.setVector(3);
+    }
+    | F32VEC4 {
+    	parseContext.explicitFloat32Check($1.loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
+    	$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+    	$$.basicType = EbtFloat;
+    	$$.setVector(4);
+    }
+    | F64VEC2 {
+    	parseContext.explicitFloat64Check($1.loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
+    	$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+    	$$.basicType = EbtDouble;
+    	$$.setVector(2);
+    }
+    | F64VEC3 {
+    	parseContext.explicitFloat64Check($1.loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
+    	$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+    	$$.basicType = EbtDouble;
+    	$$.setVector(3);
+    }
+    | F64VEC4 {
+    	parseContext.explicitFloat64Check($1.loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
+    	$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+    	$$.basicType = EbtDouble;
+    	$$.setVector(4);
     }
     | BVEC2 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -1505,6 +1581,60 @@
         $$.basicType = EbtInt;
         $$.setVector(4);
     }
+    | I8VEC2 {
+ 	   parseContext.explicitInt8Check($1.loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+ 	   $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ 	   $$.basicType = EbtInt8;
+ 	   $$.setVector(2);
+    }
+    | I8VEC3 {
+ 	   parseContext.explicitInt8Check($1.loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+ 	   $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ 	   $$.basicType = EbtInt8;
+ 	   $$.setVector(3);
+    }
+    | I8VEC4 {
+ 	   parseContext.explicitInt8Check($1.loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+ 	   $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ 	   $$.basicType = EbtInt8;
+ 	   $$.setVector(4);
+    }
+    | I16VEC2 {
+ 	   parseContext.explicitInt16Check($1.loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+ 	   $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ 	   $$.basicType = EbtInt16;
+ 	   $$.setVector(2);
+    }
+    | I16VEC3 {
+ 	   parseContext.explicitInt16Check($1.loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+ 	   $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ 	   $$.basicType = EbtInt16;
+ 	   $$.setVector(3);
+    }
+    | I16VEC4 {
+ 	   parseContext.explicitInt16Check($1.loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+ 	   $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ 	   $$.basicType = EbtInt16;
+ 	   $$.setVector(4);
+    }
+    | I32VEC2 {
+        parseContext.explicitInt32Check($1.loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt;
+        $$.setVector(2);
+    }
+    | I32VEC3 {
+        parseContext.explicitInt32Check($1.loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt;
+        $$.setVector(3);
+    }
+    | I32VEC4 {
+        parseContext.explicitInt32Check($1.loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt;
+        $$.setVector(4);
+    }
     | I64VEC2 {
         parseContext.int64Check($1.loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -1523,30 +1653,6 @@
         $$.basicType = EbtInt64;
         $$.setVector(4);
     }
-    | I16VEC2 {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check($1.loc, "16-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtInt16;
-        $$.setVector(2);
-#endif
-    }
-    | I16VEC3 {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check($1.loc, "16-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtInt16;
-        $$.setVector(3);
-#endif
-    }
-    | I16VEC4 {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check($1.loc, "16-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtInt16;
-        $$.setVector(4);
-#endif
-    }
     | UVEC2 {
         parseContext.fullIntegerCheck($1.loc, "unsigned integer vector");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -1565,6 +1671,60 @@
         $$.basicType = EbtUint;
         $$.setVector(4);
     }
+    | U8VEC2 {
+        parseContext.explicitInt8Check($1.loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint8;
+        $$.setVector(2);
+    }
+    | U8VEC3 {
+        parseContext.explicitInt8Check($1.loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt8;
+        $$.setVector(3);
+    }
+    | U8VEC4 {
+        parseContext.explicitInt8Check($1.loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint8;
+        $$.setVector(4);
+    }
+    | U16VEC2 {
+        parseContext.explicitInt16Check($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint16;
+        $$.setVector(2);
+    }
+    | U16VEC3 {
+        parseContext.explicitInt16Check($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint16;
+        $$.setVector(3);
+    }
+    | U16VEC4 {
+        parseContext.explicitInt16Check($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint16;
+        $$.setVector(4);
+    }
+    | U32VEC2 {
+        parseContext.explicitInt32Check($1.loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint;
+        $$.setVector(2);
+    }
+    | U32VEC3 {
+        parseContext.explicitInt32Check($1.loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint;
+        $$.setVector(3);
+    }
+    | U32VEC4 {
+        parseContext.explicitInt32Check($1.loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint;
+        $$.setVector(4);
+    }
     | U64VEC2 {
         parseContext.int64Check($1.loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -1583,30 +1743,6 @@
         $$.basicType = EbtUint64;
         $$.setVector(4);
     }
-    | U16VEC2 {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtUint16;
-        $$.setVector(2);
-#endif
-    }
-    | U16VEC3 {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtUint16;
-        $$.setVector(3);
-#endif
-    }
-    | U16VEC4 {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtUint16;
-        $$.setVector(4);
-#endif
-    }
     | MAT2 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat;
@@ -1740,100 +1876,220 @@
         $$.setMatrix(4, 4);
     }
     | F16MAT2 {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setMatrix(2, 2);
-#endif
     }
     | F16MAT3 {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setMatrix(3, 3);
-#endif
     }
     | F16MAT4 {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setMatrix(4, 4);
-#endif
     }
     | F16MAT2X2 {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setMatrix(2, 2);
-#endif
     }
     | F16MAT2X3 {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setMatrix(2, 3);
-#endif
     }
     | F16MAT2X4 {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setMatrix(2, 4);
-#endif
     }
     | F16MAT3X2 {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setMatrix(3, 2);
-#endif
     }
     | F16MAT3X3 {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setMatrix(3, 3);
-#endif
     }
     | F16MAT3X4 {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setMatrix(3, 4);
-#endif
     }
     | F16MAT4X2 {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setMatrix(4, 2);
-#endif
     }
     | F16MAT4X3 {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setMatrix(4, 3);
-#endif
     }
     | F16MAT4X4 {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setMatrix(4, 4);
-#endif
+    }
+    | F32MAT2 {
+    	parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+    	$$.basicType = EbtFloat;
+    	$$.setMatrix(2, 2);
+    }
+    | F32MAT3 {
+    	parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+    	$$.basicType = EbtFloat;
+    	$$.setMatrix(3, 3);
+    }
+    | F32MAT4 {
+    	parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+    	$$.basicType = EbtFloat;
+    	$$.setMatrix(4, 4);
+    }
+    | F32MAT2X2 {
+    	parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+    	$$.basicType = EbtFloat;
+    	$$.setMatrix(2, 2);
+    }
+    | F32MAT2X3 {
+    	parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+    	$$.basicType = EbtFloat;
+    	$$.setMatrix(2, 3);
+    }
+    | F32MAT2X4 {
+    	parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+    	$$.basicType = EbtFloat;
+    	$$.setMatrix(2, 4);
+    }
+    | F32MAT3X2 {
+    	parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+    	$$.basicType = EbtFloat;
+    	$$.setMatrix(3, 2);
+    }
+    | F32MAT3X3 {
+    	parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+    	$$.basicType = EbtFloat;
+    	$$.setMatrix(3, 3);
+    }
+    | F32MAT3X4 {
+    	parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+    	$$.basicType = EbtFloat;
+    	$$.setMatrix(3, 4);
+    }
+    | F32MAT4X2 {
+    	parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+    	$$.basicType = EbtFloat;
+    	$$.setMatrix(4, 2);
+    }
+    | F32MAT4X3 {
+    	parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+    	$$.basicType = EbtFloat;
+    	$$.setMatrix(4, 3);
+    }
+    | F32MAT4X4 {
+    	parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+    	$$.basicType = EbtFloat;
+    	$$.setMatrix(4, 4);
+    }
+    | F64MAT2 {
+    	parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+    	$$.basicType = EbtDouble;
+    	$$.setMatrix(2, 2);
+    }
+    | F64MAT3 {
+    	parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+    	$$.basicType = EbtDouble;
+    	$$.setMatrix(3, 3);
+    }
+    | F64MAT4 {
+    	parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+    	$$.basicType = EbtDouble;
+    	$$.setMatrix(4, 4);
+    }
+    | F64MAT2X2 {
+    	parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+    	$$.basicType = EbtDouble;
+    	$$.setMatrix(2, 2);
+    }
+    | F64MAT2X3 {
+    	parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+    	$$.basicType = EbtDouble;
+    	$$.setMatrix(2, 3);
+    }
+    | F64MAT2X4 {
+    	parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+    	$$.basicType = EbtDouble;
+    	$$.setMatrix(2, 4);
+    }
+    | F64MAT3X2 {
+    	parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+    	$$.basicType = EbtDouble;
+    	$$.setMatrix(3, 2);
+    }
+    | F64MAT3X3 {
+    	parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+    	$$.basicType = EbtDouble;
+    	$$.setMatrix(3, 3);
+    }
+    | F64MAT3X4 {
+    	parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+    	$$.basicType = EbtDouble;
+    	$$.setMatrix(3, 4);
+    }
+    | F64MAT4X2 {
+    	parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+    	$$.basicType = EbtDouble;
+    	$$.setMatrix(4, 2);
+    }
+    | F64MAT4X3 {
+    	parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+    	$$.basicType = EbtDouble;
+    	$$.setMatrix(4, 3);
+    }
+    | F64MAT4X4 {
+    	parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+    	$$.basicType = EbtDouble;
+    	$$.setMatrix(4, 4);
     }
     | ATOMIC_UINT {
         parseContext.vulkanRemoved($1.loc, "atomic counter types");
diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp
index f6dccee..db5b28e 100644
--- a/glslang/MachineIndependent/glslang_tab.cpp
+++ b/glslang/MachineIndependent/glslang_tab.cpp
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.0.4.  */
+/* A Bison parser, made by GNU Bison 3.0.  */
 
 /* Bison implementation for Yacc-like parsers in C
 
-   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
+   Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -44,7 +44,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "3.0.4"
+#define YYBISON_VERSION "3.0"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -62,7 +62,7 @@
 
 
 /* Copy the first part of user declarations.  */
-#line 41 "glslang.y" /* yacc.c:339  */
+#line 42 "MachineIndependent/glslang.y" /* yacc.c:339  */
 
 
 /* Based on:
@@ -88,13 +88,13 @@
 using namespace glslang;
 
 
-#line 92 "glslang_tab.cpp" /* yacc.c:339  */
+#line 92 "MachineIndependent/glslang_tab.cpp" /* yacc.c:339  */
 
-# ifndef YY_NULLPTR
+# ifndef YY_NULL
 #  if defined __cplusplus && 201103L <= __cplusplus
-#   define YY_NULLPTR nullptr
+#   define YY_NULL nullptr
 #  else
-#   define YY_NULLPTR 0
+#   define YY_NULL 0
 #  endif
 # endif
 
@@ -108,8 +108,8 @@
 
 /* In a future release of Bison, this section will be replaced
    by #include "glslang_tab.cpp.h".  */
-#ifndef YY_YY_GLSLANG_TAB_CPP_H_INCLUDED
-# define YY_YY_GLSLANG_TAB_CPP_H_INCLUDED
+#ifndef YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED
+# define YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED
 /* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 1
@@ -125,350 +125,400 @@
   {
     ATTRIBUTE = 258,
     VARYING = 259,
-    CONST = 260,
-    BOOL = 261,
-    FLOAT = 262,
+    FLOAT16_T = 260,
+    FLOAT = 261,
+    FLOAT32_T = 262,
     DOUBLE = 263,
-    INT = 264,
-    UINT = 265,
-    INT64_T = 266,
-    UINT64_T = 267,
-    INT16_T = 268,
-    UINT16_T = 269,
-    FLOAT16_T = 270,
-    BREAK = 271,
-    CONTINUE = 272,
-    DO = 273,
-    ELSE = 274,
-    FOR = 275,
-    IF = 276,
-    DISCARD = 277,
-    RETURN = 278,
-    SWITCH = 279,
-    CASE = 280,
-    DEFAULT = 281,
-    SUBROUTINE = 282,
-    BVEC2 = 283,
-    BVEC3 = 284,
-    BVEC4 = 285,
-    IVEC2 = 286,
-    IVEC3 = 287,
-    IVEC4 = 288,
-    I64VEC2 = 289,
-    I64VEC3 = 290,
-    I64VEC4 = 291,
-    UVEC2 = 292,
-    UVEC3 = 293,
-    UVEC4 = 294,
-    U64VEC2 = 295,
-    U64VEC3 = 296,
-    U64VEC4 = 297,
-    VEC2 = 298,
-    VEC3 = 299,
-    VEC4 = 300,
-    MAT2 = 301,
-    MAT3 = 302,
-    MAT4 = 303,
-    CENTROID = 304,
-    IN = 305,
-    OUT = 306,
-    INOUT = 307,
-    UNIFORM = 308,
-    PATCH = 309,
-    SAMPLE = 310,
-    BUFFER = 311,
-    SHARED = 312,
-    COHERENT = 313,
-    VOLATILE = 314,
-    RESTRICT = 315,
-    READONLY = 316,
-    WRITEONLY = 317,
-    DVEC2 = 318,
-    DVEC3 = 319,
-    DVEC4 = 320,
-    DMAT2 = 321,
-    DMAT3 = 322,
-    DMAT4 = 323,
-    F16VEC2 = 324,
-    F16VEC3 = 325,
-    F16VEC4 = 326,
-    F16MAT2 = 327,
-    F16MAT3 = 328,
-    F16MAT4 = 329,
-    I16VEC2 = 330,
-    I16VEC3 = 331,
-    I16VEC4 = 332,
-    U16VEC2 = 333,
-    U16VEC3 = 334,
-    U16VEC4 = 335,
-    NOPERSPECTIVE = 336,
-    FLAT = 337,
-    SMOOTH = 338,
-    LAYOUT = 339,
-    __EXPLICITINTERPAMD = 340,
-    MAT2X2 = 341,
-    MAT2X3 = 342,
-    MAT2X4 = 343,
-    MAT3X2 = 344,
-    MAT3X3 = 345,
-    MAT3X4 = 346,
-    MAT4X2 = 347,
-    MAT4X3 = 348,
-    MAT4X4 = 349,
-    DMAT2X2 = 350,
-    DMAT2X3 = 351,
-    DMAT2X4 = 352,
-    DMAT3X2 = 353,
-    DMAT3X3 = 354,
-    DMAT3X4 = 355,
-    DMAT4X2 = 356,
-    DMAT4X3 = 357,
-    DMAT4X4 = 358,
-    F16MAT2X2 = 359,
-    F16MAT2X3 = 360,
-    F16MAT2X4 = 361,
-    F16MAT3X2 = 362,
-    F16MAT3X3 = 363,
-    F16MAT3X4 = 364,
-    F16MAT4X2 = 365,
-    F16MAT4X3 = 366,
-    F16MAT4X4 = 367,
-    ATOMIC_UINT = 368,
-    SAMPLER1D = 369,
-    SAMPLER2D = 370,
-    SAMPLER3D = 371,
-    SAMPLERCUBE = 372,
-    SAMPLER1DSHADOW = 373,
-    SAMPLER2DSHADOW = 374,
-    SAMPLERCUBESHADOW = 375,
-    SAMPLER1DARRAY = 376,
-    SAMPLER2DARRAY = 377,
-    SAMPLER1DARRAYSHADOW = 378,
-    SAMPLER2DARRAYSHADOW = 379,
-    ISAMPLER1D = 380,
-    ISAMPLER2D = 381,
-    ISAMPLER3D = 382,
-    ISAMPLERCUBE = 383,
-    ISAMPLER1DARRAY = 384,
-    ISAMPLER2DARRAY = 385,
-    USAMPLER1D = 386,
-    USAMPLER2D = 387,
-    USAMPLER3D = 388,
-    USAMPLERCUBE = 389,
-    USAMPLER1DARRAY = 390,
-    USAMPLER2DARRAY = 391,
-    SAMPLER2DRECT = 392,
-    SAMPLER2DRECTSHADOW = 393,
-    ISAMPLER2DRECT = 394,
-    USAMPLER2DRECT = 395,
-    SAMPLERBUFFER = 396,
-    ISAMPLERBUFFER = 397,
-    USAMPLERBUFFER = 398,
-    SAMPLERCUBEARRAY = 399,
-    SAMPLERCUBEARRAYSHADOW = 400,
-    ISAMPLERCUBEARRAY = 401,
-    USAMPLERCUBEARRAY = 402,
-    SAMPLER2DMS = 403,
-    ISAMPLER2DMS = 404,
-    USAMPLER2DMS = 405,
-    SAMPLER2DMSARRAY = 406,
-    ISAMPLER2DMSARRAY = 407,
-    USAMPLER2DMSARRAY = 408,
-    SAMPLEREXTERNALOES = 409,
-    F16SAMPLER1D = 410,
-    F16SAMPLER2D = 411,
-    F16SAMPLER3D = 412,
-    F16SAMPLER2DRECT = 413,
-    F16SAMPLERCUBE = 414,
-    F16SAMPLER1DARRAY = 415,
-    F16SAMPLER2DARRAY = 416,
-    F16SAMPLERCUBEARRAY = 417,
-    F16SAMPLERBUFFER = 418,
-    F16SAMPLER2DMS = 419,
-    F16SAMPLER2DMSARRAY = 420,
-    F16SAMPLER1DSHADOW = 421,
-    F16SAMPLER2DSHADOW = 422,
-    F16SAMPLER1DARRAYSHADOW = 423,
-    F16SAMPLER2DARRAYSHADOW = 424,
-    F16SAMPLER2DRECTSHADOW = 425,
-    F16SAMPLERCUBESHADOW = 426,
-    F16SAMPLERCUBEARRAYSHADOW = 427,
-    SAMPLER = 428,
-    SAMPLERSHADOW = 429,
-    TEXTURE1D = 430,
-    TEXTURE2D = 431,
-    TEXTURE3D = 432,
-    TEXTURECUBE = 433,
-    TEXTURE1DARRAY = 434,
-    TEXTURE2DARRAY = 435,
-    ITEXTURE1D = 436,
-    ITEXTURE2D = 437,
-    ITEXTURE3D = 438,
-    ITEXTURECUBE = 439,
-    ITEXTURE1DARRAY = 440,
-    ITEXTURE2DARRAY = 441,
-    UTEXTURE1D = 442,
-    UTEXTURE2D = 443,
-    UTEXTURE3D = 444,
-    UTEXTURECUBE = 445,
-    UTEXTURE1DARRAY = 446,
-    UTEXTURE2DARRAY = 447,
-    TEXTURE2DRECT = 448,
-    ITEXTURE2DRECT = 449,
-    UTEXTURE2DRECT = 450,
-    TEXTUREBUFFER = 451,
-    ITEXTUREBUFFER = 452,
-    UTEXTUREBUFFER = 453,
-    TEXTURECUBEARRAY = 454,
-    ITEXTURECUBEARRAY = 455,
-    UTEXTURECUBEARRAY = 456,
-    TEXTURE2DMS = 457,
-    ITEXTURE2DMS = 458,
-    UTEXTURE2DMS = 459,
-    TEXTURE2DMSARRAY = 460,
-    ITEXTURE2DMSARRAY = 461,
-    UTEXTURE2DMSARRAY = 462,
-    F16TEXTURE1D = 463,
-    F16TEXTURE2D = 464,
-    F16TEXTURE3D = 465,
-    F16TEXTURE2DRECT = 466,
-    F16TEXTURECUBE = 467,
-    F16TEXTURE1DARRAY = 468,
-    F16TEXTURE2DARRAY = 469,
-    F16TEXTURECUBEARRAY = 470,
-    F16TEXTUREBUFFER = 471,
-    F16TEXTURE2DMS = 472,
-    F16TEXTURE2DMSARRAY = 473,
-    SUBPASSINPUT = 474,
-    SUBPASSINPUTMS = 475,
-    ISUBPASSINPUT = 476,
-    ISUBPASSINPUTMS = 477,
-    USUBPASSINPUT = 478,
-    USUBPASSINPUTMS = 479,
-    F16SUBPASSINPUT = 480,
-    F16SUBPASSINPUTMS = 481,
-    IMAGE1D = 482,
-    IIMAGE1D = 483,
-    UIMAGE1D = 484,
-    IMAGE2D = 485,
-    IIMAGE2D = 486,
-    UIMAGE2D = 487,
-    IMAGE3D = 488,
-    IIMAGE3D = 489,
-    UIMAGE3D = 490,
-    IMAGE2DRECT = 491,
-    IIMAGE2DRECT = 492,
-    UIMAGE2DRECT = 493,
-    IMAGECUBE = 494,
-    IIMAGECUBE = 495,
-    UIMAGECUBE = 496,
-    IMAGEBUFFER = 497,
-    IIMAGEBUFFER = 498,
-    UIMAGEBUFFER = 499,
-    IMAGE1DARRAY = 500,
-    IIMAGE1DARRAY = 501,
-    UIMAGE1DARRAY = 502,
-    IMAGE2DARRAY = 503,
-    IIMAGE2DARRAY = 504,
-    UIMAGE2DARRAY = 505,
-    IMAGECUBEARRAY = 506,
-    IIMAGECUBEARRAY = 507,
-    UIMAGECUBEARRAY = 508,
-    IMAGE2DMS = 509,
-    IIMAGE2DMS = 510,
-    UIMAGE2DMS = 511,
-    IMAGE2DMSARRAY = 512,
-    IIMAGE2DMSARRAY = 513,
-    UIMAGE2DMSARRAY = 514,
-    F16IMAGE1D = 515,
-    F16IMAGE2D = 516,
-    F16IMAGE3D = 517,
-    F16IMAGE2DRECT = 518,
-    F16IMAGECUBE = 519,
-    F16IMAGE1DARRAY = 520,
-    F16IMAGE2DARRAY = 521,
-    F16IMAGECUBEARRAY = 522,
-    F16IMAGEBUFFER = 523,
-    F16IMAGE2DMS = 524,
-    F16IMAGE2DMSARRAY = 525,
-    STRUCT = 526,
-    VOID = 527,
-    WHILE = 528,
-    IDENTIFIER = 529,
-    TYPE_NAME = 530,
-    FLOATCONSTANT = 531,
-    DOUBLECONSTANT = 532,
-    INTCONSTANT = 533,
-    UINTCONSTANT = 534,
-    INT64CONSTANT = 535,
-    UINT64CONSTANT = 536,
-    INT16CONSTANT = 537,
-    UINT16CONSTANT = 538,
-    BOOLCONSTANT = 539,
-    FLOAT16CONSTANT = 540,
-    LEFT_OP = 541,
-    RIGHT_OP = 542,
-    INC_OP = 543,
-    DEC_OP = 544,
-    LE_OP = 545,
-    GE_OP = 546,
-    EQ_OP = 547,
-    NE_OP = 548,
-    AND_OP = 549,
-    OR_OP = 550,
-    XOR_OP = 551,
-    MUL_ASSIGN = 552,
-    DIV_ASSIGN = 553,
-    ADD_ASSIGN = 554,
-    MOD_ASSIGN = 555,
-    LEFT_ASSIGN = 556,
-    RIGHT_ASSIGN = 557,
-    AND_ASSIGN = 558,
-    XOR_ASSIGN = 559,
-    OR_ASSIGN = 560,
-    SUB_ASSIGN = 561,
-    LEFT_PAREN = 562,
-    RIGHT_PAREN = 563,
-    LEFT_BRACKET = 564,
-    RIGHT_BRACKET = 565,
-    LEFT_BRACE = 566,
-    RIGHT_BRACE = 567,
-    DOT = 568,
-    COMMA = 569,
-    COLON = 570,
-    EQUAL = 571,
-    SEMICOLON = 572,
-    BANG = 573,
-    DASH = 574,
-    TILDE = 575,
-    PLUS = 576,
-    STAR = 577,
-    SLASH = 578,
-    PERCENT = 579,
-    LEFT_ANGLE = 580,
-    RIGHT_ANGLE = 581,
-    VERTICAL_BAR = 582,
-    CARET = 583,
-    AMPERSAND = 584,
-    QUESTION = 585,
-    INVARIANT = 586,
-    PRECISE = 587,
-    HIGH_PRECISION = 588,
-    MEDIUM_PRECISION = 589,
-    LOW_PRECISION = 590,
-    PRECISION = 591,
-    PACKED = 592,
-    RESOURCE = 593,
-    SUPERP = 594
+    FLOAT64_T = 264,
+    CONST = 265,
+    BOOL = 266,
+    INT = 267,
+    UINT = 268,
+    INT64_T = 269,
+    UINT64_T = 270,
+    INT32_T = 271,
+    UINT32_T = 272,
+    INT16_T = 273,
+    UINT16_T = 274,
+    INT8_T = 275,
+    UINT8_T = 276,
+    BREAK = 277,
+    CONTINUE = 278,
+    DO = 279,
+    ELSE = 280,
+    FOR = 281,
+    IF = 282,
+    DISCARD = 283,
+    RETURN = 284,
+    SWITCH = 285,
+    CASE = 286,
+    DEFAULT = 287,
+    SUBROUTINE = 288,
+    BVEC2 = 289,
+    BVEC3 = 290,
+    BVEC4 = 291,
+    IVEC2 = 292,
+    IVEC3 = 293,
+    IVEC4 = 294,
+    UVEC2 = 295,
+    UVEC3 = 296,
+    UVEC4 = 297,
+    I64VEC2 = 298,
+    I64VEC3 = 299,
+    I64VEC4 = 300,
+    U64VEC2 = 301,
+    U64VEC3 = 302,
+    U64VEC4 = 303,
+    I32VEC2 = 304,
+    I32VEC3 = 305,
+    I32VEC4 = 306,
+    U32VEC2 = 307,
+    U32VEC3 = 308,
+    U32VEC4 = 309,
+    I16VEC2 = 310,
+    I16VEC3 = 311,
+    I16VEC4 = 312,
+    U16VEC2 = 313,
+    U16VEC3 = 314,
+    U16VEC4 = 315,
+    I8VEC2 = 316,
+    I8VEC3 = 317,
+    I8VEC4 = 318,
+    U8VEC2 = 319,
+    U8VEC3 = 320,
+    U8VEC4 = 321,
+    VEC2 = 322,
+    VEC3 = 323,
+    VEC4 = 324,
+    MAT2 = 325,
+    MAT3 = 326,
+    MAT4 = 327,
+    CENTROID = 328,
+    IN = 329,
+    OUT = 330,
+    INOUT = 331,
+    UNIFORM = 332,
+    PATCH = 333,
+    SAMPLE = 334,
+    BUFFER = 335,
+    SHARED = 336,
+    COHERENT = 337,
+    VOLATILE = 338,
+    RESTRICT = 339,
+    READONLY = 340,
+    WRITEONLY = 341,
+    DVEC2 = 342,
+    DVEC3 = 343,
+    DVEC4 = 344,
+    DMAT2 = 345,
+    DMAT3 = 346,
+    DMAT4 = 347,
+    F16VEC2 = 348,
+    F16VEC3 = 349,
+    F16VEC4 = 350,
+    F16MAT2 = 351,
+    F16MAT3 = 352,
+    F16MAT4 = 353,
+    F32VEC2 = 354,
+    F32VEC3 = 355,
+    F32VEC4 = 356,
+    F32MAT2 = 357,
+    F32MAT3 = 358,
+    F32MAT4 = 359,
+    F64VEC2 = 360,
+    F64VEC3 = 361,
+    F64VEC4 = 362,
+    F64MAT2 = 363,
+    F64MAT3 = 364,
+    F64MAT4 = 365,
+    NOPERSPECTIVE = 366,
+    FLAT = 367,
+    SMOOTH = 368,
+    LAYOUT = 369,
+    __EXPLICITINTERPAMD = 370,
+    MAT2X2 = 371,
+    MAT2X3 = 372,
+    MAT2X4 = 373,
+    MAT3X2 = 374,
+    MAT3X3 = 375,
+    MAT3X4 = 376,
+    MAT4X2 = 377,
+    MAT4X3 = 378,
+    MAT4X4 = 379,
+    DMAT2X2 = 380,
+    DMAT2X3 = 381,
+    DMAT2X4 = 382,
+    DMAT3X2 = 383,
+    DMAT3X3 = 384,
+    DMAT3X4 = 385,
+    DMAT4X2 = 386,
+    DMAT4X3 = 387,
+    DMAT4X4 = 388,
+    F16MAT2X2 = 389,
+    F16MAT2X3 = 390,
+    F16MAT2X4 = 391,
+    F16MAT3X2 = 392,
+    F16MAT3X3 = 393,
+    F16MAT3X4 = 394,
+    F16MAT4X2 = 395,
+    F16MAT4X3 = 396,
+    F16MAT4X4 = 397,
+    F32MAT2X2 = 398,
+    F32MAT2X3 = 399,
+    F32MAT2X4 = 400,
+    F32MAT3X2 = 401,
+    F32MAT3X3 = 402,
+    F32MAT3X4 = 403,
+    F32MAT4X2 = 404,
+    F32MAT4X3 = 405,
+    F32MAT4X4 = 406,
+    F64MAT2X2 = 407,
+    F64MAT2X3 = 408,
+    F64MAT2X4 = 409,
+    F64MAT3X2 = 410,
+    F64MAT3X3 = 411,
+    F64MAT3X4 = 412,
+    F64MAT4X2 = 413,
+    F64MAT4X3 = 414,
+    F64MAT4X4 = 415,
+    ATOMIC_UINT = 416,
+    SAMPLER1D = 417,
+    SAMPLER2D = 418,
+    SAMPLER3D = 419,
+    SAMPLERCUBE = 420,
+    SAMPLER1DSHADOW = 421,
+    SAMPLER2DSHADOW = 422,
+    SAMPLERCUBESHADOW = 423,
+    SAMPLER1DARRAY = 424,
+    SAMPLER2DARRAY = 425,
+    SAMPLER1DARRAYSHADOW = 426,
+    SAMPLER2DARRAYSHADOW = 427,
+    ISAMPLER1D = 428,
+    ISAMPLER2D = 429,
+    ISAMPLER3D = 430,
+    ISAMPLERCUBE = 431,
+    ISAMPLER1DARRAY = 432,
+    ISAMPLER2DARRAY = 433,
+    USAMPLER1D = 434,
+    USAMPLER2D = 435,
+    USAMPLER3D = 436,
+    USAMPLERCUBE = 437,
+    USAMPLER1DARRAY = 438,
+    USAMPLER2DARRAY = 439,
+    SAMPLER2DRECT = 440,
+    SAMPLER2DRECTSHADOW = 441,
+    ISAMPLER2DRECT = 442,
+    USAMPLER2DRECT = 443,
+    SAMPLERBUFFER = 444,
+    ISAMPLERBUFFER = 445,
+    USAMPLERBUFFER = 446,
+    SAMPLERCUBEARRAY = 447,
+    SAMPLERCUBEARRAYSHADOW = 448,
+    ISAMPLERCUBEARRAY = 449,
+    USAMPLERCUBEARRAY = 450,
+    SAMPLER2DMS = 451,
+    ISAMPLER2DMS = 452,
+    USAMPLER2DMS = 453,
+    SAMPLER2DMSARRAY = 454,
+    ISAMPLER2DMSARRAY = 455,
+    USAMPLER2DMSARRAY = 456,
+    SAMPLEREXTERNALOES = 457,
+    F16SAMPLER1D = 458,
+    F16SAMPLER2D = 459,
+    F16SAMPLER3D = 460,
+    F16SAMPLER2DRECT = 461,
+    F16SAMPLERCUBE = 462,
+    F16SAMPLER1DARRAY = 463,
+    F16SAMPLER2DARRAY = 464,
+    F16SAMPLERCUBEARRAY = 465,
+    F16SAMPLERBUFFER = 466,
+    F16SAMPLER2DMS = 467,
+    F16SAMPLER2DMSARRAY = 468,
+    F16SAMPLER1DSHADOW = 469,
+    F16SAMPLER2DSHADOW = 470,
+    F16SAMPLER1DARRAYSHADOW = 471,
+    F16SAMPLER2DARRAYSHADOW = 472,
+    F16SAMPLER2DRECTSHADOW = 473,
+    F16SAMPLERCUBESHADOW = 474,
+    F16SAMPLERCUBEARRAYSHADOW = 475,
+    SAMPLER = 476,
+    SAMPLERSHADOW = 477,
+    TEXTURE1D = 478,
+    TEXTURE2D = 479,
+    TEXTURE3D = 480,
+    TEXTURECUBE = 481,
+    TEXTURE1DARRAY = 482,
+    TEXTURE2DARRAY = 483,
+    ITEXTURE1D = 484,
+    ITEXTURE2D = 485,
+    ITEXTURE3D = 486,
+    ITEXTURECUBE = 487,
+    ITEXTURE1DARRAY = 488,
+    ITEXTURE2DARRAY = 489,
+    UTEXTURE1D = 490,
+    UTEXTURE2D = 491,
+    UTEXTURE3D = 492,
+    UTEXTURECUBE = 493,
+    UTEXTURE1DARRAY = 494,
+    UTEXTURE2DARRAY = 495,
+    TEXTURE2DRECT = 496,
+    ITEXTURE2DRECT = 497,
+    UTEXTURE2DRECT = 498,
+    TEXTUREBUFFER = 499,
+    ITEXTUREBUFFER = 500,
+    UTEXTUREBUFFER = 501,
+    TEXTURECUBEARRAY = 502,
+    ITEXTURECUBEARRAY = 503,
+    UTEXTURECUBEARRAY = 504,
+    TEXTURE2DMS = 505,
+    ITEXTURE2DMS = 506,
+    UTEXTURE2DMS = 507,
+    TEXTURE2DMSARRAY = 508,
+    ITEXTURE2DMSARRAY = 509,
+    UTEXTURE2DMSARRAY = 510,
+    F16TEXTURE1D = 511,
+    F16TEXTURE2D = 512,
+    F16TEXTURE3D = 513,
+    F16TEXTURE2DRECT = 514,
+    F16TEXTURECUBE = 515,
+    F16TEXTURE1DARRAY = 516,
+    F16TEXTURE2DARRAY = 517,
+    F16TEXTURECUBEARRAY = 518,
+    F16TEXTUREBUFFER = 519,
+    F16TEXTURE2DMS = 520,
+    F16TEXTURE2DMSARRAY = 521,
+    SUBPASSINPUT = 522,
+    SUBPASSINPUTMS = 523,
+    ISUBPASSINPUT = 524,
+    ISUBPASSINPUTMS = 525,
+    USUBPASSINPUT = 526,
+    USUBPASSINPUTMS = 527,
+    F16SUBPASSINPUT = 528,
+    F16SUBPASSINPUTMS = 529,
+    IMAGE1D = 530,
+    IIMAGE1D = 531,
+    UIMAGE1D = 532,
+    IMAGE2D = 533,
+    IIMAGE2D = 534,
+    UIMAGE2D = 535,
+    IMAGE3D = 536,
+    IIMAGE3D = 537,
+    UIMAGE3D = 538,
+    IMAGE2DRECT = 539,
+    IIMAGE2DRECT = 540,
+    UIMAGE2DRECT = 541,
+    IMAGECUBE = 542,
+    IIMAGECUBE = 543,
+    UIMAGECUBE = 544,
+    IMAGEBUFFER = 545,
+    IIMAGEBUFFER = 546,
+    UIMAGEBUFFER = 547,
+    IMAGE1DARRAY = 548,
+    IIMAGE1DARRAY = 549,
+    UIMAGE1DARRAY = 550,
+    IMAGE2DARRAY = 551,
+    IIMAGE2DARRAY = 552,
+    UIMAGE2DARRAY = 553,
+    IMAGECUBEARRAY = 554,
+    IIMAGECUBEARRAY = 555,
+    UIMAGECUBEARRAY = 556,
+    IMAGE2DMS = 557,
+    IIMAGE2DMS = 558,
+    UIMAGE2DMS = 559,
+    IMAGE2DMSARRAY = 560,
+    IIMAGE2DMSARRAY = 561,
+    UIMAGE2DMSARRAY = 562,
+    F16IMAGE1D = 563,
+    F16IMAGE2D = 564,
+    F16IMAGE3D = 565,
+    F16IMAGE2DRECT = 566,
+    F16IMAGECUBE = 567,
+    F16IMAGE1DARRAY = 568,
+    F16IMAGE2DARRAY = 569,
+    F16IMAGECUBEARRAY = 570,
+    F16IMAGEBUFFER = 571,
+    F16IMAGE2DMS = 572,
+    F16IMAGE2DMSARRAY = 573,
+    STRUCT = 574,
+    VOID = 575,
+    WHILE = 576,
+    IDENTIFIER = 577,
+    TYPE_NAME = 578,
+    FLOATCONSTANT = 579,
+    DOUBLECONSTANT = 580,
+    INT16CONSTANT = 581,
+    UINT16CONSTANT = 582,
+    INT32CONSTANT = 583,
+    UINT32CONSTANT = 584,
+    INTCONSTANT = 585,
+    UINTCONSTANT = 586,
+    INT64CONSTANT = 587,
+    UINT64CONSTANT = 588,
+    BOOLCONSTANT = 589,
+    FLOAT16CONSTANT = 590,
+    LEFT_OP = 591,
+    RIGHT_OP = 592,
+    INC_OP = 593,
+    DEC_OP = 594,
+    LE_OP = 595,
+    GE_OP = 596,
+    EQ_OP = 597,
+    NE_OP = 598,
+    AND_OP = 599,
+    OR_OP = 600,
+    XOR_OP = 601,
+    MUL_ASSIGN = 602,
+    DIV_ASSIGN = 603,
+    ADD_ASSIGN = 604,
+    MOD_ASSIGN = 605,
+    LEFT_ASSIGN = 606,
+    RIGHT_ASSIGN = 607,
+    AND_ASSIGN = 608,
+    XOR_ASSIGN = 609,
+    OR_ASSIGN = 610,
+    SUB_ASSIGN = 611,
+    LEFT_PAREN = 612,
+    RIGHT_PAREN = 613,
+    LEFT_BRACKET = 614,
+    RIGHT_BRACKET = 615,
+    LEFT_BRACE = 616,
+    RIGHT_BRACE = 617,
+    DOT = 618,
+    COMMA = 619,
+    COLON = 620,
+    EQUAL = 621,
+    SEMICOLON = 622,
+    BANG = 623,
+    DASH = 624,
+    TILDE = 625,
+    PLUS = 626,
+    STAR = 627,
+    SLASH = 628,
+    PERCENT = 629,
+    LEFT_ANGLE = 630,
+    RIGHT_ANGLE = 631,
+    VERTICAL_BAR = 632,
+    CARET = 633,
+    AMPERSAND = 634,
+    QUESTION = 635,
+    INVARIANT = 636,
+    PRECISE = 637,
+    HIGH_PRECISION = 638,
+    MEDIUM_PRECISION = 639,
+    LOW_PRECISION = 640,
+    PRECISION = 641,
+    PACKED = 642,
+    RESOURCE = 643,
+    SUPERP = 644
   };
 #endif
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-
+typedef union YYSTYPE YYSTYPE;
 union YYSTYPE
 {
-#line 69 "glslang.y" /* yacc.c:355  */
+#line 70 "MachineIndependent/glslang.y" /* yacc.c:355  */
 
     struct {
         glslang::TSourceLoc loc;
@@ -503,10 +553,8 @@
         };
     } interm;
 
-#line 507 "glslang_tab.cpp" /* yacc.c:355  */
+#line 557 "MachineIndependent/glslang_tab.cpp" /* yacc.c:355  */
 };
-
-typedef union YYSTYPE YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
 #endif
@@ -515,10 +563,10 @@
 
 int yyparse (glslang::TParseContext* pParseContext);
 
-#endif /* !YY_YY_GLSLANG_TAB_CPP_H_INCLUDED  */
+#endif /* !YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED  */
 
 /* Copy the second part of user declarations.  */
-#line 104 "glslang.y" /* yacc.c:358  */
+#line 105 "MachineIndependent/glslang.y" /* yacc.c:358  */
 
 
 /* windows only pragma */
@@ -534,7 +582,7 @@
 extern int yylex(YYSTYPE*, TParseContext&);
 
 
-#line 538 "glslang_tab.cpp" /* yacc.c:358  */
+#line 586 "MachineIndependent/glslang_tab.cpp" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -591,30 +639,11 @@
 # endif
 #endif
 
-#ifndef YY_ATTRIBUTE
-# if (defined __GNUC__                                               \
-      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
-     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
-#  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
-# else
-#  define YY_ATTRIBUTE(Spec) /* empty */
-# endif
-#endif
-
-#ifndef YY_ATTRIBUTE_PURE
-# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
-#endif
-
-#ifndef YY_ATTRIBUTE_UNUSED
-# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
-#endif
-
-#if !defined _Noreturn \
-     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
-# if defined _MSC_VER && 1200 <= _MSC_VER
-#  define _Noreturn __declspec (noreturn)
-# else
-#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
+#ifndef __attribute__
+/* This feature is available in gcc versions 2.5 and later.  */
+# if (! defined __GNUC__ || __GNUC__ < 2 \
+      || (__GNUC__ == 2 && __GNUC_MINOR__ < 5))
+#  define __attribute__(Spec) /* empty */
 # endif
 #endif
 
@@ -774,23 +803,23 @@
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  316
+#define YYFINAL  364
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   7455
+#define YYLAST   8818
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  340
+#define YYNTOKENS  390
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  106
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  503
+#define YYNRULES  553
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  643
+#define YYNSTATES  693
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   594
+#define YYMAXUTOK   644
 
 #define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -858,64 +887,74 @@
      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
-     335,   336,   337,   338,   339
+     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
+     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
+     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
+     365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
+     375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
+     385,   386,   387,   388,   389
 };
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   272,   272,   278,   281,   284,   288,   292,   296,   302,
-     308,   311,   315,   321,   324,   332,   335,   338,   341,   344,
-     349,   357,   364,   371,   377,   381,   388,   391,   397,   404,
-     414,   422,   427,   457,   463,   467,   471,   491,   492,   493,
-     494,   500,   501,   506,   511,   520,   521,   526,   534,   535,
-     541,   550,   551,   556,   561,   566,   574,   575,   583,   594,
-     595,   604,   605,   614,   615,   624,   625,   633,   634,   642,
-     643,   651,   652,   652,   670,   671,   686,   690,   694,   698,
-     703,   707,   711,   715,   719,   723,   727,   734,   737,   748,
-     755,   760,   765,   773,   777,   781,   785,   790,   795,   804,
-     804,   815,   819,   826,   833,   836,   843,   851,   871,   894,
-     909,   932,   943,   953,   963,   973,   982,   985,   989,   993,
-     998,  1006,  1011,  1016,  1021,  1026,  1035,  1046,  1073,  1082,
-    1089,  1096,  1103,  1115,  1121,  1124,  1131,  1135,  1139,  1147,
-    1156,  1159,  1170,  1173,  1176,  1180,  1184,  1188,  1195,  1199,
-    1211,  1225,  1230,  1236,  1242,  1249,  1255,  1260,  1265,  1270,
-    1278,  1282,  1286,  1290,  1294,  1298,  1304,  1313,  1316,  1324,
-    1328,  1337,  1342,  1350,  1354,  1364,  1368,  1372,  1377,  1384,
-    1388,  1393,  1398,  1403,  1410,  1417,  1421,  1426,  1431,  1436,
-    1442,  1448,  1454,  1462,  1470,  1478,  1483,  1488,  1493,  1498,
-    1503,  1508,  1514,  1520,  1526,  1534,  1542,  1550,  1556,  1562,
-    1568,  1574,  1580,  1586,  1594,  1602,  1610,  1615,  1620,  1625,
-    1630,  1635,  1640,  1645,  1650,  1655,  1660,  1665,  1670,  1676,
-    1682,  1688,  1694,  1700,  1706,  1712,  1718,  1724,  1730,  1736,
-    1742,  1750,  1758,  1766,  1774,  1782,  1790,  1798,  1806,  1814,
-    1822,  1830,  1838,  1843,  1848,  1853,  1858,  1863,  1868,  1873,
-    1878,  1883,  1888,  1893,  1898,  1903,  1908,  1916,  1924,  1932,
-    1940,  1948,  1956,  1964,  1972,  1980,  1988,  1996,  2004,  2012,
-    2017,  2022,  2027,  2032,  2037,  2042,  2047,  2052,  2057,  2062,
-    2067,  2072,  2077,  2082,  2087,  2092,  2100,  2108,  2113,  2118,
-    2123,  2131,  2136,  2141,  2146,  2154,  2159,  2164,  2169,  2177,
-    2182,  2187,  2192,  2197,  2202,  2210,  2215,  2223,  2228,  2236,
-    2241,  2249,  2254,  2262,  2267,  2275,  2280,  2288,  2293,  2298,
-    2303,  2308,  2313,  2318,  2323,  2328,  2333,  2338,  2343,  2348,
-    2353,  2358,  2363,  2371,  2376,  2381,  2386,  2394,  2399,  2404,
-    2409,  2417,  2422,  2427,  2432,  2440,  2445,  2450,  2455,  2463,
-    2468,  2473,  2478,  2486,  2491,  2496,  2501,  2509,  2514,  2519,
-    2524,  2532,  2537,  2542,  2547,  2555,  2560,  2565,  2570,  2578,
-    2583,  2588,  2593,  2601,  2606,  2611,  2616,  2624,  2629,  2634,
-    2639,  2647,  2652,  2657,  2662,  2670,  2675,  2680,  2685,  2693,
-    2698,  2703,  2709,  2715,  2721,  2730,  2739,  2745,  2751,  2757,
-    2763,  2768,  2784,  2789,  2794,  2802,  2802,  2813,  2813,  2823,
-    2826,  2839,  2857,  2881,  2885,  2891,  2896,  2907,  2910,  2916,
-    2925,  2928,  2934,  2938,  2939,  2945,  2946,  2947,  2948,  2949,
-    2950,  2951,  2955,  2956,  2960,  2956,  2972,  2973,  2977,  2977,
-    2984,  2984,  2998,  3001,  3009,  3017,  3028,  3029,  3033,  3036,
-    3042,  3049,  3053,  3061,  3065,  3078,  3081,  3087,  3087,  3107,
-    3110,  3116,  3128,  3140,  3143,  3149,  3149,  3164,  3164,  3180,
-    3180,  3201,  3204,  3210,  3213,  3219,  3223,  3230,  3235,  3240,
-    3247,  3250,  3259,  3263,  3272,  3275,  3278,  3286,  3286,  3308,
-    3314,  3317,  3322,  3325
+       0,   292,   292,   298,   301,   305,   309,   312,   316,   320,
+     324,   328,   332,   335,   339,   343,   346,   354,   357,   360,
+     363,   366,   371,   379,   386,   393,   399,   403,   410,   413,
+     419,   426,   436,   444,   449,   479,   485,   489,   493,   513,
+     514,   515,   516,   522,   523,   528,   533,   542,   543,   548,
+     556,   557,   563,   572,   573,   578,   583,   588,   596,   597,
+     605,   616,   617,   626,   627,   636,   637,   646,   647,   655,
+     656,   664,   665,   673,   674,   674,   692,   693,   708,   712,
+     716,   720,   725,   729,   733,   737,   741,   745,   749,   756,
+     759,   770,   777,   782,   787,   795,   799,   803,   807,   812,
+     817,   826,   826,   837,   841,   848,   855,   858,   865,   873,
+     893,   916,   931,   954,   965,   975,   985,   995,  1004,  1007,
+    1011,  1015,  1020,  1028,  1033,  1038,  1043,  1048,  1057,  1068,
+    1095,  1104,  1111,  1118,  1125,  1137,  1143,  1146,  1153,  1157,
+    1161,  1169,  1178,  1181,  1192,  1195,  1198,  1202,  1206,  1210,
+    1217,  1221,  1233,  1247,  1252,  1258,  1264,  1271,  1277,  1282,
+    1287,  1292,  1300,  1304,  1308,  1312,  1316,  1320,  1326,  1335,
+    1338,  1346,  1350,  1359,  1364,  1372,  1376,  1386,  1390,  1394,
+    1399,  1404,  1409,  1414,  1418,  1423,  1428,  1433,  1438,  1443,
+    1448,  1453,  1458,  1463,  1467,  1472,  1477,  1482,  1488,  1494,
+    1500,  1506,  1512,  1518,  1524,  1530,  1536,  1542,  1548,  1554,
+    1559,  1564,  1569,  1574,  1579,  1584,  1590,  1596,  1602,  1608,
+    1614,  1620,  1626,  1632,  1638,  1644,  1650,  1656,  1662,  1668,
+    1674,  1680,  1686,  1692,  1698,  1704,  1710,  1716,  1722,  1728,
+    1734,  1740,  1746,  1751,  1756,  1761,  1766,  1771,  1776,  1781,
+    1786,  1791,  1796,  1801,  1806,  1812,  1818,  1824,  1830,  1836,
+    1842,  1848,  1854,  1860,  1866,  1872,  1878,  1884,  1890,  1896,
+    1902,  1908,  1914,  1920,  1926,  1932,  1938,  1944,  1950,  1956,
+    1962,  1968,  1974,  1980,  1986,  1992,  1998,  2004,  2010,  2016,
+    2022,  2028,  2034,  2040,  2046,  2052,  2058,  2064,  2070,  2076,
+    2082,  2088,  2094,  2099,  2104,  2109,  2114,  2119,  2124,  2129,
+    2134,  2139,  2144,  2149,  2154,  2159,  2164,  2172,  2180,  2188,
+    2196,  2204,  2212,  2220,  2228,  2236,  2244,  2252,  2260,  2268,
+    2273,  2278,  2283,  2288,  2293,  2298,  2303,  2308,  2313,  2318,
+    2323,  2328,  2333,  2338,  2343,  2348,  2356,  2364,  2369,  2374,
+    2379,  2387,  2392,  2397,  2402,  2410,  2415,  2420,  2425,  2433,
+    2438,  2443,  2448,  2453,  2458,  2466,  2471,  2479,  2484,  2492,
+    2497,  2505,  2510,  2518,  2523,  2531,  2536,  2544,  2549,  2554,
+    2559,  2564,  2569,  2574,  2579,  2584,  2589,  2594,  2599,  2604,
+    2609,  2614,  2619,  2627,  2632,  2637,  2642,  2650,  2655,  2660,
+    2665,  2673,  2678,  2683,  2688,  2696,  2701,  2706,  2711,  2719,
+    2724,  2729,  2734,  2742,  2747,  2752,  2757,  2765,  2770,  2775,
+    2780,  2788,  2793,  2798,  2803,  2811,  2816,  2821,  2826,  2834,
+    2839,  2844,  2849,  2857,  2862,  2867,  2872,  2880,  2885,  2890,
+    2895,  2903,  2908,  2913,  2918,  2926,  2931,  2936,  2941,  2949,
+    2954,  2959,  2965,  2971,  2977,  2986,  2995,  3001,  3007,  3013,
+    3019,  3024,  3040,  3045,  3050,  3058,  3058,  3069,  3069,  3079,
+    3082,  3095,  3113,  3137,  3141,  3147,  3152,  3163,  3166,  3172,
+    3181,  3184,  3190,  3194,  3195,  3201,  3202,  3203,  3204,  3205,
+    3206,  3207,  3211,  3212,  3216,  3212,  3228,  3229,  3233,  3233,
+    3240,  3240,  3254,  3257,  3265,  3273,  3284,  3285,  3289,  3292,
+    3298,  3305,  3309,  3317,  3321,  3334,  3337,  3343,  3343,  3363,
+    3366,  3372,  3384,  3396,  3399,  3405,  3405,  3420,  3420,  3436,
+    3436,  3457,  3460,  3466,  3469,  3475,  3479,  3486,  3491,  3496,
+    3503,  3506,  3515,  3519,  3528,  3531,  3534,  3542,  3542,  3564,
+    3570,  3573,  3578,  3581
 };
 #endif
 
@@ -924,39 +963,48 @@
    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
 static const char *const yytname[] =
 {
-  "$end", "error", "$undefined", "ATTRIBUTE", "VARYING", "CONST", "BOOL",
-  "FLOAT", "DOUBLE", "INT", "UINT", "INT64_T", "UINT64_T", "INT16_T",
-  "UINT16_T", "FLOAT16_T", "BREAK", "CONTINUE", "DO", "ELSE", "FOR", "IF",
-  "DISCARD", "RETURN", "SWITCH", "CASE", "DEFAULT", "SUBROUTINE", "BVEC2",
-  "BVEC3", "BVEC4", "IVEC2", "IVEC3", "IVEC4", "I64VEC2", "I64VEC3",
-  "I64VEC4", "UVEC2", "UVEC3", "UVEC4", "U64VEC2", "U64VEC3", "U64VEC4",
-  "VEC2", "VEC3", "VEC4", "MAT2", "MAT3", "MAT4", "CENTROID", "IN", "OUT",
-  "INOUT", "UNIFORM", "PATCH", "SAMPLE", "BUFFER", "SHARED", "COHERENT",
-  "VOLATILE", "RESTRICT", "READONLY", "WRITEONLY", "DVEC2", "DVEC3",
-  "DVEC4", "DMAT2", "DMAT3", "DMAT4", "F16VEC2", "F16VEC3", "F16VEC4",
-  "F16MAT2", "F16MAT3", "F16MAT4", "I16VEC2", "I16VEC3", "I16VEC4",
-  "U16VEC2", "U16VEC3", "U16VEC4", "NOPERSPECTIVE", "FLAT", "SMOOTH",
-  "LAYOUT", "__EXPLICITINTERPAMD", "MAT2X2", "MAT2X3", "MAT2X4", "MAT3X2",
-  "MAT3X3", "MAT3X4", "MAT4X2", "MAT4X3", "MAT4X4", "DMAT2X2", "DMAT2X3",
-  "DMAT2X4", "DMAT3X2", "DMAT3X3", "DMAT3X4", "DMAT4X2", "DMAT4X3",
-  "DMAT4X4", "F16MAT2X2", "F16MAT2X3", "F16MAT2X4", "F16MAT3X2",
+  "$end", "error", "$undefined", "ATTRIBUTE", "VARYING", "FLOAT16_T",
+  "FLOAT", "FLOAT32_T", "DOUBLE", "FLOAT64_T", "CONST", "BOOL", "INT",
+  "UINT", "INT64_T", "UINT64_T", "INT32_T", "UINT32_T", "INT16_T",
+  "UINT16_T", "INT8_T", "UINT8_T", "BREAK", "CONTINUE", "DO", "ELSE",
+  "FOR", "IF", "DISCARD", "RETURN", "SWITCH", "CASE", "DEFAULT",
+  "SUBROUTINE", "BVEC2", "BVEC3", "BVEC4", "IVEC2", "IVEC3", "IVEC4",
+  "UVEC2", "UVEC3", "UVEC4", "I64VEC2", "I64VEC3", "I64VEC4", "U64VEC2",
+  "U64VEC3", "U64VEC4", "I32VEC2", "I32VEC3", "I32VEC4", "U32VEC2",
+  "U32VEC3", "U32VEC4", "I16VEC2", "I16VEC3", "I16VEC4", "U16VEC2",
+  "U16VEC3", "U16VEC4", "I8VEC2", "I8VEC3", "I8VEC4", "U8VEC2", "U8VEC3",
+  "U8VEC4", "VEC2", "VEC3", "VEC4", "MAT2", "MAT3", "MAT4", "CENTROID",
+  "IN", "OUT", "INOUT", "UNIFORM", "PATCH", "SAMPLE", "BUFFER", "SHARED",
+  "COHERENT", "VOLATILE", "RESTRICT", "READONLY", "WRITEONLY", "DVEC2",
+  "DVEC3", "DVEC4", "DMAT2", "DMAT3", "DMAT4", "F16VEC2", "F16VEC3",
+  "F16VEC4", "F16MAT2", "F16MAT3", "F16MAT4", "F32VEC2", "F32VEC3",
+  "F32VEC4", "F32MAT2", "F32MAT3", "F32MAT4", "F64VEC2", "F64VEC3",
+  "F64VEC4", "F64MAT2", "F64MAT3", "F64MAT4", "NOPERSPECTIVE", "FLAT",
+  "SMOOTH", "LAYOUT", "__EXPLICITINTERPAMD", "MAT2X2", "MAT2X3", "MAT2X4",
+  "MAT3X2", "MAT3X3", "MAT3X4", "MAT4X2", "MAT4X3", "MAT4X4", "DMAT2X2",
+  "DMAT2X3", "DMAT2X4", "DMAT3X2", "DMAT3X3", "DMAT3X4", "DMAT4X2",
+  "DMAT4X3", "DMAT4X4", "F16MAT2X2", "F16MAT2X3", "F16MAT2X4", "F16MAT3X2",
   "F16MAT3X3", "F16MAT3X4", "F16MAT4X2", "F16MAT4X3", "F16MAT4X4",
-  "ATOMIC_UINT", "SAMPLER1D", "SAMPLER2D", "SAMPLER3D", "SAMPLERCUBE",
-  "SAMPLER1DSHADOW", "SAMPLER2DSHADOW", "SAMPLERCUBESHADOW",
-  "SAMPLER1DARRAY", "SAMPLER2DARRAY", "SAMPLER1DARRAYSHADOW",
-  "SAMPLER2DARRAYSHADOW", "ISAMPLER1D", "ISAMPLER2D", "ISAMPLER3D",
-  "ISAMPLERCUBE", "ISAMPLER1DARRAY", "ISAMPLER2DARRAY", "USAMPLER1D",
-  "USAMPLER2D", "USAMPLER3D", "USAMPLERCUBE", "USAMPLER1DARRAY",
-  "USAMPLER2DARRAY", "SAMPLER2DRECT", "SAMPLER2DRECTSHADOW",
-  "ISAMPLER2DRECT", "USAMPLER2DRECT", "SAMPLERBUFFER", "ISAMPLERBUFFER",
-  "USAMPLERBUFFER", "SAMPLERCUBEARRAY", "SAMPLERCUBEARRAYSHADOW",
-  "ISAMPLERCUBEARRAY", "USAMPLERCUBEARRAY", "SAMPLER2DMS", "ISAMPLER2DMS",
-  "USAMPLER2DMS", "SAMPLER2DMSARRAY", "ISAMPLER2DMSARRAY",
-  "USAMPLER2DMSARRAY", "SAMPLEREXTERNALOES", "F16SAMPLER1D",
-  "F16SAMPLER2D", "F16SAMPLER3D", "F16SAMPLER2DRECT", "F16SAMPLERCUBE",
-  "F16SAMPLER1DARRAY", "F16SAMPLER2DARRAY", "F16SAMPLERCUBEARRAY",
-  "F16SAMPLERBUFFER", "F16SAMPLER2DMS", "F16SAMPLER2DMSARRAY",
-  "F16SAMPLER1DSHADOW", "F16SAMPLER2DSHADOW", "F16SAMPLER1DARRAYSHADOW",
+  "F32MAT2X2", "F32MAT2X3", "F32MAT2X4", "F32MAT3X2", "F32MAT3X3",
+  "F32MAT3X4", "F32MAT4X2", "F32MAT4X3", "F32MAT4X4", "F64MAT2X2",
+  "F64MAT2X3", "F64MAT2X4", "F64MAT3X2", "F64MAT3X3", "F64MAT3X4",
+  "F64MAT4X2", "F64MAT4X3", "F64MAT4X4", "ATOMIC_UINT", "SAMPLER1D",
+  "SAMPLER2D", "SAMPLER3D", "SAMPLERCUBE", "SAMPLER1DSHADOW",
+  "SAMPLER2DSHADOW", "SAMPLERCUBESHADOW", "SAMPLER1DARRAY",
+  "SAMPLER2DARRAY", "SAMPLER1DARRAYSHADOW", "SAMPLER2DARRAYSHADOW",
+  "ISAMPLER1D", "ISAMPLER2D", "ISAMPLER3D", "ISAMPLERCUBE",
+  "ISAMPLER1DARRAY", "ISAMPLER2DARRAY", "USAMPLER1D", "USAMPLER2D",
+  "USAMPLER3D", "USAMPLERCUBE", "USAMPLER1DARRAY", "USAMPLER2DARRAY",
+  "SAMPLER2DRECT", "SAMPLER2DRECTSHADOW", "ISAMPLER2DRECT",
+  "USAMPLER2DRECT", "SAMPLERBUFFER", "ISAMPLERBUFFER", "USAMPLERBUFFER",
+  "SAMPLERCUBEARRAY", "SAMPLERCUBEARRAYSHADOW", "ISAMPLERCUBEARRAY",
+  "USAMPLERCUBEARRAY", "SAMPLER2DMS", "ISAMPLER2DMS", "USAMPLER2DMS",
+  "SAMPLER2DMSARRAY", "ISAMPLER2DMSARRAY", "USAMPLER2DMSARRAY",
+  "SAMPLEREXTERNALOES", "F16SAMPLER1D", "F16SAMPLER2D", "F16SAMPLER3D",
+  "F16SAMPLER2DRECT", "F16SAMPLERCUBE", "F16SAMPLER1DARRAY",
+  "F16SAMPLER2DARRAY", "F16SAMPLERCUBEARRAY", "F16SAMPLERBUFFER",
+  "F16SAMPLER2DMS", "F16SAMPLER2DMSARRAY", "F16SAMPLER1DSHADOW",
+  "F16SAMPLER2DSHADOW", "F16SAMPLER1DARRAYSHADOW",
   "F16SAMPLER2DARRAYSHADOW", "F16SAMPLER2DRECTSHADOW",
   "F16SAMPLERCUBESHADOW", "F16SAMPLERCUBEARRAYSHADOW", "SAMPLER",
   "SAMPLERSHADOW", "TEXTURE1D", "TEXTURE2D", "TEXTURE3D", "TEXTURECUBE",
@@ -984,22 +1032,22 @@
   "F16IMAGE3D", "F16IMAGE2DRECT", "F16IMAGECUBE", "F16IMAGE1DARRAY",
   "F16IMAGE2DARRAY", "F16IMAGECUBEARRAY", "F16IMAGEBUFFER", "F16IMAGE2DMS",
   "F16IMAGE2DMSARRAY", "STRUCT", "VOID", "WHILE", "IDENTIFIER",
-  "TYPE_NAME", "FLOATCONSTANT", "DOUBLECONSTANT", "INTCONSTANT",
-  "UINTCONSTANT", "INT64CONSTANT", "UINT64CONSTANT", "INT16CONSTANT",
-  "UINT16CONSTANT", "BOOLCONSTANT", "FLOAT16CONSTANT", "LEFT_OP",
-  "RIGHT_OP", "INC_OP", "DEC_OP", "LE_OP", "GE_OP", "EQ_OP", "NE_OP",
-  "AND_OP", "OR_OP", "XOR_OP", "MUL_ASSIGN", "DIV_ASSIGN", "ADD_ASSIGN",
-  "MOD_ASSIGN", "LEFT_ASSIGN", "RIGHT_ASSIGN", "AND_ASSIGN", "XOR_ASSIGN",
-  "OR_ASSIGN", "SUB_ASSIGN", "LEFT_PAREN", "RIGHT_PAREN", "LEFT_BRACKET",
-  "RIGHT_BRACKET", "LEFT_BRACE", "RIGHT_BRACE", "DOT", "COMMA", "COLON",
-  "EQUAL", "SEMICOLON", "BANG", "DASH", "TILDE", "PLUS", "STAR", "SLASH",
-  "PERCENT", "LEFT_ANGLE", "RIGHT_ANGLE", "VERTICAL_BAR", "CARET",
-  "AMPERSAND", "QUESTION", "INVARIANT", "PRECISE", "HIGH_PRECISION",
-  "MEDIUM_PRECISION", "LOW_PRECISION", "PRECISION", "PACKED", "RESOURCE",
-  "SUPERP", "$accept", "variable_identifier", "primary_expression",
-  "postfix_expression", "integer_expression", "function_call",
-  "function_call_or_method", "function_call_generic",
-  "function_call_header_no_parameters",
+  "TYPE_NAME", "FLOATCONSTANT", "DOUBLECONSTANT", "INT16CONSTANT",
+  "UINT16CONSTANT", "INT32CONSTANT", "UINT32CONSTANT", "INTCONSTANT",
+  "UINTCONSTANT", "INT64CONSTANT", "UINT64CONSTANT", "BOOLCONSTANT",
+  "FLOAT16CONSTANT", "LEFT_OP", "RIGHT_OP", "INC_OP", "DEC_OP", "LE_OP",
+  "GE_OP", "EQ_OP", "NE_OP", "AND_OP", "OR_OP", "XOR_OP", "MUL_ASSIGN",
+  "DIV_ASSIGN", "ADD_ASSIGN", "MOD_ASSIGN", "LEFT_ASSIGN", "RIGHT_ASSIGN",
+  "AND_ASSIGN", "XOR_ASSIGN", "OR_ASSIGN", "SUB_ASSIGN", "LEFT_PAREN",
+  "RIGHT_PAREN", "LEFT_BRACKET", "RIGHT_BRACKET", "LEFT_BRACE",
+  "RIGHT_BRACE", "DOT", "COMMA", "COLON", "EQUAL", "SEMICOLON", "BANG",
+  "DASH", "TILDE", "PLUS", "STAR", "SLASH", "PERCENT", "LEFT_ANGLE",
+  "RIGHT_ANGLE", "VERTICAL_BAR", "CARET", "AMPERSAND", "QUESTION",
+  "INVARIANT", "PRECISE", "HIGH_PRECISION", "MEDIUM_PRECISION",
+  "LOW_PRECISION", "PRECISION", "PACKED", "RESOURCE", "SUPERP", "$accept",
+  "variable_identifier", "primary_expression", "postfix_expression",
+  "integer_expression", "function_call", "function_call_or_method",
+  "function_call_generic", "function_call_header_no_parameters",
   "function_call_header_with_parameters", "function_call_header",
   "function_identifier", "unary_expression", "unary_operator",
   "multiplicative_expression", "additive_expression", "shift_expression",
@@ -1032,7 +1080,7 @@
   "for_init_statement", "conditionopt", "for_rest_statement",
   "jump_statement", "translation_unit", "external_declaration",
   "function_definition", "$@13", "attribute", "attribute_list",
-  "single_attribute", YY_NULLPTR
+  "single_attribute", YY_NULL
 };
 #endif
 
@@ -1074,16 +1122,21 @@
      555,   556,   557,   558,   559,   560,   561,   562,   563,   564,
      565,   566,   567,   568,   569,   570,   571,   572,   573,   574,
      575,   576,   577,   578,   579,   580,   581,   582,   583,   584,
-     585,   586,   587,   588,   589,   590,   591,   592,   593,   594
+     585,   586,   587,   588,   589,   590,   591,   592,   593,   594,
+     595,   596,   597,   598,   599,   600,   601,   602,   603,   604,
+     605,   606,   607,   608,   609,   610,   611,   612,   613,   614,
+     615,   616,   617,   618,   619,   620,   621,   622,   623,   624,
+     625,   626,   627,   628,   629,   630,   631,   632,   633,   634,
+     635,   636,   637,   638,   639,   640,   641,   642,   643,   644
 };
 # endif
 
-#define YYPACT_NINF -451
+#define YYPACT_NINF -495
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-451)))
+  (!!((Yystate) == (-495)))
 
-#define YYTABLE_NINF -449
+#define YYTABLE_NINF -499
 
 #define yytable_value_is_error(Yytable_value) \
   0
@@ -1092,71 +1145,76 @@
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-      -1,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,
-    -451,  -451,  -451,  -451,  -284,  -451,  -451,  -451,  -451,  -451,
-    -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,
-    -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,
-    -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,
-    -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,
-    -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,
-    -451,    29,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,
-    -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,
-    -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,
-    -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,
-    -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,
-    -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,
-    -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,
-    -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,
-    -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,
-    -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,
-    -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,
-    -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,
-    -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,
-    -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,
-    -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,
-    -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,
-    -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,
-    -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,
-    -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,     8,  -451,
-    -451,  -451,  -451,  -451,  -451,  -451,  -451,    89,  -451,    20,
-      28,    58,    60,  4552,    39,  -451,   108,  -451,  -451,  -451,
-    -451,  3307,  -451,  -451,  -451,    82,  -451,  -451,   636,  -451,
-    -451,   140,   220,   106,  -451,  7180,    11,  -451,  -451,   114,
-    -451,  4552,  -451,  -451,  -451,  4552,   155,   160,  -451,  -292,
-      51,  -451,  -451,  -451,  5141,   129,  -451,  -451,  -451,    -8,
-    -451,   135,    46,  -451,  -451,  4552,   126,  -451,    31,   970,
-    -451,  -451,  -451,  -451,    82,  -291,  -451,  5457,     6,  -451,
-     171,  -451,    62,  -451,  -451,  -451,  -451,  -451,  -451,  -451,
-    -451,  -451,  -451,  -451,  6405,  6405,  6405,  -451,  -451,  -451,
-    -451,  -451,  -451,  -451,    50,  -451,  -451,  -451,   144,    47,
-    6707,   146,  -451,  6405,   109,    78,    22,    21,   127,   125,
-     128,   130,   161,   162,    12,   149,  -451,  5773,  -451,   186,
-    6405,  -451,   220,  4552,  4552,   187,  3622,  -451,  -451,  -451,
-     145,   147,  -451,   156,   163,   150,  6089,   164,  6405,   153,
-     165,   166,   157,  -451,  -451,   105,  -451,  -451,    70,  -451,
-      28,   169,  -451,  -451,  -451,  -451,  1304,  -451,  -451,  -451,
-    -451,  -451,  -451,  -451,  -451,  -451,   266,   129,  5457,    42,
-    5457,  -451,  -451,  5457,  4552,  -451,   199,  -451,  -451,  -451,
-      56,  -451,  -451,  6405,   203,  -451,  -451,  6405,   170,  -451,
-    -451,  -451,  6405,  6405,  6405,  6405,  6405,  6405,  6405,  6405,
-    6405,  6405,  6405,  6405,  6405,  6405,  6405,  6405,  6405,  6405,
-    6405,  -451,  -451,  -451,   172,  -451,  -451,  -451,  -451,  3932,
-     187,    82,    75,  -451,  -451,  -451,  -451,  -451,  1638,  -451,
-    6405,  -451,  -451,    98,  6405,   113,  -451,  -451,   205,  -451,
-    1638,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,
-    -451,  -451,  6405,  6405,  -451,  -451,  -451,  -451,  -451,  -451,
-    -451,  5457,  -451,    66,  -451,  4242,  -451,  -451,   173,   167,
-    -451,  -451,  -451,  -451,  -451,   109,   109,    78,    78,    22,
-      22,    22,    22,    21,    21,   127,   125,   128,   130,   161,
-     162,  6405,  -451,  -451,    99,   129,   187,  -451,   211,  2640,
-      59,  -451,    61,  -451,  2974,   178,     7,  -451,  1638,  -451,
-    -451,  -451,  -451,  4825,  -451,  -451,   122,  -451,  -451,   179,
-    -451,  -451,  2974,   176,  -451,   167,   218,  4552,   185,  6405,
-     189,   205,   183,  -451,  -451,  6405,  6405,  -451,   180,   192,
-     482,   191,  2306,  -451,   193,   190,  1972,   195,  -451,  -451,
-    -451,  -451,    63,  6405,  1972,   176,  -451,  -451,  1638,  5457,
-    -451,  -451,  -451,  -451,   188,   167,  -451,  -451,  1638,   196,
-    -451,  -451,  -451
+      -1,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -328,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,   -12,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,  -495,  -495,  -495,  -495,  -495,    17,  -495,  -495,  -495,
+    -495,  -495,  -495,  -495,  -495,    80,  -495,    20,     7,    39,
+      52,  5289,   -17,  -495,    99,  -495,  -495,  -495,  -495,  3757,
+    -495,  -495,  -495,    73,  -495,  -495,   686,  -495,  -495,   119,
+     250,   105,  -495,  8210,     3,  -495,  -495,   110,  -495,  5289,
+    -495,  -495,  -495,  5289,   161,   166,  -495,  -335,    35,  -495,
+    -495,  -495,  6008,    78,  -495,  -495,  -495,    64,  -495,   129,
+      76,  -495,  -495,  5289,   130,  -495,    56,  1070,  -495,  -495,
+    -495,  -495,    73,  -336,  -495,  6375,    59,  -495,   176,  -495,
+      -3,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,  -495,  -495,  -495,  7476,  7476,  7476,  -495,  -495,  -495,
+    -495,  -495,  -495,  -495,    29,  -495,  -495,  -495,   142,    91,
+    7843,   144,  -495,  7476,    95,    90,   138,    54,   135,   123,
+     125,   127,   162,   159,    10,   147,  -495,  6742,  -495,   186,
+    7476,  -495,   250,  5289,  5289,   187,  4140,  -495,  -495,  -495,
+     143,   145,  -495,   154,   156,   150,  7109,   157,  7476,   153,
+     163,   160,   164,  -495,  -495,    58,  -495,  -495,    12,  -495,
+       7,   165,  -495,  -495,  -495,  -495,  1454,  -495,  -495,  -495,
+    -495,  -495,  -495,  -495,  -495,  -495,   300,    78,  6375,    60,
+    6375,  -495,  -495,  6375,  5289,  -495,   199,  -495,  -495,  -495,
+      93,  -495,  -495,  7476,   201,  -495,  -495,  7476,   167,  -495,
+    -495,  -495,  7476,  7476,  7476,  7476,  7476,  7476,  7476,  7476,
+    7476,  7476,  7476,  7476,  7476,  7476,  7476,  7476,  7476,  7476,
+    7476,  -495,  -495,  -495,   168,  -495,  -495,  -495,  -495,  4523,
+     187,    73,    34,  -495,  -495,  -495,  -495,  -495,  1838,  -495,
+    7476,  -495,  -495,    53,  7476,   115,  -495,  -495,   205,  -495,
+    1838,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,  -495,  7476,  7476,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,  6375,  -495,   108,  -495,  4906,  -495,  -495,   169,   170,
+    -495,  -495,  -495,  -495,  -495,    95,    95,    90,    90,   138,
+     138,   138,   138,    54,    54,   135,   123,   125,   127,   162,
+     159,  7476,  -495,  -495,    75,    78,   187,  -495,   210,  2990,
+      94,  -495,    96,  -495,  3374,   175,     5,  -495,  1838,  -495,
+    -495,  -495,  -495,  5641,  -495,  -495,   117,  -495,  -495,   178,
+    -495,  -495,  3374,   172,  -495,   170,   214,  5289,   179,  7476,
+     180,   205,   181,  -495,  -495,  7476,  7476,  -495,   171,   184,
+     522,   188,  2606,  -495,   189,   185,  2222,   194,  -495,  -495,
+    -495,  -495,    98,  7476,  2222,   172,  -495,  -495,  1838,  6375,
+    -495,  -495,  -495,  -495,   190,   170,  -495,  -495,  1838,   191,
+    -495,  -495,  -495
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1164,103 +1222,108 @@
      means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       0,   149,   150,   148,   185,   176,   177,   179,   180,   181,
-     182,   183,   184,   178,   165,   195,   196,   197,   198,   199,
-     200,   201,   202,   203,   207,   208,   209,   210,   211,   212,
-     186,   187,   188,   216,   217,   218,   154,   152,   153,   151,
-     157,   155,   156,   158,   159,   160,   161,   162,   163,   164,
-     189,   190,   191,   228,   229,   230,   192,   193,   194,   240,
-     241,   242,   204,   205,   206,   213,   214,   215,   131,   130,
-     129,     0,   132,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   231,   232,   233,   234,   235,   236,   237,   238,
-     239,   243,   244,   245,   246,   247,   248,   249,   250,   251,
-     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
-     262,   263,   279,   280,   281,   282,   283,   284,   286,   287,
-     288,   289,   290,   291,   293,   294,   297,   298,   299,   301,
-     302,   264,   265,   285,   292,   303,   305,   306,   307,   309,
-     310,   401,   266,   267,   268,   295,   269,   273,   274,   277,
-     300,   304,   308,   270,   271,   275,   276,   296,   272,   278,
-     311,   312,   313,   315,   317,   319,   321,   323,   327,   328,
-     329,   330,   331,   332,   334,   335,   336,   337,   338,   339,
-     341,   343,   344,   345,   347,   348,   325,   333,   340,   349,
-     351,   352,   353,   355,   356,   314,   316,   318,   342,   320,
-     322,   324,   326,   346,   350,   354,   402,   403,   406,   407,
-     408,   409,   404,   405,   357,   359,   360,   361,   363,   364,
-     365,   367,   368,   369,   371,   372,   373,   375,   376,   377,
-     379,   380,   381,   383,   384,   385,   387,   388,   389,   391,
-     392,   393,   395,   396,   397,   399,   400,   358,   362,   366,
-     370,   374,   382,   386,   390,   378,   394,   398,     0,   175,
-     411,   496,   128,   139,   412,   413,   414,     0,   495,     0,
-     497,     0,   105,   104,     0,   116,   121,   146,   145,   143,
-     147,     0,   140,   142,   126,   169,   144,   410,     0,   492,
-     494,     0,     0,     0,   417,     0,     0,    93,    90,     0,
-     103,     0,   112,   106,   114,     0,   115,     0,    91,   122,
-       0,    96,   141,   127,     0,   170,     1,   493,   167,     0,
-     138,   136,     0,   134,   415,     0,     0,    94,     0,     0,
-     498,   107,   111,   113,   109,   117,   108,     0,   123,    99,
-       0,    97,     0,     2,    10,    11,     4,     5,     6,     7,
-       8,     9,    13,    12,     0,     0,     0,   171,    39,    38,
-      40,    37,     3,    15,    33,    17,    22,    23,     0,     0,
-      27,     0,    41,     0,    45,    48,    51,    56,    59,    61,
-      63,    65,    67,    69,    71,     0,    31,     0,   166,     0,
-       0,   133,     0,     0,     0,     0,     0,   419,    92,    95,
-       0,     0,   477,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   443,   452,   456,    41,    74,    87,     0,   432,
-       0,   126,   435,   454,   434,   433,     0,   436,   437,   458,
-     438,   465,   439,   440,   473,   441,     0,   110,     0,   118,
-       0,   427,   125,     0,     0,   101,     0,    98,    34,    35,
-       0,    19,    20,     0,     0,    25,    24,     0,   175,    28,
-      30,    36,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   151,   152,   180,   178,   181,   179,   182,   150,   193,
+     183,   184,   191,   192,   189,   190,   187,   188,   185,   186,
+     167,   209,   210,   211,   212,   213,   214,   227,   228,   229,
+     224,   225,   226,   239,   240,   241,   221,   222,   223,   236,
+     237,   238,   218,   219,   220,   233,   234,   235,   215,   216,
+     217,   230,   231,   232,   194,   195,   196,   242,   243,   244,
+     156,   154,   155,   153,   159,   157,   158,   160,   161,   162,
+     163,   164,   165,   166,   197,   198,   199,   254,   255,   256,
+     200,   201,   202,   266,   267,   268,   203,   204,   205,   278,
+     279,   280,   206,   207,   208,   290,   291,   292,   133,   132,
+     131,     0,   134,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   293,
+     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
+     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
+     329,   330,   331,   332,   333,   334,   336,   337,   338,   339,
+     340,   341,   343,   344,   347,   348,   349,   351,   352,   314,
+     315,   335,   342,   353,   355,   356,   357,   359,   360,   451,
+     316,   317,   318,   345,   319,   323,   324,   327,   350,   354,
+     358,   320,   321,   325,   326,   346,   322,   328,   361,   362,
+     363,   365,   367,   369,   371,   373,   377,   378,   379,   380,
+     381,   382,   384,   385,   386,   387,   388,   389,   391,   393,
+     394,   395,   397,   398,   375,   383,   390,   399,   401,   402,
+     403,   405,   406,   364,   366,   368,   392,   370,   372,   374,
+     376,   396,   400,   404,   452,   453,   456,   457,   458,   459,
+     454,   455,   407,   409,   410,   411,   413,   414,   415,   417,
+     418,   419,   421,   422,   423,   425,   426,   427,   429,   430,
+     431,   433,   434,   435,   437,   438,   439,   441,   442,   443,
+     445,   446,   447,   449,   450,   408,   412,   416,   420,   424,
+     432,   436,   440,   428,   444,   448,     0,   177,   461,   546,
+     130,   141,   462,   463,   464,     0,   545,     0,   547,     0,
+     107,   106,     0,   118,   123,   148,   147,   145,   149,     0,
+     142,   144,   128,   171,   146,   460,     0,   542,   544,     0,
+       0,     0,   467,     0,     0,    95,    92,     0,   105,     0,
+     114,   108,   116,     0,   117,     0,    93,   124,     0,    98,
+     143,   129,     0,   172,     1,   543,   169,     0,   140,   138,
+       0,   136,   465,     0,     0,    96,     0,     0,   548,   109,
+     113,   115,   111,   119,   110,     0,   125,   101,     0,    99,
+       0,     2,    12,    13,    10,    11,     4,     5,     6,     7,
+       8,     9,    15,    14,     0,     0,     0,   173,    41,    40,
+      42,    39,     3,    17,    35,    19,    24,    25,     0,     0,
+      29,     0,    43,     0,    47,    50,    53,    58,    61,    63,
+      65,    67,    69,    71,    73,     0,    33,     0,   168,     0,
+       0,   135,     0,     0,     0,     0,     0,   469,    94,    97,
+       0,     0,   527,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   493,   502,   506,    43,    76,    89,     0,   482,
+       0,   128,   485,   504,   484,   483,     0,   486,   487,   508,
+     488,   515,   489,   490,   523,   491,     0,   112,     0,   120,
+       0,   477,   127,     0,     0,   103,     0,   100,    36,    37,
+       0,    21,    22,     0,     0,    27,    26,     0,   177,    30,
+      32,    38,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    72,   172,   173,     0,   168,    89,   137,   135,     0,
-       0,   425,     0,   423,   418,   420,   488,   487,     0,   479,
-       0,   491,   489,     0,     0,     0,   472,   475,     0,   442,
-       0,    77,    78,    80,    79,    82,    83,    84,    85,    86,
-      81,    76,     0,     0,   457,   453,   455,   459,   466,   474,
-     120,     0,   430,     0,   124,     0,   102,    14,     0,    21,
-      18,    29,    42,    43,    44,    47,    46,    49,    50,    54,
-      55,    52,    53,    57,    58,    60,    62,    64,    66,    68,
-      70,     0,   174,   416,     0,   426,     0,   421,     0,     0,
-       0,   490,     0,   471,     0,   502,     0,   500,   444,    75,
-      88,   119,   428,     0,   100,    16,     0,   422,   424,     0,
-     482,   481,   484,   450,   467,   463,     0,     0,     0,     0,
-       0,     0,     0,   429,   431,     0,     0,   483,     0,     0,
-     462,     0,     0,   460,     0,     0,     0,     0,   499,   501,
-     445,    73,     0,   485,     0,   450,   449,   451,   469,     0,
-     447,   476,   446,   503,     0,   486,   480,   461,   470,     0,
-     464,   478,   468
+       0,    74,   174,   175,     0,   170,    91,   139,   137,     0,
+       0,   475,     0,   473,   468,   470,   538,   537,     0,   529,
+       0,   541,   539,     0,     0,     0,   522,   525,     0,   492,
+       0,    79,    80,    82,    81,    84,    85,    86,    87,    88,
+      83,    78,     0,     0,   507,   503,   505,   509,   516,   524,
+     122,     0,   480,     0,   126,     0,   104,    16,     0,    23,
+      20,    31,    44,    45,    46,    49,    48,    51,    52,    56,
+      57,    54,    55,    59,    60,    62,    64,    66,    68,    70,
+      72,     0,   176,   466,     0,   476,     0,   471,     0,     0,
+       0,   540,     0,   521,     0,   552,     0,   550,   494,    77,
+      90,   121,   478,     0,   102,    18,     0,   472,   474,     0,
+     532,   531,   534,   500,   517,   513,     0,     0,     0,     0,
+       0,     0,     0,   479,   481,     0,     0,   533,     0,     0,
+     512,     0,     0,   510,     0,     0,     0,     0,   549,   551,
+     495,    75,     0,   535,     0,   500,   499,   501,   519,     0,
+     497,   526,   496,   553,     0,   536,   530,   511,   520,     0,
+     514,   528,   518
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,
-    -451,  -451,  6666,  -451,   -25,   -20,  -450,   -24,    32,    35,
-      36,    34,    37,    38,  -451,   -38,  -451,   -57,  -451,   -65,
-     -85,     1,  -451,  -451,  -451,    16,  -451,  -451,  -451,   210,
-     216,   214,  -451,  -451,  -282,  -451,  -451,  -451,  -451,   131,
-    -451,     2,    -9,  -451,  -451,     0,   -11,  -451,   253,  -451,
-    -451,  -451,  -100,  -117,    40,   -45,  -141,  -451,   -47,  -148,
-    -298,   -87,  -451,  -451,   -99,   -97,  -451,  -451,   230,  -227,
-     -37,  -451,    95,  -451,   -59,  -451,   100,  -451,  -451,  -451,
-    -451,   102,  -451,  -451,  -451,  -451,  -451,  -451,  -451,  -451,
-     246,  -451,  -451,  -451,  -451,   -61
+    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+    -495,  -495,  8169,  -495,   -29,   -27,  -494,   -31,    30,    28,
+      31,    33,    27,    32,  -495,   -37,  -495,   -57,  -495,   -65,
+     -86,     1,  -495,  -495,  -495,    21,  -495,  -495,  -495,   211,
+     216,   213,  -495,  -495,  -284,  -495,  -495,  -495,  -495,   126,
+    -495,     2,    -9,  -495,  -495,     0,   -11,  -495,   252,  -495,
+    -495,  -495,  -105,  -112,    38,   -47,  -134,  -495,   -49,  -144,
+    -314,   -90,  -495,  -495,  -101,  -100,  -495,  -495,   227,  -225,
+     -40,  -495,    97,  -495,   -62,  -495,   100,  -495,  -495,  -495,
+    -495,   102,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
+     245,  -495,  -495,  -495,  -495,   -69
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   362,   363,   364,   538,   365,   366,   367,   368,   369,
-     370,   371,   415,   373,   374,   375,   376,   377,   378,   379,
-     380,   381,   382,   383,   384,   416,   561,   417,   522,   418,
-     487,   419,   269,   444,   342,   420,   271,   272,   273,   302,
-     303,   304,   274,   275,   276,   277,   278,   279,   322,   323,
-     280,   281,   282,   283,   319,   386,   315,   285,   286,   287,
-     393,   325,   396,   397,   492,   493,   442,   533,   422,   423,
-     424,   425,   510,   602,   631,   610,   611,   612,   632,   426,
-     427,   428,   429,   613,   598,   430,   431,   614,   639,   432,
-     433,   434,   574,   498,   569,   592,   608,   609,   435,   288,
-     289,   290,   299,   436,   576,   577
+      -1,   412,   413,   414,   588,   415,   416,   417,   418,   419,
+     420,   421,   465,   423,   424,   425,   426,   427,   428,   429,
+     430,   431,   432,   433,   434,   466,   611,   467,   572,   468,
+     537,   469,   317,   494,   390,   470,   319,   320,   321,   350,
+     351,   352,   322,   323,   324,   325,   326,   327,   370,   371,
+     328,   329,   330,   331,   367,   436,   363,   333,   334,   335,
+     443,   373,   446,   447,   542,   543,   492,   583,   472,   473,
+     474,   475,   560,   652,   681,   660,   661,   662,   682,   476,
+     477,   478,   479,   663,   648,   480,   481,   664,   689,   482,
+     483,   484,   624,   548,   619,   642,   658,   659,   485,   336,
+     337,   338,   347,   486,   626,   627
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -1268,10 +1331,10 @@
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-     284,   268,     1,     2,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,   336,   270,   314,   314,   549,
-     550,   551,   552,   291,   337,   438,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+     332,   316,     1,     2,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,   318,   384,   362,   362,   599,   600,   601,   602,   339,
+     488,   385,    20,    21,    22,    23,    24,    25,    26,    27,
       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
       38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
@@ -1295,46 +1358,51 @@
      228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
      238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
      248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
-     258,   259,   312,   306,   260,   305,   385,   320,   526,   495,
-     441,   313,   293,   578,   402,   328,   403,   404,   284,   268,
-     407,   450,   596,   489,   296,   326,   312,   530,   338,   532,
-     388,   306,   534,   305,   270,   306,   389,   480,   467,   468,
-     596,   469,   470,   459,   627,   387,   261,   600,   630,   294,
-     314,   601,   443,   437,   439,   395,   630,   394,   327,   421,
-     262,   263,   264,   265,   266,   267,   292,   297,   451,   452,
-     387,   503,   481,   505,   535,   298,   471,   472,   399,   484,
-     568,   387,   486,   307,   391,   456,   308,   -32,   531,   453,
-     392,   457,   339,   454,   537,   340,   300,   593,   341,   594,
-     523,   634,   495,   523,   301,   523,   446,   523,   582,   447,
-     583,   441,   309,   441,   523,   312,   441,   524,   539,   566,
-     581,   314,   567,   395,   490,   394,   395,   465,   394,   466,
-     541,   638,   511,   512,   513,   514,   515,   516,   517,   518,
-     519,   520,   523,   566,   318,   571,   587,   324,   495,   473,
-     474,   521,   264,   265,   266,   329,   421,   523,   573,   334,
-     526,   462,   463,   464,   335,   570,   523,   605,   387,   572,
-     545,   546,   604,   398,   395,   445,   394,   547,   548,   553,
-     554,   390,   455,   460,   475,   478,   476,   477,   479,   482,
-     485,   491,   496,   499,   497,   579,   580,   501,   506,   509,
-     500,   504,   507,   536,   441,   508,   -31,   540,   -26,   575,
-     565,   523,   562,   585,   589,   599,   606,  -448,   640,   395,
-     526,   394,   615,   616,   321,   620,   586,   623,   421,   618,
-     624,   625,   412,   633,   628,   641,   629,   555,   642,   595,
-     421,   556,   558,   557,   617,   332,   559,   331,   560,   333,
-     295,   588,   590,   488,   626,   636,   441,   595,   637,   330,
-     564,   527,   591,   607,   317,   395,   528,   394,   529,   410,
-     619,   622,     0,     0,     0,     0,     0,     0,   621,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   635,     0,
-       0,   486,     0,     0,     0,     0,     0,     0,     0,   421,
-       0,     0,   441,     0,   421,     0,   597,     0,   421,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   312,     0,
-       0,     0,   421,     0,   597,     0,     0,   313,     0,     0,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+     360,   354,   308,   353,   452,   435,   453,   454,   491,   361,
+     457,   368,   576,   376,   545,   628,   332,   316,   539,   341,
+     646,   500,   344,   374,   360,   340,   386,   355,   677,   354,
+     356,   353,   680,   354,   580,   530,   582,   318,   646,   584,
+     680,   496,   362,   509,   497,   650,   309,   501,   502,   651,
+     375,   487,   489,   445,   346,   444,   573,   471,   342,   574,
+     310,   311,   312,   313,   314,   315,   -34,   345,   503,   585,
+     531,   553,   504,   555,   519,   520,   387,   348,   616,   388,
+     534,   617,   389,   536,   618,   561,   562,   563,   564,   565,
+     566,   567,   568,   569,   570,   437,   349,   573,   437,   437,
+     621,   357,   438,   449,   571,   493,   581,   545,   439,   521,
+     522,   491,   362,   491,   441,   360,   491,   437,   589,   616,
+     442,   366,   637,   445,   540,   444,   445,   631,   444,   506,
+     591,   587,   643,   688,   644,   507,   684,   573,   573,   515,
+     573,   516,   573,   312,   313,   314,   372,   512,   513,   514,
+     632,   377,   633,   545,   517,   518,   471,   523,   524,   573,
+     623,   573,   655,   382,   576,   620,   595,   596,   383,   622,
+     597,   598,   603,   604,   445,   440,   444,   448,   495,   654,
+     505,   510,   525,   526,   527,   529,   528,   532,   535,   541,
+     546,   549,   547,   550,   554,   629,   630,   551,   556,   558,
+     557,   586,   -33,   590,   491,   -28,   559,   625,   612,   635,
+     615,   639,   649,  -498,   573,   656,   665,   666,   673,   445,
+     668,   444,   674,   670,   576,   690,   636,   675,   471,   462,
+     678,   679,   683,   692,   606,   605,   609,   691,   607,   645,
+     471,   608,   610,   667,   380,   379,   381,   343,   538,   638,
+     640,   676,   369,   686,   378,   687,   491,   645,   614,   641,
+     657,   365,   669,   577,     0,   445,   578,   444,   579,     0,
+       0,   672,     0,     0,     0,     0,     0,     0,   671,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   685,     0,
+       0,     0,   536,     0,     0,     0,     0,     0,     0,   471,
+       0,   460,   491,     0,   471,     0,   647,     0,   471,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   360,     0,
+       0,     0,   471,     0,   647,     0,     0,   361,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   421,     0,     0,     0,   421,     0,     0,     0,
-       0,     0,     0,     0,   421,     0,     0,     0,   421,     0,
-       0,     0,     0,     0,     0,     0,   316,     0,   421,     1,
+       0,     0,   471,     0,     0,     0,   471,     0,     0,     0,
+       0,     0,     0,     0,   471,     0,     0,     0,   471,     0,
+       0,     0,     0,     0,     0,     0,   364,     0,   471,     1,
        2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    14,    15,    16,    17,    18,    19,    20,
+      12,    13,    14,    15,    16,    17,    18,    19,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    20,
       21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
       41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
@@ -1358,765 +1426,290 @@
      221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
      231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
      241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   256,   257,   258,   259,     0,
-       0,   260,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   261,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   262,   263,   264,
-     265,   266,   267,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,   400,   401,   402,     0,
-     403,   404,   405,   406,   407,   408,   409,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   410,   343,   260,   344,   345,   346,   347,
-     348,   349,   350,   351,   352,   353,     0,     0,   354,   355,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   356,     0,   411,
-       0,   412,   413,     0,     0,     0,     0,   414,   358,   359,
-     360,   361,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   262,   263,   264,   265,   266,   267,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-     400,   401,   402,     0,   403,   404,   405,   406,   407,   408,
-     409,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
-     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
-     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
-     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
-     253,   254,   255,   256,   257,   258,   259,   410,   343,   260,
-     344,   345,   346,   347,   348,   349,   350,   351,   352,   353,
-       0,     0,   354,   355,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   356,     0,   411,     0,   412,   525,     0,     0,     0,
-       0,   414,   358,   359,   360,   361,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   262,   263,   264,   265,   266,
-     267,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,   400,   401,   402,     0,   403,   404,
-     405,   406,   407,   408,   409,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
-     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
-     259,   410,   343,   260,   344,   345,   346,   347,   348,   349,
-     350,   351,   352,   353,     0,     0,   354,   355,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   356,     0,   411,     0,   412,
-       0,     0,     0,     0,     0,   414,   358,   359,   360,   361,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   262,
-     263,   264,   265,   266,   267,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,   400,   401,
-     402,     0,   403,   404,   405,   406,   407,   408,   409,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,   259,   410,   343,   260,   344,   345,
-     346,   347,   348,   349,   350,   351,   352,   353,     0,     0,
-     354,   355,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   356,
-       0,   411,     0,   329,     0,     0,     0,     0,     0,   414,
-     358,   359,   360,   361,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   262,   263,   264,   265,   266,   267,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,   400,   401,   402,     0,   403,   404,   405,   406,
-     407,   408,   409,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   256,   257,   258,   259,   410,
-     343,   260,   344,   345,   346,   347,   348,   349,   350,   351,
-     352,   353,     0,     0,   354,   355,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   356,     0,   411,     0,     0,     0,     0,
-       0,     0,     0,   414,   358,   359,   360,   361,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   262,   263,   264,
-     265,   266,   267,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,     0,   343,   260,   344,   345,   346,   347,
-     348,   349,   350,   351,   352,   353,     0,     0,   354,   355,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   356,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   414,   358,   359,
-     360,   361,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   262,   263,   264,   265,   266,   267,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
-     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
-     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
-     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
-     253,   254,   255,   256,   257,   258,   259,     0,   343,   260,
-     344,   345,   346,   347,   348,   349,   350,   351,   352,   353,
-       0,     0,   354,   355,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   356,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   358,   359,   360,   361,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   262,   263,   264,   265,   266,
-       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
-     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
-     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
-     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
-     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
-     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
-     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
-       0,   310,   260,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   311,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,   262,   263,
-     264,   265,   266,     0,     0,     0,     0,     0,     0,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,   259,     0,     0,   260,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   494,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,     0,     0,
-       0,     0,     0,   262,   263,   264,   265,   266,     0,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,   259,     0,     0,   260,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   563,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,     0,     0,
-       0,     0,     0,   262,   263,   264,   265,   266,     0,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,   259,     0,     0,   260,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   584,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,     0,     0,
-       0,     0,     0,   262,   263,   264,   265,   266,     0,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,   259,     0,     0,   260,     0,     0,
-       0,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   262,   263,   264,   265,   266,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,     0,     0,     0,     0,
-       0,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
-     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
-     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
-     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
-     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
-     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
-     252,   253,   254,   255,   256,   257,   258,   259,     0,   343,
-     260,   344,   345,   346,   347,   348,   349,   350,   351,   352,
-     353,     0,     0,   354,   355,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   356,     0,     0,     0,   440,   603,     0,     0,
-       0,     0,     0,   358,   359,   360,   361,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,     0,     0,     0,     0,     0,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
-     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
-     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
-     256,   257,   258,   259,     0,   343,   260,   344,   345,   346,
-     347,   348,   349,   350,   351,   352,   353,     0,     0,   354,
-     355,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   356,     0,
-       0,   357,     0,     0,     0,     0,     0,     0,     0,   358,
-     359,   360,   361,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,     0,     0,
-       0,     0,     0,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
-     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
-     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
-     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
-     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
-     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
-     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
-       0,   343,   260,   344,   345,   346,   347,   348,   349,   350,
-     351,   352,   353,     0,     0,   354,   355,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   356,     0,     0,     0,   440,     0,
-       0,     0,     0,     0,     0,   358,   359,   360,   361,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,     0,     0,     0,     0,     0,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
-     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
-     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
-     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
-     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
-     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
-     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
-     254,   255,   256,   257,   258,   259,     0,   343,   260,   344,
-     345,   346,   347,   348,   349,   350,   351,   352,   353,     0,
-       0,   354,   355,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     356,     0,     0,   483,     0,     0,     0,     0,     0,     0,
-       0,   358,   359,   360,   361,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-       0,     0,     0,     0,     0,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
-     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
-     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
-     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
-     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
-     258,   259,     0,   343,   260,   344,   345,   346,   347,   348,
-     349,   350,   351,   352,   353,     0,     0,   354,   355,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   356,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   502,   358,   359,   360,
-     361,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,     0,     0,     0,     0,
-       0,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
-     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
-     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
-     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
-     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
-     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
-     252,   253,   254,   255,   256,   257,   258,   259,     0,   343,
-     260,   344,   345,   346,   347,   348,   349,   350,   351,   352,
-     353,     0,     0,   354,   355,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   356,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,   358,   359,   360,   361,     0,     0,     0,
-       0,     0,     0,     0,     0,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,     0,     0,
-       0,     0,     0,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
-     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
-     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
-     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
-     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
-     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
-     250,   251,   252,   253,   254,   255,   256,   257,   258,   458,
-     372,   343,   260,   344,   345,   346,   347,   348,   349,   350,
-     351,   352,   353,     0,     0,   354,   355,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   356,     0,     0,     0,     0,     0,
-     448,   449,     0,     0,     0,   358,   359,   360,   361,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   461,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   372,     0,     0,   372,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   542,   543,
-     544,   372,   372,   372,   372,   372,   372,   372,   372,   372,
-     372,   372,   372,   372,   372,   372,   372,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,     0,     0,     0,     0,   372,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,     0,     0,   260
-};
-
-static const yytype_int16 yycheck[] =
-{
-       0,     0,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,   307,     0,   309,   309,   469,
-     470,   471,   472,   307,   316,   316,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
      251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
      261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
-     271,   272,   281,   273,   275,   273,   314,    57,   426,   396,
-     337,   281,   274,   510,    18,   296,    20,    21,   288,   288,
-      24,   356,   574,   393,   274,   295,   305,   438,   309,   440,
-     308,   301,   443,   301,   288,   305,   314,   295,   286,   287,
-     592,   290,   291,   370,   612,   309,   317,   310,   616,   311,
-     309,   314,   316,   334,   335,   325,   624,   325,   317,   329,
-     331,   332,   333,   334,   335,   336,   307,   317,   288,   289,
-     309,   406,   330,   408,   444,   317,   325,   326,   317,   387,
-     498,   309,   390,   314,   308,   308,   317,   307,   316,   309,
-     314,   314,   311,   313,   308,   314,   308,   308,   317,   308,
-     314,   308,   489,   314,   314,   314,   314,   314,   312,   317,
-     314,   438,   274,   440,   314,   394,   443,   317,   453,   314,
-     531,   309,   317,   393,   394,   393,   396,   319,   396,   321,
-     457,   628,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   314,   314,   274,   317,   317,   311,   535,   292,
-     293,   316,   333,   334,   335,   311,   426,   314,   315,   274,
-     578,   322,   323,   324,   274,   500,   314,   315,   309,   504,
-     465,   466,   583,   317,   444,   274,   444,   467,   468,   473,
-     474,   316,   308,   307,   329,   294,   328,   327,   296,   310,
-     274,   274,   317,   307,   317,   522,   523,   317,   315,   312,
-     307,   307,   307,   274,   531,   309,   307,   274,   308,   274,
-     491,   314,   310,   310,   273,   307,   307,   311,   629,   489,
-     638,   489,   274,   308,   274,   312,   561,   317,   498,   310,
-     308,    19,   311,   308,   311,   317,   316,   475,   312,   574,
-     510,   476,   478,   477,   599,   305,   479,   301,   480,   305,
-     267,   566,   569,   392,   611,   624,   583,   592,   625,   299,
-     490,   436,   569,   592,   288,   535,   436,   535,   436,   273,
-     601,   606,    -1,    -1,    -1,    -1,    -1,    -1,   605,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   623,    -1,
-      -1,   599,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   569,
-      -1,    -1,   629,    -1,   574,    -1,   574,    -1,   578,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   597,    -1,
-      -1,    -1,   592,    -1,   592,    -1,    -1,   597,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   612,    -1,    -1,    -1,   616,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   624,    -1,    -1,    -1,   628,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,     0,    -1,   638,     3,
+     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
+     301,   302,   303,   304,   305,   306,   307,     0,     0,   308,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   309,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   310,   311,   312,
+     313,   314,   315,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,   450,   451,   452,     0,   453,   454,   455,   456,
+     457,   458,   459,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
+     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
+     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
+     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
+     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
+     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
+     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
+     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
+     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
+     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
+     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
+     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
+     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
+     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     307,   460,   391,   308,   392,   393,   394,   395,   396,   397,
+     398,   399,   400,   401,   402,   403,     0,     0,   404,   405,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   406,     0,   461,
+       0,   462,   463,     0,     0,     0,     0,   464,   408,   409,
+     410,   411,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   310,   311,   312,   313,   314,   315,     1,     2,     3,
        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
-     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
-     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
-     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
-     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
-     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
-     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
-     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
-     264,   265,   266,   267,   268,   269,   270,   271,   272,    -1,
-      -1,   275,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   317,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   331,   332,   333,
-     334,   335,   336,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    -1,
+      14,    15,    16,    17,    18,    19,   450,   451,   452,     0,
+     453,   454,   455,   456,   457,   458,   459,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
+     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
+     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
+     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
+     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
+     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
+     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   305,   306,   307,   460,   391,   308,   392,   393,
+     394,   395,   396,   397,   398,   399,   400,   401,   402,   403,
+       0,     0,   404,   405,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   406,     0,   461,     0,   462,   575,     0,     0,     0,
+       0,   464,   408,   409,   410,   411,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   310,   311,   312,   313,   314,
+     315,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+     450,   451,   452,     0,   453,   454,   455,   456,   457,   458,
+     459,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
+     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
+     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
+     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
+     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
+     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
+     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
+     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
+     299,   300,   301,   302,   303,   304,   305,   306,   307,   460,
+     391,   308,   392,   393,   394,   395,   396,   397,   398,   399,
+     400,   401,   402,   403,     0,     0,   404,   405,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   406,     0,   461,     0,   462,
+       0,     0,     0,     0,     0,   464,   408,   409,   410,   411,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   310,
+     311,   312,   313,   314,   315,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,   450,   451,   452,     0,   453,   454,
+     455,   456,   457,   458,   459,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
+     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
+     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
+     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
+     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
+     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
+     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,   460,   391,   308,   392,   393,   394,   395,
+     396,   397,   398,   399,   400,   401,   402,   403,     0,     0,
+     404,   405,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   406,
+       0,   461,     0,   377,     0,     0,     0,     0,     0,   464,
+     408,   409,   410,   411,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   310,   311,   312,   313,   314,   315,     1,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,   450,   451,
+     452,     0,   453,   454,   455,   456,   457,   458,   459,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
+     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
+     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
+     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
+     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
+     301,   302,   303,   304,   305,   306,   307,   460,   391,   308,
+     392,   393,   394,   395,   396,   397,   398,   399,   400,   401,
+     402,   403,     0,     0,   404,   405,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   406,     0,   461,     0,     0,     0,     0,
+       0,     0,     0,   464,   408,   409,   410,   411,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   310,   311,   312,
+     313,   314,   315,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
+     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
+     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
+     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
+     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
+     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
+     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
+     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
+     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
+     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
+     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
+     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
+     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
+     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     307,     0,   391,   308,   392,   393,   394,   395,   396,   397,
+     398,   399,   400,   401,   402,   403,     0,     0,   404,   405,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   406,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   464,   408,   409,
+     410,   411,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   310,   311,   312,   313,   314,   315,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
+     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
+     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
+     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
+     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
+     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
+     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   305,   306,   307,     0,   391,   308,   392,   393,
+     394,   395,   396,   397,   398,   399,   400,   401,   402,   403,
+       0,     0,   404,   405,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   406,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   408,   409,   410,   411,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   310,   311,   312,   313,   314,
+       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
       30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
       40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
@@ -2143,114 +1736,57 @@
      250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
      260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
      270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
-     280,   281,   282,   283,   284,   285,    -1,    -1,   288,   289,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   307,    -1,   309,
-      -1,   311,   312,    -1,    -1,    -1,    -1,   317,   318,   319,
-     320,   321,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   331,   332,   333,   334,   335,   336,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    -1,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
-     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
-     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
-     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
-     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
-     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
-      -1,    -1,   288,   289,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   307,    -1,   309,    -1,   311,   312,    -1,    -1,    -1,
-      -1,   317,   318,   319,   320,   321,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   331,   332,   333,   334,   335,
-     336,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    -1,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
-     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
-     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
-     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
-     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
-     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
-     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
-     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
-     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     282,   283,   284,   285,    -1,    -1,   288,   289,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   307,    -1,   309,    -1,   311,
-      -1,    -1,    -1,    -1,    -1,   317,   318,   319,   320,   321,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   331,
-     332,   333,   334,   335,   336,     3,     4,     5,     6,     7,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,     0,   358,
+     308,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   359,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   310,   311,
+     312,   313,   314,     1,     2,     3,     4,     5,     6,     7,
        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    -1,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
-     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
-     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
-     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
-     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
-     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
-     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
-     278,   279,   280,   281,   282,   283,   284,   285,    -1,    -1,
-     288,   289,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   307,
-      -1,   309,    -1,   311,    -1,    -1,    -1,    -1,    -1,   317,
-     318,   319,   320,   321,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   331,   332,   333,   334,   335,   336,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    -1,    20,    21,    22,    23,
+      18,    19,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
+     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
+     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
+     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
+     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
+     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
+     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
+     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
+     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
+     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
+     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
+     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
+     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
+     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     307,     0,     0,   308,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   544,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   310,   311,   312,   313,   314,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    20,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
       34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
@@ -2277,14 +1813,520 @@
      254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
      264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
      274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
-     284,   285,    -1,    -1,   288,   289,    -1,    -1,    -1,    -1,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
+     304,   305,   306,   307,     0,     0,   308,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   613,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   310,   311,   312,   313,   314,     1,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
+     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
+     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
+     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
+     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
+     301,   302,   303,   304,   305,   306,   307,     0,     0,   308,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   634,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   310,   311,   312,
+     313,   314,     1,     2,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+       0,     0,   308,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     3,     4,     5,     6,
+       7,     0,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,     0,     0,     0,     0,     0,     0,     0,
+     310,   311,   312,   313,   314,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,     0,     0,     0,     0,     0,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,     0,   391,   308,   392,   393,   394,   395,   396,
+     397,   398,   399,   400,   401,   402,   403,     0,     0,   404,
+     405,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   406,     0,
+       0,     0,   490,   653,     0,     0,     0,     0,     0,   408,
+     409,   410,   411,     3,     4,     5,     6,     7,     0,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,     0,
+       0,     0,     0,     0,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
+     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
+     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
+     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
+     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
+     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
+     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
+     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
+     299,   300,   301,   302,   303,   304,   305,   306,   307,     0,
+     391,   308,   392,   393,   394,   395,   396,   397,   398,   399,
+     400,   401,   402,   403,     0,     0,   404,   405,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   406,     0,     0,   407,     0,
+       0,     0,     0,     0,     0,     0,   408,   409,   410,   411,
+       3,     4,     5,     6,     7,     0,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,     0,     0,     0,     0,
+       0,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
+     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
+     302,   303,   304,   305,   306,   307,     0,   391,   308,   392,
+     393,   394,   395,   396,   397,   398,   399,   400,   401,   402,
+     403,     0,     0,   404,   405,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   406,     0,     0,     0,   490,     0,     0,     0,
+       0,     0,     0,   408,   409,   410,   411,     3,     4,     5,
+       6,     7,     0,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,     0,     0,     0,     0,     0,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
+     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
+     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
+     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
+     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
+     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
+     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,     0,   391,   308,   392,   393,   394,   395,
+     396,   397,   398,   399,   400,   401,   402,   403,     0,     0,
+     404,   405,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   406,
+       0,     0,   533,     0,     0,     0,     0,     0,     0,     0,
+     408,   409,   410,   411,     3,     4,     5,     6,     7,     0,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+       0,     0,     0,     0,     0,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+       0,   391,   308,   392,   393,   394,   395,   396,   397,   398,
+     399,   400,   401,   402,   403,     0,     0,   404,   405,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   406,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   552,   408,   409,   410,
+     411,     3,     4,     5,     6,     7,     0,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,     0,     0,     0,
+       0,     0,   103,   104,   105,   106,   107,   108,   109,   110,
+     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
+     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
+     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
+     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
+     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
+     301,   302,   303,   304,   305,   306,   307,     0,   391,   308,
+     392,   393,   394,   395,   396,   397,   398,   399,   400,   401,
+     402,   403,     0,     0,   404,   405,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   406,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   408,   409,   410,   411,     3,     4,
+       5,     6,     7,     0,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,     0,     0,     0,     0,     0,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
+     304,   305,   306,   508,     0,   391,   308,   392,   393,   394,
+     395,   396,   397,   398,   399,   400,   401,   402,   403,     0,
+       0,   404,   405,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     406,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   408,   409,   410,   411,     3,     4,     5,     6,     7,
+       0,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      97,     0,     0,     0,     0,     0,   103,   104,   105,   106,
+     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
+     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
+     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
+     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
+     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
+     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
+     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
+     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
+     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
+     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
+     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
+     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
+     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
+     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     307,   422,     0,   308,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   498,   499,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   511,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   422,     0,     0,   422,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   592,   593,   594,   422,   422,   422,   422,   422,   422,
+     422,   422,   422,   422,   422,   422,   422,   422,   422,   422,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   422
+};
+
+static const yytype_int16 yycheck[] =
+{
+       0,     0,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,     0,   357,   359,   359,   519,   520,   521,   522,   357,
+     366,   366,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
+     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
+     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
+     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
+     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
+     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
+     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
+     329,   321,   323,   321,    24,   362,    26,    27,   385,   329,
+      30,    81,   476,   344,   446,   560,   336,   336,   443,   322,
+     624,   406,   322,   343,   353,   357,   357,   364,   662,   349,
+     367,   349,   666,   353,   488,   345,   490,   336,   642,   493,
+     674,   364,   359,   420,   367,   360,   367,   338,   339,   364,
+     367,   382,   383,   373,   367,   373,   364,   377,   361,   367,
+     381,   382,   383,   384,   385,   386,   357,   367,   359,   494,
+     380,   456,   363,   458,   340,   341,   361,   358,   364,   364,
+     437,   367,   367,   440,   548,   347,   348,   349,   350,   351,
+     352,   353,   354,   355,   356,   359,   364,   364,   359,   359,
+     367,   322,   358,   367,   366,   366,   366,   539,   364,   375,
+     376,   488,   359,   490,   358,   444,   493,   359,   503,   364,
+     364,   322,   367,   443,   444,   443,   446,   581,   446,   358,
+     507,   358,   358,   678,   358,   364,   358,   364,   364,   369,
+     364,   371,   364,   383,   384,   385,   361,   372,   373,   374,
+     362,   361,   364,   585,   336,   337,   476,   342,   343,   364,
+     365,   364,   365,   322,   628,   550,   515,   516,   322,   554,
+     517,   518,   523,   524,   494,   366,   494,   367,   322,   633,
+     358,   357,   379,   378,   377,   346,   344,   360,   322,   322,
+     367,   357,   367,   357,   357,   572,   573,   367,   365,   359,
+     357,   322,   357,   322,   581,   358,   362,   322,   360,   360,
+     541,   321,   357,   361,   364,   357,   322,   358,   367,   539,
+     360,   539,   358,   362,   688,   679,   611,    25,   548,   361,
+     361,   366,   358,   362,   526,   525,   529,   367,   527,   624,
+     560,   528,   530,   649,   353,   349,   353,   315,   442,   616,
+     619,   661,   322,   674,   347,   675,   633,   642,   540,   619,
+     642,   336,   651,   486,    -1,   585,   486,   585,   486,    -1,
+      -1,   656,    -1,    -1,    -1,    -1,    -1,    -1,   655,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   673,    -1,
+      -1,    -1,   649,    -1,    -1,    -1,    -1,    -1,    -1,   619,
+      -1,   321,   679,    -1,   624,    -1,   624,    -1,   628,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   647,    -1,
+      -1,    -1,   642,    -1,   642,    -1,    -1,   647,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   307,    -1,   309,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   317,   318,   319,   320,   321,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   331,   332,   333,
-     334,   335,   336,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    27,    28,    29,
+      -1,    -1,   662,    -1,    -1,    -1,   666,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   674,    -1,    -1,    -1,   678,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,     0,    -1,   688,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
+     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
+     314,   315,   316,   317,   318,   319,   320,    -1,    -1,   323,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   367,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   381,   382,   383,
+     384,   385,   386,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
       30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
       40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
       50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
@@ -2309,16 +2351,21 @@
      240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
      250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
      260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
-     270,   271,   272,    -1,   274,   275,   276,   277,   278,   279,
-     280,   281,   282,   283,   284,   285,    -1,    -1,   288,   289,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
+     320,   321,   322,   323,   324,   325,   326,   327,   328,   329,
+     330,   331,   332,   333,   334,   335,    -1,    -1,   338,   339,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   307,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   317,   318,   319,
-     320,   321,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   331,   332,   333,   334,   335,   336,     3,     4,     5,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   357,    -1,   359,
+      -1,   361,   362,    -1,    -1,    -1,    -1,   367,   368,   369,
+     370,   371,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   381,   382,   383,   384,   385,   386,     3,     4,     5,
        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    -1,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
       36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
       56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
@@ -2342,47 +2389,59 @@
      236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
      246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
      256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
-     266,   267,   268,   269,   270,   271,   272,    -1,   274,   275,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
      276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
-      -1,    -1,   288,   289,    -1,    -1,    -1,    -1,    -1,    -1,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
+     316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
+     326,   327,   328,   329,   330,   331,   332,   333,   334,   335,
+      -1,    -1,   338,   339,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   307,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   318,   319,   320,   321,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   331,   332,   333,   334,   335,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
-     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
-     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
-     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
-     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
-     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
-      -1,   274,   275,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   357,    -1,   359,    -1,   361,   362,    -1,    -1,    -1,
+      -1,   367,   368,   369,   370,   371,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   381,   382,   383,   384,   385,
+     386,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    -1,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
+     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
+     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
+     312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
+     322,   323,   324,   325,   326,   327,   328,   329,   330,   331,
+     332,   333,   334,   335,    -1,    -1,   338,   339,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   317,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,   331,   332,
-     333,   334,   335,    -1,    -1,    -1,    -1,    -1,    -1,    27,
+      -1,    -1,    -1,    -1,    -1,   357,    -1,   359,    -1,   361,
+      -1,    -1,    -1,    -1,    -1,   367,   368,   369,   370,   371,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   381,
+     382,   383,   384,   385,   386,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    -1,    26,    27,
       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
       38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
@@ -2407,344 +2466,65 @@
      238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
      248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
      258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
-     268,   269,   270,   271,   272,    -1,    -1,   275,    -1,    -1,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+     308,   309,   310,   311,   312,   313,   314,   315,   316,   317,
+     318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
+     328,   329,   330,   331,   332,   333,   334,   335,    -1,    -1,
+     338,   339,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   357,
+      -1,   359,    -1,   361,    -1,    -1,    -1,    -1,    -1,   367,
+     368,   369,   370,   371,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   381,   382,   383,   384,   385,   386,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    -1,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
+     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
+     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
+     324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
+     334,   335,    -1,    -1,   338,   339,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   312,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    -1,    -1,
-      -1,    -1,    -1,   331,   332,   333,   334,   335,    -1,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
-     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
-     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
-     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
-     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
-     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
-     268,   269,   270,   271,   272,    -1,    -1,   275,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   312,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    -1,    -1,
-      -1,    -1,    -1,   331,   332,   333,   334,   335,    -1,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
-     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
-     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
-     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
-     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
-     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
-     268,   269,   270,   271,   272,    -1,    -1,   275,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   312,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    -1,    -1,
-      -1,    -1,    -1,   331,   332,   333,   334,   335,    -1,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
-     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
-     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
-     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
-     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
-     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
-     268,   269,   270,   271,   272,    -1,    -1,   275,    -1,    -1,
-      -1,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   331,   332,   333,   334,   335,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    -1,    -1,    -1,    -1,
-      -1,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,    -1,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,    -1,    -1,   288,   289,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   307,    -1,    -1,    -1,   311,   312,    -1,    -1,
-      -1,    -1,    -1,   318,   319,   320,   321,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
-     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
-     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
-     269,   270,   271,   272,    -1,   274,   275,   276,   277,   278,
-     279,   280,   281,   282,   283,   284,   285,    -1,    -1,   288,
-     289,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   307,    -1,
-      -1,   310,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   318,
-     319,   320,   321,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    -1,    -1,
-      -1,    -1,    -1,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
-     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
-     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
-     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
-     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
-     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
-      -1,   274,   275,   276,   277,   278,   279,   280,   281,   282,
-     283,   284,   285,    -1,    -1,   288,   289,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   307,    -1,    -1,    -1,   311,    -1,
-      -1,    -1,    -1,    -1,    -1,   318,   319,   320,   321,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,    -1,   274,   275,   276,
-     277,   278,   279,   280,   281,   282,   283,   284,   285,    -1,
-      -1,   288,   289,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     307,    -1,    -1,   310,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   318,   319,   320,   321,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      -1,    -1,    -1,    -1,    -1,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
-     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
-     271,   272,    -1,   274,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,   284,   285,    -1,    -1,   288,   289,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   307,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   317,   318,   319,   320,
-     321,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    -1,    -1,    -1,    -1,
-      -1,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,    -1,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,    -1,    -1,   288,   289,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   307,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,   318,   319,   320,   321,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    -1,    -1,
-      -1,    -1,    -1,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
-     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
-     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
-     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
-     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
-     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
-     314,   274,   275,   276,   277,   278,   279,   280,   281,   282,
-     283,   284,   285,    -1,    -1,   288,   289,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   307,    -1,    -1,    -1,    -1,    -1,
-     354,   355,    -1,    -1,    -1,   318,   319,   320,   321,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   387,    -1,    -1,   390,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   462,   463,
-     464,   465,   466,   467,   468,   469,   470,   471,   472,   473,
-     474,   475,   476,   477,   478,   479,   480,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    63,    64,    65,    66,    67,    68,    69,
+      -1,    -1,    -1,   357,    -1,   359,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   367,   368,   369,   370,   371,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   381,   382,   383,
+     384,   385,   386,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    -1,    -1,    -1,    -1,   599,    86,    87,    88,    89,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
       90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
      100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
      110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
@@ -2763,15 +2543,59 @@
      240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
      250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
      260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
-     270,   271,   272,    -1,    -1,   275
-};
-
-  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-     symbol of state STATE-NUM.  */
-static const yytype_uint16 yystos[] =
-{
-       0,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    27,    28,    29,    30,    31,    32,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
+     320,    -1,   322,   323,   324,   325,   326,   327,   328,   329,
+     330,   331,   332,   333,   334,   335,    -1,    -1,   338,   339,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   357,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   367,   368,   369,
+     370,   371,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   381,   382,   383,   384,   385,   386,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
+     316,   317,   318,   319,   320,    -1,   322,   323,   324,   325,
+     326,   327,   328,   329,   330,   331,   332,   333,   334,   335,
+      -1,    -1,   338,   339,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   357,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   368,   369,   370,   371,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   381,   382,   383,   384,   385,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
       53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
@@ -2796,124 +2620,650 @@
      243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
      253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
      263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
-     275,   317,   331,   332,   333,   334,   335,   336,   371,   372,
-     375,   376,   377,   378,   382,   383,   384,   385,   386,   387,
-     390,   391,   392,   393,   395,   397,   398,   399,   439,   440,
-     441,   307,   307,   274,   311,   398,   274,   317,   317,   442,
-     308,   314,   379,   380,   381,   391,   395,   314,   317,   274,
-     274,   317,   392,   395,   309,   396,     0,   440,   274,   394,
-      57,   274,   388,   389,   311,   401,   395,   317,   396,   311,
-     418,   380,   379,   381,   274,   274,   307,   316,   396,   311,
-     314,   317,   374,   274,   276,   277,   278,   279,   280,   281,
-     282,   283,   284,   285,   288,   289,   307,   310,   318,   319,
-     320,   321,   341,   342,   343,   345,   346,   347,   348,   349,
-     350,   351,   352,   353,   354,   355,   356,   357,   358,   359,
-     360,   361,   362,   363,   364,   365,   395,   309,   308,   314,
-     316,   308,   314,   400,   391,   395,   402,   403,   317,   317,
-      16,    17,    18,    20,    21,    22,    23,    24,    25,    26,
-     273,   309,   311,   312,   317,   352,   365,   367,   369,   371,
-     375,   395,   408,   409,   410,   411,   419,   420,   421,   422,
-     425,   426,   429,   430,   431,   438,   443,   396,   316,   396,
-     311,   367,   406,   316,   373,   274,   314,   317,   352,   352,
-     369,   288,   289,   309,   313,   308,   308,   314,   272,   367,
-     307,   352,   322,   323,   324,   319,   321,   286,   287,   290,
-     291,   325,   326,   292,   293,   329,   328,   327,   294,   296,
-     295,   330,   310,   310,   365,   274,   365,   370,   389,   402,
-     395,   274,   404,   405,   312,   403,   317,   317,   433,   307,
-     307,   317,   317,   369,   307,   369,   315,   307,   309,   312,
-     412,   297,   298,   299,   300,   301,   302,   303,   304,   305,
-     306,   316,   368,   314,   317,   312,   409,   422,   426,   431,
-     406,   316,   406,   407,   406,   402,   274,   308,   344,   369,
-     274,   367,   352,   352,   352,   354,   354,   355,   355,   356,
-     356,   356,   356,   357,   357,   358,   359,   360,   361,   362,
-     363,   366,   310,   312,   404,   396,   314,   317,   409,   434,
-     369,   317,   369,   315,   432,   274,   444,   445,   419,   367,
-     367,   406,   312,   314,   312,   310,   369,   317,   405,   273,
-     408,   420,   435,   308,   308,   369,   384,   391,   424,   307,
-     310,   314,   413,   312,   406,   315,   307,   424,   436,   437,
-     415,   416,   417,   423,   427,   274,   308,   370,   310,   445,
-     312,   367,   369,   317,   308,    19,   411,   410,   311,   316,
-     410,   414,   418,   308,   308,   369,   414,   415,   419,   428,
-     406,   317,   312
+     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,   315,   316,   317,   318,   319,   320,    -1,   322,
+     323,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   367,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   381,   382,
+     383,   384,   385,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
+     320,    -1,    -1,   323,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   362,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   381,   382,   383,   384,   385,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
+     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
+     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
+     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
+     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
+     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
+     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
+     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
+     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
+     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
+     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
+     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
+     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
+     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
+     317,   318,   319,   320,    -1,    -1,   323,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   362,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   381,   382,   383,   384,   385,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
+     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
+     314,   315,   316,   317,   318,   319,   320,    -1,    -1,   323,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   362,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   381,   382,   383,
+     384,   385,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
+     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
+     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
+     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
+     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
+     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
+     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
+      -1,    -1,   323,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,     5,     6,     7,     8,
+       9,    -1,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     381,   382,   383,   384,   385,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,    -1,    -1,    -1,    -1,    -1,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
+     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
+     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
+     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
+     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
+     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
+     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
+     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
+     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
+     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
+     319,   320,    -1,   322,   323,   324,   325,   326,   327,   328,
+     329,   330,   331,   332,   333,   334,   335,    -1,    -1,   338,
+     339,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   357,    -1,
+      -1,    -1,   361,   362,    -1,    -1,    -1,    -1,    -1,   368,
+     369,   370,   371,     5,     6,     7,     8,     9,    -1,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,    -1,
+      -1,    -1,    -1,    -1,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
+     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
+     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
+     312,   313,   314,   315,   316,   317,   318,   319,   320,    -1,
+     322,   323,   324,   325,   326,   327,   328,   329,   330,   331,
+     332,   333,   334,   335,    -1,    -1,   338,   339,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   357,    -1,    -1,   360,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   368,   369,   370,   371,
+       5,     6,     7,     8,     9,    -1,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,    -1,    -1,    -1,    -1,
+      -1,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
+     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
+     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
+     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
+     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
+     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
+     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
+     315,   316,   317,   318,   319,   320,    -1,   322,   323,   324,
+     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
+     335,    -1,    -1,   338,   339,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   357,    -1,    -1,    -1,   361,    -1,    -1,    -1,
+      -1,    -1,    -1,   368,   369,   370,   371,     5,     6,     7,
+       8,     9,    -1,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,    -1,    -1,    -1,    -1,    -1,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+     308,   309,   310,   311,   312,   313,   314,   315,   316,   317,
+     318,   319,   320,    -1,   322,   323,   324,   325,   326,   327,
+     328,   329,   330,   331,   332,   333,   334,   335,    -1,    -1,
+     338,   339,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   357,
+      -1,    -1,   360,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     368,   369,   370,   371,     5,     6,     7,     8,     9,    -1,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+      -1,    -1,    -1,    -1,    -1,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
+     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
+     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
+     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
+     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
+     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
+     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
+      -1,   322,   323,   324,   325,   326,   327,   328,   329,   330,
+     331,   332,   333,   334,   335,    -1,    -1,   338,   339,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   357,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   367,   368,   369,   370,
+     371,     5,     6,     7,     8,     9,    -1,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,    -1,    -1,    -1,
+      -1,    -1,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
+     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
+     314,   315,   316,   317,   318,   319,   320,    -1,   322,   323,
+     324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
+     334,   335,    -1,    -1,   338,   339,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   357,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   368,   369,   370,   371,     5,     6,
+       7,     8,     9,    -1,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    34,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+     107,   108,   109,   110,    -1,    -1,    -1,    -1,    -1,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
+     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
+     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
+     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
+     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
+     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
+     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
+     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
+     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
+     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
+     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
+     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
+     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
+     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
+     317,   318,   319,   320,    -1,   322,   323,   324,   325,   326,
+     327,   328,   329,   330,   331,   332,   333,   334,   335,    -1,
+      -1,   338,   339,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     357,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   368,   369,   370,   371,     5,     6,     7,     8,     9,
+      -1,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,    -1,    -1,    -1,    -1,    -1,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
+     320,   362,    -1,   323,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   404,   405,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   423,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   437,    -1,    -1,   440,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   512,   513,   514,   515,   516,   517,   518,   519,   520,
+     521,   522,   523,   524,   525,   526,   527,   528,   529,   530,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   649
+};
+
+  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+     symbol of state STATE-NUM.  */
+static const yytype_uint16 yystos[] =
+{
+       0,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
+     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
+     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
+     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
+     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
+     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
+     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,   315,   316,   317,   318,   319,   320,   323,   367,
+     381,   382,   383,   384,   385,   386,   421,   422,   425,   426,
+     427,   428,   432,   433,   434,   435,   436,   437,   440,   441,
+     442,   443,   445,   447,   448,   449,   489,   490,   491,   357,
+     357,   322,   361,   448,   322,   367,   367,   492,   358,   364,
+     429,   430,   431,   441,   445,   364,   367,   322,   322,   367,
+     442,   445,   359,   446,     0,   490,   322,   444,    81,   322,
+     438,   439,   361,   451,   445,   367,   446,   361,   468,   430,
+     429,   431,   322,   322,   357,   366,   446,   361,   364,   367,
+     424,   322,   324,   325,   326,   327,   328,   329,   330,   331,
+     332,   333,   334,   335,   338,   339,   357,   360,   368,   369,
+     370,   371,   391,   392,   393,   395,   396,   397,   398,   399,
+     400,   401,   402,   403,   404,   405,   406,   407,   408,   409,
+     410,   411,   412,   413,   414,   415,   445,   359,   358,   364,
+     366,   358,   364,   450,   441,   445,   452,   453,   367,   367,
+      22,    23,    24,    26,    27,    28,    29,    30,    31,    32,
+     321,   359,   361,   362,   367,   402,   415,   417,   419,   421,
+     425,   445,   458,   459,   460,   461,   469,   470,   471,   472,
+     475,   476,   479,   480,   481,   488,   493,   446,   366,   446,
+     361,   417,   456,   366,   423,   322,   364,   367,   402,   402,
+     419,   338,   339,   359,   363,   358,   358,   364,   320,   417,
+     357,   402,   372,   373,   374,   369,   371,   336,   337,   340,
+     341,   375,   376,   342,   343,   379,   378,   377,   344,   346,
+     345,   380,   360,   360,   415,   322,   415,   420,   439,   452,
+     445,   322,   454,   455,   362,   453,   367,   367,   483,   357,
+     357,   367,   367,   419,   357,   419,   365,   357,   359,   362,
+     462,   347,   348,   349,   350,   351,   352,   353,   354,   355,
+     356,   366,   418,   364,   367,   362,   459,   472,   476,   481,
+     456,   366,   456,   457,   456,   452,   322,   358,   394,   419,
+     322,   417,   402,   402,   402,   404,   404,   405,   405,   406,
+     406,   406,   406,   407,   407,   408,   409,   410,   411,   412,
+     413,   416,   360,   362,   454,   446,   364,   367,   459,   484,
+     419,   367,   419,   365,   482,   322,   494,   495,   469,   417,
+     417,   456,   362,   364,   362,   360,   419,   367,   455,   321,
+     458,   470,   485,   358,   358,   419,   434,   441,   474,   357,
+     360,   364,   463,   362,   456,   365,   357,   474,   486,   487,
+     465,   466,   467,   473,   477,   322,   358,   420,   360,   495,
+     362,   417,   419,   367,   358,    25,   461,   460,   361,   366,
+     460,   464,   468,   358,   358,   419,   464,   465,   469,   478,
+     456,   367,   362
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint16 yyr1[] =
 {
-       0,   340,   341,   342,   342,   342,   342,   342,   342,   342,
-     342,   342,   342,   342,   342,   343,   343,   343,   343,   343,
-     343,   344,   345,   346,   347,   347,   348,   348,   349,   349,
-     350,   351,   351,   352,   352,   352,   352,   353,   353,   353,
-     353,   354,   354,   354,   354,   355,   355,   355,   356,   356,
-     356,   357,   357,   357,   357,   357,   358,   358,   358,   359,
-     359,   360,   360,   361,   361,   362,   362,   363,   363,   364,
-     364,   365,   366,   365,   367,   367,   368,   368,   368,   368,
-     368,   368,   368,   368,   368,   368,   368,   369,   369,   370,
-     371,   371,   371,   371,   371,   371,   371,   371,   371,   373,
-     372,   374,   374,   375,   376,   376,   377,   377,   378,   379,
-     379,   380,   380,   380,   380,   381,   382,   382,   382,   382,
-     382,   383,   383,   383,   383,   383,   384,   384,   385,   386,
-     386,   386,   386,   387,   388,   388,   389,   389,   389,   390,
-     391,   391,   392,   392,   392,   392,   392,   392,   393,   393,
-     393,   393,   393,   393,   393,   393,   393,   393,   393,   393,
-     393,   393,   393,   393,   393,   393,   393,   394,   394,   395,
-     395,   396,   396,   396,   396,   397,   397,   397,   397,   397,
-     397,   397,   397,   397,   397,   397,   397,   397,   397,   397,
-     397,   397,   397,   397,   397,   397,   397,   397,   397,   397,
-     397,   397,   397,   397,   397,   397,   397,   397,   397,   397,
-     397,   397,   397,   397,   397,   397,   397,   397,   397,   397,
-     397,   397,   397,   397,   397,   397,   397,   397,   397,   397,
-     397,   397,   397,   397,   397,   397,   397,   397,   397,   397,
-     397,   397,   397,   397,   397,   397,   397,   397,   397,   397,
-     397,   397,   397,   397,   397,   397,   397,   397,   397,   397,
-     397,   397,   397,   397,   397,   397,   397,   397,   397,   397,
-     397,   397,   397,   397,   397,   397,   397,   397,   397,   397,
-     397,   397,   397,   397,   397,   397,   397,   397,   397,   397,
-     397,   397,   397,   397,   397,   397,   397,   397,   397,   397,
-     397,   397,   397,   397,   397,   397,   397,   397,   397,   397,
-     397,   397,   397,   397,   397,   397,   397,   397,   397,   397,
-     397,   397,   397,   397,   397,   397,   397,   397,   397,   397,
-     397,   397,   397,   397,   397,   397,   397,   397,   397,   397,
-     397,   397,   397,   397,   397,   397,   397,   397,   397,   397,
-     397,   397,   397,   397,   397,   397,   397,   397,   397,   397,
-     397,   397,   397,   397,   397,   397,   397,   397,   397,   397,
-     397,   397,   397,   397,   397,   397,   397,   397,   397,   397,
-     397,   397,   397,   397,   397,   397,   397,   397,   397,   397,
-     397,   397,   397,   397,   397,   397,   397,   397,   397,   397,
-     397,   397,   397,   397,   397,   397,   397,   397,   397,   397,
-     397,   397,   398,   398,   398,   400,   399,   401,   399,   402,
-     402,   403,   403,   404,   404,   405,   405,   406,   406,   406,
-     407,   407,   408,   409,   409,   410,   410,   410,   410,   410,
-     410,   410,   411,   412,   413,   411,   414,   414,   416,   415,
-     417,   415,   418,   418,   419,   419,   420,   420,   421,   421,
-     422,   423,   423,   424,   424,   425,   425,   427,   426,   428,
-     428,   429,   429,   430,   430,   432,   431,   433,   431,   434,
-     431,   435,   435,   436,   436,   437,   437,   438,   438,   438,
-     438,   438,   439,   439,   440,   440,   440,   442,   441,   443,
-     444,   444,   445,   445
+       0,   390,   391,   392,   392,   392,   392,   392,   392,   392,
+     392,   392,   392,   392,   392,   392,   392,   393,   393,   393,
+     393,   393,   393,   394,   395,   396,   397,   397,   398,   398,
+     399,   399,   400,   401,   401,   402,   402,   402,   402,   403,
+     403,   403,   403,   404,   404,   404,   404,   405,   405,   405,
+     406,   406,   406,   407,   407,   407,   407,   407,   408,   408,
+     408,   409,   409,   410,   410,   411,   411,   412,   412,   413,
+     413,   414,   414,   415,   416,   415,   417,   417,   418,   418,
+     418,   418,   418,   418,   418,   418,   418,   418,   418,   419,
+     419,   420,   421,   421,   421,   421,   421,   421,   421,   421,
+     421,   423,   422,   424,   424,   425,   426,   426,   427,   427,
+     428,   429,   429,   430,   430,   430,   430,   431,   432,   432,
+     432,   432,   432,   433,   433,   433,   433,   433,   434,   434,
+     435,   436,   436,   436,   436,   437,   438,   438,   439,   439,
+     439,   440,   441,   441,   442,   442,   442,   442,   442,   442,
+     443,   443,   443,   443,   443,   443,   443,   443,   443,   443,
+     443,   443,   443,   443,   443,   443,   443,   443,   443,   444,
+     444,   445,   445,   446,   446,   446,   446,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   448,   448,   448,   450,   449,   451,   449,   452,
+     452,   453,   453,   454,   454,   455,   455,   456,   456,   456,
+     457,   457,   458,   459,   459,   460,   460,   460,   460,   460,
+     460,   460,   461,   462,   463,   461,   464,   464,   466,   465,
+     467,   465,   468,   468,   469,   469,   470,   470,   471,   471,
+     472,   473,   473,   474,   474,   475,   475,   477,   476,   478,
+     478,   479,   479,   480,   480,   482,   481,   483,   481,   484,
+     481,   485,   485,   486,   486,   487,   487,   488,   488,   488,
+     488,   488,   489,   489,   490,   490,   490,   492,   491,   493,
+     494,   494,   495,   495
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
 static const yytype_uint8 yyr2[] =
 {
        0,     2,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     3,     1,     4,     1,     3,     2,
-       2,     1,     1,     1,     2,     2,     2,     1,     2,     3,
-       2,     1,     1,     1,     2,     2,     2,     1,     1,     1,
-       1,     1,     3,     3,     3,     1,     3,     3,     1,     3,
-       3,     1,     3,     3,     3,     3,     1,     3,     3,     1,
+       1,     1,     1,     1,     1,     1,     3,     1,     4,     1,
+       3,     2,     2,     1,     1,     1,     2,     2,     2,     1,
+       2,     3,     2,     1,     1,     1,     2,     2,     2,     1,
+       1,     1,     1,     1,     3,     3,     3,     1,     3,     3,
+       1,     3,     3,     1,     3,     3,     3,     3,     1,     3,
        3,     1,     3,     1,     3,     1,     3,     1,     3,     1,
-       3,     1,     0,     6,     1,     3,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     3,     1,
-       2,     2,     4,     2,     3,     4,     2,     3,     4,     0,
-       6,     2,     3,     2,     1,     1,     2,     3,     3,     2,
-       3,     2,     1,     2,     1,     1,     1,     3,     4,     6,
-       5,     1,     2,     3,     5,     4,     1,     2,     1,     1,
-       1,     1,     1,     4,     1,     3,     1,     3,     1,     1,
-       1,     2,     1,     1,     1,     1,     1,     1,     1,     1,
+       3,     1,     3,     1,     0,     6,     1,     3,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     4,     1,     3,     1,
-       2,     2,     3,     3,     4,     1,     1,     1,     1,     1,
+       3,     1,     2,     2,     4,     2,     3,     4,     2,     3,
+       4,     0,     6,     2,     3,     2,     1,     1,     2,     3,
+       3,     2,     3,     2,     1,     2,     1,     1,     1,     3,
+       4,     6,     5,     1,     2,     3,     5,     4,     1,     2,
+       1,     1,     1,     1,     1,     4,     1,     3,     1,     3,
+       1,     1,     1,     2,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     4,     1,
+       3,     1,     2,     2,     3,     3,     4,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
@@ -3231,11 +3581,11 @@
 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
                 yytype_int16 *yyssp, int yytoken)
 {
-  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
+  YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]);
   YYSIZE_T yysize = yysize0;
   enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
   /* Internationalized format string. */
-  const char *yyformat = YY_NULLPTR;
+  const char *yyformat = YY_NULL;
   /* Arguments of yyformat. */
   char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
   /* Number of reported tokens (one for the "unexpected", one per
@@ -3292,7 +3642,7 @@
                   }
                 yyarg[yycount++] = yytname[yyx];
                 {
-                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
+                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]);
                   if (! (yysize <= yysize1
                          && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
                     return 2;
@@ -3629,238 +3979,250 @@
   switch (yyn)
     {
         case 2:
-#line 272 "glslang.y" /* yacc.c:1646  */
+#line 292 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string);
     }
-#line 3637 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 3987 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 3:
-#line 278 "glslang.y" /* yacc.c:1646  */
+#line 298 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 3645 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 3995 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 4:
-#line 281 "glslang.y" /* yacc.c:1646  */
+#line 301 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 3653 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4004 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 5:
-#line 284 "glslang.y" /* yacc.c:1646  */
+#line 305 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
+    }
+#line 4013 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 6:
+#line 309 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
+    }
+#line 4021 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 7:
+#line 312 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 3662 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4030 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 6:
-#line 288 "glslang.y" /* yacc.c:1646  */
+  case 8:
+#line 316 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i64, (yyvsp[0].lex).loc, true);
     }
-#line 3671 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4039 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 7:
-#line 292 "glslang.y" /* yacc.c:1646  */
+  case 9:
+#line 320 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u64, (yyvsp[0].lex).loc, true);
     }
-#line 3680 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 8:
-#line 296 "glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check((yyvsp[0].lex).loc, "16-bit integer literal");
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((short)(yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
-#endif
-    }
-#line 3691 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 9:
-#line 302 "glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check((yyvsp[0].lex).loc, "16-bit unsigned integer literal");
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((unsigned short)(yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
-#endif
-    }
-#line 3702 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4048 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 10:
-#line 308 "glslang.y" /* yacc.c:1646  */
+#line 324 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
+        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit integer literal");
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((short)(yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 3710 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4057 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 11:
-#line 311 "glslang.y" /* yacc.c:1646  */
+#line 328 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer literal");
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((unsigned short)(yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
+    }
+#line 4066 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 12:
+#line 332 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
+    }
+#line 4074 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 13:
+#line 335 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtDouble, (yyvsp[0].lex).loc, true);
     }
-#line 3719 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 12:
-#line 315 "glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float literal");
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat16, (yyvsp[0].lex).loc, true);
-#endif
-    }
-#line 3730 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 13:
-#line 321 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
-    }
-#line 3738 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4083 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 14:
-#line 324 "glslang.y" /* yacc.c:1646  */
+#line 339 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float literal");
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat16, (yyvsp[0].lex).loc, true);
+    }
+#line 4092 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 15:
+#line 343 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
+    }
+#line 4100 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 16:
+#line 346 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
         if ((yyval.interm.intermTypedNode)->getAsConstantUnion())
             (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
     }
-#line 3748 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 15:
-#line 332 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
-    }
-#line 3756 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 16:
-#line 335 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode));
-    }
-#line 3764 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4110 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 17:
-#line 338 "glslang.y" /* yacc.c:1646  */
+#line 354 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 3772 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4118 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 18:
-#line 341 "glslang.y" /* yacc.c:1646  */
+#line 357 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string);
+        (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode));
     }
-#line 3780 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4126 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 19:
-#line 344 "glslang.y" /* yacc.c:1646  */
+#line 360 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
+    }
+#line 4134 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 20:
+#line 363 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string);
+    }
+#line 4142 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 21:
+#line 366 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode));
         parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "++", (yyvsp[-1].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "++", EOpPostIncrement, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 3790 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4152 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 20:
-#line 349 "glslang.y" /* yacc.c:1646  */
+  case 22:
+#line 371 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode));
         parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "--", (yyvsp[-1].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "--", EOpPostDecrement, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 3800 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4162 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 21:
-#line 357 "glslang.y" /* yacc.c:1646  */
+  case 23:
+#line 379 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 3809 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4171 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 22:
-#line 364 "glslang.y" /* yacc.c:1646  */
+  case 24:
+#line 386 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode);
         delete (yyvsp[0].interm).function;
     }
-#line 3818 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 23:
-#line 371 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm) = (yyvsp[0].interm);
-    }
-#line 3826 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 24:
-#line 377 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm) = (yyvsp[-1].interm);
-        (yyval.interm).loc = (yyvsp[0].lex).loc;
-    }
-#line 3835 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4180 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 25:
-#line 381 "glslang.y" /* yacc.c:1646  */
+#line 393 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm) = (yyvsp[0].interm);
+    }
+#line 4188 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 26:
+#line 399 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-1].interm);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 3844 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 26:
-#line 388 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm) = (yyvsp[-1].interm);
-    }
-#line 3852 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4197 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 27:
-#line 391 "glslang.y" /* yacc.c:1646  */
+#line 403 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        (yyval.interm) = (yyvsp[0].interm);
+        (yyval.interm) = (yyvsp[-1].interm);
+        (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 3860 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4206 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 28:
-#line 397 "glslang.y" /* yacc.c:1646  */
+#line 410 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm) = (yyvsp[-1].interm);
+    }
+#line 4214 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 29:
+#line 413 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm) = (yyvsp[0].interm);
+    }
+#line 4222 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 30:
+#line 419 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         TParameter param = { 0, new TType };
         param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
@@ -3868,11 +4230,11 @@
         (yyval.interm).function = (yyvsp[-1].interm).function;
         (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode);
     }
-#line 3872 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4234 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 29:
-#line 404 "glslang.y" /* yacc.c:1646  */
+  case 31:
+#line 426 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         TParameter param = { 0, new TType };
         param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
@@ -3880,29 +4242,29 @@
         (yyval.interm).function = (yyvsp[-2].interm).function;
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
     }
-#line 3884 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4246 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 30:
-#line 414 "glslang.y" /* yacc.c:1646  */
+  case 32:
+#line 436 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-1].interm);
     }
-#line 3892 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4254 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 31:
-#line 422 "glslang.y" /* yacc.c:1646  */
+  case 33:
+#line 444 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // Constructor
         (yyval.interm).intermNode = 0;
         (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
     }
-#line 3902 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4264 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 32:
-#line 427 "glslang.y" /* yacc.c:1646  */
+  case 34:
+#line 449 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         //
         // Should be a method or subroutine call, but we haven't recognized the arguments yet.
@@ -3930,40 +4292,40 @@
             (yyval.interm).function = new TFunction(&empty, TType(EbtVoid), EOpNull);
         }
     }
-#line 3934 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4296 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 33:
-#line 457 "glslang.y" /* yacc.c:1646  */
+  case 35:
+#line 479 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.variableCheck((yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         if (TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode())
             parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), "");
     }
-#line 3945 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4307 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 34:
-#line 463 "glslang.y" /* yacc.c:1646  */
+  case 36:
+#line 485 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "++", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "++", EOpPreIncrement, (yyvsp[0].interm.intermTypedNode));
     }
-#line 3954 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4316 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 35:
-#line 467 "glslang.y" /* yacc.c:1646  */
+  case 37:
+#line 489 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "--", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "--", EOpPreDecrement, (yyvsp[0].interm.intermTypedNode));
     }
-#line 3963 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4325 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 36:
-#line 471 "glslang.y" /* yacc.c:1646  */
+  case 38:
+#line 493 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-1].interm).op != EOpNull) {
             char errorOp[2] = {0, 0};
@@ -3980,179 +4342,179 @@
                 (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
         }
     }
-#line 3984 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 37:
-#line 491 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; }
-#line 3990 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 38:
-#line 492 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; }
-#line 3996 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4346 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 39:
-#line 493 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; }
-#line 4002 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 513 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; }
+#line 4352 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 40:
-#line 494 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot;
-              parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); }
-#line 4009 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 514 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; }
+#line 4358 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 41:
-#line 500 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4015 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 515 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; }
+#line 4364 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 42:
-#line 501 "glslang.y" /* yacc.c:1646  */
+#line 516 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot;
+              parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); }
+#line 4371 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 43:
+#line 522 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4377 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 44:
+#line 523 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "*", EOpMul, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4025 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4387 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 43:
-#line 506 "glslang.y" /* yacc.c:1646  */
+  case 45:
+#line 528 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "/", EOpDiv, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4035 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4397 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 44:
-#line 511 "glslang.y" /* yacc.c:1646  */
+  case 46:
+#line 533 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "%");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "%", EOpMod, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4046 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4408 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 45:
-#line 520 "glslang.y" /* yacc.c:1646  */
+  case 47:
+#line 542 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4052 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4414 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 46:
-#line 521 "glslang.y" /* yacc.c:1646  */
+  case 48:
+#line 543 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "+", EOpAdd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4062 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4424 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 47:
-#line 526 "glslang.y" /* yacc.c:1646  */
+  case 49:
+#line 548 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "-", EOpSub, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4072 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4434 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 48:
-#line 534 "glslang.y" /* yacc.c:1646  */
+  case 50:
+#line 556 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4078 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4440 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 49:
-#line 535 "glslang.y" /* yacc.c:1646  */
+  case 51:
+#line 557 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift left");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<<", EOpLeftShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4089 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4451 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 50:
-#line 541 "glslang.y" /* yacc.c:1646  */
+  case 52:
+#line 563 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift right");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">>", EOpRightShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4100 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4462 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 51:
-#line 550 "glslang.y" /* yacc.c:1646  */
+  case 53:
+#line 572 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4106 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4468 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 52:
-#line 551 "glslang.y" /* yacc.c:1646  */
+  case 54:
+#line 573 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<", EOpLessThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4116 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4478 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 53:
-#line 556 "glslang.y" /* yacc.c:1646  */
+  case 55:
+#line 578 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">", EOpGreaterThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4126 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4488 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 54:
-#line 561 "glslang.y" /* yacc.c:1646  */
+  case 56:
+#line 583 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<=", EOpLessThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4136 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4498 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 55:
-#line 566 "glslang.y" /* yacc.c:1646  */
+  case 57:
+#line 588 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">=", EOpGreaterThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4146 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4508 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 56:
-#line 574 "glslang.y" /* yacc.c:1646  */
+  case 58:
+#line 596 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4152 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4514 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 57:
-#line 575 "glslang.y" /* yacc.c:1646  */
+  case 59:
+#line 597 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison");
         parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "==");
@@ -4161,11 +4523,11 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4165 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4527 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 58:
-#line 583 "glslang.y" /* yacc.c:1646  */
+  case 60:
+#line 605 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison");
         parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!=");
@@ -4174,124 +4536,124 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4178 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4540 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 59:
-#line 594 "glslang.y" /* yacc.c:1646  */
+  case 61:
+#line 616 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4184 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4546 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 60:
-#line 595 "glslang.y" /* yacc.c:1646  */
+  case 62:
+#line 617 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise and");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&", EOpAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4195 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4557 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 61:
-#line 604 "glslang.y" /* yacc.c:1646  */
+  case 63:
+#line 626 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4201 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4563 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 62:
-#line 605 "glslang.y" /* yacc.c:1646  */
+  case 64:
+#line 627 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise exclusive or");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^", EOpExclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4212 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4574 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 63:
-#line 614 "glslang.y" /* yacc.c:1646  */
+  case 65:
+#line 636 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4218 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4580 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 64:
-#line 615 "glslang.y" /* yacc.c:1646  */
+  case 66:
+#line 637 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise inclusive or");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "|", EOpInclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4229 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4591 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 65:
-#line 624 "glslang.y" /* yacc.c:1646  */
+  case 67:
+#line 646 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4235 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4597 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 66:
-#line 625 "glslang.y" /* yacc.c:1646  */
+  case 68:
+#line 647 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&&", EOpLogicalAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4245 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4607 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 67:
-#line 633 "glslang.y" /* yacc.c:1646  */
+  case 69:
+#line 655 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4251 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4613 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 68:
-#line 634 "glslang.y" /* yacc.c:1646  */
+  case 70:
+#line 656 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^^", EOpLogicalXor, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4261 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4623 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 69:
-#line 642 "glslang.y" /* yacc.c:1646  */
+  case 71:
+#line 664 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4267 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4629 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 70:
-#line 643 "glslang.y" /* yacc.c:1646  */
+  case 72:
+#line 665 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "||", EOpLogicalOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4277 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 71:
-#line 651 "glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4283 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 72:
-#line 652 "glslang.y" /* yacc.c:1646  */
-    {
-        ++parseContext.controlFlowNestingLevel;
-    }
-#line 4291 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4639 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 73:
-#line 655 "glslang.y" /* yacc.c:1646  */
+#line 673 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4645 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 74:
+#line 674 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        ++parseContext.controlFlowNestingLevel;
+    }
+#line 4653 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 75:
+#line 677 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         --parseContext.controlFlowNestingLevel;
         parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-5].interm.intermTypedNode));
@@ -4304,17 +4666,17 @@
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 4308 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4670 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 74:
-#line 670 "glslang.y" /* yacc.c:1646  */
+  case 76:
+#line 692 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4314 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4676 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 75:
-#line 671 "glslang.y" /* yacc.c:1646  */
+  case 77:
+#line 693 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayObjectCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array assignment");
         parseContext.opaqueCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=");
@@ -4327,119 +4689,119 @@
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
         }
     }
-#line 4331 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4693 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 76:
-#line 686 "glslang.y" /* yacc.c:1646  */
+  case 78:
+#line 708 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAssign;
     }
-#line 4340 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4702 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 77:
-#line 690 "glslang.y" /* yacc.c:1646  */
+  case 79:
+#line 712 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpMulAssign;
     }
-#line 4349 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4711 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 78:
-#line 694 "glslang.y" /* yacc.c:1646  */
+  case 80:
+#line 716 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpDivAssign;
     }
-#line 4358 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4720 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 79:
-#line 698 "glslang.y" /* yacc.c:1646  */
+  case 81:
+#line 720 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "%=");
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpModAssign;
     }
-#line 4368 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4730 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 80:
-#line 703 "glslang.y" /* yacc.c:1646  */
+  case 82:
+#line 725 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAddAssign;
     }
-#line 4377 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4739 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 81:
-#line 707 "glslang.y" /* yacc.c:1646  */
+  case 83:
+#line 729 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpSubAssign;
     }
-#line 4386 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4748 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 82:
-#line 711 "glslang.y" /* yacc.c:1646  */
+  case 84:
+#line 733 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign;
     }
-#line 4395 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4757 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 83:
-#line 715 "glslang.y" /* yacc.c:1646  */
+  case 85:
+#line 737 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign;
     }
-#line 4404 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4766 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 84:
-#line 719 "glslang.y" /* yacc.c:1646  */
+  case 86:
+#line 741 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign;
     }
-#line 4413 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4775 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 85:
-#line 723 "glslang.y" /* yacc.c:1646  */
+  case 87:
+#line 745 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign;
     }
-#line 4422 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4784 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 86:
-#line 727 "glslang.y" /* yacc.c:1646  */
+  case 88:
+#line 749 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign;
     }
-#line 4431 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4793 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 87:
-#line 734 "glslang.y" /* yacc.c:1646  */
+  case 89:
+#line 756 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4439 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4801 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 88:
-#line 737 "glslang.y" /* yacc.c:1646  */
+  case 90:
+#line 759 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.samplerConstructorLocationCheck((yyvsp[-1].lex).loc, ",", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addComma((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
@@ -4448,40 +4810,40 @@
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 4452 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4814 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 89:
-#line 748 "glslang.y" /* yacc.c:1646  */
+  case 91:
+#line 770 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), "");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4461 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4823 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 90:
-#line 755 "glslang.y" /* yacc.c:1646  */
+  case 92:
+#line 777 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.handleFunctionDeclarator((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).function, true /* prototype */);
         (yyval.interm.intermNode) = 0;
         // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature
     }
-#line 4471 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4833 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 91:
-#line 760 "glslang.y" /* yacc.c:1646  */
+  case 93:
+#line 782 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-1].interm).intermNode && (yyvsp[-1].interm).intermNode->getAsAggregate())
             (yyvsp[-1].interm).intermNode->getAsAggregate()->setOperator(EOpSequence);
         (yyval.interm.intermNode) = (yyvsp[-1].interm).intermNode;
     }
-#line 4481 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4843 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 92:
-#line 765 "glslang.y" /* yacc.c:1646  */
+  case 94:
+#line 787 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[-3].lex).loc, ENoProfile, 130, 0, "precision statement");
 
@@ -4490,75 +4852,75 @@
         parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision);
         (yyval.interm.intermNode) = 0;
     }
-#line 4494 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4856 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 93:
-#line 773 "glslang.y" /* yacc.c:1646  */
+  case 95:
+#line 795 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList);
         (yyval.interm.intermNode) = 0;
     }
-#line 4503 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4865 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 94:
-#line 777 "glslang.y" /* yacc.c:1646  */
+  case 96:
+#line 799 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string);
         (yyval.interm.intermNode) = 0;
     }
-#line 4512 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4874 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 95:
-#line 781 "glslang.y" /* yacc.c:1646  */
+  case 97:
+#line 803 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes);
         (yyval.interm.intermNode) = 0;
     }
-#line 4521 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4883 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 96:
-#line 785 "glslang.y" /* yacc.c:1646  */
+  case 98:
+#line 807 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier);
         parseContext.updateStandaloneQualifierDefaults((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type));
         (yyval.interm.intermNode) = 0;
     }
-#line 4531 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4893 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 97:
-#line 790 "glslang.y" /* yacc.c:1646  */
+  case 99:
+#line 812 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.checkNoShaderLayouts((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).shaderQualifiers);
         parseContext.addQualifierToExisting((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, *(yyvsp[-1].lex).string);
         (yyval.interm.intermNode) = 0;
     }
-#line 4541 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4903 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 98:
-#line 795 "glslang.y" /* yacc.c:1646  */
+  case 100:
+#line 817 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.checkNoShaderLayouts((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).shaderQualifiers);
         (yyvsp[-1].interm.identifierList)->push_back((yyvsp[-2].lex).string);
         parseContext.addQualifierToExisting((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier, *(yyvsp[-1].interm.identifierList));
         (yyval.interm.intermNode) = 0;
     }
-#line 4552 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4914 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 99:
-#line 804 "glslang.y" /* yacc.c:1646  */
+  case 101:
+#line 826 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); }
-#line 4558 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4920 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 100:
-#line 804 "glslang.y" /* yacc.c:1646  */
+  case 102:
+#line 826 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         --parseContext.structNestingLevel;
         parseContext.blockName = (yyvsp[-4].lex).string;
@@ -4568,54 +4930,54 @@
         (yyval.interm).loc = (yyvsp[-5].interm.type).loc;
         (yyval.interm).typeList = (yyvsp[-1].interm.typeList);
     }
-#line 4572 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4934 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 101:
-#line 815 "glslang.y" /* yacc.c:1646  */
+  case 103:
+#line 837 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.identifierList) = new TIdentifierList;
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 4581 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4943 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 102:
-#line 819 "glslang.y" /* yacc.c:1646  */
+  case 104:
+#line 841 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList);
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 4590 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4952 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 103:
-#line 826 "glslang.y" /* yacc.c:1646  */
+  case 105:
+#line 848 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).function = (yyvsp[-1].interm.function);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 4599 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 104:
-#line 833 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.function) = (yyvsp[0].interm.function);
-    }
-#line 4607 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 105:
-#line 836 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.function) = (yyvsp[0].interm.function);
-    }
-#line 4615 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4961 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 106:
-#line 843 "glslang.y" /* yacc.c:1646  */
+#line 855 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.function) = (yyvsp[0].interm.function);
+    }
+#line 4969 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 107:
+#line 858 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.function) = (yyvsp[0].interm.function);
+    }
+#line 4977 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 108:
+#line 865 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // Add the parameter
         (yyval.interm.function) = (yyvsp[-1].interm.function);
@@ -4624,11 +4986,11 @@
         else
             delete (yyvsp[0].interm).param.type;
     }
-#line 4628 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 4990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 107:
-#line 851 "glslang.y" /* yacc.c:1646  */
+  case 109:
+#line 873 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         //
         // Only first parameter of one-parameter functions can be void
@@ -4646,11 +5008,11 @@
             (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param);
         }
     }
-#line 4650 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5012 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 108:
-#line 871 "glslang.y" /* yacc.c:1646  */
+  case 110:
+#line 893 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.type).qualifier.storage != EvqGlobal && (yyvsp[-2].interm.type).qualifier.storage != EvqTemporary) {
             parseContext.error((yyvsp[-1].lex).loc, "no qualifiers allowed for function return",
@@ -4670,11 +5032,11 @@
         function = new TFunction((yyvsp[-1].lex).string, type);
         (yyval.interm.function) = function;
     }
-#line 4674 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5036 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 109:
-#line 894 "glslang.y" /* yacc.c:1646  */
+  case 111:
+#line 916 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-1].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-1].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -4690,11 +5052,11 @@
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).param = param;
     }
-#line 4694 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5056 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 110:
-#line 909 "glslang.y" /* yacc.c:1646  */
+  case 112:
+#line 931 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -4712,11 +5074,11 @@
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).param = param;
     }
-#line 4716 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5078 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 111:
-#line 932 "glslang.y" /* yacc.c:1646  */
+  case 113:
+#line 954 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
         if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
@@ -4728,11 +5090,11 @@
         parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
 
     }
-#line 4732 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5094 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 112:
-#line 943 "glslang.y" /* yacc.c:1646  */
+  case 114:
+#line 965 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
 
@@ -4740,11 +5102,11 @@
         parseContext.paramCheckFix((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
         parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
     }
-#line 4744 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5106 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 113:
-#line 953 "glslang.y" /* yacc.c:1646  */
+  case 115:
+#line 975 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
         if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
@@ -4755,11 +5117,11 @@
         parseContext.parameterTypeCheck((yyvsp[0].interm).loc, (yyvsp[-1].interm.type).qualifier.storage, *(yyval.interm).param.type);
         parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
     }
-#line 4759 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5121 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 114:
-#line 963 "glslang.y" /* yacc.c:1646  */
+  case 116:
+#line 985 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
 
@@ -4767,118 +5129,118 @@
         parseContext.paramCheckFix((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
         parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
     }
-#line 4771 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5133 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 115:
-#line 973 "glslang.y" /* yacc.c:1646  */
+  case 117:
+#line 995 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         TParameter param = { 0, new TType((yyvsp[0].interm.type)) };
         (yyval.interm).param = param;
         if ((yyvsp[0].interm.type).arraySizes)
             parseContext.arraySizeRequiredCheck((yyvsp[0].interm.type).loc, *(yyvsp[0].interm.type).arraySizes);
     }
-#line 4782 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5144 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 116:
-#line 982 "glslang.y" /* yacc.c:1646  */
+  case 118:
+#line 1004 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 4790 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5152 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 117:
-#line 985 "glslang.y" /* yacc.c:1646  */
+  case 119:
+#line 1007 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-2].interm);
         parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type);
     }
-#line 4799 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5161 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 118:
-#line 989 "glslang.y" /* yacc.c:1646  */
+  case 120:
+#line 1011 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-3].interm);
         parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-3].interm).type, (yyvsp[0].interm).arraySizes);
     }
-#line 4808 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5170 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 119:
-#line 993 "glslang.y" /* yacc.c:1646  */
+  case 121:
+#line 1015 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-5].interm).type;
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-5].interm).type, (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-5].interm).intermNode, initNode, (yyvsp[-1].lex).loc);
     }
-#line 4818 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5180 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 120:
-#line 998 "glslang.y" /* yacc.c:1646  */
+  case 122:
+#line 1020 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-4].interm).type;
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-4].interm).type, 0, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-4].interm).intermNode, initNode, (yyvsp[-1].lex).loc);
     }
-#line 4828 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5190 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 121:
-#line 1006 "glslang.y" /* yacc.c:1646  */
+  case 123:
+#line 1028 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[0].interm.type);
         (yyval.interm).intermNode = 0;
         parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type);
     }
-#line 4838 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5200 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 122:
-#line 1011 "glslang.y" /* yacc.c:1646  */
+  case 124:
+#line 1033 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-1].interm.type);
         (yyval.interm).intermNode = 0;
         parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-1].interm.type));
     }
-#line 4848 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5210 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 123:
-#line 1016 "glslang.y" /* yacc.c:1646  */
+  case 125:
+#line 1038 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-2].interm.type);
         (yyval.interm).intermNode = 0;
         parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-2].interm.type), (yyvsp[0].interm).arraySizes);
     }
-#line 4858 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5220 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 124:
-#line 1021 "glslang.y" /* yacc.c:1646  */
+  case 126:
+#line 1043 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-4].interm.type);
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-4].interm.type), (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc);
     }
-#line 4868 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5230 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 125:
-#line 1026 "glslang.y" /* yacc.c:1646  */
+  case 127:
+#line 1048 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-3].interm.type);
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-3].interm.type), 0, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc);
     }
-#line 4878 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5240 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 126:
-#line 1035 "glslang.y" /* yacc.c:1646  */
+  case 128:
+#line 1057 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
 
@@ -4890,11 +5252,11 @@
 
         parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier);
     }
-#line 4894 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5256 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 127:
-#line 1046 "glslang.y" /* yacc.c:1646  */
+  case 129:
+#line 1068 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier);
         parseContext.globalQualifierTypeCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, (yyvsp[0].interm.type));
@@ -4919,22 +5281,22 @@
              (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn)))
             (yyval.interm.type).qualifier.smooth = true;
     }
-#line 4923 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5285 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 128:
-#line 1073 "glslang.y" /* yacc.c:1646  */
+  case 130:
+#line 1095 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "invariant");
         parseContext.profileRequires((yyval.interm.type).loc, ENoProfile, 120, 0, "invariant");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.invariant = true;
     }
-#line 4934 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5296 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 129:
-#line 1082 "glslang.y" /* yacc.c:1646  */
+  case 131:
+#line 1104 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "smooth");
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "smooth");
@@ -4942,11 +5304,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.smooth = true;
     }
-#line 4946 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5308 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 130:
-#line 1089 "glslang.y" /* yacc.c:1646  */
+  case 132:
+#line 1111 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "flat");
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "flat");
@@ -4954,11 +5316,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.flat = true;
     }
-#line 4958 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5320 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 131:
-#line 1096 "glslang.y" /* yacc.c:1646  */
+  case 133:
+#line 1118 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "noperspective");
         parseContext.requireProfile((yyvsp[0].lex).loc, ~EEsProfile, "noperspective");
@@ -4966,11 +5328,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.nopersp = true;
     }
-#line 4970 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5332 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 132:
-#line 1103 "glslang.y" /* yacc.c:1646  */
+  case 134:
+#line 1125 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.globalCheck((yyvsp[0].lex).loc, "__explicitInterpAMD");
@@ -4980,84 +5342,84 @@
         (yyval.interm.type).qualifier.explicitInterp = true;
 #endif
     }
-#line 4984 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 133:
-#line 1115 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type) = (yyvsp[-1].interm.type);
-    }
-#line 4992 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 134:
-#line 1121 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 5000 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5346 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 135:
-#line 1124 "glslang.y" /* yacc.c:1646  */
+#line 1137 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type) = (yyvsp[-1].interm.type);
+    }
+#line 5354 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 136:
+#line 1143 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 5362 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 137:
+#line 1146 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[-2].interm.type);
         (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers);
         parseContext.mergeObjectLayoutQualifiers((yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false);
     }
-#line 5010 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5372 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 136:
-#line 1131 "glslang.y" /* yacc.c:1646  */
+  case 138:
+#line 1153 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), *(yyvsp[0].lex).string);
     }
-#line 5019 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5381 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 137:
-#line 1135 "glslang.y" /* yacc.c:1646  */
+  case 139:
+#line 1157 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[-2].lex).loc);
         parseContext.setLayoutQualifier((yyvsp[-2].lex).loc, (yyval.interm.type), *(yyvsp[-2].lex).string, (yyvsp[0].interm.intermTypedNode));
     }
-#line 5028 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5390 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 138:
-#line 1139 "glslang.y" /* yacc.c:1646  */
+  case 140:
+#line 1161 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { // because "shared" is both an identifier and a keyword
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         TString strShared("shared");
         parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), strShared);
     }
-#line 5038 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5400 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 139:
-#line 1147 "glslang.y" /* yacc.c:1646  */
+  case 141:
+#line 1169 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyval.interm.type).loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader5, "precise");
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, "precise");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.noContraction = true;
     }
-#line 5049 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5411 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 140:
-#line 1156 "glslang.y" /* yacc.c:1646  */
+  case 142:
+#line 1178 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5057 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5419 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 141:
-#line 1159 "glslang.y" /* yacc.c:1646  */
+  case 143:
+#line 1181 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
         if ((yyval.interm.type).basicType == EbtVoid)
@@ -5066,72 +5428,72 @@
         (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers);
         parseContext.mergeQualifiers((yyval.interm.type).loc, (yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false);
     }
-#line 5070 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 142:
-#line 1170 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 5078 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 143:
-#line 1173 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 5086 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5432 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 144:
-#line 1176 "glslang.y" /* yacc.c:1646  */
+#line 1192 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 5440 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 145:
+#line 1195 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 5448 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 146:
+#line 1198 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision);
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5095 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 145:
-#line 1180 "glslang.y" /* yacc.c:1646  */
-    {
-        // allow inheritance of storage qualifier from block declaration
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 5104 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 146:
-#line 1184 "glslang.y" /* yacc.c:1646  */
-    {
-        // allow inheritance of storage qualifier from block declaration
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 5113 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5457 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 147:
-#line 1188 "glslang.y" /* yacc.c:1646  */
+#line 1202 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5122 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5466 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 148:
-#line 1195 "glslang.y" /* yacc.c:1646  */
+#line 1206 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        // allow inheritance of storage qualifier from block declaration
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 5475 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 149:
+#line 1210 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        // allow inheritance of storage qualifier from block declaration
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 5484 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 150:
+#line 1217 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqConst;  // will later turn into EvqConstReadOnly, if the initializer is not constant
     }
-#line 5131 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5493 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 149:
-#line 1199 "glslang.y" /* yacc.c:1646  */
+  case 151:
+#line 1221 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute");
@@ -5144,11 +5506,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 5148 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5510 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 150:
-#line 1211 "glslang.y" /* yacc.c:1646  */
+  case 152:
+#line 1233 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying");
@@ -5163,43 +5525,43 @@
         else
             (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 5167 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5529 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 151:
-#line 1225 "glslang.y" /* yacc.c:1646  */
+  case 153:
+#line 1247 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "inout");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqInOut;
     }
-#line 5177 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5539 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 152:
-#line 1230 "glslang.y" /* yacc.c:1646  */
+  case 154:
+#line 1252 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "in");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later
         (yyval.interm.type).qualifier.storage = EvqIn;
     }
-#line 5188 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5550 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 153:
-#line 1236 "glslang.y" /* yacc.c:1646  */
+  case 155:
+#line 1258 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "out");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later
         (yyval.interm.type).qualifier.storage = EvqOut;
     }
-#line 5199 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5561 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 154:
-#line 1242 "glslang.y" /* yacc.c:1646  */
+  case 156:
+#line 1264 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 120, 0, "centroid");
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "centroid");
@@ -5207,52 +5569,52 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.centroid = true;
     }
-#line 5211 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5573 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 155:
-#line 1249 "glslang.y" /* yacc.c:1646  */
+  case 157:
+#line 1271 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "patch");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTessControlMask | EShLangTessEvaluationMask), "patch");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.patch = true;
     }
-#line 5222 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5584 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 156:
-#line 1255 "glslang.y" /* yacc.c:1646  */
+  case 158:
+#line 1277 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "sample");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.sample = true;
     }
-#line 5232 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5594 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 157:
-#line 1260 "glslang.y" /* yacc.c:1646  */
+  case 159:
+#line 1282 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "uniform");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqUniform;
     }
-#line 5242 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5604 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 158:
-#line 1265 "glslang.y" /* yacc.c:1646  */
+  case 160:
+#line 1287 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "buffer");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqBuffer;
     }
-#line 5252 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5614 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 159:
-#line 1270 "glslang.y" /* yacc.c:1646  */
+  case 161:
+#line 1292 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "shared");
         parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
@@ -5261,126 +5623,126 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqShared;
     }
-#line 5265 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5627 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 160:
-#line 1278 "glslang.y" /* yacc.c:1646  */
+  case 162:
+#line 1300 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.coherent = true;
     }
-#line 5274 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5636 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 161:
-#line 1282 "glslang.y" /* yacc.c:1646  */
+  case 163:
+#line 1304 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.volatil = true;
     }
-#line 5283 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5645 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 162:
-#line 1286 "glslang.y" /* yacc.c:1646  */
+  case 164:
+#line 1308 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.restrict = true;
     }
-#line 5292 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5654 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 163:
-#line 1290 "glslang.y" /* yacc.c:1646  */
+  case 165:
+#line 1312 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.readonly = true;
     }
-#line 5301 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5663 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 164:
-#line 1294 "glslang.y" /* yacc.c:1646  */
+  case 166:
+#line 1316 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.writeonly = true;
     }
-#line 5310 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5672 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 165:
-#line 1298 "glslang.y" /* yacc.c:1646  */
+  case 167:
+#line 1320 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.spvRemoved((yyvsp[0].lex).loc, "subroutine");
         parseContext.globalCheck((yyvsp[0].lex).loc, "subroutine");
         parseContext.unimplemented((yyvsp[0].lex).loc, "subroutine");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
     }
-#line 5321 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5683 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 166:
-#line 1304 "glslang.y" /* yacc.c:1646  */
+  case 168:
+#line 1326 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.spvRemoved((yyvsp[-3].lex).loc, "subroutine");
         parseContext.globalCheck((yyvsp[-3].lex).loc, "subroutine");
         parseContext.unimplemented((yyvsp[-3].lex).loc, "subroutine");
         (yyval.interm.type).init((yyvsp[-3].lex).loc);
     }
-#line 5332 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5694 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 167:
-#line 1313 "glslang.y" /* yacc.c:1646  */
+  case 169:
+#line 1335 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // TODO
     }
-#line 5340 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5702 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 168:
-#line 1316 "glslang.y" /* yacc.c:1646  */
+  case 170:
+#line 1338 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // TODO: 4.0 semantics: subroutines
         // 1) make sure each identifier is a type declared earlier with SUBROUTINE
         // 2) save all of the identifiers for future comparison with the declared function
     }
-#line 5350 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5712 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 169:
-#line 1324 "glslang.y" /* yacc.c:1646  */
+  case 171:
+#line 1346 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
         (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
     }
-#line 5359 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5721 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 170:
-#line 1328 "glslang.y" /* yacc.c:1646  */
+  case 172:
+#line 1350 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayDimCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes, 0);
         (yyval.interm.type) = (yyvsp[-1].interm.type);
         (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
         (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes;
     }
-#line 5370 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5732 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 171:
-#line 1337 "glslang.y" /* yacc.c:1646  */
+  case 173:
+#line 1359 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 5380 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5742 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 172:
-#line 1342 "glslang.y" /* yacc.c:1646  */
+  case 174:
+#line 1364 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[-2].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
@@ -5389,20 +5751,20 @@
         parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size);
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 5393 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5755 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 173:
-#line 1350 "glslang.y" /* yacc.c:1646  */
+  case 175:
+#line 1372 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-2].interm);
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 5402 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5764 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 174:
-#line 1354 "glslang.y" /* yacc.c:1646  */
+  case 176:
+#line 1376 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-3].interm);
 
@@ -5410,1010 +5772,1484 @@
         parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size);
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 5414 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5776 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 175:
-#line 1364 "glslang.y" /* yacc.c:1646  */
+  case 177:
+#line 1386 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtVoid;
     }
-#line 5423 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5785 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 176:
-#line 1368 "glslang.y" /* yacc.c:1646  */
+  case 178:
+#line 1390 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
     }
-#line 5432 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5794 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 177:
-#line 1372 "glslang.y" /* yacc.c:1646  */
+  case 179:
+#line 1394 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
     }
-#line 5442 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5804 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 178:
-#line 1377 "glslang.y" /* yacc.c:1646  */
+  case 180:
+#line 1399 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.float16Check((yyvsp[0].lex).loc, "float16_t", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
-#endif
     }
-#line 5454 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5814 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 179:
-#line 1384 "glslang.y" /* yacc.c:1646  */
+  case 181:
+#line 1404 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+    }
+#line 5824 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 182:
+#line 1409 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+    }
+#line 5834 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 183:
+#line 1414 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
     }
-#line 5463 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5843 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 180:
-#line 1388 "glslang.y" /* yacc.c:1646  */
+  case 184:
+#line 1418 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
     }
-#line 5473 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5853 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 181:
-#line 1393 "glslang.y" /* yacc.c:1646  */
+  case 185:
+#line 1423 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt8;
+    }
+#line 5863 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 186:
+#line 1428 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint8;
+    }
+#line 5873 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 187:
+#line 1433 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt16;
+    }
+#line 5883 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 188:
+#line 1438 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint16;
+    }
+#line 5893 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 189:
+#line 1443 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt;
+    }
+#line 5903 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 190:
+#line 1448 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint;
+    }
+#line 5913 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 191:
+#line 1453 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
     }
-#line 5483 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5923 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 182:
-#line 1398 "glslang.y" /* yacc.c:1646  */
+  case 192:
+#line 1458 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
     }
-#line 5493 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 183:
-#line 1403 "glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check((yyvsp[0].lex).loc, "16-bit integer", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt16;
-#endif
-    }
-#line 5505 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 184:
-#line 1410 "glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check((yyvsp[0].lex).loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint16;
-#endif
-    }
-#line 5517 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 185:
-#line 1417 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtBool;
-    }
-#line 5526 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 186:
-#line 1421 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setVector(2);
-    }
-#line 5536 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 187:
-#line 1426 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setVector(3);
-    }
-#line 5546 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 188:
-#line 1431 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setVector(4);
-    }
-#line 5556 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 189:
-#line 1436 "glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setVector(2);
-    }
-#line 5567 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 190:
-#line 1442 "glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setVector(3);
-    }
-#line 5578 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 191:
-#line 1448 "glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setVector(4);
-    }
-#line 5589 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 192:
-#line 1454 "glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setVector(2);
-#endif
-    }
-#line 5602 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5933 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 193:
-#line 1462 "glslang.y" /* yacc.c:1646  */
+#line 1463 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setVector(3);
-#endif
+        (yyval.interm.type).basicType = EbtBool;
     }
-#line 5615 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 5942 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 194:
-#line 1470 "glslang.y" /* yacc.c:1646  */
+#line 1467 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setVector(2);
+    }
+#line 5952 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 195:
+#line 1472 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setVector(3);
+    }
+#line 5962 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 196:
+#line 1477 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setVector(4);
+    }
+#line 5972 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 197:
+#line 1482 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setVector(2);
+    }
+#line 5983 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 198:
+#line 1488 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setVector(3);
+    }
+#line 5994 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 199:
+#line 1494 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6005 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 200:
+#line 1500 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6016 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 201:
+#line 1506 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6027 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 202:
+#line 1512 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setVector(4);
-#endif
     }
-#line 5628 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 195:
-#line 1478 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtBool;
-        (yyval.interm.type).setVector(2);
-    }
-#line 5638 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 196:
-#line 1483 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtBool;
-        (yyval.interm.type).setVector(3);
-    }
-#line 5648 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 197:
-#line 1488 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtBool;
-        (yyval.interm.type).setVector(4);
-    }
-#line 5658 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 198:
-#line 1493 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
-        (yyval.interm.type).setVector(2);
-    }
-#line 5668 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 199:
-#line 1498 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
-        (yyval.interm.type).setVector(3);
-    }
-#line 5678 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 200:
-#line 1503 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
-        (yyval.interm.type).setVector(4);
-    }
-#line 5688 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 201:
-#line 1508 "glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt64;
-        (yyval.interm.type).setVector(2);
-    }
-#line 5699 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 202:
-#line 1514 "glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt64;
-        (yyval.interm.type).setVector(3);
-    }
-#line 5710 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6038 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 203:
-#line 1520 "glslang.y" /* yacc.c:1646  */
+#line 1518 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtFloat;
+    	(yyval.interm.type).setVector(2);
+    }
+#line 6049 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 204:
+#line 1524 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtFloat;
+    	(yyval.interm.type).setVector(3);
+    }
+#line 6060 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 205:
+#line 1530 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtFloat;
+    	(yyval.interm.type).setVector(4);
+    }
+#line 6071 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 206:
+#line 1536 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtDouble;
+    	(yyval.interm.type).setVector(2);
+    }
+#line 6082 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 207:
+#line 1542 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtDouble;
+    	(yyval.interm.type).setVector(3);
+    }
+#line 6093 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 208:
+#line 1548 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtDouble;
+    	(yyval.interm.type).setVector(4);
+    }
+#line 6104 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 209:
+#line 1554 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtBool;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6114 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 210:
+#line 1559 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtBool;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6124 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 211:
+#line 1564 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtBool;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6134 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 212:
+#line 1569 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6144 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 213:
+#line 1574 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6154 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 214:
+#line 1579 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6164 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 215:
+#line 1584 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+ 	   parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+ 	   (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ 	   (yyval.interm.type).basicType = EbtInt8;
+ 	   (yyval.interm.type).setVector(2);
+    }
+#line 6175 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 216:
+#line 1590 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+ 	   parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+ 	   (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ 	   (yyval.interm.type).basicType = EbtInt8;
+ 	   (yyval.interm.type).setVector(3);
+    }
+#line 6186 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 217:
+#line 1596 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+ 	   parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+ 	   (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ 	   (yyval.interm.type).basicType = EbtInt8;
+ 	   (yyval.interm.type).setVector(4);
+    }
+#line 6197 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 218:
+#line 1602 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+ 	   parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+ 	   (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ 	   (yyval.interm.type).basicType = EbtInt16;
+ 	   (yyval.interm.type).setVector(2);
+    }
+#line 6208 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 219:
+#line 1608 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+ 	   parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+ 	   (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ 	   (yyval.interm.type).basicType = EbtInt16;
+ 	   (yyval.interm.type).setVector(3);
+    }
+#line 6219 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 220:
+#line 1614 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+ 	   parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+ 	   (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ 	   (yyval.interm.type).basicType = EbtInt16;
+ 	   (yyval.interm.type).setVector(4);
+    }
+#line 6230 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 221:
+#line 1620 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6241 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 222:
+#line 1626 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6252 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 223:
+#line 1632 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6263 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 224:
+#line 1638 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt64;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6274 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 225:
+#line 1644 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt64;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6285 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 226:
+#line 1650 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
         (yyval.interm.type).setVector(4);
     }
-#line 5721 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 204:
-#line 1526 "glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check((yyvsp[0].lex).loc, "16-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt16;
-        (yyval.interm.type).setVector(2);
-#endif
-    }
-#line 5734 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 205:
-#line 1534 "glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check((yyvsp[0].lex).loc, "16-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt16;
-        (yyval.interm.type).setVector(3);
-#endif
-    }
-#line 5747 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 206:
-#line 1542 "glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check((yyvsp[0].lex).loc, "16-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt16;
-        (yyval.interm.type).setVector(4);
-#endif
-    }
-#line 5760 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 207:
-#line 1550 "glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint;
-        (yyval.interm.type).setVector(2);
-    }
-#line 5771 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 208:
-#line 1556 "glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint;
-        (yyval.interm.type).setVector(3);
-    }
-#line 5782 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 209:
-#line 1562 "glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint;
-        (yyval.interm.type).setVector(4);
-    }
-#line 5793 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 210:
-#line 1568 "glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint64;
-        (yyval.interm.type).setVector(2);
-    }
-#line 5804 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 211:
-#line 1574 "glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint64;
-        (yyval.interm.type).setVector(3);
-    }
-#line 5815 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 212:
-#line 1580 "glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint64;
-        (yyval.interm.type).setVector(4);
-    }
-#line 5826 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 213:
-#line 1586 "glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint16;
-        (yyval.interm.type).setVector(2);
-#endif
-    }
-#line 5839 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 214:
-#line 1594 "glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint16;
-        (yyval.interm.type).setVector(3);
-#endif
-    }
-#line 5852 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 215:
-#line 1602 "glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint16;
-        (yyval.interm.type).setVector(4);
-#endif
-    }
-#line 5865 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 216:
-#line 1610 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(2, 2);
-    }
-#line 5875 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 217:
-#line 1615 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(3, 3);
-    }
-#line 5885 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 218:
-#line 1620 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(4, 4);
-    }
-#line 5895 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 219:
-#line 1625 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(2, 2);
-    }
-#line 5905 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 220:
-#line 1630 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(2, 3);
-    }
-#line 5915 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 221:
-#line 1635 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(2, 4);
-    }
-#line 5925 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 222:
-#line 1640 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(3, 2);
-    }
-#line 5935 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 223:
-#line 1645 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(3, 3);
-    }
-#line 5945 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 224:
-#line 1650 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(3, 4);
-    }
-#line 5955 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 225:
-#line 1655 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(4, 2);
-    }
-#line 5965 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 226:
-#line 1660 "glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(4, 3);
-    }
-#line 5975 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6296 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 227:
-#line 1665 "glslang.y" /* yacc.c:1646  */
+#line 1656 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6307 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 228:
+#line 1662 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6318 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 229:
+#line 1668 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6329 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 230:
+#line 1674 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint8;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6340 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 231:
+#line 1680 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt8;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6351 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 232:
+#line 1686 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint8;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6362 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 233:
+#line 1692 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint16;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6373 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 234:
+#line 1698 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint16;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6384 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 235:
+#line 1704 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint16;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6395 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 236:
+#line 1710 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6406 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 237:
+#line 1716 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6417 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 238:
+#line 1722 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6428 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 239:
+#line 1728 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint64;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6439 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 240:
+#line 1734 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint64;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6450 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 241:
+#line 1740 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint64;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6461 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 242:
+#line 1746 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 2);
+    }
+#line 6471 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 243:
+#line 1751 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(3, 3);
+    }
+#line 6481 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 244:
+#line 1756 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 5985 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 228:
-#line 1670 "glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(2, 2);
-    }
-#line 5996 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 229:
-#line 1676 "glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(3, 3);
-    }
-#line 6007 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 230:
-#line 1682 "glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(4, 4);
-    }
-#line 6018 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 231:
-#line 1688 "glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(2, 2);
-    }
-#line 6029 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 232:
-#line 1694 "glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(2, 3);
-    }
-#line 6040 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 233:
-#line 1700 "glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(2, 4);
-    }
-#line 6051 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 234:
-#line 1706 "glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(3, 2);
-    }
-#line 6062 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 235:
-#line 1712 "glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(3, 3);
-    }
-#line 6073 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 236:
-#line 1718 "glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(3, 4);
-    }
-#line 6084 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 237:
-#line 1724 "glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(4, 2);
-    }
-#line 6095 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 238:
-#line 1730 "glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(4, 3);
-    }
-#line 6106 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 239:
-#line 1736 "glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(4, 4);
-    }
-#line 6117 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 240:
-#line 1742 "glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setMatrix(2, 2);
-#endif
-    }
-#line 6130 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 241:
-#line 1750 "glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setMatrix(3, 3);
-#endif
-    }
-#line 6143 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 242:
-#line 1758 "glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setMatrix(4, 4);
-#endif
-    }
-#line 6156 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 243:
-#line 1766 "glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setMatrix(2, 2);
-#endif
-    }
-#line 6169 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 244:
-#line 1774 "glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setMatrix(2, 3);
-#endif
-    }
-#line 6182 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6491 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 245:
-#line 1782 "glslang.y" /* yacc.c:1646  */
+#line 1761 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setMatrix(2, 4);
-#endif
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6195 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6501 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 246:
-#line 1790 "glslang.y" /* yacc.c:1646  */
+#line 1766 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setMatrix(3, 2);
-#endif
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 3);
     }
-#line 6208 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6511 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 247:
-#line 1798 "glslang.y" /* yacc.c:1646  */
+#line 1771 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 4);
+    }
+#line 6521 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 248:
+#line 1776 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(3, 2);
+    }
+#line 6531 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 249:
+#line 1781 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(3, 3);
+    }
+#line 6541 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 250:
+#line 1786 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(3, 4);
+    }
+#line 6551 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 251:
+#line 1791 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(4, 2);
+    }
+#line 6561 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 252:
+#line 1796 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(4, 3);
+    }
+#line 6571 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 253:
+#line 1801 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(4, 4);
+    }
+#line 6581 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 254:
+#line 1806 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(2, 2);
+    }
+#line 6592 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 255:
+#line 1812 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(3, 3);
+    }
+#line 6603 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 256:
+#line 1818 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(4, 4);
+    }
+#line 6614 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 257:
+#line 1824 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(2, 2);
+    }
+#line 6625 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 258:
+#line 1830 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(2, 3);
+    }
+#line 6636 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 259:
+#line 1836 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(2, 4);
+    }
+#line 6647 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 260:
+#line 1842 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(3, 2);
+    }
+#line 6658 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 261:
+#line 1848 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(3, 3);
+    }
+#line 6669 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 262:
+#line 1854 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(3, 4);
+    }
+#line 6680 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 263:
+#line 1860 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(4, 2);
+    }
+#line 6691 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 264:
+#line 1866 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(4, 3);
+    }
+#line 6702 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 265:
+#line 1872 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(4, 4);
+    }
+#line 6713 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 266:
+#line 1878 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(2, 2);
+    }
+#line 6724 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 267:
+#line 1884 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(3, 3);
-#endif
     }
-#line 6221 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6735 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 248:
-#line 1806 "glslang.y" /* yacc.c:1646  */
+  case 268:
+#line 1890 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setMatrix(3, 4);
-#endif
-    }
-#line 6234 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 249:
-#line 1814 "glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setMatrix(4, 2);
-#endif
-    }
-#line 6247 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 250:
-#line 1822 "glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setMatrix(4, 3);
-#endif
-    }
-#line 6260 "glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 251:
-#line 1830 "glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 4);
-#endif
     }
-#line 6273 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 6746 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 252:
-#line 1838 "glslang.y" /* yacc.c:1646  */
+  case 269:
+#line 1896 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(2, 2);
+    }
+#line 6757 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 270:
+#line 1902 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(2, 3);
+    }
+#line 6768 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 271:
+#line 1908 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(2, 4);
+    }
+#line 6779 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 272:
+#line 1914 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(3, 2);
+    }
+#line 6790 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 273:
+#line 1920 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(3, 3);
+    }
+#line 6801 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 274:
+#line 1926 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(3, 4);
+    }
+#line 6812 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 275:
+#line 1932 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(4, 2);
+    }
+#line 6823 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 276:
+#line 1938 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(4, 3);
+    }
+#line 6834 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 277:
+#line 1944 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(4, 4);
+    }
+#line 6845 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 278:
+#line 1950 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtFloat;
+    	(yyval.interm.type).setMatrix(2, 2);
+    }
+#line 6856 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 279:
+#line 1956 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtFloat;
+    	(yyval.interm.type).setMatrix(3, 3);
+    }
+#line 6867 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 280:
+#line 1962 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtFloat;
+    	(yyval.interm.type).setMatrix(4, 4);
+    }
+#line 6878 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 281:
+#line 1968 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtFloat;
+    	(yyval.interm.type).setMatrix(2, 2);
+    }
+#line 6889 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 282:
+#line 1974 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtFloat;
+    	(yyval.interm.type).setMatrix(2, 3);
+    }
+#line 6900 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 283:
+#line 1980 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtFloat;
+    	(yyval.interm.type).setMatrix(2, 4);
+    }
+#line 6911 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 284:
+#line 1986 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtFloat;
+    	(yyval.interm.type).setMatrix(3, 2);
+    }
+#line 6922 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 285:
+#line 1992 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtFloat;
+    	(yyval.interm.type).setMatrix(3, 3);
+    }
+#line 6933 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 286:
+#line 1998 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtFloat;
+    	(yyval.interm.type).setMatrix(3, 4);
+    }
+#line 6944 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 287:
+#line 2004 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtFloat;
+    	(yyval.interm.type).setMatrix(4, 2);
+    }
+#line 6955 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 288:
+#line 2010 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtFloat;
+    	(yyval.interm.type).setMatrix(4, 3);
+    }
+#line 6966 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 289:
+#line 2016 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtFloat;
+    	(yyval.interm.type).setMatrix(4, 4);
+    }
+#line 6977 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 290:
+#line 2022 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtDouble;
+    	(yyval.interm.type).setMatrix(2, 2);
+    }
+#line 6988 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 291:
+#line 2028 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtDouble;
+    	(yyval.interm.type).setMatrix(3, 3);
+    }
+#line 6999 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 292:
+#line 2034 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtDouble;
+    	(yyval.interm.type).setMatrix(4, 4);
+    }
+#line 7010 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 293:
+#line 2040 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtDouble;
+    	(yyval.interm.type).setMatrix(2, 2);
+    }
+#line 7021 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 294:
+#line 2046 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtDouble;
+    	(yyval.interm.type).setMatrix(2, 3);
+    }
+#line 7032 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 295:
+#line 2052 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtDouble;
+    	(yyval.interm.type).setMatrix(2, 4);
+    }
+#line 7043 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 296:
+#line 2058 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtDouble;
+    	(yyval.interm.type).setMatrix(3, 2);
+    }
+#line 7054 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 297:
+#line 2064 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtDouble;
+    	(yyval.interm.type).setMatrix(3, 3);
+    }
+#line 7065 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 298:
+#line 2070 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtDouble;
+    	(yyval.interm.type).setMatrix(3, 4);
+    }
+#line 7076 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 299:
+#line 2076 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtDouble;
+    	(yyval.interm.type).setMatrix(4, 2);
+    }
+#line 7087 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 300:
+#line 2082 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtDouble;
+    	(yyval.interm.type).setMatrix(4, 3);
+    }
+#line 7098 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 301:
+#line 2088 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtDouble;
+    	(yyval.interm.type).setMatrix(4, 4);
+    }
+#line 7109 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 302:
+#line 2094 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.vulkanRemoved((yyvsp[0].lex).loc, "atomic counter types");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtAtomicUint;
     }
-#line 6283 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7119 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 253:
-#line 1843 "glslang.y" /* yacc.c:1646  */
+  case 303:
+#line 2099 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D);
     }
-#line 6293 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7129 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 254:
-#line 1848 "glslang.y" /* yacc.c:1646  */
+  case 304:
+#line 2104 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
     }
-#line 6303 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7139 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 255:
-#line 1853 "glslang.y" /* yacc.c:1646  */
+  case 305:
+#line 2109 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd3D);
     }
-#line 6313 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7149 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 256:
-#line 1858 "glslang.y" /* yacc.c:1646  */
+  case 306:
+#line 2114 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube);
     }
-#line 6323 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7159 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 257:
-#line 1863 "glslang.y" /* yacc.c:1646  */
+  case 307:
+#line 2119 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D, false, true);
     }
-#line 6333 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7169 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 258:
-#line 1868 "glslang.y" /* yacc.c:1646  */
+  case 308:
+#line 2124 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, true);
     }
-#line 6343 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7179 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 259:
-#line 1873 "glslang.y" /* yacc.c:1646  */
+  case 309:
+#line 2129 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, false, true);
     }
-#line 6353 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7189 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 260:
-#line 1878 "glslang.y" /* yacc.c:1646  */
+  case 310:
+#line 2134 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true);
     }
-#line 6363 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7199 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 261:
-#line 1883 "glslang.y" /* yacc.c:1646  */
+  case 311:
+#line 2139 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true);
     }
-#line 6373 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7209 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 262:
-#line 1888 "glslang.y" /* yacc.c:1646  */
+  case 312:
+#line 2144 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true, true);
     }
-#line 6383 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7219 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 263:
-#line 1893 "glslang.y" /* yacc.c:1646  */
+  case 313:
+#line 2149 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, true);
     }
-#line 6393 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7229 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 264:
-#line 1898 "glslang.y" /* yacc.c:1646  */
+  case 314:
+#line 2154 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true);
     }
-#line 6403 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7239 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 265:
-#line 1903 "glslang.y" /* yacc.c:1646  */
+  case 315:
+#line 2159 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true, true);
     }
-#line 6413 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7249 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 266:
-#line 1908 "glslang.y" /* yacc.c:1646  */
+  case 316:
+#line 2164 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -6422,11 +7258,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D);
 #endif
     }
-#line 6426 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7262 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 267:
-#line 1916 "glslang.y" /* yacc.c:1646  */
+  case 317:
+#line 2172 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -6435,11 +7271,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D);
 #endif
     }
-#line 6439 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7275 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 268:
-#line 1924 "glslang.y" /* yacc.c:1646  */
+  case 318:
+#line 2180 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -6448,11 +7284,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, Esd3D);
 #endif
     }
-#line 6452 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7288 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 269:
-#line 1932 "glslang.y" /* yacc.c:1646  */
+  case 319:
+#line 2188 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -6461,11 +7297,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube);
 #endif
     }
-#line 6465 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7301 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 270:
-#line 1940 "glslang.y" /* yacc.c:1646  */
+  case 320:
+#line 2196 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -6474,11 +7310,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, false, true);
 #endif
     }
-#line 6478 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7314 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 271:
-#line 1948 "glslang.y" /* yacc.c:1646  */
+  case 321:
+#line 2204 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -6487,11 +7323,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, true);
 #endif
     }
-#line 6491 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7327 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 272:
-#line 1956 "glslang.y" /* yacc.c:1646  */
+  case 322:
+#line 2212 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -6500,11 +7336,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, false, true);
 #endif
     }
-#line 6504 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7340 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 273:
-#line 1964 "glslang.y" /* yacc.c:1646  */
+  case 323:
+#line 2220 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -6513,11 +7349,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true);
 #endif
     }
-#line 6517 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7353 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 274:
-#line 1972 "glslang.y" /* yacc.c:1646  */
+  case 324:
+#line 2228 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -6526,11 +7362,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true);
 #endif
     }
-#line 6530 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7366 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 275:
-#line 1980 "glslang.y" /* yacc.c:1646  */
+  case 325:
+#line 2236 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -6539,11 +7375,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true, true);
 #endif
     }
-#line 6543 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7379 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 276:
-#line 1988 "glslang.y" /* yacc.c:1646  */
+  case 326:
+#line 2244 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -6552,11 +7388,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, true);
 #endif
     }
-#line 6556 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7392 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 277:
-#line 1996 "glslang.y" /* yacc.c:1646  */
+  case 327:
+#line 2252 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -6565,11 +7401,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true);
 #endif
     }
-#line 6569 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7405 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 278:
-#line 2004 "glslang.y" /* yacc.c:1646  */
+  case 328:
+#line 2260 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -6578,171 +7414,171 @@
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true, true);
 #endif
     }
-#line 6582 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7418 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 279:
-#line 2012 "glslang.y" /* yacc.c:1646  */
+  case 329:
+#line 2268 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd1D);
     }
-#line 6592 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7428 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 280:
-#line 2017 "glslang.y" /* yacc.c:1646  */
+  case 330:
+#line 2273 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D);
     }
-#line 6602 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7438 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 281:
-#line 2022 "glslang.y" /* yacc.c:1646  */
+  case 331:
+#line 2278 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd3D);
     }
-#line 6612 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7448 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 282:
-#line 2027 "glslang.y" /* yacc.c:1646  */
+  case 332:
+#line 2283 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdCube);
     }
-#line 6622 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7458 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 283:
-#line 2032 "glslang.y" /* yacc.c:1646  */
+  case 333:
+#line 2288 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd1D, true);
     }
-#line 6632 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7468 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 284:
-#line 2037 "glslang.y" /* yacc.c:1646  */
+  case 334:
+#line 2293 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D, true);
     }
-#line 6642 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7478 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 285:
-#line 2042 "glslang.y" /* yacc.c:1646  */
+  case 335:
+#line 2298 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdCube, true);
     }
-#line 6652 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7488 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 286:
-#line 2047 "glslang.y" /* yacc.c:1646  */
+  case 336:
+#line 2303 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd1D);
     }
-#line 6662 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7498 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 287:
-#line 2052 "glslang.y" /* yacc.c:1646  */
+  case 337:
+#line 2308 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D);
     }
-#line 6672 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7508 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 288:
-#line 2057 "glslang.y" /* yacc.c:1646  */
+  case 338:
+#line 2313 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd3D);
     }
-#line 6682 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7518 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 289:
-#line 2062 "glslang.y" /* yacc.c:1646  */
+  case 339:
+#line 2318 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdCube);
     }
-#line 6692 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7528 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 290:
-#line 2067 "glslang.y" /* yacc.c:1646  */
+  case 340:
+#line 2323 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd1D, true);
     }
-#line 6702 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7538 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 291:
-#line 2072 "glslang.y" /* yacc.c:1646  */
+  case 341:
+#line 2328 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D, true);
     }
-#line 6712 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7548 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 292:
-#line 2077 "glslang.y" /* yacc.c:1646  */
+  case 342:
+#line 2333 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdCube, true);
     }
-#line 6722 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7558 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 293:
-#line 2082 "glslang.y" /* yacc.c:1646  */
+  case 343:
+#line 2338 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdRect);
     }
-#line 6732 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7568 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 294:
-#line 2087 "glslang.y" /* yacc.c:1646  */
+  case 344:
+#line 2343 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdRect, false, true);
     }
-#line 6742 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7578 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 295:
-#line 2092 "glslang.y" /* yacc.c:1646  */
+  case 345:
+#line 2348 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -6751,11 +7587,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, EsdRect);
 #endif
     }
-#line 6755 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7591 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 296:
-#line 2100 "glslang.y" /* yacc.c:1646  */
+  case 346:
+#line 2356 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -6764,41 +7600,41 @@
         (yyval.interm.type).sampler.set(EbtFloat16, EsdRect, false, true);
 #endif
     }
-#line 6768 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7604 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 297:
-#line 2108 "glslang.y" /* yacc.c:1646  */
+  case 347:
+#line 2364 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdRect);
     }
-#line 6778 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7614 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 298:
-#line 2113 "glslang.y" /* yacc.c:1646  */
+  case 348:
+#line 2369 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdRect);
     }
-#line 6788 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7624 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 299:
-#line 2118 "glslang.y" /* yacc.c:1646  */
+  case 349:
+#line 2374 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdBuffer);
     }
-#line 6798 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7634 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 300:
-#line 2123 "glslang.y" /* yacc.c:1646  */
+  case 350:
+#line 2379 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -6807,41 +7643,41 @@
         (yyval.interm.type).sampler.set(EbtFloat16, EsdBuffer);
 #endif
     }
-#line 6811 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7647 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 301:
-#line 2131 "glslang.y" /* yacc.c:1646  */
+  case 351:
+#line 2387 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdBuffer);
     }
-#line 6821 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7657 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 302:
-#line 2136 "glslang.y" /* yacc.c:1646  */
+  case 352:
+#line 2392 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdBuffer);
     }
-#line 6831 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7667 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 303:
-#line 2141 "glslang.y" /* yacc.c:1646  */
+  case 353:
+#line 2397 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, false, true);
     }
-#line 6841 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7677 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 304:
-#line 2146 "glslang.y" /* yacc.c:1646  */
+  case 354:
+#line 2402 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -6850,41 +7686,41 @@
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, false, true);
 #endif
     }
-#line 6854 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7690 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 305:
-#line 2154 "glslang.y" /* yacc.c:1646  */
+  case 355:
+#line 2410 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D, false, false, true);
     }
-#line 6864 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7700 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 306:
-#line 2159 "glslang.y" /* yacc.c:1646  */
+  case 356:
+#line 2415 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D, false, false, true);
     }
-#line 6874 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7710 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 307:
-#line 2164 "glslang.y" /* yacc.c:1646  */
+  case 357:
+#line 2420 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, false, true);
     }
-#line 6884 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7720 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 308:
-#line 2169 "glslang.y" /* yacc.c:1646  */
+  case 358:
+#line 2425 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -6893,61 +7729,61 @@
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, false, true);
 #endif
     }
-#line 6897 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7733 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 309:
-#line 2177 "glslang.y" /* yacc.c:1646  */
+  case 359:
+#line 2433 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D, true, false, true);
     }
-#line 6907 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7743 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 310:
-#line 2182 "glslang.y" /* yacc.c:1646  */
+  case 360:
+#line 2438 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D, true, false, true);
     }
-#line 6917 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7753 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 311:
-#line 2187 "glslang.y" /* yacc.c:1646  */
+  case 361:
+#line 2443 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setPureSampler(false);
     }
-#line 6927 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7763 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 312:
-#line 2192 "glslang.y" /* yacc.c:1646  */
+  case 362:
+#line 2448 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setPureSampler(true);
     }
-#line 6937 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7773 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 313:
-#line 2197 "glslang.y" /* yacc.c:1646  */
+  case 363:
+#line 2453 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D);
     }
-#line 6947 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7783 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 314:
-#line 2202 "glslang.y" /* yacc.c:1646  */
+  case 364:
+#line 2458 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -6956,21 +7792,21 @@
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D);
 #endif
     }
-#line 6960 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7796 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 315:
-#line 2210 "glslang.y" /* yacc.c:1646  */
+  case 365:
+#line 2466 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D);
     }
-#line 6970 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7806 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 316:
-#line 2215 "glslang.y" /* yacc.c:1646  */
+  case 366:
+#line 2471 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -6979,21 +7815,21 @@
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D);
 #endif
     }
-#line 6983 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7819 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 317:
-#line 2223 "glslang.y" /* yacc.c:1646  */
+  case 367:
+#line 2479 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd3D);
     }
-#line 6993 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7829 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 318:
-#line 2228 "glslang.y" /* yacc.c:1646  */
+  case 368:
+#line 2484 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -7002,21 +7838,21 @@
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd3D);
 #endif
     }
-#line 7006 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7842 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 319:
-#line 2236 "glslang.y" /* yacc.c:1646  */
+  case 369:
+#line 2492 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube);
     }
-#line 7016 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7852 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 320:
-#line 2241 "glslang.y" /* yacc.c:1646  */
+  case 370:
+#line 2497 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -7025,21 +7861,21 @@
         (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube);
 #endif
     }
-#line 7029 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7865 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 321:
-#line 2249 "glslang.y" /* yacc.c:1646  */
+  case 371:
+#line 2505 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D, true);
     }
-#line 7039 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7875 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 322:
-#line 2254 "glslang.y" /* yacc.c:1646  */
+  case 372:
+#line 2510 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -7048,21 +7884,21 @@
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D, true);
 #endif
     }
-#line 7052 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7888 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 323:
-#line 2262 "glslang.y" /* yacc.c:1646  */
+  case 373:
+#line 2518 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true);
     }
-#line 7062 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7898 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 324:
-#line 2267 "glslang.y" /* yacc.c:1646  */
+  case 374:
+#line 2523 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -7071,21 +7907,21 @@
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true);
 #endif
     }
-#line 7075 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7911 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 325:
-#line 2275 "glslang.y" /* yacc.c:1646  */
+  case 375:
+#line 2531 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube, true);
     }
-#line 7085 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7921 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 326:
-#line 2280 "glslang.y" /* yacc.c:1646  */
+  case 376:
+#line 2536 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -7094,161 +7930,161 @@
         (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube, true);
 #endif
     }
-#line 7098 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7934 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 327:
-#line 2288 "glslang.y" /* yacc.c:1646  */
+  case 377:
+#line 2544 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D);
     }
-#line 7108 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7944 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 328:
-#line 2293 "glslang.y" /* yacc.c:1646  */
+  case 378:
+#line 2549 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D);
     }
-#line 7118 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7954 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 329:
-#line 2298 "glslang.y" /* yacc.c:1646  */
+  case 379:
+#line 2554 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd3D);
     }
-#line 7128 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7964 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 330:
-#line 2303 "glslang.y" /* yacc.c:1646  */
+  case 380:
+#line 2559 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube);
     }
-#line 7138 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7974 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 331:
-#line 2308 "glslang.y" /* yacc.c:1646  */
+  case 381:
+#line 2564 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D, true);
     }
-#line 7148 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7984 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 332:
-#line 2313 "glslang.y" /* yacc.c:1646  */
+  case 382:
+#line 2569 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true);
     }
-#line 7158 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 7994 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 333:
-#line 2318 "glslang.y" /* yacc.c:1646  */
+  case 383:
+#line 2574 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube, true);
     }
-#line 7168 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8004 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 334:
-#line 2323 "glslang.y" /* yacc.c:1646  */
+  case 384:
+#line 2579 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D);
     }
-#line 7178 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8014 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 335:
-#line 2328 "glslang.y" /* yacc.c:1646  */
+  case 385:
+#line 2584 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D);
     }
-#line 7188 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8024 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 336:
-#line 2333 "glslang.y" /* yacc.c:1646  */
+  case 386:
+#line 2589 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd3D);
     }
-#line 7198 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8034 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 337:
-#line 2338 "glslang.y" /* yacc.c:1646  */
+  case 387:
+#line 2594 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube);
     }
-#line 7208 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8044 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 338:
-#line 2343 "glslang.y" /* yacc.c:1646  */
+  case 388:
+#line 2599 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D, true);
     }
-#line 7218 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8054 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 339:
-#line 2348 "glslang.y" /* yacc.c:1646  */
+  case 389:
+#line 2604 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true);
     }
-#line 7228 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8064 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 340:
-#line 2353 "glslang.y" /* yacc.c:1646  */
+  case 390:
+#line 2609 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube, true);
     }
-#line 7238 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8074 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 341:
-#line 2358 "glslang.y" /* yacc.c:1646  */
+  case 391:
+#line 2614 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdRect);
     }
-#line 7248 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8084 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 342:
-#line 2363 "glslang.y" /* yacc.c:1646  */
+  case 392:
+#line 2619 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -7257,41 +8093,41 @@
         (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdRect);
 #endif
     }
-#line 7261 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8097 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 343:
-#line 2371 "glslang.y" /* yacc.c:1646  */
+  case 393:
+#line 2627 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdRect);
     }
-#line 7271 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8107 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 344:
-#line 2376 "glslang.y" /* yacc.c:1646  */
+  case 394:
+#line 2632 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdRect);
     }
-#line 7281 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8117 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 345:
-#line 2381 "glslang.y" /* yacc.c:1646  */
+  case 395:
+#line 2637 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdBuffer);
     }
-#line 7291 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8127 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 346:
-#line 2386 "glslang.y" /* yacc.c:1646  */
+  case 396:
+#line 2642 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -7300,41 +8136,41 @@
         (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdBuffer);
 #endif
     }
-#line 7304 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8140 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 347:
-#line 2394 "glslang.y" /* yacc.c:1646  */
+  case 397:
+#line 2650 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdBuffer);
     }
-#line 7314 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8150 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 348:
-#line 2399 "glslang.y" /* yacc.c:1646  */
+  case 398:
+#line 2655 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdBuffer);
     }
-#line 7324 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8160 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 349:
-#line 2404 "glslang.y" /* yacc.c:1646  */
+  case 399:
+#line 2660 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, false, false, true);
     }
-#line 7334 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8170 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 350:
-#line 2409 "glslang.y" /* yacc.c:1646  */
+  case 400:
+#line 2665 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -7343,41 +8179,41 @@
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, false, false, true);
 #endif
     }
-#line 7347 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8183 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 351:
-#line 2417 "glslang.y" /* yacc.c:1646  */
+  case 401:
+#line 2673 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, false, false, true);
     }
-#line 7357 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8193 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 352:
-#line 2422 "glslang.y" /* yacc.c:1646  */
+  case 402:
+#line 2678 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, false, false, true);
     }
-#line 7367 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8203 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 353:
-#line 2427 "glslang.y" /* yacc.c:1646  */
+  case 403:
+#line 2683 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true, false, true);
     }
-#line 7377 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8213 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 354:
-#line 2432 "glslang.y" /* yacc.c:1646  */
+  case 404:
+#line 2688 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -7386,41 +8222,41 @@
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true, false, true);
 #endif
     }
-#line 7390 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8226 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 355:
-#line 2440 "glslang.y" /* yacc.c:1646  */
+  case 405:
+#line 2696 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true, false, true);
     }
-#line 7400 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8236 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 356:
-#line 2445 "glslang.y" /* yacc.c:1646  */
+  case 406:
+#line 2701 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true, false, true);
     }
-#line 7410 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8246 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 357:
-#line 2450 "glslang.y" /* yacc.c:1646  */
+  case 407:
+#line 2706 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D);
     }
-#line 7420 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8256 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 358:
-#line 2455 "glslang.y" /* yacc.c:1646  */
+  case 408:
+#line 2711 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -7429,41 +8265,41 @@
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D);
 #endif
     }
-#line 7433 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8269 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 359:
-#line 2463 "glslang.y" /* yacc.c:1646  */
+  case 409:
+#line 2719 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd1D);
     }
-#line 7443 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8279 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 360:
-#line 2468 "glslang.y" /* yacc.c:1646  */
+  case 410:
+#line 2724 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd1D);
     }
-#line 7453 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8289 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 361:
-#line 2473 "glslang.y" /* yacc.c:1646  */
+  case 411:
+#line 2729 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D);
     }
-#line 7463 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8299 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 362:
-#line 2478 "glslang.y" /* yacc.c:1646  */
+  case 412:
+#line 2734 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -7472,41 +8308,41 @@
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D);
 #endif
     }
-#line 7476 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8312 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 363:
-#line 2486 "glslang.y" /* yacc.c:1646  */
+  case 413:
+#line 2742 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D);
     }
-#line 7486 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8322 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 364:
-#line 2491 "glslang.y" /* yacc.c:1646  */
+  case 414:
+#line 2747 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D);
     }
-#line 7496 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8332 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 365:
-#line 2496 "glslang.y" /* yacc.c:1646  */
+  case 415:
+#line 2752 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd3D);
     }
-#line 7506 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8342 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 366:
-#line 2501 "glslang.y" /* yacc.c:1646  */
+  case 416:
+#line 2757 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -7515,41 +8351,41 @@
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd3D);
 #endif
     }
-#line 7519 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8355 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 367:
-#line 2509 "glslang.y" /* yacc.c:1646  */
+  case 417:
+#line 2765 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd3D);
     }
-#line 7529 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8365 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 368:
-#line 2514 "glslang.y" /* yacc.c:1646  */
+  case 418:
+#line 2770 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd3D);
     }
-#line 7539 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8375 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 369:
-#line 2519 "glslang.y" /* yacc.c:1646  */
+  case 419:
+#line 2775 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdRect);
     }
-#line 7549 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8385 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 370:
-#line 2524 "glslang.y" /* yacc.c:1646  */
+  case 420:
+#line 2780 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -7558,41 +8394,41 @@
         (yyval.interm.type).sampler.setImage(EbtFloat16, EsdRect);
 #endif
     }
-#line 7562 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8398 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 371:
-#line 2532 "glslang.y" /* yacc.c:1646  */
+  case 421:
+#line 2788 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdRect);
     }
-#line 7572 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8408 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 372:
-#line 2537 "glslang.y" /* yacc.c:1646  */
+  case 422:
+#line 2793 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdRect);
     }
-#line 7582 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8418 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 373:
-#line 2542 "glslang.y" /* yacc.c:1646  */
+  case 423:
+#line 2798 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube);
     }
-#line 7592 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8428 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 374:
-#line 2547 "glslang.y" /* yacc.c:1646  */
+  case 424:
+#line 2803 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -7601,41 +8437,41 @@
         (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube);
 #endif
     }
-#line 7605 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8441 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 375:
-#line 2555 "glslang.y" /* yacc.c:1646  */
+  case 425:
+#line 2811 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdCube);
     }
-#line 7615 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8451 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 376:
-#line 2560 "glslang.y" /* yacc.c:1646  */
+  case 426:
+#line 2816 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdCube);
     }
-#line 7625 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8461 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 377:
-#line 2565 "glslang.y" /* yacc.c:1646  */
+  case 427:
+#line 2821 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdBuffer);
     }
-#line 7635 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8471 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 378:
-#line 2570 "glslang.y" /* yacc.c:1646  */
+  case 428:
+#line 2826 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -7644,41 +8480,41 @@
         (yyval.interm.type).sampler.setImage(EbtFloat16, EsdBuffer);
 #endif
     }
-#line 7648 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8484 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 379:
-#line 2578 "glslang.y" /* yacc.c:1646  */
+  case 429:
+#line 2834 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdBuffer);
     }
-#line 7658 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8494 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 380:
-#line 2583 "glslang.y" /* yacc.c:1646  */
+  case 430:
+#line 2839 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdBuffer);
     }
-#line 7668 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8504 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 381:
-#line 2588 "glslang.y" /* yacc.c:1646  */
+  case 431:
+#line 2844 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D, true);
     }
-#line 7678 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8514 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 382:
-#line 2593 "glslang.y" /* yacc.c:1646  */
+  case 432:
+#line 2849 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -7687,41 +8523,41 @@
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D, true);
 #endif
     }
-#line 7691 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8527 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 383:
-#line 2601 "glslang.y" /* yacc.c:1646  */
+  case 433:
+#line 2857 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd1D, true);
     }
-#line 7701 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8537 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 384:
-#line 2606 "glslang.y" /* yacc.c:1646  */
+  case 434:
+#line 2862 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd1D, true);
     }
-#line 7711 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8547 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 385:
-#line 2611 "glslang.y" /* yacc.c:1646  */
+  case 435:
+#line 2867 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true);
     }
-#line 7721 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8557 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 386:
-#line 2616 "glslang.y" /* yacc.c:1646  */
+  case 436:
+#line 2872 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -7730,41 +8566,41 @@
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true);
 #endif
     }
-#line 7734 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8570 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 387:
-#line 2624 "glslang.y" /* yacc.c:1646  */
+  case 437:
+#line 2880 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true);
     }
-#line 7744 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8580 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 388:
-#line 2629 "glslang.y" /* yacc.c:1646  */
+  case 438:
+#line 2885 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true);
     }
-#line 7754 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8590 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 389:
-#line 2634 "glslang.y" /* yacc.c:1646  */
+  case 439:
+#line 2890 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube, true);
     }
-#line 7764 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8600 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 390:
-#line 2639 "glslang.y" /* yacc.c:1646  */
+  case 440:
+#line 2895 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -7773,41 +8609,41 @@
         (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube, true);
 #endif
     }
-#line 7777 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8613 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 391:
-#line 2647 "glslang.y" /* yacc.c:1646  */
+  case 441:
+#line 2903 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdCube, true);
     }
-#line 7787 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8623 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 392:
-#line 2652 "glslang.y" /* yacc.c:1646  */
+  case 442:
+#line 2908 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdCube, true);
     }
-#line 7797 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8633 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 393:
-#line 2657 "glslang.y" /* yacc.c:1646  */
+  case 443:
+#line 2913 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, false, false, true);
     }
-#line 7807 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8643 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 394:
-#line 2662 "glslang.y" /* yacc.c:1646  */
+  case 444:
+#line 2918 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -7816,41 +8652,41 @@
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, false, false, true);
 #endif
     }
-#line 7820 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8656 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 395:
-#line 2670 "glslang.y" /* yacc.c:1646  */
+  case 445:
+#line 2926 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, false, false, true);
     }
-#line 7830 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8666 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 396:
-#line 2675 "glslang.y" /* yacc.c:1646  */
+  case 446:
+#line 2931 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, false, false, true);
     }
-#line 7840 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8676 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 397:
-#line 2680 "glslang.y" /* yacc.c:1646  */
+  case 447:
+#line 2936 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true, false, true);
     }
-#line 7850 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8686 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 398:
-#line 2685 "glslang.y" /* yacc.c:1646  */
+  case 448:
+#line 2941 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -7859,64 +8695,64 @@
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true, false, true);
 #endif
     }
-#line 7863 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8699 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 399:
-#line 2693 "glslang.y" /* yacc.c:1646  */
+  case 449:
+#line 2949 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true, false, true);
     }
-#line 7873 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8709 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 400:
-#line 2698 "glslang.y" /* yacc.c:1646  */
+  case 450:
+#line 2954 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true, false, true);
     }
-#line 7883 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8719 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 401:
-#line 2703 "glslang.y" /* yacc.c:1646  */
+  case 451:
+#line 2959 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {  // GL_OES_EGL_image_external
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
         (yyval.interm.type).sampler.external = true;
     }
-#line 7894 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8730 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 402:
-#line 2709 "glslang.y" /* yacc.c:1646  */
+  case 452:
+#line 2965 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat);
     }
-#line 7905 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8741 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 403:
-#line 2715 "glslang.y" /* yacc.c:1646  */
+  case 453:
+#line 2971 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat, true);
     }
-#line 7916 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8752 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 404:
-#line 2721 "glslang.y" /* yacc.c:1646  */
+  case 454:
+#line 2977 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
@@ -7926,11 +8762,11 @@
         (yyval.interm.type).sampler.setSubpass(EbtFloat16);
 #endif
     }
-#line 7930 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8766 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 405:
-#line 2730 "glslang.y" /* yacc.c:1646  */
+  case 455:
+#line 2986 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
@@ -7940,65 +8776,65 @@
         (yyval.interm.type).sampler.setSubpass(EbtFloat16, true);
 #endif
     }
-#line 7944 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8780 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 406:
-#line 2739 "glslang.y" /* yacc.c:1646  */
+  case 456:
+#line 2995 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtInt);
     }
-#line 7955 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8791 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 407:
-#line 2745 "glslang.y" /* yacc.c:1646  */
+  case 457:
+#line 3001 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtInt, true);
     }
-#line 7966 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8802 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 408:
-#line 2751 "glslang.y" /* yacc.c:1646  */
+  case 458:
+#line 3007 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtUint);
     }
-#line 7977 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8813 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 409:
-#line 2757 "glslang.y" /* yacc.c:1646  */
+  case 459:
+#line 3013 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtUint, true);
     }
-#line 7988 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8824 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 410:
-#line 2763 "glslang.y" /* yacc.c:1646  */
+  case 460:
+#line 3019 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
         (yyval.interm.type).qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         parseContext.structTypeCheck((yyval.interm.type).loc, (yyval.interm.type));
     }
-#line 7998 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8834 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 411:
-#line 2768 "glslang.y" /* yacc.c:1646  */
+  case 461:
+#line 3024 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         //
         // This is for user defined type names.  The lexical phase looked up the
@@ -8012,47 +8848,47 @@
         } else
             parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), "");
     }
-#line 8016 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8852 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 412:
-#line 2784 "glslang.y" /* yacc.c:1646  */
+  case 462:
+#line 3040 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "highp precision qualifier");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqHigh);
     }
-#line 8026 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8862 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 413:
-#line 2789 "glslang.y" /* yacc.c:1646  */
+  case 463:
+#line 3045 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "mediump precision qualifier");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqMedium);
     }
-#line 8036 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8872 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 414:
-#line 2794 "glslang.y" /* yacc.c:1646  */
+  case 464:
+#line 3050 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "lowp precision qualifier");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqLow);
     }
-#line 8046 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8882 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 415:
-#line 2802 "glslang.y" /* yacc.c:1646  */
+  case 465:
+#line 3058 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); }
-#line 8052 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8888 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 416:
-#line 2802 "glslang.y" /* yacc.c:1646  */
+  case 466:
+#line 3058 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         TType* structure = new TType((yyvsp[-1].interm.typeList), *(yyvsp[-4].lex).string);
         parseContext.structArrayCheck((yyvsp[-4].lex).loc, *structure);
@@ -8064,17 +8900,17 @@
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 8068 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8904 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 417:
-#line 2813 "glslang.y" /* yacc.c:1646  */
+  case 467:
+#line 3069 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); }
-#line 8074 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8910 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 418:
-#line 2813 "glslang.y" /* yacc.c:1646  */
+  case 468:
+#line 3069 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         TType* structure = new TType((yyvsp[-1].interm.typeList), TString(""));
         (yyval.interm.type).init((yyvsp[-4].lex).loc);
@@ -8082,19 +8918,19 @@
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 8086 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8922 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 419:
-#line 2823 "glslang.y" /* yacc.c:1646  */
+  case 469:
+#line 3079 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList) = (yyvsp[0].interm.typeList);
     }
-#line 8094 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8930 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 420:
-#line 2826 "glslang.y" /* yacc.c:1646  */
+  case 470:
+#line 3082 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
         for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) {
@@ -8105,11 +8941,11 @@
             (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]);
         }
     }
-#line 8109 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8945 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 421:
-#line 2839 "glslang.y" /* yacc.c:1646  */
+  case 471:
+#line 3095 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -8128,11 +8964,11 @@
             (*(yyval.interm.typeList))[i].type->mergeType((yyvsp[-2].interm.type));
         }
     }
-#line 8132 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8968 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 422:
-#line 2857 "glslang.y" /* yacc.c:1646  */
+  case 472:
+#line 3113 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalQualifierFixCheck((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier);
         if ((yyvsp[-2].interm.type).arraySizes) {
@@ -8154,38 +8990,38 @@
             (*(yyval.interm.typeList))[i].type->mergeType((yyvsp[-2].interm.type));
         }
     }
-#line 8158 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 8994 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 423:
-#line 2881 "glslang.y" /* yacc.c:1646  */
+  case 473:
+#line 3137 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList) = new TTypeList;
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 8167 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9003 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 424:
-#line 2885 "glslang.y" /* yacc.c:1646  */
+  case 474:
+#line 3141 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 8175 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9011 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 425:
-#line 2891 "glslang.y" /* yacc.c:1646  */
+  case 475:
+#line 3147 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeLine).type = new TType(EbtVoid);
         (yyval.interm.typeLine).loc = (yyvsp[0].lex).loc;
         (yyval.interm.typeLine).type->setFieldName(*(yyvsp[0].lex).string);
     }
-#line 8185 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9021 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 426:
-#line 2896 "glslang.y" /* yacc.c:1646  */
+  case 476:
+#line 3152 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayDimCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes, 0);
 
@@ -8194,219 +9030,219 @@
         (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string);
         (yyval.interm.typeLine).type->newArraySizes(*(yyvsp[0].interm).arraySizes);
     }
-#line 8198 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9034 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 427:
-#line 2907 "glslang.y" /* yacc.c:1646  */
+  case 477:
+#line 3163 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 8206 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9042 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 428:
-#line 2910 "glslang.y" /* yacc.c:1646  */
+  case 478:
+#line 3166 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         const char* initFeature = "{ } style initializers";
         parseContext.requireProfile((yyvsp[-2].lex).loc, ~EEsProfile, initFeature);
         parseContext.profileRequires((yyvsp[-2].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
         (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
     }
-#line 8217 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9053 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 429:
-#line 2916 "glslang.y" /* yacc.c:1646  */
+  case 479:
+#line 3172 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         const char* initFeature = "{ } style initializers";
         parseContext.requireProfile((yyvsp[-3].lex).loc, ~EEsProfile, initFeature);
         parseContext.profileRequires((yyvsp[-3].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
         (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 8228 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9064 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 430:
-#line 2925 "glslang.y" /* yacc.c:1646  */
+  case 480:
+#line 3181 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc());
     }
-#line 8236 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9072 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 431:
-#line 2928 "glslang.y" /* yacc.c:1646  */
+  case 481:
+#line 3184 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
     }
-#line 8244 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9080 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 432:
-#line 2934 "glslang.y" /* yacc.c:1646  */
+  case 482:
+#line 3190 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 8250 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9086 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 433:
-#line 2938 "glslang.y" /* yacc.c:1646  */
+  case 483:
+#line 3194 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 8256 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9092 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 434:
-#line 2939 "glslang.y" /* yacc.c:1646  */
+  case 484:
+#line 3195 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 8262 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9098 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 435:
-#line 2945 "glslang.y" /* yacc.c:1646  */
+  case 485:
+#line 3201 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 8268 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9104 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 436:
-#line 2946 "glslang.y" /* yacc.c:1646  */
+  case 486:
+#line 3202 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 8274 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9110 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 437:
-#line 2947 "glslang.y" /* yacc.c:1646  */
+  case 487:
+#line 3203 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 8280 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9116 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 438:
-#line 2948 "glslang.y" /* yacc.c:1646  */
+  case 488:
+#line 3204 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 8286 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9122 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 439:
-#line 2949 "glslang.y" /* yacc.c:1646  */
+  case 489:
+#line 3205 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 8292 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9128 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 440:
-#line 2950 "glslang.y" /* yacc.c:1646  */
+  case 490:
+#line 3206 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 8298 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9134 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 441:
-#line 2951 "glslang.y" /* yacc.c:1646  */
+  case 491:
+#line 3207 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 8304 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9140 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 442:
-#line 2955 "glslang.y" /* yacc.c:1646  */
+  case 492:
+#line 3211 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = 0; }
-#line 8310 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9146 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 443:
-#line 2956 "glslang.y" /* yacc.c:1646  */
+  case 493:
+#line 3212 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
     }
-#line 8319 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9155 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 444:
-#line 2960 "glslang.y" /* yacc.c:1646  */
+  case 494:
+#line 3216 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
     }
-#line 8328 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9164 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 445:
-#line 2964 "glslang.y" /* yacc.c:1646  */
+  case 495:
+#line 3220 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.intermNode) && (yyvsp[-2].interm.intermNode)->getAsAggregate())
             (yyvsp[-2].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
         (yyval.interm.intermNode) = (yyvsp[-2].interm.intermNode);
     }
-#line 8338 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9174 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 446:
-#line 2972 "glslang.y" /* yacc.c:1646  */
+  case 496:
+#line 3228 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 8344 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9180 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 447:
-#line 2973 "glslang.y" /* yacc.c:1646  */
+  case 497:
+#line 3229 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 8350 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9186 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 448:
-#line 2977 "glslang.y" /* yacc.c:1646  */
+  case 498:
+#line 3233 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         ++parseContext.controlFlowNestingLevel;
     }
-#line 8358 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9194 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 449:
-#line 2980 "glslang.y" /* yacc.c:1646  */
+  case 499:
+#line 3236 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 8367 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9203 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 450:
-#line 2984 "glslang.y" /* yacc.c:1646  */
+  case 500:
+#line 3240 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 8377 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9213 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 451:
-#line 2989 "glslang.y" /* yacc.c:1646  */
+  case 501:
+#line 3245 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 8388 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9224 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 452:
-#line 2998 "glslang.y" /* yacc.c:1646  */
+  case 502:
+#line 3254 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
     }
-#line 8396 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9232 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 453:
-#line 3001 "glslang.y" /* yacc.c:1646  */
+  case 503:
+#line 3257 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-1].interm.intermNode) && (yyvsp[-1].interm.intermNode)->getAsAggregate())
             (yyvsp[-1].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
         (yyval.interm.intermNode) = (yyvsp[-1].interm.intermNode);
     }
-#line 8406 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9242 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 454:
-#line 3009 "glslang.y" /* yacc.c:1646  */
+  case 504:
+#line 3265 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode));
         if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
@@ -8415,11 +9251,11 @@
             (yyval.interm.intermNode) = 0;  // start a fresh subsequence for what's after this case
         }
     }
-#line 8419 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9255 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 455:
-#line 3017 "glslang.y" /* yacc.c:1646  */
+  case 505:
+#line 3273 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
                                             (yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) {
@@ -8428,76 +9264,76 @@
         } else
             (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
     }
-#line 8432 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9268 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 456:
-#line 3028 "glslang.y" /* yacc.c:1646  */
+  case 506:
+#line 3284 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = 0; }
-#line 8438 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9274 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 457:
-#line 3029 "glslang.y" /* yacc.c:1646  */
+  case 507:
+#line 3285 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[-1].interm.intermTypedNode)); }
-#line 8444 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9280 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 458:
-#line 3033 "glslang.y" /* yacc.c:1646  */
+  case 508:
+#line 3289 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 8452 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9288 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 459:
-#line 3036 "glslang.y" /* yacc.c:1646  */
+  case 509:
+#line 3292 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.handleSelectionAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 8461 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9297 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 460:
-#line 3042 "glslang.y" /* yacc.c:1646  */
+  case 510:
+#line 3298 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-2].interm.intermTypedNode));
         (yyval.interm.intermNode) = parseContext.intermediate.addSelection((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.nodePair), (yyvsp[-4].lex).loc);
     }
-#line 8470 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9306 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 461:
-#line 3049 "glslang.y" /* yacc.c:1646  */
+  case 511:
+#line 3305 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode);
     }
-#line 8479 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9315 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 462:
-#line 3053 "glslang.y" /* yacc.c:1646  */
+  case 512:
+#line 3309 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 8488 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9324 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 463:
-#line 3061 "glslang.y" /* yacc.c:1646  */
+  case 513:
+#line 3317 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         parseContext.boolCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode));
     }
-#line 8497 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9333 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 464:
-#line 3065 "glslang.y" /* yacc.c:1646  */
+  case 514:
+#line 3321 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type));
 
@@ -8508,28 +9344,28 @@
         else
             (yyval.interm.intermTypedNode) = 0;
     }
-#line 8512 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9348 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 465:
-#line 3078 "glslang.y" /* yacc.c:1646  */
+  case 515:
+#line 3334 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 8520 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9356 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 466:
-#line 3081 "glslang.y" /* yacc.c:1646  */
+  case 516:
+#line 3337 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.handleSwitchAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 8529 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9365 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 467:
-#line 3087 "glslang.y" /* yacc.c:1646  */
+  case 517:
+#line 3343 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // start new switch sequence on the switch stack
         ++parseContext.controlFlowNestingLevel;
@@ -8538,11 +9374,11 @@
         parseContext.switchLevel.push_back(parseContext.statementNestingLevel);
         parseContext.symbolTable.push();
     }
-#line 8542 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9378 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 468:
-#line 3095 "glslang.y" /* yacc.c:1646  */
+  case 518:
+#line 3351 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.addSwitch((yyvsp[-7].lex).loc, (yyvsp[-5].interm.intermTypedNode), (yyvsp[-1].interm.intermNode) ? (yyvsp[-1].interm.intermNode)->getAsAggregate() : 0);
         delete parseContext.switchSequenceStack.back();
@@ -8552,27 +9388,27 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 8556 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9392 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 469:
-#line 3107 "glslang.y" /* yacc.c:1646  */
+  case 519:
+#line 3363 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
     }
-#line 8564 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9400 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 470:
-#line 3110 "glslang.y" /* yacc.c:1646  */
+  case 520:
+#line 3366 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 8572 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9408 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 471:
-#line 3116 "glslang.y" /* yacc.c:1646  */
+  case 521:
+#line 3372 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
@@ -8585,11 +9421,11 @@
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc);
         }
     }
-#line 8589 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9425 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 472:
-#line 3128 "glslang.y" /* yacc.c:1646  */
+  case 522:
+#line 3384 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
@@ -8599,28 +9435,28 @@
         else
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc);
     }
-#line 8603 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9439 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 473:
-#line 3140 "glslang.y" /* yacc.c:1646  */
+  case 523:
+#line 3396 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 8611 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9447 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 474:
-#line 3143 "glslang.y" /* yacc.c:1646  */
+  case 524:
+#line 3399 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 8620 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9456 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 475:
-#line 3149 "glslang.y" /* yacc.c:1646  */
+  case 525:
+#line 3405 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", "");
@@ -8629,11 +9465,11 @@
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 8633 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9469 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 476:
-#line 3157 "glslang.y" /* yacc.c:1646  */
+  case 526:
+#line 3413 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         (yyval.interm.intermNode) = parseContext.intermediate.addLoop((yyvsp[0].interm.intermNode), (yyvsp[-2].interm.intermTypedNode), 0, true, (yyvsp[-5].lex).loc);
@@ -8641,21 +9477,21 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 8645 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9481 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 477:
-#line 3164 "glslang.y" /* yacc.c:1646  */
+  case 527:
+#line 3420 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 8655 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9491 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 478:
-#line 3169 "glslang.y" /* yacc.c:1646  */
+  case 528:
+#line 3425 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", "");
@@ -8667,22 +9503,22 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 8671 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9507 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 479:
-#line 3180 "glslang.y" /* yacc.c:1646  */
+  case 529:
+#line 3436 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.push();
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 8682 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9518 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 480:
-#line 3186 "glslang.y" /* yacc.c:1646  */
+  case 530:
+#line 3442 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc);
@@ -8695,81 +9531,81 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 8699 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9535 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 481:
-#line 3201 "glslang.y" /* yacc.c:1646  */
+  case 531:
+#line 3457 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 8707 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9543 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 482:
-#line 3204 "glslang.y" /* yacc.c:1646  */
+  case 532:
+#line 3460 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 8715 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9551 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 483:
-#line 3210 "glslang.y" /* yacc.c:1646  */
+  case 533:
+#line 3466 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 8723 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9559 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 484:
-#line 3213 "glslang.y" /* yacc.c:1646  */
+  case 534:
+#line 3469 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = 0;
     }
-#line 8731 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9567 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 485:
-#line 3219 "glslang.y" /* yacc.c:1646  */
+  case 535:
+#line 3475 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 8740 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9576 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 486:
-#line 3223 "glslang.y" /* yacc.c:1646  */
+  case 536:
+#line 3479 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode);
     }
-#line 8749 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9585 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 487:
-#line 3230 "glslang.y" /* yacc.c:1646  */
+  case 537:
+#line 3486 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if (parseContext.loopNestingLevel <= 0)
             parseContext.error((yyvsp[-1].lex).loc, "continue statement only allowed in loops", "", "");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpContinue, (yyvsp[-1].lex).loc);
     }
-#line 8759 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9595 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 488:
-#line 3235 "glslang.y" /* yacc.c:1646  */
+  case 538:
+#line 3491 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if (parseContext.loopNestingLevel + parseContext.switchSequenceStack.size() <= 0)
             parseContext.error((yyvsp[-1].lex).loc, "break statement only allowed in switch and loops", "", "");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpBreak, (yyvsp[-1].lex).loc);
     }
-#line 8769 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9605 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 489:
-#line 3240 "glslang.y" /* yacc.c:1646  */
+  case 539:
+#line 3496 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc);
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid)
@@ -8777,83 +9613,83 @@
         if (parseContext.inMain)
             parseContext.postEntryPointReturn = true;
     }
-#line 8781 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9617 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 490:
-#line 3247 "glslang.y" /* yacc.c:1646  */
+  case 540:
+#line 3503 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 8789 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9625 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 491:
-#line 3250 "glslang.y" /* yacc.c:1646  */
+  case 541:
+#line 3506 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc);
     }
-#line 8798 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9634 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 492:
-#line 3259 "glslang.y" /* yacc.c:1646  */
+  case 542:
+#line 3515 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
         parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
     }
-#line 8807 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9643 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 493:
-#line 3263 "glslang.y" /* yacc.c:1646  */
+  case 543:
+#line 3519 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[0].interm.intermNode) != nullptr) {
             (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
             parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
         }
     }
-#line 8818 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9654 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 494:
-#line 3272 "glslang.y" /* yacc.c:1646  */
+  case 544:
+#line 3528 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 8826 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9662 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 495:
-#line 3275 "glslang.y" /* yacc.c:1646  */
+  case 545:
+#line 3531 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 8834 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9670 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 496:
-#line 3278 "glslang.y" /* yacc.c:1646  */
+  case 546:
+#line 3534 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireProfile((yyvsp[0].lex).loc, ~EEsProfile, "extraneous semicolon");
         parseContext.profileRequires((yyvsp[0].lex).loc, ~EEsProfile, 460, nullptr, "extraneous semicolon");
         (yyval.interm.intermNode) = nullptr;
     }
-#line 8844 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9680 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 497:
-#line 3286 "glslang.y" /* yacc.c:1646  */
+  case 547:
+#line 3542 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyvsp[0].interm).function = parseContext.handleFunctionDeclarator((yyvsp[0].interm).loc, *(yyvsp[0].interm).function, false /* not prototype */);
         (yyvsp[0].interm).intermNode = parseContext.handleFunctionDefinition((yyvsp[0].interm).loc, *(yyvsp[0].interm).function);
     }
-#line 8853 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9689 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 498:
-#line 3290 "glslang.y" /* yacc.c:1646  */
+  case 548:
+#line 3546 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         //   May be best done as post process phase on intermediate code
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue)
@@ -8869,52 +9705,52 @@
         (yyval.interm.intermNode)->getAsAggregate()->setDebug(parseContext.contextPragma.debug);
         (yyval.interm.intermNode)->getAsAggregate()->setPragmaTable(parseContext.contextPragma.pragmaTable);
     }
-#line 8873 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9709 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 499:
-#line 3308 "glslang.y" /* yacc.c:1646  */
+  case 549:
+#line 3564 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.attributes) = (yyvsp[-2].interm.attributes);
         parseContext.requireExtensions((yyvsp[-4].lex).loc, 1, &E_GL_EXT_control_flow_attributes, "attribute");
     }
-#line 8882 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9718 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 500:
-#line 3314 "glslang.y" /* yacc.c:1646  */
+  case 550:
+#line 3570 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.attributes) = (yyvsp[0].interm.attributes);
     }
-#line 8890 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9726 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 501:
-#line 3317 "glslang.y" /* yacc.c:1646  */
+  case 551:
+#line 3573 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes));
     }
-#line 8898 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9734 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 502:
-#line 3322 "glslang.y" /* yacc.c:1646  */
+  case 552:
+#line 3578 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string);
     }
-#line 8906 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9742 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 503:
-#line 3325 "glslang.y" /* yacc.c:1646  */
+  case 553:
+#line 3581 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 8914 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9750 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
 
-#line 8918 "glslang_tab.cpp" /* yacc.c:1646  */
+#line 9754 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -9142,5 +9978,5 @@
 #endif
   return yyresult;
 }
-#line 3329 "glslang.y" /* yacc.c:1906  */
+#line 3585 "MachineIndependent/glslang.y" /* yacc.c:1906  */
 
diff --git a/glslang/MachineIndependent/glslang_tab.cpp.h b/glslang/MachineIndependent/glslang_tab.cpp.h
index ac6db78..6b07aed 100644
--- a/glslang/MachineIndependent/glslang_tab.cpp.h
+++ b/glslang/MachineIndependent/glslang_tab.cpp.h
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.0.4.  */
+/* A Bison parser, made by GNU Bison 3.0.  */
 
 /* Bison interface for Yacc-like parsers in C
 
-   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
+   Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -30,8 +30,8 @@
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
-#ifndef YY_YY_GLSLANG_TAB_CPP_H_INCLUDED
-# define YY_YY_GLSLANG_TAB_CPP_H_INCLUDED
+#ifndef YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED
+# define YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED
 /* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 1
@@ -47,350 +47,400 @@
   {
     ATTRIBUTE = 258,
     VARYING = 259,
-    CONST = 260,
-    BOOL = 261,
-    FLOAT = 262,
+    FLOAT16_T = 260,
+    FLOAT = 261,
+    FLOAT32_T = 262,
     DOUBLE = 263,
-    INT = 264,
-    UINT = 265,
-    INT64_T = 266,
-    UINT64_T = 267,
-    INT16_T = 268,
-    UINT16_T = 269,
-    FLOAT16_T = 270,
-    BREAK = 271,
-    CONTINUE = 272,
-    DO = 273,
-    ELSE = 274,
-    FOR = 275,
-    IF = 276,
-    DISCARD = 277,
-    RETURN = 278,
-    SWITCH = 279,
-    CASE = 280,
-    DEFAULT = 281,
-    SUBROUTINE = 282,
-    BVEC2 = 283,
-    BVEC3 = 284,
-    BVEC4 = 285,
-    IVEC2 = 286,
-    IVEC3 = 287,
-    IVEC4 = 288,
-    I64VEC2 = 289,
-    I64VEC3 = 290,
-    I64VEC4 = 291,
-    UVEC2 = 292,
-    UVEC3 = 293,
-    UVEC4 = 294,
-    U64VEC2 = 295,
-    U64VEC3 = 296,
-    U64VEC4 = 297,
-    VEC2 = 298,
-    VEC3 = 299,
-    VEC4 = 300,
-    MAT2 = 301,
-    MAT3 = 302,
-    MAT4 = 303,
-    CENTROID = 304,
-    IN = 305,
-    OUT = 306,
-    INOUT = 307,
-    UNIFORM = 308,
-    PATCH = 309,
-    SAMPLE = 310,
-    BUFFER = 311,
-    SHARED = 312,
-    COHERENT = 313,
-    VOLATILE = 314,
-    RESTRICT = 315,
-    READONLY = 316,
-    WRITEONLY = 317,
-    DVEC2 = 318,
-    DVEC3 = 319,
-    DVEC4 = 320,
-    DMAT2 = 321,
-    DMAT3 = 322,
-    DMAT4 = 323,
-    F16VEC2 = 324,
-    F16VEC3 = 325,
-    F16VEC4 = 326,
-    F16MAT2 = 327,
-    F16MAT3 = 328,
-    F16MAT4 = 329,
-    I16VEC2 = 330,
-    I16VEC3 = 331,
-    I16VEC4 = 332,
-    U16VEC2 = 333,
-    U16VEC3 = 334,
-    U16VEC4 = 335,
-    NOPERSPECTIVE = 336,
-    FLAT = 337,
-    SMOOTH = 338,
-    LAYOUT = 339,
-    __EXPLICITINTERPAMD = 340,
-    MAT2X2 = 341,
-    MAT2X3 = 342,
-    MAT2X4 = 343,
-    MAT3X2 = 344,
-    MAT3X3 = 345,
-    MAT3X4 = 346,
-    MAT4X2 = 347,
-    MAT4X3 = 348,
-    MAT4X4 = 349,
-    DMAT2X2 = 350,
-    DMAT2X3 = 351,
-    DMAT2X4 = 352,
-    DMAT3X2 = 353,
-    DMAT3X3 = 354,
-    DMAT3X4 = 355,
-    DMAT4X2 = 356,
-    DMAT4X3 = 357,
-    DMAT4X4 = 358,
-    F16MAT2X2 = 359,
-    F16MAT2X3 = 360,
-    F16MAT2X4 = 361,
-    F16MAT3X2 = 362,
-    F16MAT3X3 = 363,
-    F16MAT3X4 = 364,
-    F16MAT4X2 = 365,
-    F16MAT4X3 = 366,
-    F16MAT4X4 = 367,
-    ATOMIC_UINT = 368,
-    SAMPLER1D = 369,
-    SAMPLER2D = 370,
-    SAMPLER3D = 371,
-    SAMPLERCUBE = 372,
-    SAMPLER1DSHADOW = 373,
-    SAMPLER2DSHADOW = 374,
-    SAMPLERCUBESHADOW = 375,
-    SAMPLER1DARRAY = 376,
-    SAMPLER2DARRAY = 377,
-    SAMPLER1DARRAYSHADOW = 378,
-    SAMPLER2DARRAYSHADOW = 379,
-    ISAMPLER1D = 380,
-    ISAMPLER2D = 381,
-    ISAMPLER3D = 382,
-    ISAMPLERCUBE = 383,
-    ISAMPLER1DARRAY = 384,
-    ISAMPLER2DARRAY = 385,
-    USAMPLER1D = 386,
-    USAMPLER2D = 387,
-    USAMPLER3D = 388,
-    USAMPLERCUBE = 389,
-    USAMPLER1DARRAY = 390,
-    USAMPLER2DARRAY = 391,
-    SAMPLER2DRECT = 392,
-    SAMPLER2DRECTSHADOW = 393,
-    ISAMPLER2DRECT = 394,
-    USAMPLER2DRECT = 395,
-    SAMPLERBUFFER = 396,
-    ISAMPLERBUFFER = 397,
-    USAMPLERBUFFER = 398,
-    SAMPLERCUBEARRAY = 399,
-    SAMPLERCUBEARRAYSHADOW = 400,
-    ISAMPLERCUBEARRAY = 401,
-    USAMPLERCUBEARRAY = 402,
-    SAMPLER2DMS = 403,
-    ISAMPLER2DMS = 404,
-    USAMPLER2DMS = 405,
-    SAMPLER2DMSARRAY = 406,
-    ISAMPLER2DMSARRAY = 407,
-    USAMPLER2DMSARRAY = 408,
-    SAMPLEREXTERNALOES = 409,
-    F16SAMPLER1D = 410,
-    F16SAMPLER2D = 411,
-    F16SAMPLER3D = 412,
-    F16SAMPLER2DRECT = 413,
-    F16SAMPLERCUBE = 414,
-    F16SAMPLER1DARRAY = 415,
-    F16SAMPLER2DARRAY = 416,
-    F16SAMPLERCUBEARRAY = 417,
-    F16SAMPLERBUFFER = 418,
-    F16SAMPLER2DMS = 419,
-    F16SAMPLER2DMSARRAY = 420,
-    F16SAMPLER1DSHADOW = 421,
-    F16SAMPLER2DSHADOW = 422,
-    F16SAMPLER1DARRAYSHADOW = 423,
-    F16SAMPLER2DARRAYSHADOW = 424,
-    F16SAMPLER2DRECTSHADOW = 425,
-    F16SAMPLERCUBESHADOW = 426,
-    F16SAMPLERCUBEARRAYSHADOW = 427,
-    SAMPLER = 428,
-    SAMPLERSHADOW = 429,
-    TEXTURE1D = 430,
-    TEXTURE2D = 431,
-    TEXTURE3D = 432,
-    TEXTURECUBE = 433,
-    TEXTURE1DARRAY = 434,
-    TEXTURE2DARRAY = 435,
-    ITEXTURE1D = 436,
-    ITEXTURE2D = 437,
-    ITEXTURE3D = 438,
-    ITEXTURECUBE = 439,
-    ITEXTURE1DARRAY = 440,
-    ITEXTURE2DARRAY = 441,
-    UTEXTURE1D = 442,
-    UTEXTURE2D = 443,
-    UTEXTURE3D = 444,
-    UTEXTURECUBE = 445,
-    UTEXTURE1DARRAY = 446,
-    UTEXTURE2DARRAY = 447,
-    TEXTURE2DRECT = 448,
-    ITEXTURE2DRECT = 449,
-    UTEXTURE2DRECT = 450,
-    TEXTUREBUFFER = 451,
-    ITEXTUREBUFFER = 452,
-    UTEXTUREBUFFER = 453,
-    TEXTURECUBEARRAY = 454,
-    ITEXTURECUBEARRAY = 455,
-    UTEXTURECUBEARRAY = 456,
-    TEXTURE2DMS = 457,
-    ITEXTURE2DMS = 458,
-    UTEXTURE2DMS = 459,
-    TEXTURE2DMSARRAY = 460,
-    ITEXTURE2DMSARRAY = 461,
-    UTEXTURE2DMSARRAY = 462,
-    F16TEXTURE1D = 463,
-    F16TEXTURE2D = 464,
-    F16TEXTURE3D = 465,
-    F16TEXTURE2DRECT = 466,
-    F16TEXTURECUBE = 467,
-    F16TEXTURE1DARRAY = 468,
-    F16TEXTURE2DARRAY = 469,
-    F16TEXTURECUBEARRAY = 470,
-    F16TEXTUREBUFFER = 471,
-    F16TEXTURE2DMS = 472,
-    F16TEXTURE2DMSARRAY = 473,
-    SUBPASSINPUT = 474,
-    SUBPASSINPUTMS = 475,
-    ISUBPASSINPUT = 476,
-    ISUBPASSINPUTMS = 477,
-    USUBPASSINPUT = 478,
-    USUBPASSINPUTMS = 479,
-    F16SUBPASSINPUT = 480,
-    F16SUBPASSINPUTMS = 481,
-    IMAGE1D = 482,
-    IIMAGE1D = 483,
-    UIMAGE1D = 484,
-    IMAGE2D = 485,
-    IIMAGE2D = 486,
-    UIMAGE2D = 487,
-    IMAGE3D = 488,
-    IIMAGE3D = 489,
-    UIMAGE3D = 490,
-    IMAGE2DRECT = 491,
-    IIMAGE2DRECT = 492,
-    UIMAGE2DRECT = 493,
-    IMAGECUBE = 494,
-    IIMAGECUBE = 495,
-    UIMAGECUBE = 496,
-    IMAGEBUFFER = 497,
-    IIMAGEBUFFER = 498,
-    UIMAGEBUFFER = 499,
-    IMAGE1DARRAY = 500,
-    IIMAGE1DARRAY = 501,
-    UIMAGE1DARRAY = 502,
-    IMAGE2DARRAY = 503,
-    IIMAGE2DARRAY = 504,
-    UIMAGE2DARRAY = 505,
-    IMAGECUBEARRAY = 506,
-    IIMAGECUBEARRAY = 507,
-    UIMAGECUBEARRAY = 508,
-    IMAGE2DMS = 509,
-    IIMAGE2DMS = 510,
-    UIMAGE2DMS = 511,
-    IMAGE2DMSARRAY = 512,
-    IIMAGE2DMSARRAY = 513,
-    UIMAGE2DMSARRAY = 514,
-    F16IMAGE1D = 515,
-    F16IMAGE2D = 516,
-    F16IMAGE3D = 517,
-    F16IMAGE2DRECT = 518,
-    F16IMAGECUBE = 519,
-    F16IMAGE1DARRAY = 520,
-    F16IMAGE2DARRAY = 521,
-    F16IMAGECUBEARRAY = 522,
-    F16IMAGEBUFFER = 523,
-    F16IMAGE2DMS = 524,
-    F16IMAGE2DMSARRAY = 525,
-    STRUCT = 526,
-    VOID = 527,
-    WHILE = 528,
-    IDENTIFIER = 529,
-    TYPE_NAME = 530,
-    FLOATCONSTANT = 531,
-    DOUBLECONSTANT = 532,
-    INTCONSTANT = 533,
-    UINTCONSTANT = 534,
-    INT64CONSTANT = 535,
-    UINT64CONSTANT = 536,
-    INT16CONSTANT = 537,
-    UINT16CONSTANT = 538,
-    BOOLCONSTANT = 539,
-    FLOAT16CONSTANT = 540,
-    LEFT_OP = 541,
-    RIGHT_OP = 542,
-    INC_OP = 543,
-    DEC_OP = 544,
-    LE_OP = 545,
-    GE_OP = 546,
-    EQ_OP = 547,
-    NE_OP = 548,
-    AND_OP = 549,
-    OR_OP = 550,
-    XOR_OP = 551,
-    MUL_ASSIGN = 552,
-    DIV_ASSIGN = 553,
-    ADD_ASSIGN = 554,
-    MOD_ASSIGN = 555,
-    LEFT_ASSIGN = 556,
-    RIGHT_ASSIGN = 557,
-    AND_ASSIGN = 558,
-    XOR_ASSIGN = 559,
-    OR_ASSIGN = 560,
-    SUB_ASSIGN = 561,
-    LEFT_PAREN = 562,
-    RIGHT_PAREN = 563,
-    LEFT_BRACKET = 564,
-    RIGHT_BRACKET = 565,
-    LEFT_BRACE = 566,
-    RIGHT_BRACE = 567,
-    DOT = 568,
-    COMMA = 569,
-    COLON = 570,
-    EQUAL = 571,
-    SEMICOLON = 572,
-    BANG = 573,
-    DASH = 574,
-    TILDE = 575,
-    PLUS = 576,
-    STAR = 577,
-    SLASH = 578,
-    PERCENT = 579,
-    LEFT_ANGLE = 580,
-    RIGHT_ANGLE = 581,
-    VERTICAL_BAR = 582,
-    CARET = 583,
-    AMPERSAND = 584,
-    QUESTION = 585,
-    INVARIANT = 586,
-    PRECISE = 587,
-    HIGH_PRECISION = 588,
-    MEDIUM_PRECISION = 589,
-    LOW_PRECISION = 590,
-    PRECISION = 591,
-    PACKED = 592,
-    RESOURCE = 593,
-    SUPERP = 594
+    FLOAT64_T = 264,
+    CONST = 265,
+    BOOL = 266,
+    INT = 267,
+    UINT = 268,
+    INT64_T = 269,
+    UINT64_T = 270,
+    INT32_T = 271,
+    UINT32_T = 272,
+    INT16_T = 273,
+    UINT16_T = 274,
+    INT8_T = 275,
+    UINT8_T = 276,
+    BREAK = 277,
+    CONTINUE = 278,
+    DO = 279,
+    ELSE = 280,
+    FOR = 281,
+    IF = 282,
+    DISCARD = 283,
+    RETURN = 284,
+    SWITCH = 285,
+    CASE = 286,
+    DEFAULT = 287,
+    SUBROUTINE = 288,
+    BVEC2 = 289,
+    BVEC3 = 290,
+    BVEC4 = 291,
+    IVEC2 = 292,
+    IVEC3 = 293,
+    IVEC4 = 294,
+    UVEC2 = 295,
+    UVEC3 = 296,
+    UVEC4 = 297,
+    I64VEC2 = 298,
+    I64VEC3 = 299,
+    I64VEC4 = 300,
+    U64VEC2 = 301,
+    U64VEC3 = 302,
+    U64VEC4 = 303,
+    I32VEC2 = 304,
+    I32VEC3 = 305,
+    I32VEC4 = 306,
+    U32VEC2 = 307,
+    U32VEC3 = 308,
+    U32VEC4 = 309,
+    I16VEC2 = 310,
+    I16VEC3 = 311,
+    I16VEC4 = 312,
+    U16VEC2 = 313,
+    U16VEC3 = 314,
+    U16VEC4 = 315,
+    I8VEC2 = 316,
+    I8VEC3 = 317,
+    I8VEC4 = 318,
+    U8VEC2 = 319,
+    U8VEC3 = 320,
+    U8VEC4 = 321,
+    VEC2 = 322,
+    VEC3 = 323,
+    VEC4 = 324,
+    MAT2 = 325,
+    MAT3 = 326,
+    MAT4 = 327,
+    CENTROID = 328,
+    IN = 329,
+    OUT = 330,
+    INOUT = 331,
+    UNIFORM = 332,
+    PATCH = 333,
+    SAMPLE = 334,
+    BUFFER = 335,
+    SHARED = 336,
+    COHERENT = 337,
+    VOLATILE = 338,
+    RESTRICT = 339,
+    READONLY = 340,
+    WRITEONLY = 341,
+    DVEC2 = 342,
+    DVEC3 = 343,
+    DVEC4 = 344,
+    DMAT2 = 345,
+    DMAT3 = 346,
+    DMAT4 = 347,
+    F16VEC2 = 348,
+    F16VEC3 = 349,
+    F16VEC4 = 350,
+    F16MAT2 = 351,
+    F16MAT3 = 352,
+    F16MAT4 = 353,
+    F32VEC2 = 354,
+    F32VEC3 = 355,
+    F32VEC4 = 356,
+    F32MAT2 = 357,
+    F32MAT3 = 358,
+    F32MAT4 = 359,
+    F64VEC2 = 360,
+    F64VEC3 = 361,
+    F64VEC4 = 362,
+    F64MAT2 = 363,
+    F64MAT3 = 364,
+    F64MAT4 = 365,
+    NOPERSPECTIVE = 366,
+    FLAT = 367,
+    SMOOTH = 368,
+    LAYOUT = 369,
+    __EXPLICITINTERPAMD = 370,
+    MAT2X2 = 371,
+    MAT2X3 = 372,
+    MAT2X4 = 373,
+    MAT3X2 = 374,
+    MAT3X3 = 375,
+    MAT3X4 = 376,
+    MAT4X2 = 377,
+    MAT4X3 = 378,
+    MAT4X4 = 379,
+    DMAT2X2 = 380,
+    DMAT2X3 = 381,
+    DMAT2X4 = 382,
+    DMAT3X2 = 383,
+    DMAT3X3 = 384,
+    DMAT3X4 = 385,
+    DMAT4X2 = 386,
+    DMAT4X3 = 387,
+    DMAT4X4 = 388,
+    F16MAT2X2 = 389,
+    F16MAT2X3 = 390,
+    F16MAT2X4 = 391,
+    F16MAT3X2 = 392,
+    F16MAT3X3 = 393,
+    F16MAT3X4 = 394,
+    F16MAT4X2 = 395,
+    F16MAT4X3 = 396,
+    F16MAT4X4 = 397,
+    F32MAT2X2 = 398,
+    F32MAT2X3 = 399,
+    F32MAT2X4 = 400,
+    F32MAT3X2 = 401,
+    F32MAT3X3 = 402,
+    F32MAT3X4 = 403,
+    F32MAT4X2 = 404,
+    F32MAT4X3 = 405,
+    F32MAT4X4 = 406,
+    F64MAT2X2 = 407,
+    F64MAT2X3 = 408,
+    F64MAT2X4 = 409,
+    F64MAT3X2 = 410,
+    F64MAT3X3 = 411,
+    F64MAT3X4 = 412,
+    F64MAT4X2 = 413,
+    F64MAT4X3 = 414,
+    F64MAT4X4 = 415,
+    ATOMIC_UINT = 416,
+    SAMPLER1D = 417,
+    SAMPLER2D = 418,
+    SAMPLER3D = 419,
+    SAMPLERCUBE = 420,
+    SAMPLER1DSHADOW = 421,
+    SAMPLER2DSHADOW = 422,
+    SAMPLERCUBESHADOW = 423,
+    SAMPLER1DARRAY = 424,
+    SAMPLER2DARRAY = 425,
+    SAMPLER1DARRAYSHADOW = 426,
+    SAMPLER2DARRAYSHADOW = 427,
+    ISAMPLER1D = 428,
+    ISAMPLER2D = 429,
+    ISAMPLER3D = 430,
+    ISAMPLERCUBE = 431,
+    ISAMPLER1DARRAY = 432,
+    ISAMPLER2DARRAY = 433,
+    USAMPLER1D = 434,
+    USAMPLER2D = 435,
+    USAMPLER3D = 436,
+    USAMPLERCUBE = 437,
+    USAMPLER1DARRAY = 438,
+    USAMPLER2DARRAY = 439,
+    SAMPLER2DRECT = 440,
+    SAMPLER2DRECTSHADOW = 441,
+    ISAMPLER2DRECT = 442,
+    USAMPLER2DRECT = 443,
+    SAMPLERBUFFER = 444,
+    ISAMPLERBUFFER = 445,
+    USAMPLERBUFFER = 446,
+    SAMPLERCUBEARRAY = 447,
+    SAMPLERCUBEARRAYSHADOW = 448,
+    ISAMPLERCUBEARRAY = 449,
+    USAMPLERCUBEARRAY = 450,
+    SAMPLER2DMS = 451,
+    ISAMPLER2DMS = 452,
+    USAMPLER2DMS = 453,
+    SAMPLER2DMSARRAY = 454,
+    ISAMPLER2DMSARRAY = 455,
+    USAMPLER2DMSARRAY = 456,
+    SAMPLEREXTERNALOES = 457,
+    F16SAMPLER1D = 458,
+    F16SAMPLER2D = 459,
+    F16SAMPLER3D = 460,
+    F16SAMPLER2DRECT = 461,
+    F16SAMPLERCUBE = 462,
+    F16SAMPLER1DARRAY = 463,
+    F16SAMPLER2DARRAY = 464,
+    F16SAMPLERCUBEARRAY = 465,
+    F16SAMPLERBUFFER = 466,
+    F16SAMPLER2DMS = 467,
+    F16SAMPLER2DMSARRAY = 468,
+    F16SAMPLER1DSHADOW = 469,
+    F16SAMPLER2DSHADOW = 470,
+    F16SAMPLER1DARRAYSHADOW = 471,
+    F16SAMPLER2DARRAYSHADOW = 472,
+    F16SAMPLER2DRECTSHADOW = 473,
+    F16SAMPLERCUBESHADOW = 474,
+    F16SAMPLERCUBEARRAYSHADOW = 475,
+    SAMPLER = 476,
+    SAMPLERSHADOW = 477,
+    TEXTURE1D = 478,
+    TEXTURE2D = 479,
+    TEXTURE3D = 480,
+    TEXTURECUBE = 481,
+    TEXTURE1DARRAY = 482,
+    TEXTURE2DARRAY = 483,
+    ITEXTURE1D = 484,
+    ITEXTURE2D = 485,
+    ITEXTURE3D = 486,
+    ITEXTURECUBE = 487,
+    ITEXTURE1DARRAY = 488,
+    ITEXTURE2DARRAY = 489,
+    UTEXTURE1D = 490,
+    UTEXTURE2D = 491,
+    UTEXTURE3D = 492,
+    UTEXTURECUBE = 493,
+    UTEXTURE1DARRAY = 494,
+    UTEXTURE2DARRAY = 495,
+    TEXTURE2DRECT = 496,
+    ITEXTURE2DRECT = 497,
+    UTEXTURE2DRECT = 498,
+    TEXTUREBUFFER = 499,
+    ITEXTUREBUFFER = 500,
+    UTEXTUREBUFFER = 501,
+    TEXTURECUBEARRAY = 502,
+    ITEXTURECUBEARRAY = 503,
+    UTEXTURECUBEARRAY = 504,
+    TEXTURE2DMS = 505,
+    ITEXTURE2DMS = 506,
+    UTEXTURE2DMS = 507,
+    TEXTURE2DMSARRAY = 508,
+    ITEXTURE2DMSARRAY = 509,
+    UTEXTURE2DMSARRAY = 510,
+    F16TEXTURE1D = 511,
+    F16TEXTURE2D = 512,
+    F16TEXTURE3D = 513,
+    F16TEXTURE2DRECT = 514,
+    F16TEXTURECUBE = 515,
+    F16TEXTURE1DARRAY = 516,
+    F16TEXTURE2DARRAY = 517,
+    F16TEXTURECUBEARRAY = 518,
+    F16TEXTUREBUFFER = 519,
+    F16TEXTURE2DMS = 520,
+    F16TEXTURE2DMSARRAY = 521,
+    SUBPASSINPUT = 522,
+    SUBPASSINPUTMS = 523,
+    ISUBPASSINPUT = 524,
+    ISUBPASSINPUTMS = 525,
+    USUBPASSINPUT = 526,
+    USUBPASSINPUTMS = 527,
+    F16SUBPASSINPUT = 528,
+    F16SUBPASSINPUTMS = 529,
+    IMAGE1D = 530,
+    IIMAGE1D = 531,
+    UIMAGE1D = 532,
+    IMAGE2D = 533,
+    IIMAGE2D = 534,
+    UIMAGE2D = 535,
+    IMAGE3D = 536,
+    IIMAGE3D = 537,
+    UIMAGE3D = 538,
+    IMAGE2DRECT = 539,
+    IIMAGE2DRECT = 540,
+    UIMAGE2DRECT = 541,
+    IMAGECUBE = 542,
+    IIMAGECUBE = 543,
+    UIMAGECUBE = 544,
+    IMAGEBUFFER = 545,
+    IIMAGEBUFFER = 546,
+    UIMAGEBUFFER = 547,
+    IMAGE1DARRAY = 548,
+    IIMAGE1DARRAY = 549,
+    UIMAGE1DARRAY = 550,
+    IMAGE2DARRAY = 551,
+    IIMAGE2DARRAY = 552,
+    UIMAGE2DARRAY = 553,
+    IMAGECUBEARRAY = 554,
+    IIMAGECUBEARRAY = 555,
+    UIMAGECUBEARRAY = 556,
+    IMAGE2DMS = 557,
+    IIMAGE2DMS = 558,
+    UIMAGE2DMS = 559,
+    IMAGE2DMSARRAY = 560,
+    IIMAGE2DMSARRAY = 561,
+    UIMAGE2DMSARRAY = 562,
+    F16IMAGE1D = 563,
+    F16IMAGE2D = 564,
+    F16IMAGE3D = 565,
+    F16IMAGE2DRECT = 566,
+    F16IMAGECUBE = 567,
+    F16IMAGE1DARRAY = 568,
+    F16IMAGE2DARRAY = 569,
+    F16IMAGECUBEARRAY = 570,
+    F16IMAGEBUFFER = 571,
+    F16IMAGE2DMS = 572,
+    F16IMAGE2DMSARRAY = 573,
+    STRUCT = 574,
+    VOID = 575,
+    WHILE = 576,
+    IDENTIFIER = 577,
+    TYPE_NAME = 578,
+    FLOATCONSTANT = 579,
+    DOUBLECONSTANT = 580,
+    INT16CONSTANT = 581,
+    UINT16CONSTANT = 582,
+    INT32CONSTANT = 583,
+    UINT32CONSTANT = 584,
+    INTCONSTANT = 585,
+    UINTCONSTANT = 586,
+    INT64CONSTANT = 587,
+    UINT64CONSTANT = 588,
+    BOOLCONSTANT = 589,
+    FLOAT16CONSTANT = 590,
+    LEFT_OP = 591,
+    RIGHT_OP = 592,
+    INC_OP = 593,
+    DEC_OP = 594,
+    LE_OP = 595,
+    GE_OP = 596,
+    EQ_OP = 597,
+    NE_OP = 598,
+    AND_OP = 599,
+    OR_OP = 600,
+    XOR_OP = 601,
+    MUL_ASSIGN = 602,
+    DIV_ASSIGN = 603,
+    ADD_ASSIGN = 604,
+    MOD_ASSIGN = 605,
+    LEFT_ASSIGN = 606,
+    RIGHT_ASSIGN = 607,
+    AND_ASSIGN = 608,
+    XOR_ASSIGN = 609,
+    OR_ASSIGN = 610,
+    SUB_ASSIGN = 611,
+    LEFT_PAREN = 612,
+    RIGHT_PAREN = 613,
+    LEFT_BRACKET = 614,
+    RIGHT_BRACKET = 615,
+    LEFT_BRACE = 616,
+    RIGHT_BRACE = 617,
+    DOT = 618,
+    COMMA = 619,
+    COLON = 620,
+    EQUAL = 621,
+    SEMICOLON = 622,
+    BANG = 623,
+    DASH = 624,
+    TILDE = 625,
+    PLUS = 626,
+    STAR = 627,
+    SLASH = 628,
+    PERCENT = 629,
+    LEFT_ANGLE = 630,
+    RIGHT_ANGLE = 631,
+    VERTICAL_BAR = 632,
+    CARET = 633,
+    AMPERSAND = 634,
+    QUESTION = 635,
+    INVARIANT = 636,
+    PRECISE = 637,
+    HIGH_PRECISION = 638,
+    MEDIUM_PRECISION = 639,
+    LOW_PRECISION = 640,
+    PRECISION = 641,
+    PACKED = 642,
+    RESOURCE = 643,
+    SUPERP = 644
   };
 #endif
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-
+typedef union YYSTYPE YYSTYPE;
 union YYSTYPE
 {
-#line 69 "glslang.y" /* yacc.c:1909  */
+#line 70 "MachineIndependent/glslang.y" /* yacc.c:1909  */
 
     struct {
         glslang::TSourceLoc loc;
@@ -425,10 +475,8 @@
         };
     } interm;
 
-#line 429 "glslang_tab.cpp.h" /* yacc.c:1909  */
+#line 479 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909  */
 };
-
-typedef union YYSTYPE YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
 #endif
@@ -437,4 +485,4 @@
 
 int yyparse (glslang::TParseContext* pParseContext);
 
-#endif /* !YY_YY_GLSLANG_TAB_CPP_H_INCLUDED  */
+#endif /* !YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED  */
diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp
index bb8067c..1775e1d 100644
--- a/glslang/MachineIndependent/intermOut.cpp
+++ b/glslang/MachineIndependent/intermOut.cpp
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2016 LunarG, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -224,48 +225,192 @@
     case EOpPreIncrement:   out.debug << "Pre-Increment";        break;
     case EOpPreDecrement:   out.debug << "Pre-Decrement";        break;
 
+    // * -> bool
+    case EOpConvInt8ToBool:    out.debug << "Convert int8_t to bool";  break;
+    case EOpConvUint8ToBool:   out.debug << "Convert uint8_t to bool"; break;
+    case EOpConvInt16ToBool:   out.debug << "Convert int16_t to bool"; break;
+    case EOpConvUint16ToBool:  out.debug << "Convert uint16_t to bool";break;
     case EOpConvIntToBool:     out.debug << "Convert int to bool";     break;
     case EOpConvUintToBool:    out.debug << "Convert uint to bool";    break;
-    case EOpConvFloatToBool:   out.debug << "Convert float to bool";   break;
-    case EOpConvDoubleToBool:  out.debug << "Convert double to bool";  break;
     case EOpConvInt64ToBool:   out.debug << "Convert int64 to bool";   break;
     case EOpConvUint64ToBool:  out.debug << "Convert uint64 to bool";  break;
-    case EOpConvIntToFloat:    out.debug << "Convert int to float";    break;
-    case EOpConvUintToFloat:   out.debug << "Convert uint to float";   break;
-    case EOpConvDoubleToFloat: out.debug << "Convert double to float"; break;
-    case EOpConvInt64ToFloat:  out.debug << "Convert int64 to float";  break;
-    case EOpConvUint64ToFloat: out.debug << "Convert uint64 to float"; break;
-    case EOpConvBoolToFloat:   out.debug << "Convert bool to float";   break;
-    case EOpConvUintToInt:     out.debug << "Convert uint to int";     break;
-    case EOpConvFloatToInt:    out.debug << "Convert float to int";    break;
-    case EOpConvDoubleToInt:   out.debug << "Convert double to int";   break;
-    case EOpConvBoolToInt:     out.debug << "Convert bool to int";     break;
-    case EOpConvInt64ToInt:    out.debug << "Convert int64 to int";    break;
-    case EOpConvUint64ToInt:   out.debug << "Convert uint64 to int";   break;
-    case EOpConvIntToUint:     out.debug << "Convert int to uint";     break;
-    case EOpConvFloatToUint:   out.debug << "Convert float to uint";   break;
-    case EOpConvDoubleToUint:  out.debug << "Convert double to uint";  break;
+    case EOpConvFloat16ToBool: out.debug << "Convert float16_t to bool";   break;
+    case EOpConvFloatToBool:   out.debug << "Convert float to bool";   break;
+    case EOpConvDoubleToBool:  out.debug << "Convert double to bool";  break;
+
+    // bool -> *
+    case EOpConvBoolToInt8:    out.debug << "Convert bool to int8_t";  break;
+    case EOpConvBoolToUint8:   out.debug << "Convert bool to uint8_t"; break;
+    case EOpConvBoolToInt16:   out.debug << "Convert bool to in16t_t"; break;
+    case EOpConvBoolToUint16:  out.debug << "Convert bool to uint16_t";break;
+    case EOpConvBoolToInt:     out.debug << "Convert bool to int"  ;   break;
     case EOpConvBoolToUint:    out.debug << "Convert bool to uint";    break;
-    case EOpConvInt64ToUint:   out.debug << "Convert int64 to uint";   break;
-    case EOpConvUint64ToUint:  out.debug << "Convert uint64 to uint";  break;
+    case EOpConvBoolToInt64:   out.debug << "Convert bool to int64"; break;
+    case EOpConvBoolToUint64:  out.debug << "Convert bool to uint64";break;
+    case EOpConvBoolToFloat16: out.debug << "Convert bool to float16_t";   break;
+    case EOpConvBoolToFloat:   out.debug << "Convert bool to float";   break;
+    case EOpConvBoolToDouble:  out.debug << "Convert bool to double";   break;
+
+    // int8_t -> (u)int*
+    case EOpConvInt8ToInt16:   out.debug << "Convert int8_t to int16_t";break;
+    case EOpConvInt8ToInt:     out.debug << "Convert int8_t to int";    break;
+    case EOpConvInt8ToInt64:   out.debug << "Convert int8_t to int64";   break;
+    case EOpConvInt8ToUint8:   out.debug << "Convert int8_t to uint8_t";break;
+    case EOpConvInt8ToUint16:  out.debug << "Convert int8_t to uint16_t";break;
+    case EOpConvInt8ToUint:    out.debug << "Convert int8_t to uint";    break;
+    case EOpConvInt8ToUint64:  out.debug << "Convert int8_t to uint64";   break;
+
+    // uint8_t -> (u)int*
+    case EOpConvUint8ToInt8:    out.debug << "Convert uint8_t to int8_t";break;
+    case EOpConvUint8ToInt16:   out.debug << "Convert uint8_t to int16_t";break;
+    case EOpConvUint8ToInt:     out.debug << "Convert uint8_t to int";    break;
+    case EOpConvUint8ToInt64:   out.debug << "Convert uint8_t to int64";   break;
+    case EOpConvUint8ToUint16:  out.debug << "Convert uint8_t to uint16_t";break;
+    case EOpConvUint8ToUint:    out.debug << "Convert uint8_t to uint";    break;
+    case EOpConvUint8ToUint64:  out.debug << "Convert uint8_t to uint64";   break;
+
+    // int8_t -> float*
+    case EOpConvInt8ToFloat16:  out.debug << "Convert int8_t to float16_t";break;
+    case EOpConvInt8ToFloat:    out.debug << "Convert int8_t to float";    break;
+    case EOpConvInt8ToDouble:   out.debug << "Convert int8_t to double";   break;
+
+    // uint8_t -> float*
+    case EOpConvUint8ToFloat16: out.debug << "Convert uint8_t to float16_t";break;
+    case EOpConvUint8ToFloat:   out.debug << "Convert uint8_t to float";    break;
+    case EOpConvUint8ToDouble:  out.debug << "Convert uint8_t to double";   break;
+
+    // int16_t -> (u)int*
+    case EOpConvInt16ToInt8:    out.debug << "Convert int16_t to int8_t";break;
+    case EOpConvInt16ToInt:     out.debug << "Convert int16_t to int";    break;
+    case EOpConvInt16ToInt64:   out.debug << "Convert int16_t to int64";   break;
+    case EOpConvInt16ToUint8:   out.debug << "Convert int16_t to uint8_t";break;
+    case EOpConvInt16ToUint16:  out.debug << "Convert int16_t to uint16_t";break;
+    case EOpConvInt16ToUint:    out.debug << "Convert int16_t to uint";    break;
+    case EOpConvInt16ToUint64:  out.debug << "Convert int16_t to uint64";   break;
+
+    // int16_t -> float*
+    case EOpConvInt16ToFloat16:  out.debug << "Convert int16_t to float16_t";break;
+    case EOpConvInt16ToFloat:    out.debug << "Convert int16_t to float";    break;
+    case EOpConvInt16ToDouble:   out.debug << "Convert int16_t to double";   break;
+
+    // uint16_t -> (u)int*
+    case EOpConvUint16ToInt8:    out.debug << "Convert uint16_t to int8_t";break;
+    case EOpConvUint16ToInt16:   out.debug << "Convert uint16_t to int16_t";break;
+    case EOpConvUint16ToInt:     out.debug << "Convert uint16_t to int";    break;
+    case EOpConvUint16ToInt64:   out.debug << "Convert uint16_t to int64";   break;
+    case EOpConvUint16ToUint8:   out.debug << "Convert uint16_t to uint8_t";break;
+    case EOpConvUint16ToUint:    out.debug << "Convert uint16_t to uint";    break;
+    case EOpConvUint16ToUint64:  out.debug << "Convert uint16_t to uint64";   break;
+
+    // uint16_t -> float*
+    case EOpConvUint16ToFloat16: out.debug << "Convert uint16_t to float16_t";break;
+    case EOpConvUint16ToFloat:   out.debug << "Convert uint16_t to float";    break;
+    case EOpConvUint16ToDouble:  out.debug << "Convert uint16_t to double";   break;
+
+    // int32_t -> (u)int*
+    case EOpConvIntToInt8:    out.debug << "Convert int to int8_t";break;
+    case EOpConvIntToInt16:   out.debug << "Convert int to int16_t";break;
+    case EOpConvIntToInt64:   out.debug << "Convert int to int64";   break;
+    case EOpConvIntToUint8:   out.debug << "Convert int to uint8_t";break;
+    case EOpConvIntToUint16:  out.debug << "Convert int to uint16_t";break;
+    case EOpConvIntToUint:    out.debug << "Convert int to uint";    break;
+    case EOpConvIntToUint64:  out.debug << "Convert int to uint64";   break;
+
+    // int32_t -> float*
+    case EOpConvIntToFloat16:  out.debug << "Convert int to float16_t";break;
+    case EOpConvIntToFloat:    out.debug << "Convert int to float";    break;
     case EOpConvIntToDouble:   out.debug << "Convert int to double";   break;
-    case EOpConvUintToDouble:  out.debug << "Convert uint to double";  break;
-    case EOpConvFloatToDouble: out.debug << "Convert float to double"; break;
-    case EOpConvBoolToDouble:  out.debug << "Convert bool to double";  break;
-    case EOpConvInt64ToDouble: out.debug << "Convert int64 to double"; break;
-    case EOpConvUint64ToDouble: out.debug << "Convert uint64 to double";  break;
-    case EOpConvBoolToInt64:   out.debug << "Convert bool to int64";   break;
-    case EOpConvIntToInt64:    out.debug << "Convert int to int64";    break;
+
+    // uint32_t -> (u)int*
+    case EOpConvUintToInt8:    out.debug << "Convert uint to int8_t";break;
+    case EOpConvUintToInt16:   out.debug << "Convert uint to int16_t";break;
+    case EOpConvUintToInt:     out.debug << "Convert uint to int";break;
     case EOpConvUintToInt64:   out.debug << "Convert uint to int64";   break;
-    case EOpConvFloatToInt64:  out.debug << "Convert float to int64";  break;
-    case EOpConvDoubleToInt64: out.debug << "Convert double to int64"; break;
-    case EOpConvUint64ToInt64: out.debug << "Convert uint64 to int64"; break;
-    case EOpConvBoolToUint64:  out.debug << "Convert bool to uint64";  break;
-    case EOpConvIntToUint64:   out.debug << "Convert int to uint64";   break;
-    case EOpConvUintToUint64:  out.debug << "Convert uint to uint64";  break;
+    case EOpConvUintToUint8:   out.debug << "Convert uint to uint8_t";break;
+    case EOpConvUintToUint16:  out.debug << "Convert uint to uint16_t";break;
+    case EOpConvUintToUint64:  out.debug << "Convert uint to uint64";   break;
+
+    // uint32_t -> float*
+    case EOpConvUintToFloat16: out.debug << "Convert uint to float16_t";break;
+    case EOpConvUintToFloat:   out.debug << "Convert uint to float";    break;
+    case EOpConvUintToDouble:  out.debug << "Convert uint to double";   break;
+
+    // int64 -> (u)int*
+    case EOpConvInt64ToInt8:    out.debug << "Convert int64 to int8_t";  break;
+    case EOpConvInt64ToInt16:   out.debug << "Convert int64 to int16_t"; break;
+    case EOpConvInt64ToInt:     out.debug << "Convert int64 to int";   break;
+    case EOpConvInt64ToUint8:   out.debug << "Convert int64 to uint8_t";break;
+    case EOpConvInt64ToUint16:  out.debug << "Convert int64 to uint16_t";break;
+    case EOpConvInt64ToUint:    out.debug << "Convert int64 to uint";    break;
+    case EOpConvInt64ToUint64:  out.debug << "Convert int64 to uint64";   break;
+
+     // int64 -> float*
+    case EOpConvInt64ToFloat16:  out.debug << "Convert int64 to float16_t";break;
+    case EOpConvInt64ToFloat:    out.debug << "Convert int64 to float";    break;
+    case EOpConvInt64ToDouble:   out.debug << "Convert int64 to double";   break;
+
+    // uint64 -> (u)int*
+    case EOpConvUint64ToInt8:    out.debug << "Convert uint64 to int8_t";break;
+    case EOpConvUint64ToInt16:   out.debug << "Convert uint64 to int16_t";break;
+    case EOpConvUint64ToInt:     out.debug << "Convert uint64 to int";    break;
+    case EOpConvUint64ToInt64:   out.debug << "Convert uint64 to int64";   break;
+    case EOpConvUint64ToUint8:   out.debug << "Convert uint64 to uint8_t";break;
+    case EOpConvUint64ToUint16:  out.debug << "Convert uint64 to uint16";    break;
+    case EOpConvUint64ToUint:    out.debug << "Convert uint64 to uint";   break;
+
+    // uint64 -> float*
+    case EOpConvUint64ToFloat16: out.debug << "Convert uint64 to float16_t";break;
+    case EOpConvUint64ToFloat:   out.debug << "Convert uint64 to float";    break;
+    case EOpConvUint64ToDouble:  out.debug << "Convert uint64 to double";   break;
+
+    // float16_t -> int*
+    case EOpConvFloat16ToInt8:  out.debug << "Convert float16_t to int8_t"; break;
+    case EOpConvFloat16ToInt16: out.debug << "Convert float16_t to int16_t"; break;
+    case EOpConvFloat16ToInt:   out.debug << "Convert float16_t to int"; break;
+    case EOpConvFloat16ToInt64: out.debug << "Convert float16_t to int64"; break;
+
+    // float16_t -> uint*
+    case EOpConvFloat16ToUint8:  out.debug << "Convert float16_t to uint8_t"; break;
+    case EOpConvFloat16ToUint16: out.debug << "Convert float16_t to uint16_t"; break;
+    case EOpConvFloat16ToUint:   out.debug << "Convert float16_t to uint"; break;
+    case EOpConvFloat16ToUint64: out.debug << "Convert float16_t to uint64"; break;
+
+    // float16_t -> float*
+    case EOpConvFloat16ToFloat:  out.debug << "Convert float16_t to float"; break;
+    case EOpConvFloat16ToDouble: out.debug << "Convert float16_t to double"; break;
+
+    // float32 -> float*
+    case EOpConvFloatToFloat16: out.debug << "Convert float to float16_t"; break;
+    case EOpConvFloatToDouble:  out.debug << "Convert float to double"; break;
+
+    // float32_t -> int*
+    case EOpConvFloatToInt8:  out.debug << "Convert float to int8_t"; break;
+    case EOpConvFloatToInt16: out.debug << "Convert float to int16_t"; break;
+    case EOpConvFloatToInt:   out.debug << "Convert float to int"; break;
+    case EOpConvFloatToInt64: out.debug << "Convert float to int64"; break;
+
+    // float32_t -> uint*
+    case EOpConvFloatToUint8:  out.debug << "Convert float to uint8_t"; break;
+    case EOpConvFloatToUint16: out.debug << "Convert float to uint16_t"; break;
+    case EOpConvFloatToUint:   out.debug << "Convert float to uint"; break;
     case EOpConvFloatToUint64: out.debug << "Convert float to uint64"; break;
+
+    // double -> float*
+    case EOpConvDoubleToFloat16: out.debug << "Convert double to float16_t"; break;
+    case EOpConvDoubleToFloat:   out.debug << "Convert double to float"; break;
+
+    // double -> int*
+    case EOpConvDoubleToInt8:  out.debug << "Convert double to int8_t"; break;
+    case EOpConvDoubleToInt16: out.debug << "Convert double to int16_t"; break;
+    case EOpConvDoubleToInt:   out.debug << "Convert double to int"; break;
+    case EOpConvDoubleToInt64: out.debug << "Convert double to int64"; break;
+
+    // float32_t -> uint*
+    case EOpConvDoubleToUint8:  out.debug << "Convert double to uint8_t"; break;
+    case EOpConvDoubleToUint16: out.debug << "Convert double to uint16_t"; break;
+    case EOpConvDoubleToUint:   out.debug << "Convert double to uint"; break;
     case EOpConvDoubleToUint64: out.debug << "Convert double to uint64"; break;
-    case EOpConvInt64ToUint64: out.debug << "Convert uint64 to uint64"; break;
+
 
     case EOpRadians:        out.debug << "radians";              break;
     case EOpDegrees:        out.debug << "degrees";              break;
@@ -309,12 +454,10 @@
     case EOpDoubleBitsToUint64: out.debug << "doubleBitsToUint64"; break;
     case EOpInt64BitsToDouble:  out.debug << "int64BitsToDouble";  break;
     case EOpUint64BitsToDouble: out.debug << "uint64BitsToDouble"; break;
-#ifdef AMD_EXTENSIONS
     case EOpFloat16BitsToInt16:  out.debug << "float16BitsToInt16";  break;
     case EOpFloat16BitsToUint16: out.debug << "float16BitsToUint16"; break;
     case EOpInt16BitsToFloat16:  out.debug << "int16BitsToFloat16";  break;
     case EOpUint16BitsToFloat16: out.debug << "uint16BitsToFloat16"; break;
-#endif
 
     case EOpPackSnorm2x16:  out.debug << "packSnorm2x16";        break;
     case EOpUnpackSnorm2x16:out.debug << "unpackSnorm2x16";      break;
@@ -322,6 +465,12 @@
     case EOpUnpackUnorm2x16:out.debug << "unpackUnorm2x16";      break;
     case EOpPackHalf2x16:   out.debug << "packHalf2x16";         break;
     case EOpUnpackHalf2x16: out.debug << "unpackHalf2x16";       break;
+    case EOpPack16:           out.debug << "pack16";                 break;
+    case EOpPack32:           out.debug << "pack32";                 break;
+    case EOpPack64:           out.debug << "pack64";                 break;
+    case EOpUnpack32:         out.debug << "unpack32";               break;
+    case EOpUnpack16:         out.debug << "unpack16";               break;
+    case EOpUnpack8:          out.debug << "unpack8";               break;
 
     case EOpPackSnorm4x8:     out.debug << "PackSnorm4x8";       break;
     case EOpUnpackSnorm4x8:   out.debug << "UnpackSnorm4x8";     break;
@@ -335,7 +484,6 @@
     case EOpPackUint2x32:     out.debug << "packUint2x32";       break;
     case EOpUnpackUint2x32:   out.debug << "unpackUint2x32";     break;
 
-#ifdef AMD_EXTENSIONS
     case EOpPackInt2x16:      out.debug << "packInt2x16";        break;
     case EOpUnpackInt2x16:    out.debug << "unpackInt2x16";      break;
     case EOpPackUint2x16:     out.debug << "packUint2x16";       break;
@@ -345,10 +493,8 @@
     case EOpUnpackInt4x16:    out.debug << "unpackInt4x16";      break;
     case EOpPackUint4x16:     out.debug << "packUint4x16";       break;
     case EOpUnpackUint4x16:   out.debug << "unpackUint4x16";     break;
-
     case EOpPackFloat2x16:    out.debug << "packFloat2x16";      break;
     case EOpUnpackFloat2x16:  out.debug << "unpackFloat2x16";    break;
-#endif
 
     case EOpLength:         out.debug << "length";               break;
     case EOpNormalize:      out.debug << "normalize";            break;
@@ -402,6 +548,57 @@
     case EOpAllInvocations:         out.debug << "allInvocations";        break;
     case EOpAllInvocationsEqual:    out.debug << "allInvocationsEqual";   break;
 
+    case EOpSubgroupElect:                   out.debug << "subgroupElect";                   break;
+    case EOpSubgroupAll:                     out.debug << "subgroupAll";                     break;
+    case EOpSubgroupAny:                     out.debug << "subgroupAny";                     break;
+    case EOpSubgroupAllEqual:                out.debug << "subgroupAllEqual";                break;
+    case EOpSubgroupBroadcast:               out.debug << "subgroupBroadcast";               break;
+    case EOpSubgroupBroadcastFirst:          out.debug << "subgroupBroadcastFirst";          break;
+    case EOpSubgroupBallot:                  out.debug << "subgroupBallot";                  break;
+    case EOpSubgroupInverseBallot:           out.debug << "subgroupInverseBallot";           break;
+    case EOpSubgroupBallotBitExtract:        out.debug << "subgroupBallotBitExtract";        break;
+    case EOpSubgroupBallotBitCount:          out.debug << "subgroupBallotBitCount";          break;
+    case EOpSubgroupBallotInclusiveBitCount: out.debug << "subgroupBallotInclusiveBitCount"; break;
+    case EOpSubgroupBallotExclusiveBitCount: out.debug << "subgroupBallotExclusiveBitCount"; break;
+    case EOpSubgroupBallotFindLSB:           out.debug << "subgroupBallotFindLSB";           break;
+    case EOpSubgroupBallotFindMSB:           out.debug << "subgroupBallotFindMSB";           break;
+    case EOpSubgroupShuffle:                 out.debug << "subgroupShuffle";                 break;
+    case EOpSubgroupShuffleXor:              out.debug << "subgroupShuffleXor";              break;
+    case EOpSubgroupShuffleUp:               out.debug << "subgroupShuffleUp";               break;
+    case EOpSubgroupShuffleDown:             out.debug << "subgroupShuffleDown";             break;
+    case EOpSubgroupAdd:                     out.debug << "subgroupAdd";                     break;
+    case EOpSubgroupMul:                     out.debug << "subgroupMul";                     break;
+    case EOpSubgroupMin:                     out.debug << "subgroupMin";                     break;
+    case EOpSubgroupMax:                     out.debug << "subgroupMax";                     break;
+    case EOpSubgroupAnd:                     out.debug << "subgroupAnd";                     break;
+    case EOpSubgroupOr:                      out.debug << "subgroupOr";                      break;
+    case EOpSubgroupXor:                     out.debug << "subgroupXor";                     break;
+    case EOpSubgroupInclusiveAdd:            out.debug << "subgroupInclusiveAdd";            break;
+    case EOpSubgroupInclusiveMul:            out.debug << "subgroupInclusiveMul";            break;
+    case EOpSubgroupInclusiveMin:            out.debug << "subgroupInclusiveMin";            break;
+    case EOpSubgroupInclusiveMax:            out.debug << "subgroupInclusiveMax";            break;
+    case EOpSubgroupInclusiveAnd:            out.debug << "subgroupInclusiveAnd";            break;
+    case EOpSubgroupInclusiveOr:             out.debug << "subgroupInclusiveOr";             break;
+    case EOpSubgroupInclusiveXor:            out.debug << "subgroupInclusiveXor";            break;
+    case EOpSubgroupExclusiveAdd:            out.debug << "subgroupExclusiveAdd";            break;
+    case EOpSubgroupExclusiveMul:            out.debug << "subgroupExclusiveMul";            break;
+    case EOpSubgroupExclusiveMin:            out.debug << "subgroupExclusiveMin";            break;
+    case EOpSubgroupExclusiveMax:            out.debug << "subgroupExclusiveMax";            break;
+    case EOpSubgroupExclusiveAnd:            out.debug << "subgroupExclusiveAnd";            break;
+    case EOpSubgroupExclusiveOr:             out.debug << "subgroupExclusiveOr";             break;
+    case EOpSubgroupExclusiveXor:            out.debug << "subgroupExclusiveXor";            break;
+    case EOpSubgroupClusteredAdd:            out.debug << "subgroupClusteredAdd";            break;
+    case EOpSubgroupClusteredMul:            out.debug << "subgroupClusteredMul";            break;
+    case EOpSubgroupClusteredMin:            out.debug << "subgroupClusteredMin";            break;
+    case EOpSubgroupClusteredMax:            out.debug << "subgroupClusteredMax";            break;
+    case EOpSubgroupClusteredAnd:            out.debug << "subgroupClusteredAnd";            break;
+    case EOpSubgroupClusteredOr:             out.debug << "subgroupClusteredOr";             break;
+    case EOpSubgroupClusteredXor:            out.debug << "subgroupClusteredXor";            break;
+    case EOpSubgroupQuadBroadcast:           out.debug << "subgroupQuadBroadcast";           break;
+    case EOpSubgroupQuadSwapHorizontal:      out.debug << "subgroupQuadSwapHorizontal";      break;
+    case EOpSubgroupQuadSwapVertical:        out.debug << "subgroupQuadSwapVertical";        break;
+    case EOpSubgroupQuadSwapDiagonal:        out.debug << "subgroupQuadSwapDiagonal";        break;
+
     case EOpClip:                   out.debug << "clip";                  break;
     case EOpIsFinite:               out.debug << "isfinite";              break;
     case EOpLog10:                  out.debug << "log10";                 break;
@@ -434,62 +631,11 @@
 
     case EOpMbcnt:                  out.debug << "mbcnt";                       break;
 
-    case EOpCubeFaceIndex:          out.debug << "cubeFaceIndex";               break;
-    case EOpCubeFaceCoord:          out.debug << "cubeFaceCoord";               break;
-
     case EOpFragmentMaskFetch:      out.debug << "fragmentMaskFetchAMD";        break;
     case EOpFragmentFetch:          out.debug << "fragmentFetchAMD";            break;
 
-    case EOpConvBoolToFloat16:      out.debug << "Convert bool to float16";     break;
-    case EOpConvIntToFloat16:       out.debug << "Convert int to float16";      break;
-    case EOpConvUintToFloat16:      out.debug << "Convert uint to float16";     break;
-    case EOpConvFloatToFloat16:     out.debug << "Convert float to float16";    break;
-    case EOpConvDoubleToFloat16:    out.debug << "Convert double to float16";   break;
-    case EOpConvInt64ToFloat16:     out.debug << "Convert int64 to float16";    break;
-    case EOpConvUint64ToFloat16:    out.debug << "Convert uint64 to float16";   break;
-    case EOpConvFloat16ToBool:      out.debug << "Convert float16 to bool";     break;
-    case EOpConvFloat16ToInt:       out.debug << "Convert float16 to int";      break;
-    case EOpConvFloat16ToUint:      out.debug << "Convert float16 to uint";     break;
-    case EOpConvFloat16ToFloat:     out.debug << "Convert float16 to float";    break;
-    case EOpConvFloat16ToDouble:    out.debug << "Convert float16 to double";   break;
-    case EOpConvFloat16ToInt64:     out.debug << "Convert float16 to int64";    break;
-    case EOpConvFloat16ToUint64:    out.debug << "Convert float16 to uint64";   break;
-
-    case EOpConvBoolToInt16:        out.debug << "Convert bool to int16";       break;
-    case EOpConvIntToInt16:         out.debug << "Convert int to int16";        break;
-    case EOpConvUintToInt16:        out.debug << "Convert uint to int16";       break;
-    case EOpConvFloatToInt16:       out.debug << "Convert float to int16";      break;
-    case EOpConvDoubleToInt16:      out.debug << "Convert double to int16";     break;
-    case EOpConvFloat16ToInt16:     out.debug << "Convert float16 to int16";    break;
-    case EOpConvInt64ToInt16:       out.debug << "Convert int64 to int16";      break;
-    case EOpConvUint64ToInt16:      out.debug << "Convert uint64 to int16";     break;
-    case EOpConvUint16ToInt16:      out.debug << "Convert uint16 to int16";     break;
-    case EOpConvInt16ToBool:        out.debug << "Convert int16 to bool";       break;
-    case EOpConvInt16ToInt:         out.debug << "Convert int16 to int";        break;
-    case EOpConvInt16ToUint:        out.debug << "Convert int16 to uint";       break;
-    case EOpConvInt16ToFloat:       out.debug << "Convert int16 to float";      break;
-    case EOpConvInt16ToDouble:      out.debug << "Convert int16 to double";     break;
-    case EOpConvInt16ToFloat16:     out.debug << "Convert int16 to float16";    break;
-    case EOpConvInt16ToInt64:       out.debug << "Convert int16 to int64";      break;
-    case EOpConvInt16ToUint64:      out.debug << "Convert int16 to uint64";     break;
-
-    case EOpConvBoolToUint16:       out.debug << "Convert bool to uint16";      break;
-    case EOpConvIntToUint16:        out.debug << "Convert int to uint16";       break;
-    case EOpConvUintToUint16:       out.debug << "Convert uint to uint16";      break;
-    case EOpConvFloatToUint16:      out.debug << "Convert float to uint16";     break;
-    case EOpConvDoubleToUint16:     out.debug << "Convert double to uint16";    break;
-    case EOpConvFloat16ToUint16:    out.debug << "Convert float16 to uint16";   break;
-    case EOpConvInt64ToUint16:      out.debug << "Convert int64 to uint16";     break;
-    case EOpConvUint64ToUint16:     out.debug << "Convert uint64 to uint16";    break;
-    case EOpConvInt16ToUint16:      out.debug << "Convert int16 to uint16";     break;
-    case EOpConvUint16ToBool:       out.debug << "Convert uint16 to bool";      break;
-    case EOpConvUint16ToInt:        out.debug << "Convert uint16 to int";       break;
-    case EOpConvUint16ToUint:       out.debug << "Convert uint16 to uint";      break;
-    case EOpConvUint16ToFloat:      out.debug << "Convert uint16 to float";     break;
-    case EOpConvUint16ToDouble:     out.debug << "Convert uint16 to double";    break;
-    case EOpConvUint16ToFloat16:    out.debug << "Convert uint16 to float16";   break;
-    case EOpConvUint16ToInt64:      out.debug << "Convert uint16 to int64";     break;
-    case EOpConvUint16ToUint64:     out.debug << "Convert uint16 to uint64";    break;
+    case EOpCubeFaceIndex:          out.debug << "cubeFaceIndex";               break;
+    case EOpCubeFaceCoord:          out.debug << "cubeFaceCoord";               break;
 #endif
 
     case EOpSubpassLoad:   out.debug << "subpassLoad";   break;
@@ -537,23 +683,30 @@
     case EOpConstructBVec2: out.debug << "Construct bvec2"; break;
     case EOpConstructBVec3: out.debug << "Construct bvec3"; break;
     case EOpConstructBVec4: out.debug << "Construct bvec4"; break;
+    case EOpConstructInt8:   out.debug << "Construct int8_t";   break;
+    case EOpConstructI8Vec2: out.debug << "Construct i8vec2"; break;
+    case EOpConstructI8Vec3: out.debug << "Construct i8vec3"; break;
+    case EOpConstructI8Vec4: out.debug << "Construct i8vec4"; break;
     case EOpConstructInt:   out.debug << "Construct int";   break;
     case EOpConstructIVec2: out.debug << "Construct ivec2"; break;
     case EOpConstructIVec3: out.debug << "Construct ivec3"; break;
     case EOpConstructIVec4: out.debug << "Construct ivec4"; break;
+    case EOpConstructUint8:    out.debug << "Construct uint8_t";    break;
+    case EOpConstructU8Vec2:   out.debug << "Construct u8vec2";   break;
+    case EOpConstructU8Vec3:   out.debug << "Construct u8vec3";   break;
+    case EOpConstructU8Vec4:   out.debug << "Construct u8vec4";   break;
     case EOpConstructUint:    out.debug << "Construct uint";    break;
     case EOpConstructUVec2:   out.debug << "Construct uvec2";   break;
     case EOpConstructUVec3:   out.debug << "Construct uvec3";   break;
     case EOpConstructUVec4:   out.debug << "Construct uvec4";   break;
-    case EOpConstructInt64:   out.debug << "Construct int64_t"; break;
+    case EOpConstructInt64:   out.debug << "Construct int64"; break;
     case EOpConstructI64Vec2: out.debug << "Construct i64vec2"; break;
     case EOpConstructI64Vec3: out.debug << "Construct i64vec3"; break;
     case EOpConstructI64Vec4: out.debug << "Construct i64vec4"; break;
-    case EOpConstructUint64:  out.debug << "Construct uint64_t"; break;
+    case EOpConstructUint64:  out.debug << "Construct uint64"; break;
     case EOpConstructU64Vec2: out.debug << "Construct u64vec2"; break;
     case EOpConstructU64Vec3: out.debug << "Construct u64vec3"; break;
     case EOpConstructU64Vec4: out.debug << "Construct u64vec4"; break;
-#ifdef AMD_EXTENSIONS
     case EOpConstructInt16:   out.debug << "Construct int16_t"; break;
     case EOpConstructI16Vec2: out.debug << "Construct i16vec2"; break;
     case EOpConstructI16Vec3: out.debug << "Construct i16vec3"; break;
@@ -562,7 +715,6 @@
     case EOpConstructU16Vec2: out.debug << "Construct u16vec2"; break;
     case EOpConstructU16Vec3: out.debug << "Construct u16vec3"; break;
     case EOpConstructU16Vec4: out.debug << "Construct u16vec4"; break;
-#endif
     case EOpConstructMat2x2:  out.debug << "Construct mat2";    break;
     case EOpConstructMat2x3:  out.debug << "Construct mat2x3";  break;
     case EOpConstructMat2x4:  out.debug << "Construct mat2x4";  break;
@@ -608,7 +760,6 @@
     case EOpConstructBMat4x2: out.debug << "Construct bmat4x2"; break;
     case EOpConstructBMat4x3: out.debug << "Construct bmat4x3"; break;
     case EOpConstructBMat4x4: out.debug << "Construct bmat4";   break;
-#ifdef AMD_EXTENSIONS
     case EOpConstructFloat16:   out.debug << "Construct float16_t"; break;
     case EOpConstructF16Vec2:   out.debug << "Construct f16vec2";   break;
     case EOpConstructF16Vec3:   out.debug << "Construct f16vec3";   break;
@@ -622,7 +773,6 @@
     case EOpConstructF16Mat4x2: out.debug << "Construct f16mat4x2"; break;
     case EOpConstructF16Mat4x3: out.debug << "Construct f16mat4x3"; break;
     case EOpConstructF16Mat4x4: out.debug << "Construct f16mat4";   break;
-#endif
     case EOpConstructStruct:  out.debug << "Construct structure";  break;
     case EOpConstructTextureSampler: out.debug << "Construct combined texture-sampler"; break;
 
@@ -796,6 +946,62 @@
     case EOpWorkgroupMemoryBarrier:           out.debug << "WorkgroupMemoryBarrier";           break;
     case EOpWorkgroupMemoryBarrierWithGroupSync: out.debug << "WorkgroupMemoryBarrierWithGroupSync"; break;
 
+    case EOpSubgroupBarrier:                 out.debug << "subgroupBarrier"; break;
+    case EOpSubgroupMemoryBarrier:           out.debug << "subgroupMemoryBarrier"; break;
+    case EOpSubgroupMemoryBarrierBuffer:     out.debug << "subgroupMemoryBarrierBuffer"; break;
+    case EOpSubgroupMemoryBarrierImage:      out.debug << "subgroupMemoryBarrierImage";   break;
+    case EOpSubgroupMemoryBarrierShared:     out.debug << "subgroupMemoryBarrierShared"; break;
+    case EOpSubgroupElect:                   out.debug << "subgroupElect"; break;
+    case EOpSubgroupAll:                     out.debug << "subgroupAll"; break;
+    case EOpSubgroupAny:                     out.debug << "subgroupAny"; break;
+    case EOpSubgroupAllEqual:                out.debug << "subgroupAllEqual"; break;
+    case EOpSubgroupBroadcast:               out.debug << "subgroupBroadcast"; break;
+    case EOpSubgroupBroadcastFirst:          out.debug << "subgroupBroadcastFirst"; break;
+    case EOpSubgroupBallot:                  out.debug << "subgroupBallot"; break;
+    case EOpSubgroupInverseBallot:           out.debug << "subgroupInverseBallot"; break;
+    case EOpSubgroupBallotBitExtract:        out.debug << "subgroupBallotBitExtract"; break;
+    case EOpSubgroupBallotBitCount:          out.debug << "subgroupBallotBitCount"; break;
+    case EOpSubgroupBallotInclusiveBitCount: out.debug << "subgroupBallotInclusiveBitCount"; break;
+    case EOpSubgroupBallotExclusiveBitCount: out.debug << "subgroupBallotExclusiveBitCount"; break;
+    case EOpSubgroupBallotFindLSB:           out.debug << "subgroupBallotFindLSB"; break;
+    case EOpSubgroupBallotFindMSB:           out.debug << "subgroupBallotFindMSB"; break;
+    case EOpSubgroupShuffle:                 out.debug << "subgroupShuffle"; break;
+    case EOpSubgroupShuffleXor:              out.debug << "subgroupShuffleXor"; break;
+    case EOpSubgroupShuffleUp:               out.debug << "subgroupShuffleUp"; break;
+    case EOpSubgroupShuffleDown:             out.debug << "subgroupShuffleDown"; break;
+    case EOpSubgroupAdd:                     out.debug << "subgroupAdd"; break;
+    case EOpSubgroupMul:                     out.debug << "subgroupMul"; break;
+    case EOpSubgroupMin:                     out.debug << "subgroupMin"; break;
+    case EOpSubgroupMax:                     out.debug << "subgroupMax"; break;
+    case EOpSubgroupAnd:                     out.debug << "subgroupAnd"; break;
+    case EOpSubgroupOr:                      out.debug << "subgroupOr"; break;
+    case EOpSubgroupXor:                     out.debug << "subgroupXor"; break;
+    case EOpSubgroupInclusiveAdd:            out.debug << "subgroupInclusiveAdd"; break;
+    case EOpSubgroupInclusiveMul:            out.debug << "subgroupInclusiveMul"; break;
+    case EOpSubgroupInclusiveMin:            out.debug << "subgroupInclusiveMin"; break;
+    case EOpSubgroupInclusiveMax:            out.debug << "subgroupInclusiveMax"; break;
+    case EOpSubgroupInclusiveAnd:            out.debug << "subgroupInclusiveAnd"; break;
+    case EOpSubgroupInclusiveOr:             out.debug << "subgroupInclusiveOr"; break;
+    case EOpSubgroupInclusiveXor:            out.debug << "subgroupInclusiveXor"; break;
+    case EOpSubgroupExclusiveAdd:            out.debug << "subgroupExclusiveAdd"; break;
+    case EOpSubgroupExclusiveMul:            out.debug << "subgroupExclusiveMul"; break;
+    case EOpSubgroupExclusiveMin:            out.debug << "subgroupExclusiveMin"; break;
+    case EOpSubgroupExclusiveMax:            out.debug << "subgroupExclusiveMax"; break;
+    case EOpSubgroupExclusiveAnd:            out.debug << "subgroupExclusiveAnd"; break;
+    case EOpSubgroupExclusiveOr:             out.debug << "subgroupExclusiveOr"; break;
+    case EOpSubgroupExclusiveXor:            out.debug << "subgroupExclusiveXor"; break;
+    case EOpSubgroupClusteredAdd:            out.debug << "subgroupClusteredAdd"; break;
+    case EOpSubgroupClusteredMul:            out.debug << "subgroupClusteredMul"; break;
+    case EOpSubgroupClusteredMin:            out.debug << "subgroupClusteredMin"; break;
+    case EOpSubgroupClusteredMax:            out.debug << "subgroupClusteredMax"; break;
+    case EOpSubgroupClusteredAnd:            out.debug << "subgroupClusteredAnd"; break;
+    case EOpSubgroupClusteredOr:             out.debug << "subgroupClusteredOr"; break;
+    case EOpSubgroupClusteredXor:            out.debug << "subgroupClusteredXor"; break;
+    case EOpSubgroupQuadBroadcast:           out.debug << "subgroupQuadBroadcast"; break;
+    case EOpSubgroupQuadSwapHorizontal:      out.debug << "subgroupQuadSwapHorizontal"; break;
+    case EOpSubgroupQuadSwapVertical:        out.debug << "subgroupQuadSwapVertical"; break;
+    case EOpSubgroupQuadSwapDiagonal:        out.debug << "subgroupQuadSwapDiagonal"; break;
+
     case EOpSubpassLoad:   out.debug << "subpassLoad";   break;
     case EOpSubpassLoadMS: out.debug << "subpassLoadMS"; break;
 
@@ -870,9 +1076,7 @@
             break;
         case EbtFloat:
         case EbtDouble:
-#ifdef AMD_EXTENSIONS
         case EbtFloat16:
-#endif
             {
                 const double value = constUnion[i].getDConst();
                 // Print infinities and NaNs in a portable way.
@@ -892,6 +1096,42 @@
                 }
             }
             break;
+        case EbtInt8:
+            {
+                const int maxSize = 300;
+                char buf[maxSize];
+                snprintf(buf, maxSize, "%d (%s)", constUnion[i].getI8Const(), "const int8_t");
+
+                out.debug << buf << "\n";
+            }
+            break;
+        case EbtUint8:
+            {
+                const int maxSize = 300;
+                char buf[maxSize];
+                snprintf(buf, maxSize, "%u (%s)", constUnion[i].getU8Const(), "const uint8_t");
+
+                out.debug << buf << "\n";
+            }
+            break;
+        case EbtInt16:
+            {
+                const int maxSize = 300;
+                char buf[maxSize];
+                snprintf(buf, maxSize, "%d (%s)", constUnion[i].getI16Const(), "const int16_t");
+
+                out.debug << buf << "\n";
+            }
+            break;
+        case EbtUint16:
+            {
+                const int maxSize = 300;
+                char buf[maxSize];
+                snprintf(buf, maxSize, "%u (%s)", constUnion[i].getU16Const(), "const uint16_t");
+
+                out.debug << buf << "\n";
+            }
+            break;
         case EbtInt:
             {
                 const int maxSize = 300;
@@ -928,26 +1168,6 @@
                 out.debug << buf << "\n";
             }
             break;
-#ifdef AMD_EXTENSIONS
-        case EbtInt16:
-            {
-                const int maxSize = 300;
-                char buf[maxSize];
-                snprintf(buf, maxSize, "%d (%s)", constUnion[i].getIConst(), "const int16_t");
-
-                out.debug << buf << "\n";
-            }
-            break;
-        case EbtUint16:
-            {
-                const int maxSize = 300;
-                char buf[maxSize];
-                snprintf(buf, maxSize, "%u (%s)", constUnion[i].getUConst(), "const uint16_t");
-
-                out.debug << buf << "\n";
-            }
-            break;
-#endif
         default:
             out.info.message(EPrefixInternalError, "Unknown constant", node->getLoc());
             break;
diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp
index 87f08e3..9aba279 100644
--- a/glslang/MachineIndependent/linkValidate.cpp
+++ b/glslang/MachineIndependent/linkValidate.cpp
@@ -1,5 +1,6 @@
 //
 // Copyright (C) 2013 LunarG, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -1064,11 +1065,11 @@
     case EbtInt64:
     case EbtUint64:
     case EbtDouble:  size = 8; return 8;
-#ifdef AMD_EXTENSIONS
-    case EbtInt16:
-    case EbtUint16:
     case EbtFloat16: size = 2; return 2;
-#endif
+    case EbtInt8:
+    case EbtUint8:   size = 1; return 1;
+    case EbtInt16:
+    case EbtUint16:  size = 2; return 2;
     default:         size = 4; return 4;
     }
 }
diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h
index b84b110..8458e99 100644
--- a/glslang/MachineIndependent/localintermediate.h
+++ b/glslang/MachineIndependent/localintermediate.h
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2016 LunarG, Inc.
+// Copyright (C) 2017 ARM Limited.
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
@@ -78,7 +79,7 @@
         assert(i < MaxSwizzleSelectors);
         return components[i];
     }
-    
+
 private:
     int size_;
     selectorType components[MaxSwizzleSelectors];
@@ -403,6 +404,7 @@
     TIntermSymbol* addSymbol(const TType&, const TSourceLoc&);
     TIntermSymbol* addSymbol(const TIntermSymbol&);
     TIntermTyped* addConversion(TOperator, const TType&, TIntermTyped*) const;
+    std::tuple<TIntermTyped*, TIntermTyped*> addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* node1) const;
     TIntermTyped* addUniShapeConversion(TOperator, const TType&, TIntermTyped*);
     void addBiShapeConversion(TOperator, TIntermTyped*& lhsNode, TIntermTyped*& rhsNode);
     TIntermTyped* addShapeConversion(const TType&, TIntermTyped*);
@@ -412,6 +414,11 @@
     TIntermTyped* addUnaryMath(TOperator, TIntermTyped* child, TSourceLoc);
     TIntermTyped* addBuiltInFunctionCall(const TSourceLoc& line, TOperator, bool unary, TIntermNode*, const TType& returnType);
     bool canImplicitlyPromote(TBasicType from, TBasicType to, TOperator op = EOpNull) const;
+    bool isIntegralPromotion(TBasicType from, TBasicType to) const;
+    bool isFPPromotion(TBasicType from, TBasicType to) const;
+    bool isIntegralConversion(TBasicType from, TBasicType to) const;
+    bool isFPConversion(TBasicType from, TBasicType to) const;
+    bool isFPIntegralConversion(TBasicType from, TBasicType to) const;
     TOperator mapTypeToConstructorOp(const TType&) const;
     TIntermAggregate* growAggregate(TIntermNode* left, TIntermNode* right);
     TIntermAggregate* growAggregate(TIntermNode* left, TIntermNode* right, const TSourceLoc&);
@@ -425,15 +432,14 @@
     TIntermTyped* addComma(TIntermTyped* left, TIntermTyped* right, const TSourceLoc&);
     TIntermTyped* addMethod(TIntermTyped*, const TType&, const TString*, const TSourceLoc&);
     TIntermConstantUnion* addConstantUnion(const TConstUnionArray&, const TType&, const TSourceLoc&, bool literal = false) const;
+    TIntermConstantUnion* addConstantUnion(signed char, const TSourceLoc&, bool literal = false) const;
+    TIntermConstantUnion* addConstantUnion(unsigned char, const TSourceLoc&, bool literal = false) const;
+    TIntermConstantUnion* addConstantUnion(signed short, const TSourceLoc&, bool literal = false) const;
+    TIntermConstantUnion* addConstantUnion(unsigned short, const TSourceLoc&, bool literal = false) const;
     TIntermConstantUnion* addConstantUnion(int, const TSourceLoc&, bool literal = false) const;
     TIntermConstantUnion* addConstantUnion(unsigned int, const TSourceLoc&, bool literal = false) const;
     TIntermConstantUnion* addConstantUnion(long long, const TSourceLoc&, bool literal = false) const;
     TIntermConstantUnion* addConstantUnion(unsigned long long, const TSourceLoc&, bool literal = false) const;
-#ifdef AMD_EXTENSIONS
-    TIntermConstantUnion* addConstantUnion(short, const TSourceLoc&, bool literal = false) const;
-    TIntermConstantUnion* addConstantUnion(unsigned short, const TSourceLoc&, bool literal = false) const;
-    
-#endif
     TIntermConstantUnion* addConstantUnion(bool, const TSourceLoc&, bool literal = false) const;
     TIntermConstantUnion* addConstantUnion(double, TBasicType, const TSourceLoc&, bool literal = false) const;
     TIntermConstantUnion* addConstantUnion(const TString*, const TSourceLoc&, bool literal = false) const;
@@ -643,6 +649,10 @@
     void pushSelector(TIntermSequence&, const TMatrixSelector&, const TSourceLoc&);
     bool specConstantPropagates(const TIntermTyped&, const TIntermTyped&);
     void performTextureUpgradeAndSamplerRemovalTransformation(TIntermNode* root);
+    bool isConversionAllowed(TOperator op, TIntermTyped* node) const;
+    TIntermUnary* createConversion(TBasicType convertTo, TIntermTyped* node) const;
+    std::tuple<TBasicType, TBasicType> getConversionDestinatonType(TBasicType type0, TBasicType type1, TOperator op) const;
+    bool extensionRequested(const char *extension) const {return requestedExtensions.find(extension) != requestedExtensions.end();}
     static const char* getResourceName(TResourceType);
 
     const EShLanguage language;  // stage, known at construction time
@@ -650,8 +660,8 @@
     std::string entryPointName;
     std::string entryPointMangledName;
 
-    EProfile profile;
-    int version;
+    EProfile profile;                           // source profile
+    int version;                                // source version
     SpvVersion spvVersion;
     TIntermNode* treeRoot;
     std::set<std::string> requestedExtensions;  // cumulation of all enabled or required extensions; not connected to what subset of the shader used them
diff --git a/glslang/MachineIndependent/parseVersions.h b/glslang/MachineIndependent/parseVersions.h
index 23f4cd8..df65f6c 100755
--- a/glslang/MachineIndependent/parseVersions.h
+++ b/glslang/MachineIndependent/parseVersions.h
@@ -1,5 +1,6 @@
 //
 // Copyright (C) 2016 Google, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -77,12 +78,16 @@
     virtual void updateExtensionBehavior(int line, const char* const extension, const char* behavior);
     virtual void fullIntegerCheck(const TSourceLoc&, const char* op);
     virtual void doubleCheck(const TSourceLoc&, const char* op);
-#ifdef AMD_EXTENSIONS
-    virtual void int16Check(const TSourceLoc& loc, const char* op, bool builtIn = false);
     virtual void float16Check(const TSourceLoc&, const char* op, bool builtIn = false);
+#ifdef AMD_EXTENSIONS
     virtual void float16OpaqueCheck(const TSourceLoc&, const char* op, bool builtIn = false);
 #endif
     virtual void int64Check(const TSourceLoc&, const char* op, bool builtIn = false);
+    virtual void explicitInt8Check(const TSourceLoc&, const char* op, bool builtIn = false);
+    virtual void explicitInt16Check(const TSourceLoc&, const char* op, bool builtIn = false);
+    virtual void explicitInt32Check(const TSourceLoc&, const char* op, bool builtIn = false);
+    virtual void explicitFloat32Check(const TSourceLoc&, const char* op, bool builtIn = false);
+    virtual void explicitFloat64Check(const TSourceLoc&, const char* op, bool builtIn = false);
     virtual void spvRemoved(const TSourceLoc&, const char* op);
     virtual void vulkanRemoved(const TSourceLoc&, const char* op);
     virtual void requireVulkan(const TSourceLoc&, const char* op);
diff --git a/glslang/MachineIndependent/preprocessor/Pp.cpp b/glslang/MachineIndependent/preprocessor/Pp.cpp
index 3ae711c..8048fa5 100644
--- a/glslang/MachineIndependent/preprocessor/Pp.cpp
+++ b/glslang/MachineIndependent/preprocessor/Pp.cpp
@@ -731,12 +731,10 @@
     TSourceLoc loc = ppToken->loc;
 
     while (token != '\n' && token != EndOfInput) {
-        if (token == PpAtomConstInt   || token == PpAtomConstUint   ||
+        if (token == PpAtomConstInt16 || token == PpAtomConstUint16 ||
+            token == PpAtomConstInt   || token == PpAtomConstUint   ||
             token == PpAtomConstInt64 || token == PpAtomConstUint64 ||
-#ifdef AMD_EXTENSIONS
-            token == PpAtomConstInt16 || token == PpAtomConstUint16 ||
             token == PpAtomConstFloat16 ||
-#endif
             token == PpAtomConstFloat || token == PpAtomConstDouble) {
                 message.append(ppToken->name);
         } else if (token == PpAtomIdentifier || token == PpAtomConstString) {
@@ -775,9 +773,7 @@
 #endif
         case PpAtomConstFloat:
         case PpAtomConstDouble:
-#ifdef AMD_EXTENSIONS
         case PpAtomConstFloat16:
-#endif
             tokens.push_back(ppToken->name);
             break;
         default:
diff --git a/glslang/MachineIndependent/preprocessor/PpScanner.cpp b/glslang/MachineIndependent/preprocessor/PpScanner.cpp
index ccb3930..13e9c1d 100644
--- a/glslang/MachineIndependent/preprocessor/PpScanner.cpp
+++ b/glslang/MachineIndependent/preprocessor/PpScanner.cpp
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2013 LunarG, Inc.
+// Copyright (C) 2017 ARM Limited.
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
@@ -186,10 +187,8 @@
             isDouble = 1;
         }
     } else if (ch == 'h' || ch == 'H') {
-#ifdef AMD_EXTENSIONS
         if (parseContext.intermediate.getSource() == EShSourceGlsl)
             parseContext.float16Check(ppToken->loc, "half floating-point suffix");
-#endif
         if (!HasDecimalOrExponent)
             parseContext.ppError(ppToken->loc, "float literal needs a decimal point or exponent", "", "");
         if (parseContext.intermediate.getSource() == EShSourceGlsl) {
@@ -322,11 +321,24 @@
     int ch = 0;
     int ii = 0;
     unsigned long long ival = 0;
-
     const auto floatingPointChar = [&](int ch) { return ch == '.' || ch == 'e' || ch == 'E' ||
                                                                      ch == 'f' || ch == 'F' ||
                                                                      ch == 'h' || ch == 'H'; };
 
+    static const char* const Int64_Extensions[] = {
+        E_GL_ARB_gpu_shader_int64,
+        E_GL_KHX_shader_explicit_arithmetic_types,
+        E_GL_KHX_shader_explicit_arithmetic_types_int64 };
+    static const int Num_Int64_Extensions = sizeof(Int64_Extensions) / sizeof(Int64_Extensions[0]);
+
+    static const char* const Int16_Extensions[] = {
+#ifdef AMD_EXTENSIONS
+        E_GL_AMD_gpu_shader_int16,
+#endif
+        E_GL_KHX_shader_explicit_arithmetic_types,
+        E_GL_KHX_shader_explicit_arithmetic_types_int16 };
+    static const int Num_Int16_Extensions = sizeof(Int16_Extensions) / sizeof(Int16_Extensions[0]);
+
     ppToken->ival = 0;
     ppToken->i64val = 0;
     ppToken->space = false;
@@ -389,9 +401,7 @@
 
                 bool isUnsigned = false;
                 bool isInt64 = false;
-#ifdef AMD_EXTENSIONS
                 bool isInt16 = false;
-#endif
                 ppToken->name[len++] = (char)ch;
                 ch = getch();
                 if ((ch >= '0' && ch <= '9') ||
@@ -469,21 +479,19 @@
                 if (isInt64 && pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
                     pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile,
                                                         "64-bit hexadecimal literal");
-                    pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0, E_GL_ARB_gpu_shader_int64,
-                                                        "64-bit hexadecimal literal");
+                    pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0,
+                        Num_Int64_Extensions, Int64_Extensions, "64-bit hexadecimal literal");
                     ppToken->i64val = ival;
                     return isUnsigned ? PpAtomConstUint64 : PpAtomConstInt64;
-#ifdef AMD_EXTENSIONS
                 } else if (isInt16) {
                     if (pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
                         pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile,
                                                          "16-bit hexadecimal literal");
-                        pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0, E_GL_AMD_gpu_shader_int16,
-                                                         "16-bit hexadecimal literal");
+                        pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0,
+                            Num_Int16_Extensions, Int16_Extensions, "16-bit hexadecimal literal");
                     }
                     ppToken->ival = (int)ival;
                     return isUnsigned ? PpAtomConstUint16 : PpAtomConstInt16;
-#endif
                 } else {
                     if (ival > 0xffffffffu && !AlreadyComplained)
                         pp->parseContext.ppError(ppToken->loc, "hexadecimal literal too big", "", "");
@@ -495,9 +503,7 @@
 
                 bool isUnsigned = false;
                 bool isInt64 = false;
-#ifdef AMD_EXTENSIONS
                 bool isInt16 = false;
-#endif
                 bool octalOverflow = false;
                 bool nonOctal = false;
                 ival = 0;
@@ -585,21 +591,19 @@
                 if (isInt64 && pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
                     pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile,
                                                         "64-bit octal literal");
-                    pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0, E_GL_ARB_gpu_shader_int64,
-                                                        "64-bit octal literal");
+                    pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0,
+                        Num_Int64_Extensions, Int64_Extensions, "64-bit octal literal");
                     ppToken->i64val = ival;
                     return isUnsigned ? PpAtomConstUint64 : PpAtomConstInt64;
-#ifdef AMD_EXTENSIONS
                 } else if (isInt16) {
                     if (pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
                         pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile,
                                                          "16-bit octal literal");
-                        pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0, E_GL_AMD_gpu_shader_int16,
-                                                         "16-bit octal literal");
+                        pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0,
+                            Num_Int16_Extensions, Int16_Extensions, "16-bit octal literal");
                     }
                     ppToken->ival = (int)ival;
                     return isUnsigned ? PpAtomConstUint16 : PpAtomConstInt16;
-#endif
                 } else {
                     ppToken->ival = (int)ival;
                     return isUnsigned ? PpAtomConstUint : PpAtomConstInt;
@@ -626,9 +630,7 @@
                 int numericLen = len;
                 bool isUnsigned = false;
                 bool isInt64 = false;
-#ifdef AMD_EXTENSIONS
                 bool isInt16 = false;
-#endif
                 if (ch == 'u' || ch == 'U') {
                     if (len < MaxTokenLength)
                         ppToken->name[len++] = (char)ch;
@@ -672,19 +674,15 @@
                 const unsigned remainderMaxInt = 0xFFFFFFFFu - 10 * oneTenthMaxInt;
                 const unsigned long long oneTenthMaxInt64  = 0xFFFFFFFFFFFFFFFFull / 10;
                 const unsigned long long remainderMaxInt64 = 0xFFFFFFFFFFFFFFFFull - 10 * oneTenthMaxInt64;
-#ifdef AMD_EXTENSIONS
                 const unsigned short oneTenthMaxInt16  = 0xFFFFu / 10;
                 const unsigned short remainderMaxInt16 = 0xFFFFu - 10 * oneTenthMaxInt16;
-#endif
                 for (int i = 0; i < numericLen; i++) {
                     ch = ppToken->name[i] - '0';
                     bool overflow = false;
                     if (isInt64)
                         overflow = (ival > oneTenthMaxInt64 || (ival == oneTenthMaxInt64 && (unsigned long long)ch > remainderMaxInt64));
-#ifdef AMD_EXTENSIONS
                     else if (isInt16)
                         overflow = (ival > oneTenthMaxInt16 || (ival == oneTenthMaxInt16 && (unsigned short)ch > remainderMaxInt16));
-#endif
                     else
                         overflow = (ival > oneTenthMaxInt || (ival == oneTenthMaxInt && (unsigned)ch > remainderMaxInt));
                     if (overflow) {
@@ -698,21 +696,19 @@
                 if (isInt64 && pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
                     pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile,
                                                         "64-bit literal");
-                    pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0, E_GL_ARB_gpu_shader_int64,
-                                                        "64-bit literal");
+                    pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0,
+                        Num_Int64_Extensions, Int64_Extensions, "64-bit literal");
                     ppToken->i64val = ival;
                     return isUnsigned ? PpAtomConstUint64 : PpAtomConstInt64;
-#ifdef AMD_EXTENSIONS
                 } else if (isInt16) {
                     if (pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
                         pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile,
                                                          "16-bit  literal");
-                        pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0, E_GL_AMD_gpu_shader_int16,
-                                                         "16-bit literal");
+                        pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0,
+                            Num_Int16_Extensions, Int16_Extensions, "16-bit literal");
                     }
                     ppToken->ival = (int)ival;
                     return isUnsigned ? PpAtomConstUint16 : PpAtomConstInt16;
-#endif
                 } else {
                     ppToken->ival = (int)ival;
                     return isUnsigned ? PpAtomConstUint : PpAtomConstInt;
@@ -962,14 +958,10 @@
         case PpAtomConstFloat:
         case PpAtomConstInt64:
         case PpAtomConstUint64:
-#ifdef AMD_EXTENSIONS
         case PpAtomConstInt16:
         case PpAtomConstUint16:
-#endif
         case PpAtomConstDouble:
-#ifdef AMD_EXTENSIONS
         case PpAtomConstFloat16:
-#endif
             if (ppToken.name[0] == '\0')
                 continue;
             break;
diff --git a/glslang/MachineIndependent/preprocessor/PpTokens.cpp b/glslang/MachineIndependent/preprocessor/PpTokens.cpp
index bc145e2..31e0d1f 100644
--- a/glslang/MachineIndependent/preprocessor/PpTokens.cpp
+++ b/glslang/MachineIndependent/preprocessor/PpTokens.cpp
@@ -147,9 +147,7 @@
 #endif
     case PpAtomConstFloat:
     case PpAtomConstDouble:
-#ifdef AMD_EXTENSIONS
     case PpAtomConstFloat16:
-#endif
         str = ppToken->name;
         while (*str) {
             putSubtoken(*str);
@@ -187,9 +185,7 @@
     case PpAtomIdentifier:
     case PpAtomConstFloat:
     case PpAtomConstDouble:
-#ifdef AMD_EXTENSIONS
     case PpAtomConstFloat16:
-#endif
     case PpAtomConstInt:
     case PpAtomConstUint:
     case PpAtomConstInt64:
@@ -219,9 +215,7 @@
             break;
         case PpAtomConstFloat:
         case PpAtomConstDouble:
-#ifdef AMD_EXTENSIONS
         case PpAtomConstFloat16:
-#endif
             ppToken->dval = atof(ppToken->name);
             break;
         case PpAtomConstInt:
diff --git a/glslang/MachineIndependent/preprocessor/PpTokens.h b/glslang/MachineIndependent/preprocessor/PpTokens.h
index d56df57..7b0f815 100644
--- a/glslang/MachineIndependent/preprocessor/PpTokens.h
+++ b/glslang/MachineIndependent/preprocessor/PpTokens.h
@@ -127,10 +127,8 @@
     PpAtomConstUint,
     PpAtomConstInt64,
     PpAtomConstUint64,
-#ifdef AMD_EXTENSIONS
     PpAtomConstInt16,
     PpAtomConstUint16,
-#endif
     PpAtomConstFloat,
     PpAtomConstDouble,
     PpAtomConstFloat16,
diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h
index 7415851..6f0bc54 100644
--- a/glslang/Public/ShaderLang.h
+++ b/glslang/Public/ShaderLang.h
@@ -70,7 +70,7 @@
 // This should always increase, as some paths to do not consume
 // a more major number.
 // It should increment by one when new functionality is added.
-#define GLSLANG_MINOR_VERSION 1
+#define GLSLANG_MINOR_VERSION 2
 
 //
 // Call before doing any other compiler/linker operations.
@@ -128,6 +128,17 @@
     EshTargetSpv = EShTargetSpv,  // legacy spelling
 } EShTargetLanguage;
 
+typedef enum {
+    EShTargetVulkan_1_0 = (1 << 22),
+    EShTargetVulkan_1_1 = (1 << 22) | (1 << 12),
+    EShTargetOpenGL_450 = 450,
+} EshTargetClientVersion;
+
+typedef enum {
+    EShTargetSpv_1_0 = (1 << 16),
+    EShTargetSpv_1_3 = (1 << 16) | (3 << 8),
+} EShTargetLanguageVersion;
+
 struct TInputLanguage {
     EShSource languageFamily; // redundant information with other input, this one overrides when not EShSourceNone
     EShLanguage stage;        // redundant information with other input, this one overrides when not EShSourceNone
@@ -137,12 +148,12 @@
 
 struct TClient {
     EShClient client;
-    int version;              // version of client itself (not the client's input dialect)
+    EshTargetClientVersion version;   // version of client itself (not the client's input dialect)
 };
 
 struct TTarget {
     EShTargetLanguage language;
-    unsigned int version;     // the version to target, if SPIR-V, defined by "word 1" of the SPIR-V binary header
+    EShTargetLanguageVersion version; // version to target, if SPIR-V, defined by "word 1" of the SPIR-V header
 };
 
 // All source/client/target versions and settings.
@@ -398,12 +409,12 @@
         environment.input.dialect = client;
         environment.input.dialectVersion = version;
     }
-    void setEnvClient(EShClient client, int version)
+    void setEnvClient(EShClient client, EshTargetClientVersion version)
     {
         environment.client.client = client;
         environment.client.version = version;
     }
-    void setEnvTarget(EShTargetLanguage lang, unsigned int version)
+    void setEnvTarget(EShTargetLanguage lang, EShTargetLanguageVersion version)
     {
         environment.target.language = lang;
         environment.target.version = version;
diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp
index 5f6de4f..825e4dd 100644
--- a/gtests/AST.FromFile.cpp
+++ b/gtests/AST.FromFile.cpp
@@ -44,7 +44,7 @@
 TEST_P(CompileToAstTest, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
-                            Source::GLSL, Semantics::OpenGL,
+                            Source::GLSL, Semantics::OpenGL, glslang::EShTargetVulkan_1_0,
                             Target::AST);
 }
 
@@ -210,6 +210,7 @@
         "precise.tesc",
         "precise_struct_block.vert",
         "maxClipDistances.vert",
+        "findFunction.frag",
     })),
     FileNameAsCustomTestSuffix
 );
diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp
index 2c92bdb..068338a 100644
--- a/gtests/Hlsl.FromFile.cpp
+++ b/gtests/Hlsl.FromFile.cpp
@@ -58,6 +58,7 @@
 }
 
 using HlslCompileTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
+using HlslVulkan1_1CompileTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
 using HlslCompileAndFlattenTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
 using HlslLegalizeTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
 
@@ -66,7 +67,14 @@
 TEST_P(HlslCompileTest, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam().fileName,
-                            Source::HLSL, Semantics::Vulkan,
+                            Source::HLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
+                            Target::BothASTAndSpv, true, GetParam().entryPoint);
+}
+
+TEST_P(HlslVulkan1_1CompileTest, FromFile)
+{
+    loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam().fileName,
+                            Source::HLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_1,
                             Target::BothASTAndSpv, true, GetParam().entryPoint);
 }
 
@@ -82,7 +90,7 @@
 TEST_P(HlslLegalizeTest, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam().fileName,
-                            Source::HLSL, Semantics::Vulkan,
+                            Source::HLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
                             Target::Spv, true, GetParam().entryPoint,
                             "/baseLegalResults/", false);
 }
@@ -377,6 +385,22 @@
 
 // clang-format off
 INSTANTIATE_TEST_CASE_P(
+    ToSpirv, HlslVulkan1_1CompileTest,
+    ::testing::ValuesIn(std::vector<FileNameEntryPointPair>{
+        {"hlsl.wavebroadcast.comp", "CSMain"},
+        {"hlsl.waveprefix.comp", "CSMain"},
+        {"hlsl.wavequad.comp", "CSMain"},
+        {"hlsl.wavequery.comp", "CSMain"},
+        {"hlsl.wavequery.frag", "PixelShaderFunction"},
+        {"hlsl.wavereduction.comp", "CSMain"},
+        {"hlsl.wavevote.comp", "CSMain"},
+    }),
+    FileNameAsCustomTestSuffix
+);
+// clang-format on
+
+// clang-format off
+INSTANTIATE_TEST_CASE_P(
     ToSpirv, HlslCompileAndFlattenTest,
     ::testing::ValuesIn(std::vector<FileNameEntryPointPair>{
         {"hlsl.array.flatten.frag", "main"},
diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp
index 7340cae..20ef2d7 100644
--- a/gtests/Spv.FromFile.cpp
+++ b/gtests/Spv.FromFile.cpp
@@ -63,6 +63,7 @@
 }
 
 using CompileVulkanToSpirvTest = GlslangTest<::testing::TestWithParam<std::string>>;
+using CompileVulkan1_1ToSpirvTest = GlslangTest<::testing::TestWithParam<std::string>>;
 using CompileOpenGLToSpirvTest = GlslangTest<::testing::TestWithParam<std::string>>;
 using VulkanSemantics = GlslangTest<::testing::TestWithParam<std::string>>;
 using OpenGLSemantics = GlslangTest<::testing::TestWithParam<std::string>>;
@@ -82,7 +83,14 @@
 TEST_P(CompileVulkanToSpirvTest, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
-                            Source::GLSL, Semantics::Vulkan,
+                            Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
+                            Target::Spv);
+}
+
+TEST_P(CompileVulkan1_1ToSpirvTest, FromFile)
+{
+    loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
+                            Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_1,
                             Target::Spv);
 }
 
@@ -91,7 +99,7 @@
 TEST_P(CompileOpenGLToSpirvTest, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
-                            Source::GLSL, Semantics::OpenGL,
+                            Source::GLSL, Semantics::OpenGL, glslang::EShTargetVulkan_1_0,
                             Target::Spv);
 }
 
@@ -100,7 +108,7 @@
 TEST_P(VulkanSemantics, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
-                            Source::GLSL, Semantics::Vulkan,
+                            Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
                             Target::Spv, false);
 }
 
@@ -109,7 +117,7 @@
 TEST_P(OpenGLSemantics, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
-                            Source::GLSL, Semantics::OpenGL,
+                            Source::GLSL, Semantics::OpenGL, glslang::EShTargetVulkan_1_0,
                             Target::Spv, false);
 }
 
@@ -117,7 +125,7 @@
 TEST_P(VulkanAstSemantics, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
-                            Source::GLSL, Semantics::Vulkan,
+                            Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
                             Target::AST);
 }
 
@@ -157,7 +165,7 @@
 TEST_P(CompileVulkanToSpirvTestAMD, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
-                            Source::GLSL, Semantics::Vulkan,
+                            Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
                             Target::Spv);
 }
 #endif
@@ -168,7 +176,7 @@
 TEST_P(CompileVulkanToSpirvTestNV, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
-                            Source::GLSL, Semantics::Vulkan,
+                            Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
                             Target::Spv);
 }
 #endif
@@ -243,9 +251,7 @@
         "spv.dataOutIndirect.vert",
         "spv.deepRvalue.frag",
         "spv.depthOut.frag",
-        "spv.deviceGroup.frag",
         "spv.discard-dce.frag",
-        "spv.drawParams.vert",
         "spv.doWhileLoop.frag",
         "spv.earlyReturnDiscard.frag",
         "spv.extPostDepthCoverage.frag",
@@ -273,7 +279,6 @@
         "spv.merge-unreachable.frag",
         "spv.multiStruct.comp",
         "spv.multiStructFuncall.frag",
-        "spv.multiView.frag",
         "spv.newTexture.frag",
         "spv.noDeadDecorations.vert",
         "spv.nonSquare.vert",
@@ -332,6 +337,7 @@
         "spv.storageBuffer.vert",
         "spv.precise.tese",
         "spv.precise.tesc",
+        "spv.vulkan100.subgroupArithmetic.comp",
         "spv.xfb.vert",
         "spv.xfb2.vert",
         "spv.xfb3.vert",
@@ -341,6 +347,38 @@
 
 // clang-format off
 INSTANTIATE_TEST_CASE_P(
+    Glsl, CompileVulkan1_1ToSpirvTest,
+    ::testing::ValuesIn(std::vector<std::string>({
+        "spv.deviceGroup.frag",
+        "spv.drawParams.vert",
+        "spv.int8.frag",
+        "spv.vulkan110.int16.frag",
+        "spv.int32.frag",
+        "spv.explicittypes.frag",
+        "spv.float32.frag",
+        "spv.float64.frag",
+        "spv.multiView.frag",
+        "spv.subgroup.frag",
+        "spv.subgroup.geom",
+        "spv.subgroup.tesc",
+        "spv.subgroup.tese",
+        "spv.subgroup.vert",
+        "spv.subgroupArithmetic.comp",
+        "spv.subgroupBasic.comp",
+        "spv.subgroupBallot.comp",
+        "spv.subgroupClustered.comp",
+        "spv.subgroupClusteredNeg.comp",
+        "spv.subgroupShuffle.comp",
+        "spv.subgroupShuffleRelative.comp",
+        "spv.subgroupQuad.comp",
+        "spv.subgroupVote.comp",
+        "spv.vulkan110.storageBuffer.vert",
+    })),
+    FileNameAsCustomTestSuffix
+);
+
+// clang-format off
+INSTANTIATE_TEST_CASE_P(
     Hlsl, HlslIoMap,
     ::testing::ValuesIn(std::vector<IoMapData>{
         { "spv.register.autoassign.frag", "main_ep", 5, 10, 0, 20, 30, true, false },
@@ -422,6 +460,7 @@
         "spv.float16Fetch.frag",
         "spv.imageLoadStoreLod.frag",
         "spv.int16.frag",
+        "spv.int16.amd.frag",
         "spv.shaderBallotAMD.comp",
         "spv.shaderFragMaskAMD.frag",
         "spv.textureGatherBiasLod.frag",
diff --git a/gtests/TestFixture.h b/gtests/TestFixture.h
index 9e77df8..5af96d9 100644
--- a/gtests/TestFixture.h
+++ b/gtests/TestFixture.h
@@ -70,7 +70,7 @@
 // Enum for shader compilation semantics.
 enum class Semantics {
     OpenGL,
-    Vulkan,
+    Vulkan
 };
 
 // Enum for compilation target.
@@ -197,14 +197,15 @@
     GlslangResult compileAndLink(
             const std::string shaderName, const std::string& code,
             const std::string& entryPointName, EShMessages controls,
+            glslang::EshTargetClientVersion clientTargetVersion,
             bool flattenUniformArrays = false,
             EShTextureSamplerTransformMode texSampTransMode = EShTexSampTransKeep,
             bool disableOptimizer = true,
             bool automap = true)
     {
-        const EShLanguage kind = GetShaderStage(GetSuffix(shaderName));
+        const EShLanguage stage = GetShaderStage(GetSuffix(shaderName));
 
-        glslang::TShader shader(kind);
+        glslang::TShader shader(stage);
         if (automap) {
             shader.setAutoMapLocations(true);
             shader.setAutoMapBindings(true);
@@ -212,6 +213,24 @@
         shader.setTextureSamplerTransformMode(texSampTransMode);
         shader.setFlattenUniformArrays(flattenUniformArrays);
 
+        if (controls & EShMsgSpvRules) {
+            if (controls & EShMsgVulkanRules) {
+                shader.setEnvInput((controls & EShMsgReadHlsl) ? glslang::EShSourceHlsl
+                                                               : glslang::EShSourceGlsl,
+                                    stage, glslang::EShClientVulkan, 100);
+                shader.setEnvClient(glslang::EShClientVulkan, clientTargetVersion);
+                shader.setEnvTarget(glslang::EShTargetSpv,
+                        clientTargetVersion == glslang::EShTargetVulkan_1_1 ? glslang::EShTargetSpv_1_3
+                                                                            : glslang::EShTargetSpv_1_0);
+            } else {
+                shader.setEnvInput((controls & EShMsgReadHlsl) ? glslang::EShSourceHlsl
+                                                               : glslang::EShSourceGlsl,
+                                    stage, glslang::EShClientOpenGL, 100);
+                shader.setEnvClient(glslang::EShClientOpenGL, clientTargetVersion);
+                shader.setEnvTarget(glslang::EshTargetSpv, glslang::EShTargetSpv_1_0);
+            }
+        }
+
         bool success = compile(&shader, code, entryPointName, controls);
 
         glslang::TProgram program;
@@ -224,7 +243,7 @@
             std::vector<uint32_t> spirv_binary;
             glslang::SpvOptions options;
             options.disableOptimizer = disableOptimizer;
-            glslang::GlslangToSpv(*program.getIntermediate(kind),
+            glslang::GlslangToSpv(*program.getIntermediate(stage),
                                   spirv_binary, &logger, &options);
 
             std::ostringstream disassembly_stream;
@@ -255,9 +274,9 @@
             bool autoMapBindings,
             bool flattenUniformArrays)
     {
-        const EShLanguage kind = GetShaderStage(GetSuffix(shaderName));
+        const EShLanguage stage = GetShaderStage(GetSuffix(shaderName));
 
-        glslang::TShader shader(kind);
+        glslang::TShader shader(stage);
         shader.setShiftSamplerBinding(baseSamplerBinding);
         shader.setShiftTextureBinding(baseTextureBinding);
         shader.setShiftImageBinding(baseImageBinding);
@@ -279,7 +298,7 @@
 
         if (success && (controls & EShMsgSpvRules)) {
             std::vector<uint32_t> spirv_binary;
-            glslang::GlslangToSpv(*program.getIntermediate(kind),
+            glslang::GlslangToSpv(*program.getIntermediate(stage),
                                   spirv_binary, &logger);
 
             std::ostringstream disassembly_stream;
@@ -303,9 +322,9 @@
             const std::string& entryPointName, EShMessages controls,
             const unsigned int remapOptions = spv::spirvbin_t::NONE)
     {
-        const EShLanguage kind = GetShaderStage(GetSuffix(shaderName));
+        const EShLanguage stage = GetShaderStage(GetSuffix(shaderName));
 
-        glslang::TShader shader(kind);
+        glslang::TShader shader(stage);
         shader.setAutoMapBindings(true);
         shader.setAutoMapLocations(true);
 
@@ -319,7 +338,7 @@
 
         if (success && (controls & EShMsgSpvRules)) {
             std::vector<uint32_t> spirv_binary;
-            glslang::GlslangToSpv(*program.getIntermediate(kind),
+            glslang::GlslangToSpv(*program.getIntermediate(stage),
                                   spirv_binary, &logger);
 
             spv::spirvbin_t(0 /*verbosity*/).remap(spirv_binary, remapOptions);
@@ -388,6 +407,7 @@
                                  const std::string& testName,
                                  Source source,
                                  Semantics semantics,
+                                 glslang::EshTargetClientVersion clientTargetVersion,
                                  Target target,
                                  bool automap = true,
                                  const std::string& entryPointName="",
@@ -403,8 +423,8 @@
         tryLoadFile(expectedOutputFname, "expected output", &expectedOutput);
 
         const EShMessages controls = DeriveOptions(source, semantics, target);
-        GlslangResult result = compileAndLink(testName, input, entryPointName, controls, false, EShTexSampTransKeep,
-                                              disableOptimizer, automap);
+        GlslangResult result = compileAndLink(testName, input, entryPointName, controls, clientTargetVersion, false,
+                                              EShTexSampTransKeep, disableOptimizer, automap);
 
         // Generate the hybrid output in the way of glslangValidator.
         std::ostringstream stream;
@@ -430,7 +450,8 @@
         tryLoadFile(expectedOutputFname, "expected output", &expectedOutput);
 
         const EShMessages controls = DeriveOptions(source, semantics, target);
-        GlslangResult result = compileAndLink(testName, input, entryPointName, controls, true);
+        GlslangResult result = compileAndLink(testName, input, entryPointName, controls,
+                                              glslang::EShTargetVulkan_1_0, true);
 
         // Generate the hybrid output in the way of glslangValidator.
         std::ostringstream stream;
@@ -599,7 +620,8 @@
         tryLoadFile(expectedOutputFname, "expected output", &expectedOutput);
 
         const EShMessages controls = DeriveOptions(source, semantics, target);
-        GlslangResult result = compileAndLink(testName, input, entryPointName, controls, false,
+        GlslangResult result = compileAndLink(testName, input, entryPointName, controls,
+                                              glslang::EShTargetVulkan_1_0, false,
                                               EShTexSampTransUpgradeTextureRemoveSampler);
 
         // Generate the hybrid output in the way of glslangValidator.
diff --git a/gtests/main.cpp b/gtests/main.cpp
index 35f30db..9cd06d1 100644
--- a/gtests/main.cpp
+++ b/gtests/main.cpp
@@ -54,7 +54,7 @@
             glslangtest::GlobalTestSettings.updateMode = true;
         }
         if (std::string("--test-root") == argv[i]) {
-            // Allow the user set the tets root directory.  This is useful
+            // Allow the user set the test root directory.  This is useful
             // for testing with files from another source tree.
             if (i + 1 < argc) {
                 glslangtest::GlobalTestSettings.testRoot = argv[i + 1];
@@ -64,6 +64,11 @@
                 return 1;
             }
         }
+        if (std::string("--help") == argv[i]) {
+            printf("\nExtra options:\n\n");
+            printf("  --update-mode\n      Update the golden results for the tests.\n");
+            printf("  --test-root <arg>\n      Specify the test root directory (useful for testing with\n      files from another source tree).\n");
+        }
     }
 
     const int result = RUN_ALL_TESTS();
diff --git a/hlsl/hlslGrammar.cpp b/hlsl/hlslGrammar.cpp
index 57e34d1..8bcee50 100755
--- a/hlsl/hlslGrammar.cpp
+++ b/hlsl/hlslGrammar.cpp
@@ -1590,6 +1590,10 @@
         new(&type) TType(EbtUint, EvqTemporary, 4);
         break;
 
+    case EHTokUint64:
+        new(&type) TType(EbtUint64);
+        break;
+
     case EHTokBool:
         new(&type) TType(EbtBool);
         break;
diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp
index 2395daf..d719b04 100755
--- a/hlsl/hlslParseHelper.cpp
+++ b/hlsl/hlslParseHelper.cpp
@@ -4559,6 +4559,22 @@
         return imageAggregate != nullptr && imageAggregate->getOp() == EOpImageLoad;
     };
 
+    const auto lookupBuiltinVariable = [&](const char* name, TBuiltInVariable builtin, TType& type) -> TIntermTyped* {
+        TSymbol* symbol = symbolTable.find(name);
+        if (nullptr == symbol) {
+            type.getQualifier().builtIn = builtin;
+
+            TVariable* variable = new TVariable(new TString(name), type);
+
+            symbolTable.insert(*variable);
+
+            symbol = symbolTable.find(name);
+            assert(symbol && "Inserted symbol could not be found!");
+        }
+
+        return intermediate.addSymbol(*(symbol->getAsVariable()), loc);
+    };
+
     // HLSL intrinsics can be pass through to native AST opcodes, or decomposed here to existing AST
     // opcodes for compatibility with existing software stacks.
     static const bool decomposeHlslIntrinsics = true;
@@ -5115,7 +5131,65 @@
 
             break;
         }
-        
+    case EOpWaveGetLaneCount:
+        {
+            // Mapped to gl_SubgroupSize builtin (We preprend @ to the symbol
+            // so that it inhabits the symbol table, but has a user-invalid name
+            // in-case some source HLSL defined the symbol also).
+            TType type(EbtUint, EvqVaryingIn);
+            node = lookupBuiltinVariable("@gl_SubgroupSize", EbvSubgroupSize2, type);
+            break;
+        }
+    case EOpWaveGetLaneIndex:
+        {
+            // Mapped to gl_SubgroupInvocationID builtin (We preprend @ to the
+            // symbol so that it inhabits the symbol table, but has a
+            // user-invalid name in-case some source HLSL defined the symbol
+            // also).
+            TType type(EbtUint, EvqVaryingIn);
+            node = lookupBuiltinVariable("@gl_SubgroupInvocationID", EbvSubgroupInvocation2, type);
+            break;
+        }
+    case EOpWaveActiveCountBits:
+        {
+            // Mapped to subgroupBallotBitCount(subgroupBallot()) builtin
+
+            // uvec4 type.
+            TType uvec4Type(EbtUint, EvqTemporary, 4);
+
+            // Get the uvec4 return from subgroupBallot().
+            TIntermTyped* res = intermediate.addBuiltInFunctionCall(loc,
+                EOpSubgroupBallot, true, arguments, uvec4Type);
+
+            // uint type.
+            TType uintType(EbtUint, EvqTemporary);
+
+            node = intermediate.addBuiltInFunctionCall(loc,
+                EOpSubgroupBallotBitCount, true, res, uintType);
+
+            break;
+        }
+    case EOpWavePrefixCountBits:
+        {
+            // Mapped to subgroupBallotInclusiveBitCount(subgroupBallot())
+            // builtin
+
+            // uvec4 type.
+            TType uvec4Type(EbtUint, EvqTemporary, 4);
+
+            // Get the uvec4 return from subgroupBallot().
+            TIntermTyped* res = intermediate.addBuiltInFunctionCall(loc,
+                EOpSubgroupBallot, true, arguments, uvec4Type);
+
+            // uint type.
+            TType uintType(EbtUint, EvqTemporary);
+
+            node = intermediate.addBuiltInFunctionCall(loc,
+                EOpSubgroupBallotInclusiveBitCount, true, res, uintType);
+
+            break;
+        }
+
     default:
         break; // most pass through unchanged
     }
diff --git a/hlsl/hlslParseables.cpp b/hlsl/hlslParseables.cpp
index a049391..5022fcb 100755
--- a/hlsl/hlslParseables.cpp
+++ b/hlsl/hlslParseables.cpp
@@ -259,6 +259,8 @@
         case 'D': s += "double";                              break;
         case 'I': s += "int";                                 break;
         case 'U': s += "uint";                                break;
+        case 'L': s += "int64_t";                             break;
+        case 'M': s += "uint64_t";                            break;
         case 'B': s += "bool";                                break;
         case 'S': s += "sampler";                             break;
         case 's': s += "SamplerComparisonState";              break;
@@ -544,7 +546,7 @@
     // orderKey can be:
     //   S = scalar, V = vector, M = matrix, - = void
     // typekey can be:
-    //   D = double, F = float, U = uint, I = int, B = bool, S = sampler, s = shadowSampler
+    //   D = double, F = float, U = uint, I = int, B = bool, S = sampler, s = shadowSampler, M = uint64_t, L = int64_t
     // An empty order or type key repeats the first one.  E.g: SVM,, means 3 args each of SVM.
     // '>' as first letter of order creates an output parameter
     // '<' as first letter of order creates an input parameter
@@ -902,6 +904,35 @@
         { "DecrementCounter",                 nullptr, nullptr,   "-",              "-",              EShLangAll,   true },
         { "Consume",                          nullptr, nullptr,   "-",              "-",              EShLangAll,   true },
 
+        // SM 6.0
+
+        { "WaveIsFirstLane",                  "S",     "B",       "-",              "-",              EShLangPSCS,  false},
+        { "WaveGetLaneCount",                 "S",     "U",       "-",              "-",              EShLangPSCS,  false},
+        { "WaveGetLaneIndex",                 "S",     "U",       "-",              "-",              EShLangPSCS,  false},
+        { "WaveActiveAnyTrue",                "S",     "B",       "S",              "B",              EShLangPSCS,  false},
+        { "WaveActiveAllTrue",                "S",     "B",       "S",              "B",              EShLangPSCS,  false},
+        { "WaveActiveBallot",                 "V4",    "U",       "S",              "B",              EShLangPSCS,  false},
+        { "WaveReadLaneAt",                   nullptr, nullptr,   "SV,S",           "DFUI,U",         EShLangPSCS,  false},
+        { "WaveReadFirstLane",                nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "WaveActiveAllEqual",               "S",     "B",       "SV",             "DFUI",           EShLangPSCS,  false},
+        { "WaveActiveAllEqualBool",           "S",     "B",       "S",              "B",              EShLangPSCS,  false},
+        { "WaveActiveCountBits",              "S",     "U",       "S",              "B",              EShLangPSCS,  false},
+        
+        { "WaveActiveSum",                    nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "WaveActiveProduct",                nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "WaveActiveBitAnd",                 nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "WaveActiveBitOr",                  nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "WaveActiveBitXor",                 nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "WaveActiveMin",                    nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "WaveActiveMax",                    nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "WavePrefixSum",                    nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "WavePrefixProduct",                nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "WavePrefixCountBits",              "S",     "U",       "S",              "B",              EShLangPSCS,  false},
+        { "QuadReadAcrossX",                  nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "QuadReadAcrossY",                  nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "QuadReadAcrossDiagonal",           nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "QuadReadLaneAt",                   nullptr, nullptr,   "SV,S",           "DFUI,U",         EShLangPSCS,  false},
+
         // Methods for subpass input objects
         { "SubpassLoad",                      "V4",    nullptr,   "[",              "FIU",            EShLangPS,    true },
         { "SubpassLoad",                      "V4",    nullptr,   "],S",            "FIU,I",          EShLangPS,    true },
@@ -1244,6 +1275,33 @@
     symbolTable.relateToOperator(BUILTIN_PREFIX "Append",                      EOpMethodAppend);
     symbolTable.relateToOperator(BUILTIN_PREFIX "RestartStrip",                EOpMethodRestartStrip);
 
+    // Wave ops
+    symbolTable.relateToOperator("WaveIsFirstLane",                            EOpSubgroupElect);
+    symbolTable.relateToOperator("WaveGetLaneCount",                           EOpWaveGetLaneCount);
+    symbolTable.relateToOperator("WaveGetLaneIndex",                           EOpWaveGetLaneIndex);
+    symbolTable.relateToOperator("WaveActiveAnyTrue",                          EOpSubgroupAny);
+    symbolTable.relateToOperator("WaveActiveAllTrue",                          EOpSubgroupAll);
+    symbolTable.relateToOperator("WaveActiveBallot",                           EOpSubgroupBallot);
+    symbolTable.relateToOperator("WaveReadFirstLane",                          EOpSubgroupBroadcastFirst);
+    symbolTable.relateToOperator("WaveReadLaneAt",                             EOpSubgroupShuffle);
+    symbolTable.relateToOperator("WaveActiveAllEqual",                         EOpSubgroupAllEqual);
+    symbolTable.relateToOperator("WaveActiveAllEqualBool",                     EOpSubgroupAllEqual);
+    symbolTable.relateToOperator("WaveActiveCountBits",                        EOpWaveActiveCountBits);
+    symbolTable.relateToOperator("WaveActiveSum",                              EOpSubgroupAdd);
+    symbolTable.relateToOperator("WaveActiveProduct",                          EOpSubgroupMul);
+    symbolTable.relateToOperator("WaveActiveBitAnd",                           EOpSubgroupAnd);
+    symbolTable.relateToOperator("WaveActiveBitOr",                            EOpSubgroupOr);
+    symbolTable.relateToOperator("WaveActiveBitXor",                           EOpSubgroupXor);
+    symbolTable.relateToOperator("WaveActiveMin",                              EOpSubgroupMin);
+    symbolTable.relateToOperator("WaveActiveMax",                              EOpSubgroupMax);
+    symbolTable.relateToOperator("WavePrefixSum",                              EOpSubgroupInclusiveAdd);
+    symbolTable.relateToOperator("WavePrefixProduct",                          EOpSubgroupInclusiveMul);
+    symbolTable.relateToOperator("WavePrefixCountBits",                        EOpWavePrefixCountBits);
+    symbolTable.relateToOperator("QuadReadAcrossX",                            EOpSubgroupQuadSwapHorizontal);
+    symbolTable.relateToOperator("QuadReadAcrossY",                            EOpSubgroupQuadSwapVertical);
+    symbolTable.relateToOperator("QuadReadAcrossDiagonal",                     EOpSubgroupQuadSwapDiagonal);
+    symbolTable.relateToOperator("QuadReadLaneAt",                             EOpSubgroupQuadBroadcast);
+
     // Subpass input methods
     symbolTable.relateToOperator(BUILTIN_PREFIX "SubpassLoad",                 EOpSubpassLoad);
     symbolTable.relateToOperator(BUILTIN_PREFIX "SubpassLoadMS",               EOpSubpassLoadMS);
diff --git a/hlsl/hlslScanContext.cpp b/hlsl/hlslScanContext.cpp
index 650918b..06f7675 100755
--- a/hlsl/hlslScanContext.cpp
+++ b/hlsl/hlslScanContext.cpp
@@ -143,6 +143,7 @@
     (*KeywordMap)["bool"] =                    EHTokBool;
     (*KeywordMap)["int"] =                     EHTokInt;
     (*KeywordMap)["uint"] =                    EHTokUint;
+    (*KeywordMap)["uint64_t"] =                EHTokUint64;
     (*KeywordMap)["dword"] =                   EHTokDword;
     (*KeywordMap)["half"] =                    EHTokHalf;
     (*KeywordMap)["float"] =                   EHTokFloat;
@@ -650,6 +651,7 @@
     case EHTokBool:
     case EHTokInt:
     case EHTokUint:
+    case EHTokUint64:
     case EHTokDword:
     case EHTokHalf:
     case EHTokFloat:
diff --git a/hlsl/hlslTokens.h b/hlsl/hlslTokens.h
index 98450c9..9354ad9 100755
--- a/hlsl/hlslTokens.h
+++ b/hlsl/hlslTokens.h
@@ -95,6 +95,7 @@
     EHTokBool,
     EHTokInt,
     EHTokUint,
+    EHTokUint64,
     EHTokDword,
     EHTokHalf,
     EHTokFloat,