Merge remote-tracking branch 'GitHub/master'
diff --git a/README.md b/README.md
index 9d5efb5..504447e 100644
--- a/README.md
+++ b/README.md
@@ -1,50 +1,7 @@
-Also see the Khronos landing page for glslang as a reference front end:
+Private version of glslang for Khronos-internal development.
 
-https://www.khronos.org/opengles/sdk/tools/Reference-Compiler/
-
-The above page includes where to get binaries, and is kept up to date
-regarding the feature level of glslang.
-
-glslang
-=======
-
-[![Build Status](https://travis-ci.org/KhronosGroup/glslang.svg?branch=master)](https://travis-ci.org/KhronosGroup/glslang)
-[![Build status](https://ci.appveyor.com/api/projects/status/q6fi9cb0qnhkla68/branch/master?svg=true)](https://ci.appveyor.com/project/Khronoswebmaster/glslang/branch/master)
-
-An OpenGL and OpenGL ES shader front end and validator.
-
-There are several components:
-
-1. A GLSL/ESSL front-end for reference validation and translation of GLSL/ESSL into an AST.
-
-2. An HLSL front-end for translation of a broad generic HLL into the AST. See [issue 362](https://github.com/KhronosGroup/glslang/issues/362) and [issue 701](https://github.com/KhronosGroup/glslang/issues/701) for current status.
-
-3. A SPIR-V back end for translating the AST to SPIR-V.
-
-4. A standalone wrapper, `glslangValidator`, that can be used as a command-line tool for the above.
-
-How to add a feature protected by a version/extension/stage/profile:  See the
-comment in `glslang/MachineIndependent/Versions.cpp`.
-
-Tasks waiting to be done are documented as GitHub issues.
-
-Execution of Standalone Wrapper
--------------------------------
-
-To use the standalone binary form, execute `glslangValidator`, and it will print
-a usage statement.  Basic operation is to give it a file containing a shader,
-and it will print out warnings/errors and optionally an AST.
-
-The applied stage-specific rules are based on the file extension:
-* `.vert` for a vertex shader
-* `.tesc` for a tessellation control shader
-* `.tese` for a tessellation evaluation shader
-* `.geom` for a geometry shader
-* `.frag` for a fragment shader
-* `.comp` for a compute shader
-
-There is also a non-shader extension
-* `.conf` for a configuration file of limits, see usage statement for example
+MRs to add functionality must be accompanied by simple regression tests, which are supplied with the gtests framework.
+See instructions below.
 
 Building
 --------
@@ -54,7 +11,7 @@
 * [CMake][cmake]: for generating compilation targets.
 * [Python 2.7][python]: for executing SPIRV-Tools scripts. (Optional if not using SPIRV-Tools.)
 * [bison][bison]: _optional_, but needed when changing the grammar (glslang.y).
-* [googletest][googletest]: _optional_, but should use if making any changes to glslang.
+* [googletest][googletest]: needed if making any changes to glslang.
 
 ### Build steps
 
@@ -63,9 +20,9 @@
 ```bash
 cd <parent of where you want glslang to be>
 # If using SSH
-git clone git@github.com:KhronosGroup/glslang.git
+git clone git@gitlab.khronos.org:GLSL/glslang.git
 # Or if using HTTPS
-git clone https://github.com/KhronosGroup/glslang.git
+git clone https://gitlab.khronos.org/GLSL/glslang.git
 ```
 
 #### 2) Check-Out External Projects
diff --git a/SPIRV/GLSL.ext.AMD.h b/SPIRV/GLSL.ext.AMD.h
index 7e97be3..d4f57ef 100644
--- a/SPIRV/GLSL.ext.AMD.h
+++ b/SPIRV/GLSL.ext.AMD.h
@@ -104,14 +104,7 @@
 // SPV_AMD_shader_image_load_store_lod
 static const char* const E_SPV_AMD_shader_image_load_store_lod = "SPV_AMD_shader_image_load_store_lod";
 
-static const Capability CapabilityImageReadWriteLodAMD = static_cast<Capability>(5015);
-
 // SPV_AMD_shader_fragment_mask
 static const char* const E_SPV_AMD_shader_fragment_mask = "SPV_AMD_shader_fragment_mask";
 
-static const Capability CapabilityFragmentMaskAMD = static_cast<Capability>(5010);
-
-static const Op OpFragmentMaskFetchAMD = static_cast<Op>(5011);
-static const Op OpFragmentFetchAMD     = static_cast<Op>(5012);
-
 #endif  // #ifndef GLSLextAMD_H
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
old mode 100755
new mode 100644
index a6bd4d7..0662787
--- 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.
 //
@@ -174,10 +175,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);
@@ -581,6 +584,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);
@@ -652,7 +695,7 @@
             builder.addCapability(spv::CapabilityPerViewAttributesNV);
         }
         return spv::BuiltInViewportMaskPerViewNV;
-#endif 
+#endif
     default:
         return spv::BuiltInMax;
     }
@@ -889,6 +932,7 @@
       inEntryPoint(false), entryPointTerminated(false), linkageOnly(false),
       glslangIntermediate(glslangIntermediate)
 {
+    builder.setTargetVersion(glslangIntermediate->getSpv().spv);
     spv::ExecutionModel executionModel = TranslateExecutionModel(glslangIntermediate->getStage());
 
     builder.clearAccessChain();
@@ -1417,16 +1461,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;
@@ -1631,7 +1673,6 @@
     case glslang::EOpConstructBMat4x2:
     case glslang::EOpConstructBMat4x3:
     case glslang::EOpConstructBMat4x4:
-#ifdef AMD_EXTENSIONS
     case glslang::EOpConstructF16Mat2x2:
     case glslang::EOpConstructF16Mat2x3:
     case glslang::EOpConstructF16Mat2x4:
@@ -1641,7 +1682,6 @@
     case glslang::EOpConstructF16Mat4x2:
     case glslang::EOpConstructF16Mat4x3:
     case glslang::EOpConstructF16Mat4x4:
-#endif
         isMatrix = true;
         // fall through
     case glslang::EOpConstructFloat:
@@ -1652,16 +1692,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:
@@ -1678,16 +1732,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:
     {
@@ -1767,6 +1811,11 @@
     case glslang::EOpGroupMemoryBarrierWithGroupSync:
     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;
@@ -1990,7 +2039,7 @@
 
         // smear condition to vector, if necessary (AST is always scalar)
         if (builder.isVector(trueValue))
-            condition = builder.smearScalar(spv::NoPrecision, condition, 
+            condition = builder.smearScalar(spv::NoPrecision, condition,
                                             builder.makeVectorType(builder.makeBoolType(),
                                                                    builder.getNumComponents(trueValue)));
 
@@ -2248,7 +2297,6 @@
     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);
@@ -2266,7 +2314,6 @@
                 builder.addCapability(spv::CapabilityStorageUniformBufferBlock16);
         }
     }
-#endif
 
     const char* name = node->getName().c_str();
     if (glslang::IsAnonymous(name))
@@ -2343,12 +2390,13 @@
     case glslang::EbtDouble:
         spvType = builder.makeFloatType(64);
         break;
-#ifdef AMD_EXTENSIONS
     case glslang::EbtFloat16:
+        builder.addCapability(spv::CapabilityFloat16);
+#if AMD_EXTENSIONS
         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.
@@ -2357,6 +2405,26 @@
         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);
+   case glslang::EbtInt16:
+        builder.addCapability(spv::CapabilityInt16);
+#ifdef AMD_EXTENSIONS
+        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
+        builder.addExtension(spv::E_SPV_AMD_gpu_shader_int16);
+#endif
+        spvType = builder.makeUintType(16);
     case glslang::EbtInt:
         spvType = builder.makeIntType(32);
         break;
@@ -2369,16 +2437,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);
@@ -3682,13 +3740,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;
@@ -4013,13 +4066,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:
@@ -4156,12 +4204,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;
 
@@ -4206,10 +4252,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:
@@ -4222,7 +4270,6 @@
     case glslang::EOpUnpackFloat2x16:
         unaryOp = spv::OpBitcast;
         break;
-#endif
 
     case glslang::EOpDPdx:
         unaryOp = spv::OpDPdx;
@@ -4337,7 +4384,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);
@@ -4403,32 +4488,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);
 
@@ -4442,12 +4645,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;
@@ -4461,34 +4662,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);
 
@@ -4497,104 +4709,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.
@@ -4604,126 +4806,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.
@@ -4865,10 +5058,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;
@@ -5129,15 +5320,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;
@@ -5274,11 +5713,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
@@ -5294,6 +5729,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);
@@ -5461,6 +5912,25 @@
         // Control barrier with non-"None" semantic is also a memory barrier.
         builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeWorkgroup, spv::MemorySemanticsWorkgroupMemoryMask);
         return 0;
+    case glslang::EOpSubgroupBarrier:
+        builder.createControlBarrier(spv::ScopeSubgroup, spv::ScopeDevice, spv::MemorySemanticsMaskNone);
+        return spv::NoResult;
+    case glslang::EOpSubgroupMemoryBarrier:
+        builder.createMemoryBarrier(spv::ScopeSubgroup, spv::MemorySemanticsAllMemory);
+        return spv::NoResult;
+    case glslang::EOpSubgroupMemoryBarrierBuffer:
+        builder.createMemoryBarrier(spv::ScopeSubgroup, spv::MemorySemanticsUniformMemoryMask);
+        return spv::NoResult;
+    case glslang::EOpSubgroupMemoryBarrierImage:
+        builder.createMemoryBarrier(spv::ScopeSubgroup, spv::MemorySemanticsImageMemoryMask);
+        return spv::NoResult;
+    case glslang::EOpSubgroupMemoryBarrierShared:
+        builder.createMemoryBarrier(spv::ScopeSubgroup, spv::MemorySemanticsWorkgroupMemoryMask);
+        return spv::NoResult;
+    case glslang::EOpSubgroupElect: {
+        std::vector<spv::Id> operands;
+        return createSubgroupOperation(op, typeId, operands, glslang::EbtVoid);
+    }
 #ifdef AMD_EXTENSIONS
     case glslang::EOpTime:
     {
@@ -5706,6 +6176,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;
@@ -5718,25 +6200,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;
@@ -5751,6 +6223,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;
@@ -5763,25 +6247,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 4d96df6..412f649 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));
@@ -431,7 +431,7 @@
                 if (spv::InstructionDesc[opCode].hasResult()) {
                     const spv::Id resultId = asId(word++);
                     idPosR[resultId] = start;
-
+                    
                     if (typeId != spv::NoResult) {
                         const unsigned idTypeSize = typeSizeInWords(typeId);
 
diff --git a/SPIRV/SPVRemapper.h b/SPIRV/SPVRemapper.h
index 97e3f31..5abdd4a 100755
--- a/SPIRV/SPVRemapper.h
+++ b/SPIRV/SPVRemapper.h
@@ -179,7 +179,6 @@
    range_t  constRange(spv::Op opCode)     const;
    unsigned typeSizeInWords(spv::Id id)    const;
    unsigned idTypeSizeInWords(spv::Id id)  const;
-
    spv::Id&        asId(unsigned word)                { return spv[word]; }
    const spv::Id&  asId(unsigned word)          const { return spv[word]; }
    spv::Op         asOpCode(unsigned word)      const { return opOpCode(spv[word]); }
diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp
index 289d59a..d7b28bc 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>
@@ -57,6 +55,7 @@
 namespace spv {
 
 Builder::Builder(unsigned int magicNumber, SpvBuildLogger* buildLogger) :
+    targetVersion(0x00010000),
     source(SourceLanguageUnknown),
     sourceVersion(0),
     sourceFileStringId(NoResult),
@@ -193,6 +192,9 @@
 
     // deal with capabilities
     switch (width) {
+    case 8:
+        addCapability(CapabilityInt8);
+        break;
     case 16:
         addCapability(CapabilityInt16);
         break;
@@ -815,7 +817,6 @@
     return c->getResultId();
 }
 
-#ifdef AMD_EXTENSIONS
 Id Builder::makeFloat16Constant(float f16, bool specConstant)
 {
     Op opcode = specConstant ? OpSpecConstant : OpConstant;
@@ -843,7 +844,6 @@
 
     return c->getResultId();
 }
-#endif
 
 Id Builder::findCompositeConstant(Op typeClass, const std::vector<Id>& comps) const
 {
@@ -2400,7 +2400,7 @@
 {
     // Header, before first instructions:
     out.push_back(MagicNumber);
-    out.push_back(Version);
+    out.push_back(targetVersion);
     out.push_back(builderNumber);
     out.push_back(uniqueId + 1);
     out.push_back(0);
@@ -2430,7 +2430,6 @@
 
     // Debug instructions
     dumpInstructions(out, strings);
-    dumpModuleProcesses(out);
     dumpSourceInstructions(out);
     for (int e = 0; e < (int)sourceExtensions.size(); ++e) {
         Instruction sourceExtInst(0, 0, OpSourceExtension);
@@ -2438,7 +2437,7 @@
         sourceExtInst.dump(out);
     }
     dumpInstructions(out, names);
-    dumpInstructions(out, lines);
+    dumpModuleProcesses(out);
 
     // Annotation instructions
     dumpInstructions(out, decorations);
diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h
index 59b1da2..a83e8ca 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.
 //
@@ -65,6 +66,7 @@
 
     static const int maxMatrixSize = 4;
 
+    void setTargetVersion(unsigned int v) { targetVersion = v; }
     void setSource(spv::SourceLanguage lang, int version)
     {
         source = lang;
@@ -211,19 +213,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);
@@ -330,7 +330,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);
 
@@ -585,6 +585,7 @@
     void dumpInstructions(std::vector<unsigned int>&, const std::vector<std::unique_ptr<Instruction> >&) const;
     void dumpModuleProcesses(std::vector<unsigned int>&) const;
 
+    unsigned int targetVersion;
     SourceLanguage source;
     int sourceVersion;
     spv::Id sourceFileStringId;
@@ -611,7 +612,6 @@
     std::vector<std::unique_ptr<Instruction> > entryPoints;
     std::vector<std::unique_ptr<Instruction> > executionModes;
     std::vector<std::unique_ptr<Instruction> > names;
-    std::vector<std::unique_ptr<Instruction> > lines;
     std::vector<std::unique_ptr<Instruction> > decorations;
     std::vector<std::unique_ptr<Instruction> > constantsTypesGlobals;
     std::vector<std::unique_ptr<Instruction> > externals;
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 f9d5254..3343a65
--- a/SPIRV/doc.cpp
+++ b/SPIRV/doc.cpp
@@ -722,7 +722,7 @@
     }
 }
 
-const int GroupOperationCeiling = 3;
+const int GroupOperationCeiling = 4;
 
 const char* GroupOperationString(int gop)
 {
@@ -732,6 +732,7 @@
     case 0:  return "Reduce";
     case 1:  return "InclusiveScan";
     case 2:  return "ExclusiveScan";
+    case 3:  return "ClusteredReduce";
 
     case GroupOperationCeiling:
     default: return "Bad";
@@ -830,6 +831,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";
@@ -1191,7 +1200,41 @@
     case 318: return "OpAtomicFlagTestAndSet";
     case 319: return "OpAtomicFlagClear";
     case 320: return "OpImageSparseRead";
-
+    case OpModuleProcessed: return "OpModuleProcesses";
+    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";
@@ -1343,6 +1386,7 @@
     InstructionDesc[OpReleaseEvent].setResultAndType(false, false);
     InstructionDesc[OpGroupWaitEvents].setResultAndType(false, false);
     InstructionDesc[OpAtomicFlagClear].setResultAndType(false, false);
+    InstructionDesc[OpModuleProcessed].setResultAndType(false, false);
 
     // Specific additional context-dependent operands
 
@@ -2813,6 +2857,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'");
@@ -2833,6 +3053,8 @@
     InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Value'");
     InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Index'");
 
+    InstructionDesc[OpModuleProcessed].operands.push(OperandLiteralString, "'process'");
+
 #ifdef AMD_EXTENSIONS
     InstructionDesc[OpGroupIAddNonUniformAMD].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandScope, "'Execution'");
diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp
index 8bddf7e..d528dea 100755
--- a/SPIRV/spirv.hpp
+++ b/SPIRV/spirv.hpp
@@ -46,12 +46,12 @@
 
 typedef unsigned int Id;
 
-#define SPV_VERSION 0x10000
-#define SPV_REVISION 12
+#define SPV_VERSION 0x10300
+#define SPV_REVISION 1
 
 static const unsigned int MagicNumber = 0x07230203;
-static const unsigned int Version = 0x00010000;
-static const unsigned int Revision = 12;
+static const unsigned int Version = 0x00010300;
+static const unsigned int Revision = 1;
 static const unsigned int OpCodeMask = 0xffff;
 static const unsigned int WordCountShift = 16;
 
@@ -122,7 +122,15 @@
     ExecutionModeOutputTriangleStrip = 29,
     ExecutionModeVecTypeHint = 30,
     ExecutionModeContractionOff = 31,
+    ExecutionModeInitializer = 33,
+    ExecutionModeFinalizer = 34,
+    ExecutionModeSubgroupSize = 35,
+    ExecutionModeSubgroupsPerWorkgroup = 36,
+    ExecutionModeSubgroupsPerWorkgroupId = 37,
+    ExecutionModeLocalSizeId = 38,
+    ExecutionModeLocalSizeHintId = 39,
     ExecutionModePostDepthCoverage = 4446,
+    ExecutionModeStencilRefReplacingEXT = 5027,
     ExecutionModeMax = 0x7fffffff,
 };
 
@@ -377,6 +385,9 @@
     DecorationNoContraction = 42,
     DecorationInputAttachmentIndex = 43,
     DecorationAlignment = 44,
+    DecorationMaxByteOffset = 45,
+    DecorationAlignmentId = 46,
+    DecorationMaxByteOffsetId = 47,
     DecorationExplicitInterpAMD = 4999,
     DecorationOverrideCoverageNV = 5248,
     DecorationPassthroughNV = 5250,
@@ -427,10 +438,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,
@@ -468,6 +484,8 @@
 enum LoopControlShift {
     LoopControlUnrollShift = 0,
     LoopControlDontUnrollShift = 1,
+    LoopControlDependencyInfiniteShift = 2,
+    LoopControlDependencyLengthShift = 3,
     LoopControlMax = 0x7fffffff,
 };
 
@@ -475,6 +493,8 @@
     LoopControlMaskNone = 0,
     LoopControlUnrollMask = 0x00000001,
     LoopControlDontUnrollMask = 0x00000002,
+    LoopControlDependencyInfiniteMask = 0x00000004,
+    LoopControlDependencyLengthMask = 0x00000008,
 };
 
 enum FunctionControlShift {
@@ -548,6 +568,7 @@
     GroupOperationReduce = 0,
     GroupOperationInclusiveScan = 1,
     GroupOperationExclusiveScan = 2,
+    GroupOperationClusteredReduce = 3,
     GroupOperationMax = 0x7fffffff,
 };
 
@@ -625,6 +646,17 @@
     CapabilityStorageImageReadWithoutFormat = 55,
     CapabilityStorageImageWriteWithoutFormat = 56,
     CapabilityMultiViewport = 57,
+    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,
@@ -641,7 +673,9 @@
     CapabilityAtomicStorageOps = 4445,
     CapabilitySampleMaskPostDepthCoverage = 4447,
     CapabilityImageGatherBiasLodAMD = 5009,
+    CapabilityFragmentMaskAMD = 5010,
     CapabilityStencilExportEXT = 5013,
+    CapabilityImageReadWriteLodAMD = 5015,
     CapabilitySampleMaskOverrideCoverageNV = 5249,
     CapabilityGeometryShaderPassthroughNV = 5251,
     CapabilityShaderViewportIndexLayerEXT = 5254,
@@ -947,6 +981,52 @@
     OpAtomicFlagTestAndSet = 318,
     OpAtomicFlagClear = 319,
     OpImageSparseRead = 320,
+    OpSizeOf = 321,
+    OpTypePipeStorage = 322,
+    OpConstantPipeStorage = 323,
+    OpCreatePipeFromPipeStorage = 324,
+    OpGetKernelLocalSizeForSubgroupCount = 325,
+    OpGetKernelMaxNumSubgroups = 326,
+    OpTypeNamedBarrier = 327,
+    OpNamedBarrierInitialize = 328,
+    OpMemoryNamedBarrier = 329,
+    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,
@@ -961,6 +1041,8 @@
     OpGroupFMaxNonUniformAMD = 5005,
     OpGroupUMaxNonUniformAMD = 5006,
     OpGroupSMaxNonUniformAMD = 5007,
+    OpFragmentMaskFetchAMD = 5011,
+    OpFragmentFetchAMD = 5012,
     OpMax = 0x7fffffff,
 };
 
diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp
index 1313c87..771ddeb 100644
--- a/StandAlone/StandAlone.cpp
+++ b/StandAlone/StandAlone.cpp
@@ -154,7 +154,7 @@
 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 = 0x00001000; // maps to, say, SPIR-V 1.0
+unsigned int TargetVersion = 0x00010000; // maps to, say, SPIR-V 1.0
 std::vector<std::string> Processes;      // what should be recorded by OpModuleProcessed, or equivalent
 
 std::array<unsigned int, EShLangCount> baseSamplerBinding;
@@ -482,6 +482,10 @@
                             if (strcmp(argv[1], "vulkan1.0") == 0) {
                                 setVulkanSpv();
                                 VulkanClientVersion = 100;
+                            } else if (strcmp(argv[1], "vulkan1.1") == 0) {
+                                setVulkanSpv();
+                                TargetVersion = 0x00010300;
+                                VulkanClientVersion = 110;
                             } else if (strcmp(argv[1], "opengl") == 0) {
                                 setOpenGlSpv();
                                 OpenGLClientVersion = 450;
@@ -1294,8 +1298,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/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..45bca74
--- /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 10000
+// Generated by (magic number): 80002
+// 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.waveordered.comp.out b/Test/baseResults/hlsl.waveordered.comp.out
new file mode 100644
index 0000000..15102d3
--- /dev/null
+++ b/Test/baseResults/hlsl.waveordered.comp.out
@@ -0,0 +1,180 @@
+hlsl.waveordered.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          add ( temp uint)
+0:6            add ( temp uint)
+0:6              component-wise multiply ( temp uint)
+0:6                add ( temp uint)
+0:6                  component-wise multiply ( temp uint)
+0:6                    direct index ( temp uint)
+0:6                      '@gl_NumWorkGroups' ( in 3-component vector of uint NumWorkGroups)
+0:6                      Constant:
+0:6                        1 (const int)
+0:6                    direct index ( temp uint)
+0:6                      '@gl_WorkGroupID' ( in 3-component vector of uint WorkGroupID)
+0:6                      Constant:
+0:6                        2 (const int)
+0:6                  direct index ( temp uint)
+0:6                    '@gl_WorkGroupID' ( in 3-component vector of uint WorkGroupID)
+0:6                    Constant:
+0:6                      1 (const int)
+0:6                component-wise multiply ( temp uint)
+0:6                  '@gl_NumSubgroups' ( in uint unknown built-in variable)
+0:6                  direct index ( temp uint)
+0:6                    '@gl_NumWorkGroups' ( in 3-component vector of uint NumWorkGroups)
+0:6                    Constant:
+0:6                      0 (const int)
+0:6              direct index ( temp uint)
+0:6                '@gl_WorkGroupID' ( in 3-component vector of uint WorkGroupID)
+0:6                Constant:
+0:6                  0 (const int)
+0:6            '@gl_SubgroupID' ( in uint unknown built-in variable)
+0:6        Constant:
+0:6          1 (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          add ( temp uint)
+0:6            add ( temp uint)
+0:6              component-wise multiply ( temp uint)
+0:6                add ( temp uint)
+0:6                  component-wise multiply ( temp uint)
+0:6                    direct index ( temp uint)
+0:6                      '@gl_NumWorkGroups' ( in 3-component vector of uint NumWorkGroups)
+0:6                      Constant:
+0:6                        1 (const int)
+0:6                    direct index ( temp uint)
+0:6                      '@gl_WorkGroupID' ( in 3-component vector of uint WorkGroupID)
+0:6                      Constant:
+0:6                        2 (const int)
+0:6                  direct index ( temp uint)
+0:6                    '@gl_WorkGroupID' ( in 3-component vector of uint WorkGroupID)
+0:6                    Constant:
+0:6                      1 (const int)
+0:6                component-wise multiply ( temp uint)
+0:6                  '@gl_NumSubgroups' ( in uint unknown built-in variable)
+0:6                  direct index ( temp uint)
+0:6                    '@gl_NumWorkGroups' ( in 3-component vector of uint NumWorkGroups)
+0:6                    Constant:
+0:6                      0 (const int)
+0:6              direct index ( temp uint)
+0:6                '@gl_WorkGroupID' ( in 3-component vector of uint WorkGroupID)
+0:6                Constant:
+0:6                  0 (const int)
+0:6            '@gl_SubgroupID' ( in uint unknown built-in variable)
+0:6        Constant:
+0:6          1 (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 10000
+// Generated by (magic number): 80002
+// Id's are bound by 46
+
+                              Capability Shader
+                              Capability GroupNonUniform
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "CSMain" 17 22 30 40
+                              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 17  "@gl_NumWorkGroups"
+                              Name 22  "@gl_WorkGroupID"
+                              Name 30  "@gl_NumSubgroups"
+                              Name 40  "@gl_SubgroupID"
+                              Decorate 9 ArrayStride 4
+                              MemberDecorate 10(data) 0 Offset 0
+                              Decorate 10(data) BufferBlock
+                              Decorate 12(data) DescriptorSet 0
+                              Decorate 17(@gl_NumWorkGroups) BuiltIn NumWorkgroups
+                              Decorate 22(@gl_WorkGroupID) BuiltIn WorkgroupId
+                              Decorate 30(@gl_NumSubgroups) BuiltIn NumSubgroups
+                              Decorate 40(@gl_SubgroupID) BuiltIn SubgroupId
+               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:             TypeVector 8(int) 3
+              16:             TypePointer Input 15(ivec3)
+17(@gl_NumWorkGroups):     16(ptr) Variable Input
+              18:      8(int) Constant 1
+              19:             TypePointer Input 8(int)
+22(@gl_WorkGroupID):     16(ptr) Variable Input
+              23:      8(int) Constant 2
+30(@gl_NumSubgroups):     19(ptr) Variable Input
+              32:      8(int) Constant 0
+40(@gl_SubgroupID):     19(ptr) Variable Input
+              43:             TypePointer Uniform 8(int)
+       4(CSMain):           2 Function None 3
+               5:             Label
+              45:           2 FunctionCall 6(@CSMain()
+                              Return
+                              FunctionEnd
+     6(@CSMain():           2 Function None 3
+               7:             Label
+              20:     19(ptr) AccessChain 17(@gl_NumWorkGroups) 18
+              21:      8(int) Load 20
+              24:     19(ptr) AccessChain 22(@gl_WorkGroupID) 23
+              25:      8(int) Load 24
+              26:      8(int) IMul 21 25
+              27:     19(ptr) AccessChain 22(@gl_WorkGroupID) 18
+              28:      8(int) Load 27
+              29:      8(int) IAdd 26 28
+              31:      8(int) Load 30(@gl_NumSubgroups)
+              33:     19(ptr) AccessChain 17(@gl_NumWorkGroups) 32
+              34:      8(int) Load 33
+              35:      8(int) IMul 31 34
+              36:      8(int) IMul 29 35
+              37:     19(ptr) AccessChain 22(@gl_WorkGroupID) 32
+              38:      8(int) Load 37
+              39:      8(int) IAdd 36 38
+              41:      8(int) Load 40(@gl_SubgroupID)
+              42:      8(int) IAdd 39 41
+              44:     43(ptr) AccessChain 12(data) 14 42
+                              Store 44 18
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.waveordered.frag.out b/Test/baseResults/hlsl.waveordered.frag.out
new file mode 100644
index 0000000..abe8634
--- /dev/null
+++ b/Test/baseResults/hlsl.waveordered.frag.out
@@ -0,0 +1,86 @@
+hlsl.waveordered.frag
+ERROR: 0:3: 'WaveGetOrderedIndex' : WaveGetOrderedIndex() unsupported in a pixel/fragment shader 
+ERROR: 1 compilation errors.  No code generated.
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+ERROR: node is still EOpNull!
+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        Compare Equal ( temp bool)
+0:3          Constant:
+0:3            0 (const uint)
+0:3          ERROR: Bad aggregation op
+ ( temp uint)
+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
+ERROR: node is still EOpNull!
+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        Compare Equal ( temp bool)
+0:3          Constant:
+0:3            0 (const uint)
+0:3          ERROR: Bad aggregation op
+ ( temp uint)
+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)
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/hlsl.waveordered2.comp.out b/Test/baseResults/hlsl.waveordered2.comp.out
new file mode 100644
index 0000000..b6f0d58
--- /dev/null
+++ b/Test/baseResults/hlsl.waveordered2.comp.out
@@ -0,0 +1,68 @@
+hlsl.waveordered2.comp
+ERROR: 0:7: 'GlobalOrderedCountIncrement' : GlobalOrderedCountIncrement() unsupported 
+ERROR: 1 compilation errors.  No code generated.
+
+
+Shader version: 500
+local_size = (32, 16, 1)
+ERROR: node is still EOpNull!
+0:5  Function Definition: @CSMain( ( temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:6      Sequence
+0:6        move second child to first child ( temp uint)
+0:6          'i' ( temp uint)
+0:6          Constant:
+0:6            42 (const uint)
+0:7      move second child to first child ( temp uint)
+0:7        indirect index (layout( row_major std430) buffer uint)
+0:7          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:7            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:7            Constant:
+0:7              0 (const uint)
+0:7          ERROR: Bad unary op
+ ( temp uint)
+0:7            'i' ( temp uint)
+0:7        Constant:
+0:7          1 (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)
+ERROR: node is still EOpNull!
+0:5  Function Definition: @CSMain( ( temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:6      Sequence
+0:6        move second child to first child ( temp uint)
+0:6          'i' ( temp uint)
+0:6          Constant:
+0:6            42 (const uint)
+0:7      move second child to first child ( temp uint)
+0:7        indirect index (layout( row_major std430) buffer uint)
+0:7          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:7            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:7            Constant:
+0:7              0 (const uint)
+0:7          ERROR: Bad unary op
+ ( temp uint)
+0:7            'i' ( temp uint)
+0:7        Constant:
+0:7          1 (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})
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/hlsl.waveordered2.frag.out b/Test/baseResults/hlsl.waveordered2.frag.out
new file mode 100644
index 0000000..6d44c53
--- /dev/null
+++ b/Test/baseResults/hlsl.waveordered2.frag.out
@@ -0,0 +1,98 @@
+hlsl.waveordered2.frag
+ERROR: 0:4: 'GlobalOrderedCountIncrement' : GlobalOrderedCountIncrement() unsupported 
+ERROR: 1 compilation errors.  No code generated.
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+ERROR: node is still EOpNull!
+0:2  Function Definition: @PixelShaderFunction( ( temp 4-component vector of float)
+0:2    Function Parameters: 
+0:?     Sequence
+0:3      Sequence
+0:3        move second child to first child ( temp uint)
+0:3          'i' ( temp uint)
+0:3          Constant:
+0:3            42 (const uint)
+0:4      Test condition and select ( temp void)
+0:4        Condition
+0:4        Compare Equal ( temp bool)
+0:4          Constant:
+0:4            0 (const uint)
+0:4          ERROR: Bad unary op
+ ( temp uint)
+0:4            'i' ( temp uint)
+0:4        true case
+0:?         Sequence
+0:6          Branch: Return with expression
+0:?             Constant:
+0:?               1.000000
+0:?               2.000000
+0:?               3.000000
+0:?               4.000000
+0:4        false case
+0:?         Sequence
+0:10          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
+ERROR: node is still EOpNull!
+0:2  Function Definition: @PixelShaderFunction( ( temp 4-component vector of float)
+0:2    Function Parameters: 
+0:?     Sequence
+0:3      Sequence
+0:3        move second child to first child ( temp uint)
+0:3          'i' ( temp uint)
+0:3          Constant:
+0:3            42 (const uint)
+0:4      Test condition and select ( temp void)
+0:4        Condition
+0:4        Compare Equal ( temp bool)
+0:4          Constant:
+0:4            0 (const uint)
+0:4          ERROR: Bad unary op
+ ( temp uint)
+0:4            'i' ( temp uint)
+0:4        true case
+0:?         Sequence
+0:6          Branch: Return with expression
+0:?             Constant:
+0:?               1.000000
+0:?               2.000000
+0:?               3.000000
+0:?               4.000000
+0:4        false case
+0:?         Sequence
+0:10          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)
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/hlsl.waveprefix.comp.out b/Test/baseResults/hlsl.waveprefix.comp.out
new file mode 100644
index 0000000..10ce0f9
--- /dev/null
+++ b/Test/baseResults/hlsl.waveprefix.comp.out
@@ -0,0 +1,2681 @@
+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: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: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 10000
+// Generated by (magic number): 80002
+// Id's are bound by 358
+
+                              Capability Shader
+                              Capability Float64
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformArithmetic
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "CSMain" 353
+                              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 351  "dti"
+                              Name 353  "dti"
+                              Name 355  "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 353(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
+             352:             TypePointer Input 7(ivec3)
+        353(dti):    352(ptr) Variable Input
+       4(CSMain):           2 Function None 3
+               5:             Label
+        351(dti):      8(ptr) Variable Function
+      355(param):      8(ptr) Variable Function
+             354:    7(ivec3) Load 353(dti)
+                              Store 351(dti) 354
+             356:    7(ivec3) Load 351(dti)
+                              Store 355(param) 356
+             357:           2 FunctionCall 11(@CSMain(vu3;) 355(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
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.wavequad.comp.out b/Test/baseResults/hlsl.wavequad.comp.out
new file mode 100644
index 0000000..79d16d3
--- /dev/null
+++ b/Test/baseResults/hlsl.wavequad.comp.out
@@ -0,0 +1,8027 @@
+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: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: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 10000
+// Generated by (magic number): 80002
+// Id's are bound by 968
+
+                              Capability Shader
+                              Capability Float64
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformQuad
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "CSMain" 963
+                              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 961  "dti"
+                              Name 963  "dti"
+                              Name 965  "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 963(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
+             962:             TypePointer Input 7(ivec3)
+        963(dti):    962(ptr) Variable Input
+       4(CSMain):           2 Function None 3
+               5:             Label
+        961(dti):      8(ptr) Variable Function
+      965(param):      8(ptr) Variable Function
+             964:    7(ivec3) Load 963(dti)
+                              Store 961(dti) 964
+             966:    7(ivec3) Load 961(dti)
+                              Store 965(param) 966
+             967:           2 FunctionCall 11(@CSMain(vu3;) 965(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
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.wavequery.comp.out b/Test/baseResults/hlsl.wavequery.comp.out
new file mode 100644
index 0000000..4d3fac1
--- /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)
+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)
+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 10000
+// Generated by (magic number): 80002
+// 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..9da82e1
--- /dev/null
+++ b/Test/baseResults/hlsl.wavequery.frag.out
@@ -0,0 +1,124 @@
+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        '@gl_HelperInvocation' ( in bool HelperInvocation)
+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        '@gl_HelperInvocation' ( in bool HelperInvocation)
+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 10000
+// Generated by (magic number): 80002
+// Id's are bound by 30
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "PixelShaderFunction" 13 28
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 500
+                              Name 4  "PixelShaderFunction"
+                              Name 9  "@PixelShaderFunction("
+                              Name 13  "@gl_HelperInvocation"
+                              Name 28  "@entryPointOutput"
+                              Decorate 13(@gl_HelperInvocation) BuiltIn HelperInvocation
+                              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:             TypePointer Input 11(bool)
+13(@gl_HelperInvocation):     12(ptr) Variable Input
+              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) Load 13(@gl_HelperInvocation)
+                              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..0227f66
--- /dev/null
+++ b/Test/baseResults/hlsl.wavereduction.comp.out
@@ -0,0 +1,7133 @@
+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: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: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 10000
+// Generated by (magic number): 80002
+// Id's are bound by 890
+
+                              Capability Shader
+                              Capability Float64
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformArithmetic
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "CSMain" 885
+                              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 883  "dti"
+                              Name 885  "dti"
+                              Name 887  "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 885(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
+             884:             TypePointer Input 7(ivec3)
+        885(dti):    884(ptr) Variable Input
+       4(CSMain):           2 Function None 3
+               5:             Label
+        883(dti):      8(ptr) Variable Function
+      887(param):      8(ptr) Variable Function
+             886:    7(ivec3) Load 885(dti)
+                              Store 883(dti) 886
+             888:    7(ivec3) Load 883(dti)
+                              Store 887(param) 888
+             889:           2 FunctionCall 11(@CSMain(vu3;) 887(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
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.wavevote.comp.out b/Test/baseResults/hlsl.wavevote.comp.out
new file mode 100644
index 0000000..6e5e5fb
--- /dev/null
+++ b/Test/baseResults/hlsl.wavevote.comp.out
@@ -0,0 +1,300 @@
+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        packUint2x32 ( temp uint64_t)
+0:6          vector swizzle ( temp 2-component vector of uint)
+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:6            Sequence
+0:6              Constant:
+0:6                0 (const int)
+0:6              Constant:
+0:6                1 (const int)
+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        packUint2x32 ( temp uint64_t)
+0:7          vector swizzle ( temp 2-component vector of uint)
+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:7            Sequence
+0:7              Constant:
+0:7                0 (const int)
+0:7              Constant:
+0:7                1 (const int)
+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        packUint2x32 ( temp uint64_t)
+0:8          vector swizzle ( temp 2-component vector of uint)
+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:8            Sequence
+0:8              Constant:
+0:8                0 (const int)
+0:8              Constant:
+0:8                1 (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        packUint2x32 ( temp uint64_t)
+0:6          vector swizzle ( temp 2-component vector of uint)
+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:6            Sequence
+0:6              Constant:
+0:6                0 (const int)
+0:6              Constant:
+0:6                1 (const int)
+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        packUint2x32 ( temp uint64_t)
+0:7          vector swizzle ( temp 2-component vector of uint)
+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:7            Sequence
+0:7              Constant:
+0:7                0 (const int)
+0:7              Constant:
+0:7                1 (const int)
+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        packUint2x32 ( temp uint64_t)
+0:8          vector swizzle ( temp 2-component vector of uint)
+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:8            Sequence
+0:8              Constant:
+0:8                0 (const int)
+0:8              Constant:
+0:8                1 (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 10000
+// Generated by (magic number): 80002
+// Id's are bound by 66
+
+                              Capability Shader
+                              Capability Int64
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformVote
+                              Capability GroupNonUniformBallot
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "CSMain" 61
+                              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 59  "dti"
+                              Name 61  "dti"
+                              Name 63  "param"
+                              Decorate 14 ArrayStride 8
+                              MemberDecorate 15(data) 0 Offset 0
+                              Decorate 15(data) BufferBlock
+                              Decorate 17(data) DescriptorSet 0
+                              Decorate 61(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 6(int) 2
+              35:             TypePointer Uniform 13(int)
+              37:      6(int) Constant 1
+              48:      6(int) Constant 2
+              60:             TypePointer Input 7(ivec3)
+         61(dti):     60(ptr) Variable Input
+       4(CSMain):           2 Function None 3
+               5:             Label
+         59(dti):      8(ptr) Variable Function
+       63(param):      8(ptr) Variable Function
+              62:    7(ivec3) Load 61(dti)
+                              Store 59(dti) 62
+              64:    7(ivec3) Load 59(dti)
+                              Store 63(param) 64
+              65:           2 FunctionCall 11(@CSMain(vu3;) 63(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(ivec2) VectorShuffle 31 31 0 1
+              34:     13(int) Bitcast 33
+              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(ivec2) VectorShuffle 44 44 0 1
+              46:     13(int) Bitcast 45
+              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(ivec2) VectorShuffle 55 55 0 1
+              57:     13(int) Bitcast 56
+              58:     35(ptr) AccessChain 17(data) 19 50
+                              Store 58 57
+                              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..f8d069a
--- /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): 80002
+// 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"
+                              ModuleProcesses  "no-storage-format"
+                              ModuleProcesses  "resource-set-binding 3"
+                              ModuleProcesses  "auto-map-locations"
+                              ModuleProcesses  "client opengl100"
+                              ModuleProcesses  "target-env opengl"
+                              ModuleProcesses  "relaxed-errors"
+                              ModuleProcesses  "suppress-warnings"
+                              ModuleProcesses  "hlsl-offsets"
+                              ModuleProcesses  "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
+             114:             TypePointer Output 10(float)
+             117:   10(float) Constant 1092616192
+         5(main):           3 Function None 4
+               6:             Label
+       59(param):     58(ptr) Variable Function
+           99(i):     19(ptr) Variable Function
+             113:     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
+             115:    114(ptr) AccessChain 52(outv) 32
+             116:   10(float) Load 115
+             118:    37(bool) FOrdLessThan 116 117
+                              SelectionMerge 120 None
+                              BranchConditional 118 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 113 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 113 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
diff --git a/Test/baseResults/spv.drawParams.vert.out b/Test/baseResults/spv.drawParams.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.float32.frag.out b/Test/baseResults/spv.float32.frag.out
new file mode 100644
index 0000000..85d50b6
--- /dev/null
+++ b/Test/baseResults/spv.float32.frag.out
@@ -0,0 +1,800 @@
+spv.float32.frag
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 528
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Float64
+                              Capability Int64
+                              Capability Int16
+                              Capability Int8
+                              Capability DerivativeControl
+                              Capability InterpolationFunction
+                              Extension  "SPV_AMD_gpu_shader_half_float"
+                              Extension  "SPV_AMD_gpu_shader_int16"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 466
+                              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 208  "u16v"
+                              Name 213  "u32v"
+                              Name 219  "u64v"
+                              Name 224  "f32v2"
+                              Name 225  "f32v1"
+                              Name 257  "f32v2"
+                              Name 258  "f32v1"
+                              Name 274  "f32v2"
+                              Name 275  "f32v1"
+                              Name 296  "f32"
+                              Name 300  "f32v3"
+                              Name 340  "bv"
+                              Name 361  "b"
+                              Name 371  "iv"
+                              Name 372  "ResType"
+                              Name 379  "f32"
+                              Name 380  "f32v1"
+                              Name 384  "f32v2"
+                              Name 390  "f32v3"
+                              Name 409  "f32m3"
+                              Name 410  "f32m1"
+                              Name 412  "f32m2"
+                              Name 421  "f32v1"
+                              Name 423  "f32v2"
+                              Name 428  "f32m4"
+                              Name 431  "f32"
+                              Name 434  "f32m5"
+                              Name 439  "f32m6"
+                              Name 440  "f32m7"
+                              Name 443  "bv"
+                              Name 444  "f32v1"
+                              Name 446  "f32v2"
+                              Name 464  "f32v"
+                              Name 466  "if32v"
+                              Name 515  "S"
+                              MemberName 515(S) 0  "x"
+                              MemberName 515(S) 1  "y"
+                              MemberName 515(S) 2  "z"
+                              Name 517  "B1"
+                              MemberName 517(B1) 0  "a"
+                              MemberName 517(B1) 1  "b"
+                              MemberName 517(B1) 2  "c"
+                              MemberName 517(B1) 3  "d"
+                              MemberName 517(B1) 4  "e"
+                              MemberName 517(B1) 5  "f"
+                              MemberName 517(B1) 6  "g"
+                              MemberName 517(B1) 7  "h"
+                              Name 519  ""
+                              Name 520  "sf16"
+                              Name 521  "sf"
+                              Name 522  "sd"
+                              Decorate 513 ArrayStride 16
+                              Decorate 514 ArrayStride 32
+                              MemberDecorate 515(S) 0 Offset 0
+                              MemberDecorate 515(S) 1 Offset 8
+                              MemberDecorate 515(S) 2 Offset 16
+                              Decorate 516 ArrayStride 32
+                              MemberDecorate 517(B1) 0 Offset 0
+                              MemberDecorate 517(B1) 1 Offset 8
+                              MemberDecorate 517(B1) 2 Offset 16
+                              MemberDecorate 517(B1) 3 Offset 32
+                              MemberDecorate 517(B1) 4 ColMajor
+                              MemberDecorate 517(B1) 4 Offset 64
+                              MemberDecorate 517(B1) 4 MatrixStride 16
+                              MemberDecorate 517(B1) 5 ColMajor
+                              MemberDecorate 517(B1) 5 Offset 96
+                              MemberDecorate 517(B1) 5 MatrixStride 16
+                              MemberDecorate 517(B1) 6 Offset 160
+                              MemberDecorate 517(B1) 7 Offset 192
+                              Decorate 517(B1) Block
+                              Decorate 519 DescriptorSet 0
+                              Decorate 520(sf16) SpecId 100
+                              Decorate 521(sf) SpecId 101
+                              Decorate 522(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
+             211:             TypeVector 31(int) 3
+             212:             TypePointer Function 211(ivec3)
+             216:             TypeInt 64 0
+             217:             TypeVector 216(int) 3
+             218:             TypePointer Function 217(ivec3)
+             222:             TypeVector 26(float) 4
+             223:             TypePointer Function 222(fvec4)
+    372(ResType):             TypeStruct 153(fvec3) 193(ivec3)
+             407:             TypeMatrix 153(fvec3) 2
+             408:             TypePointer Function 407
+             426:             TypeMatrix 27(fvec2) 3
+             427:             TypePointer Function 426
+             432:             TypeMatrix 153(fvec3) 3
+             433:             TypePointer Function 432
+             437:             TypeMatrix 222(fvec4) 4
+             438:             TypePointer Function 437
+             465:             TypePointer Input 153(fvec3)
+      466(if32v):    465(ptr) Variable Input
+             467:             TypePointer Input 26(float)
+             504:    192(int) Constant 1
+             509:   26(float) Constant 1056964608
+             510:   27(fvec2) ConstantComposite 509 509
+             512:     31(int) Constant 2
+             513:             TypeArray 26(float) 512
+             514:             TypeArray 407 512
+          515(S):             TypeStruct 26(float) 27(fvec2) 153(fvec3)
+             516:             TypeArray 515(S) 512
+         517(B1):             TypeStruct 26(float) 27(fvec2) 153(fvec3) 513 407 514 515(S) 516
+             518:             TypePointer Uniform 517(B1)
+             519:    518(ptr) Variable Uniform
+       520(sf16):  172(float) SpecConstant 12288
+         521(sf):   26(float) SpecConstant 1048576000
+         522(sd):  149(float) SpecConstant 0 1071644672
+             523:   26(float) SpecConstantOp 115 520(sf16)
+             524:   26(float) SpecConstantOp 115 520(sf16)
+             525:  149(float) SpecConstantOp 115 524
+             526:  172(float) SpecConstantOp 115 521(sf)
+             527:  172(float) SpecConstantOp 115 522(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
+       208(u16v):    194(ptr) Variable Function
+       213(u32v):    212(ptr) Variable Function
+       219(u64v):    218(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
+             209:  153(fvec3) Load 155(f32v)
+             210:  193(ivec3) ConvertFToU 209
+                              Store 208(u16v) 210
+             214:  153(fvec3) Load 155(f32v)
+             215:  211(ivec3) ConvertFToU 214
+                              Store 213(u32v) 215
+             220:  153(fvec3) Load 155(f32v)
+             221:  217(ivec3) ConvertFToU 220
+                              Store 219(u64v) 221
+                              Return
+                              FunctionEnd
+12(builtinAngleTrigFuncs():           2 Function None 3
+              13:             Label
+      224(f32v2):    223(ptr) Variable Function
+      225(f32v1):    223(ptr) Variable Function
+             226:  222(fvec4) Load 225(f32v1)
+             227:  222(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 226
+                              Store 224(f32v2) 227
+             228:  222(fvec4) Load 225(f32v1)
+             229:  222(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 228
+                              Store 224(f32v2) 229
+             230:  222(fvec4) Load 225(f32v1)
+             231:  222(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 230
+                              Store 224(f32v2) 231
+             232:  222(fvec4) Load 225(f32v1)
+             233:  222(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 232
+                              Store 224(f32v2) 233
+             234:  222(fvec4) Load 225(f32v1)
+             235:  222(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 234
+                              Store 224(f32v2) 235
+             236:  222(fvec4) Load 225(f32v1)
+             237:  222(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 236
+                              Store 224(f32v2) 237
+             238:  222(fvec4) Load 225(f32v1)
+             239:  222(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 238
+                              Store 224(f32v2) 239
+             240:  222(fvec4) Load 225(f32v1)
+             241:  222(fvec4) Load 224(f32v2)
+             242:  222(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 240 241
+                              Store 224(f32v2) 242
+             243:  222(fvec4) Load 225(f32v1)
+             244:  222(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 243
+                              Store 224(f32v2) 244
+             245:  222(fvec4) Load 225(f32v1)
+             246:  222(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 245
+                              Store 224(f32v2) 246
+             247:  222(fvec4) Load 225(f32v1)
+             248:  222(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 247
+                              Store 224(f32v2) 248
+             249:  222(fvec4) Load 225(f32v1)
+             250:  222(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 249
+                              Store 224(f32v2) 250
+             251:  222(fvec4) Load 225(f32v1)
+             252:  222(fvec4) ExtInst 1(GLSL.std.450) 22(Asinh) 251
+                              Store 224(f32v2) 252
+             253:  222(fvec4) Load 225(f32v1)
+             254:  222(fvec4) ExtInst 1(GLSL.std.450) 23(Acosh) 253
+                              Store 224(f32v2) 254
+             255:  222(fvec4) Load 225(f32v1)
+             256:  222(fvec4) ExtInst 1(GLSL.std.450) 24(Atanh) 255
+                              Store 224(f32v2) 256
+                              Return
+                              FunctionEnd
+14(builtinExpFuncs():           2 Function None 3
+              15:             Label
+      257(f32v2):     28(ptr) Variable Function
+      258(f32v1):     28(ptr) Variable Function
+             259:   27(fvec2) Load 258(f32v1)
+             260:   27(fvec2) Load 257(f32v2)
+             261:   27(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 259 260
+                              Store 257(f32v2) 261
+             262:   27(fvec2) Load 258(f32v1)
+             263:   27(fvec2) ExtInst 1(GLSL.std.450) 27(Exp) 262
+                              Store 257(f32v2) 263
+             264:   27(fvec2) Load 258(f32v1)
+             265:   27(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 264
+                              Store 257(f32v2) 265
+             266:   27(fvec2) Load 258(f32v1)
+             267:   27(fvec2) ExtInst 1(GLSL.std.450) 29(Exp2) 266
+                              Store 257(f32v2) 267
+             268:   27(fvec2) Load 258(f32v1)
+             269:   27(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 268
+                              Store 257(f32v2) 269
+             270:   27(fvec2) Load 258(f32v1)
+             271:   27(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 270
+                              Store 257(f32v2) 271
+             272:   27(fvec2) Load 258(f32v1)
+             273:   27(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 272
+                              Store 257(f32v2) 273
+                              Return
+                              FunctionEnd
+16(builtinCommonFuncs():           2 Function None 3
+              17:             Label
+      274(f32v2):    154(ptr) Variable Function
+      275(f32v1):    154(ptr) Variable Function
+        296(f32):     33(ptr) Variable Function
+      300(f32v3):    154(ptr) Variable Function
+         340(bv):    159(ptr) Variable Function
+          361(b):    108(ptr) Variable Function
+         371(iv):    194(ptr) Variable Function
+             276:  153(fvec3) Load 275(f32v1)
+             277:  153(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 276
+                              Store 274(f32v2) 277
+             278:  153(fvec3) Load 275(f32v1)
+             279:  153(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 278
+                              Store 274(f32v2) 279
+             280:  153(fvec3) Load 275(f32v1)
+             281:  153(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 280
+                              Store 274(f32v2) 281
+             282:  153(fvec3) Load 275(f32v1)
+             283:  153(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 282
+                              Store 274(f32v2) 283
+             284:  153(fvec3) Load 275(f32v1)
+             285:  153(fvec3) ExtInst 1(GLSL.std.450) 1(Round) 284
+                              Store 274(f32v2) 285
+             286:  153(fvec3) Load 275(f32v1)
+             287:  153(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 286
+                              Store 274(f32v2) 287
+             288:  153(fvec3) Load 275(f32v1)
+             289:  153(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 288
+                              Store 274(f32v2) 289
+             290:  153(fvec3) Load 275(f32v1)
+             291:  153(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 290
+                              Store 274(f32v2) 291
+             292:  153(fvec3) Load 275(f32v1)
+             293:  153(fvec3) Load 274(f32v2)
+             294:  153(fvec3) FMod 292 293
+                              Store 274(f32v2) 294
+             295:  153(fvec3) Load 275(f32v1)
+             297:   26(float) Load 296(f32)
+             298:  153(fvec3) CompositeConstruct 297 297 297
+             299:  153(fvec3) FMod 295 298
+                              Store 274(f32v2) 299
+             301:  153(fvec3) Load 275(f32v1)
+             302:  153(fvec3) ExtInst 1(GLSL.std.450) 35(Modf) 301 274(f32v2)
+                              Store 300(f32v3) 302
+             303:  153(fvec3) Load 275(f32v1)
+             304:  153(fvec3) Load 274(f32v2)
+             305:  153(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 303 304
+                              Store 300(f32v3) 305
+             306:  153(fvec3) Load 275(f32v1)
+             307:   26(float) Load 296(f32)
+             308:  153(fvec3) CompositeConstruct 307 307 307
+             309:  153(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 306 308
+                              Store 300(f32v3) 309
+             310:  153(fvec3) Load 275(f32v1)
+             311:  153(fvec3) Load 274(f32v2)
+             312:  153(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 310 311
+                              Store 300(f32v3) 312
+             313:  153(fvec3) Load 275(f32v1)
+             314:   26(float) Load 296(f32)
+             315:  153(fvec3) CompositeConstruct 314 314 314
+             316:  153(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 313 315
+                              Store 300(f32v3) 316
+             317:  153(fvec3) Load 275(f32v1)
+             318:   26(float) Load 296(f32)
+             319:     33(ptr) AccessChain 274(f32v2) 32
+             320:   26(float) Load 319
+             321:  153(fvec3) CompositeConstruct 318 318 318
+             322:  153(fvec3) CompositeConstruct 320 320 320
+             323:  153(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 317 321 322
+                              Store 300(f32v3) 323
+             324:  153(fvec3) Load 275(f32v1)
+             325:  153(fvec3) Load 274(f32v2)
+             326:   26(float) Load 296(f32)
+             327:  153(fvec3) CompositeConstruct 326 326 326
+             328:  153(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 324 325 327
+                              Store 300(f32v3) 328
+             329:  153(fvec3) Load 275(f32v1)
+             330:  153(fvec3) Load 274(f32v2)
+             331:   26(float) Load 296(f32)
+             332:  153(fvec3) CompositeConstruct 331 331 331
+             333:  153(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 329 330 332
+                              Store 300(f32v3) 333
+             334:  153(fvec3) Load 275(f32v1)
+             335:  153(fvec3) Load 274(f32v2)
+             336:  153(fvec3) Load 300(f32v3)
+             337:  153(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 334 335 336
+                              Store 300(f32v3) 337
+             338:  153(fvec3) Load 275(f32v1)
+             339:  153(fvec3) Load 274(f32v2)
+             341:  158(bvec3) Load 340(bv)
+             342:  153(fvec3) Select 341 339 338
+                              Store 300(f32v3) 342
+             343:  153(fvec3) Load 275(f32v1)
+             344:  153(fvec3) Load 274(f32v2)
+             345:  153(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 343 344
+                              Store 300(f32v3) 345
+             346:   26(float) Load 296(f32)
+             347:  153(fvec3) Load 300(f32v3)
+             348:  153(fvec3) CompositeConstruct 346 346 346
+             349:  153(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 348 347
+                              Store 300(f32v3) 349
+             350:  153(fvec3) Load 275(f32v1)
+             351:  153(fvec3) Load 274(f32v2)
+             352:  153(fvec3) Load 300(f32v3)
+             353:  153(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 350 351 352
+                              Store 300(f32v3) 353
+             354:   26(float) Load 296(f32)
+             355:     33(ptr) AccessChain 275(f32v1) 32
+             356:   26(float) Load 355
+             357:  153(fvec3) Load 274(f32v2)
+             358:  153(fvec3) CompositeConstruct 354 354 354
+             359:  153(fvec3) CompositeConstruct 356 356 356
+             360:  153(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 358 359 357
+                              Store 300(f32v3) 360
+             362:   26(float) Load 296(f32)
+             363:   107(bool) IsNan 362
+                              Store 361(b) 363
+             364:  153(fvec3) Load 275(f32v1)
+             365:  158(bvec3) IsInf 364
+                              Store 340(bv) 365
+             366:  153(fvec3) Load 275(f32v1)
+             367:  153(fvec3) Load 274(f32v2)
+             368:  153(fvec3) Load 300(f32v3)
+             369:  153(fvec3) ExtInst 1(GLSL.std.450) 50(Fma) 366 367 368
+                              Store 300(f32v3) 369
+             370:  153(fvec3) Load 275(f32v1)
+             373:372(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 370
+             374:  193(ivec3) CompositeExtract 373 1
+                              Store 371(iv) 374
+             375:  153(fvec3) CompositeExtract 373 0
+                              Store 274(f32v2) 375
+             376:  153(fvec3) Load 275(f32v1)
+             377:  193(ivec3) Load 371(iv)
+             378:  153(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 376 377
+                              Store 274(f32v2) 378
+                              Return
+                              FunctionEnd
+18(builtinGeometryFuncs():           2 Function None 3
+              19:             Label
+        379(f32):     33(ptr) Variable Function
+      380(f32v1):    154(ptr) Variable Function
+      384(f32v2):    154(ptr) Variable Function
+      390(f32v3):    154(ptr) Variable Function
+             381:  153(fvec3) Load 380(f32v1)
+             382:   26(float) ExtInst 1(GLSL.std.450) 66(Length) 381
+                              Store 379(f32) 382
+             383:  153(fvec3) Load 380(f32v1)
+             385:  153(fvec3) Load 384(f32v2)
+             386:   26(float) ExtInst 1(GLSL.std.450) 67(Distance) 383 385
+                              Store 379(f32) 386
+             387:  153(fvec3) Load 380(f32v1)
+             388:  153(fvec3) Load 384(f32v2)
+             389:   26(float) Dot 387 388
+                              Store 379(f32) 389
+             391:  153(fvec3) Load 380(f32v1)
+             392:  153(fvec3) Load 384(f32v2)
+             393:  153(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 391 392
+                              Store 390(f32v3) 393
+             394:  153(fvec3) Load 380(f32v1)
+             395:  153(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 394
+                              Store 384(f32v2) 395
+             396:  153(fvec3) Load 380(f32v1)
+             397:  153(fvec3) Load 384(f32v2)
+             398:  153(fvec3) Load 390(f32v3)
+             399:  153(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 396 397 398
+                              Store 390(f32v3) 399
+             400:  153(fvec3) Load 380(f32v1)
+             401:  153(fvec3) Load 384(f32v2)
+             402:  153(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 400 401
+                              Store 390(f32v3) 402
+             403:  153(fvec3) Load 380(f32v1)
+             404:  153(fvec3) Load 384(f32v2)
+             405:   26(float) Load 379(f32)
+             406:  153(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 403 404 405
+                              Store 390(f32v3) 406
+                              Return
+                              FunctionEnd
+20(builtinMatrixFuncs():           2 Function None 3
+              21:             Label
+      409(f32m3):    408(ptr) Variable Function
+      410(f32m1):    408(ptr) Variable Function
+      412(f32m2):    408(ptr) Variable Function
+      421(f32v1):    154(ptr) Variable Function
+      423(f32v2):     28(ptr) Variable Function
+      428(f32m4):    427(ptr) Variable Function
+        431(f32):     33(ptr) Variable Function
+      434(f32m5):    433(ptr) Variable Function
+      439(f32m6):    438(ptr) Variable Function
+      440(f32m7):    438(ptr) Variable Function
+             411:         407 Load 410(f32m1)
+             413:         407 Load 412(f32m2)
+             414:  153(fvec3) CompositeExtract 411 0
+             415:  153(fvec3) CompositeExtract 413 0
+             416:  153(fvec3) FMul 414 415
+             417:  153(fvec3) CompositeExtract 411 1
+             418:  153(fvec3) CompositeExtract 413 1
+             419:  153(fvec3) FMul 417 418
+             420:         407 CompositeConstruct 416 419
+                              Store 409(f32m3) 420
+             422:  153(fvec3) Load 421(f32v1)
+             424:   27(fvec2) Load 423(f32v2)
+             425:         407 OuterProduct 422 424
+                              Store 410(f32m1) 425
+             429:         407 Load 410(f32m1)
+             430:         426 Transpose 429
+                              Store 428(f32m4) 430
+             435:         432 Load 434(f32m5)
+             436:   26(float) ExtInst 1(GLSL.std.450) 33(Determinant) 435
+                              Store 431(f32) 436
+             441:         437 Load 440(f32m7)
+             442:         437 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 441
+                              Store 439(f32m6) 442
+                              Return
+                              FunctionEnd
+22(builtinVecRelFuncs():           2 Function None 3
+              23:             Label
+         443(bv):    159(ptr) Variable Function
+      444(f32v1):    154(ptr) Variable Function
+      446(f32v2):    154(ptr) Variable Function
+             445:  153(fvec3) Load 444(f32v1)
+             447:  153(fvec3) Load 446(f32v2)
+             448:  158(bvec3) FOrdLessThan 445 447
+                              Store 443(bv) 448
+             449:  153(fvec3) Load 444(f32v1)
+             450:  153(fvec3) Load 446(f32v2)
+             451:  158(bvec3) FOrdLessThanEqual 449 450
+                              Store 443(bv) 451
+             452:  153(fvec3) Load 444(f32v1)
+             453:  153(fvec3) Load 446(f32v2)
+             454:  158(bvec3) FOrdGreaterThan 452 453
+                              Store 443(bv) 454
+             455:  153(fvec3) Load 444(f32v1)
+             456:  153(fvec3) Load 446(f32v2)
+             457:  158(bvec3) FOrdGreaterThanEqual 455 456
+                              Store 443(bv) 457
+             458:  153(fvec3) Load 444(f32v1)
+             459:  153(fvec3) Load 446(f32v2)
+             460:  158(bvec3) FOrdEqual 458 459
+                              Store 443(bv) 460
+             461:  153(fvec3) Load 444(f32v1)
+             462:  153(fvec3) Load 446(f32v2)
+             463:  158(bvec3) FOrdNotEqual 461 462
+                              Store 443(bv) 463
+                              Return
+                              FunctionEnd
+24(builtinFragProcFuncs():           2 Function None 3
+              25:             Label
+       464(f32v):    154(ptr) Variable Function
+             468:    467(ptr) AccessChain 466(if32v) 32
+             469:   26(float) Load 468
+             470:   26(float) DPdx 469
+             471:     33(ptr) AccessChain 464(f32v) 32
+                              Store 471 470
+             472:    467(ptr) AccessChain 466(if32v) 88
+             473:   26(float) Load 472
+             474:   26(float) DPdy 473
+             475:     33(ptr) AccessChain 464(f32v) 88
+                              Store 475 474
+             476:  153(fvec3) Load 466(if32v)
+             477:   27(fvec2) VectorShuffle 476 476 0 1
+             478:   27(fvec2) DPdxFine 477
+             479:  153(fvec3) Load 464(f32v)
+             480:  153(fvec3) VectorShuffle 479 478 3 4 2
+                              Store 464(f32v) 480
+             481:  153(fvec3) Load 466(if32v)
+             482:   27(fvec2) VectorShuffle 481 481 0 1
+             483:   27(fvec2) DPdyFine 482
+             484:  153(fvec3) Load 464(f32v)
+             485:  153(fvec3) VectorShuffle 484 483 3 4 2
+                              Store 464(f32v) 485
+             486:  153(fvec3) Load 466(if32v)
+             487:  153(fvec3) DPdxCoarse 486
+                              Store 464(f32v) 487
+             488:  153(fvec3) Load 466(if32v)
+             489:  153(fvec3) DPdxCoarse 488
+                              Store 464(f32v) 489
+             490:    467(ptr) AccessChain 466(if32v) 32
+             491:   26(float) Load 490
+             492:   26(float) Fwidth 491
+             493:     33(ptr) AccessChain 464(f32v) 32
+                              Store 493 492
+             494:  153(fvec3) Load 466(if32v)
+             495:   27(fvec2) VectorShuffle 494 494 0 1
+             496:   27(fvec2) FwidthFine 495
+             497:  153(fvec3) Load 464(f32v)
+             498:  153(fvec3) VectorShuffle 497 496 3 4 2
+                              Store 464(f32v) 498
+             499:  153(fvec3) Load 466(if32v)
+             500:  153(fvec3) FwidthCoarse 499
+                              Store 464(f32v) 500
+             501:    467(ptr) AccessChain 466(if32v) 32
+             502:   26(float) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 501
+             503:     33(ptr) AccessChain 464(f32v) 32
+                              Store 503 502
+             505:  153(fvec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 466(if32v) 504
+             506:   27(fvec2) VectorShuffle 505 505 0 1
+             507:  153(fvec3) Load 464(f32v)
+             508:  153(fvec3) VectorShuffle 507 506 3 4 2
+                              Store 464(f32v) 508
+             511:  153(fvec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 466(if32v) 510
+                              Store 464(f32v) 511
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.float64.frag.out b/Test/baseResults/spv.float64.frag.out
new file mode 100644
index 0000000..bee2068
--- /dev/null
+++ b/Test/baseResults/spv.float64.frag.out
@@ -0,0 +1,788 @@
+spv.float64.frag
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 519
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Float64
+                              Capability Int64
+                              Capability Int16
+                              Capability Int8
+                              Capability DerivativeControl
+                              Capability InterpolationFunction
+                              Extension  "SPV_AMD_gpu_shader_half_float"
+                              Extension  "SPV_AMD_gpu_shader_int16"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 456
+                              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 198  "u16v"
+                              Name 203  "u32v"
+                              Name 209  "u64v"
+                              Name 214  "f64v2"
+                              Name 215  "f64v1"
+                              Name 247  "f64v2"
+                              Name 248  "f64v1"
+                              Name 264  "f64v2"
+                              Name 265  "f64v1"
+                              Name 286  "f64"
+                              Name 290  "f64v3"
+                              Name 330  "bv"
+                              Name 351  "b"
+                              Name 361  "iv"
+                              Name 362  "ResType"
+                              Name 369  "f64"
+                              Name 370  "f64v1"
+                              Name 374  "f64v2"
+                              Name 380  "f64v3"
+                              Name 399  "f64m3"
+                              Name 400  "f64m1"
+                              Name 402  "f64m2"
+                              Name 411  "f64v1"
+                              Name 413  "f64v2"
+                              Name 418  "f64m4"
+                              Name 421  "f64"
+                              Name 424  "f64m5"
+                              Name 429  "f64m6"
+                              Name 430  "f64m7"
+                              Name 433  "bv"
+                              Name 434  "f64v1"
+                              Name 436  "f64v2"
+                              Name 454  "f64v"
+                              Name 456  "if64v"
+                              Name 505  "S"
+                              MemberName 505(S) 0  "x"
+                              MemberName 505(S) 1  "y"
+                              MemberName 505(S) 2  "z"
+                              Name 507  "B1"
+                              MemberName 507(B1) 0  "a"
+                              MemberName 507(B1) 1  "b"
+                              MemberName 507(B1) 2  "c"
+                              MemberName 507(B1) 3  "d"
+                              MemberName 507(B1) 4  "e"
+                              MemberName 507(B1) 5  "f"
+                              MemberName 507(B1) 6  "g"
+                              MemberName 507(B1) 7  "h"
+                              Name 509  ""
+                              Name 510  "sf16"
+                              Name 512  "sf"
+                              Name 513  "sd"
+                              Decorate 456(if64v) Flat
+                              Decorate 503 ArrayStride 16
+                              Decorate 504 ArrayStride 64
+                              MemberDecorate 505(S) 0 Offset 0
+                              MemberDecorate 505(S) 1 Offset 16
+                              MemberDecorate 505(S) 2 Offset 32
+                              Decorate 506 ArrayStride 64
+                              MemberDecorate 507(B1) 0 Offset 0
+                              MemberDecorate 507(B1) 1 Offset 16
+                              MemberDecorate 507(B1) 2 Offset 32
+                              MemberDecorate 507(B1) 3 Offset 64
+                              MemberDecorate 507(B1) 4 ColMajor
+                              MemberDecorate 507(B1) 4 Offset 96
+                              MemberDecorate 507(B1) 4 MatrixStride 32
+                              MemberDecorate 507(B1) 5 ColMajor
+                              MemberDecorate 507(B1) 5 Offset 160
+                              MemberDecorate 507(B1) 5 MatrixStride 32
+                              MemberDecorate 507(B1) 6 Offset 288
+                              MemberDecorate 507(B1) 7 Offset 352
+                              Decorate 507(B1) Block
+                              Decorate 509 DescriptorSet 0
+                              Decorate 510(sf16) SpecId 100
+                              Decorate 512(sf) SpecId 101
+                              Decorate 513(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
+             201:             TypeVector 31(int) 3
+             202:             TypePointer Function 201(ivec3)
+             206:             TypeInt 64 0
+             207:             TypeVector 206(int) 3
+             208:             TypePointer Function 207(ivec3)
+             212:             TypeVector 26(float) 4
+             213:             TypePointer Function 212(fvec4)
+    362(ResType):             TypeStruct 149(fvec3) 183(ivec3)
+             397:             TypeMatrix 149(fvec3) 2
+             398:             TypePointer Function 397
+             416:             TypeMatrix 27(fvec2) 3
+             417:             TypePointer Function 416
+             422:             TypeMatrix 149(fvec3) 3
+             423:             TypePointer Function 422
+             427:             TypeMatrix 212(fvec4) 4
+             428:             TypePointer Function 427
+             455:             TypePointer Input 149(fvec3)
+      456(if64v):    455(ptr) Variable Input
+             457:             TypePointer Input 26(float)
+             494:    182(int) Constant 1
+             499:   26(float) Constant 0 1071644672
+             500:   27(fvec2) ConstantComposite 499 499
+             502:     31(int) Constant 2
+             503:             TypeArray 26(float) 502
+             504:             TypeArray 397 502
+          505(S):             TypeStruct 26(float) 27(fvec2) 149(fvec3)
+             506:             TypeArray 505(S) 502
+         507(B1):             TypeStruct 26(float) 27(fvec2) 149(fvec3) 503 397 504 505(S) 506
+             508:             TypePointer Uniform 507(B1)
+             509:    508(ptr) Variable Uniform
+       510(sf16):  162(float) SpecConstant 12288
+             511:             TypeFloat 32
+         512(sf):  511(float) SpecConstant 1048576000
+         513(sd):   26(float) SpecConstant 0 1071644672
+             514:  511(float) SpecConstantOp 115 510(sf16)
+             515:  511(float) SpecConstantOp 115 510(sf16)
+             516:   26(float) SpecConstantOp 115 515
+             517:  162(float) SpecConstantOp 115 512(sf)
+             518:  162(float) SpecConstantOp 115 513(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
+       198(u16v):    184(ptr) Variable Function
+       203(u32v):    202(ptr) Variable Function
+       209(u64v):    208(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
+             199:  149(fvec3) Load 151(f64v)
+             200:  183(ivec3) ConvertFToU 199
+                              Store 198(u16v) 200
+             204:  149(fvec3) Load 151(f64v)
+             205:  201(ivec3) ConvertFToU 204
+                              Store 203(u32v) 205
+             210:  149(fvec3) Load 151(f64v)
+             211:  207(ivec3) ConvertFToU 210
+                              Store 209(u64v) 211
+                              Return
+                              FunctionEnd
+12(builtinAngleTrigFuncs():           2 Function None 3
+              13:             Label
+      214(f64v2):    213(ptr) Variable Function
+      215(f64v1):    213(ptr) Variable Function
+             216:  212(fvec4) Load 215(f64v1)
+             217:  212(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 216
+                              Store 214(f64v2) 217
+             218:  212(fvec4) Load 215(f64v1)
+             219:  212(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 218
+                              Store 214(f64v2) 219
+             220:  212(fvec4) Load 215(f64v1)
+             221:  212(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 220
+                              Store 214(f64v2) 221
+             222:  212(fvec4) Load 215(f64v1)
+             223:  212(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 222
+                              Store 214(f64v2) 223
+             224:  212(fvec4) Load 215(f64v1)
+             225:  212(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 224
+                              Store 214(f64v2) 225
+             226:  212(fvec4) Load 215(f64v1)
+             227:  212(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 226
+                              Store 214(f64v2) 227
+             228:  212(fvec4) Load 215(f64v1)
+             229:  212(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 228
+                              Store 214(f64v2) 229
+             230:  212(fvec4) Load 215(f64v1)
+             231:  212(fvec4) Load 214(f64v2)
+             232:  212(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 230 231
+                              Store 214(f64v2) 232
+             233:  212(fvec4) Load 215(f64v1)
+             234:  212(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 233
+                              Store 214(f64v2) 234
+             235:  212(fvec4) Load 215(f64v1)
+             236:  212(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 235
+                              Store 214(f64v2) 236
+             237:  212(fvec4) Load 215(f64v1)
+             238:  212(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 237
+                              Store 214(f64v2) 238
+             239:  212(fvec4) Load 215(f64v1)
+             240:  212(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 239
+                              Store 214(f64v2) 240
+             241:  212(fvec4) Load 215(f64v1)
+             242:  212(fvec4) ExtInst 1(GLSL.std.450) 22(Asinh) 241
+                              Store 214(f64v2) 242
+             243:  212(fvec4) Load 215(f64v1)
+             244:  212(fvec4) ExtInst 1(GLSL.std.450) 23(Acosh) 243
+                              Store 214(f64v2) 244
+             245:  212(fvec4) Load 215(f64v1)
+             246:  212(fvec4) ExtInst 1(GLSL.std.450) 24(Atanh) 245
+                              Store 214(f64v2) 246
+                              Return
+                              FunctionEnd
+14(builtinExpFuncs():           2 Function None 3
+              15:             Label
+      247(f64v2):     28(ptr) Variable Function
+      248(f64v1):     28(ptr) Variable Function
+             249:   27(fvec2) Load 248(f64v1)
+             250:   27(fvec2) Load 247(f64v2)
+             251:   27(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 249 250
+                              Store 247(f64v2) 251
+             252:   27(fvec2) Load 248(f64v1)
+             253:   27(fvec2) ExtInst 1(GLSL.std.450) 27(Exp) 252
+                              Store 247(f64v2) 253
+             254:   27(fvec2) Load 248(f64v1)
+             255:   27(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 254
+                              Store 247(f64v2) 255
+             256:   27(fvec2) Load 248(f64v1)
+             257:   27(fvec2) ExtInst 1(GLSL.std.450) 29(Exp2) 256
+                              Store 247(f64v2) 257
+             258:   27(fvec2) Load 248(f64v1)
+             259:   27(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 258
+                              Store 247(f64v2) 259
+             260:   27(fvec2) Load 248(f64v1)
+             261:   27(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 260
+                              Store 247(f64v2) 261
+             262:   27(fvec2) Load 248(f64v1)
+             263:   27(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 262
+                              Store 247(f64v2) 263
+                              Return
+                              FunctionEnd
+16(builtinCommonFuncs():           2 Function None 3
+              17:             Label
+      264(f64v2):    150(ptr) Variable Function
+      265(f64v1):    150(ptr) Variable Function
+        286(f64):     33(ptr) Variable Function
+      290(f64v3):    150(ptr) Variable Function
+         330(bv):    153(ptr) Variable Function
+          351(b):    108(ptr) Variable Function
+         361(iv):    184(ptr) Variable Function
+             266:  149(fvec3) Load 265(f64v1)
+             267:  149(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 266
+                              Store 264(f64v2) 267
+             268:  149(fvec3) Load 265(f64v1)
+             269:  149(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 268
+                              Store 264(f64v2) 269
+             270:  149(fvec3) Load 265(f64v1)
+             271:  149(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 270
+                              Store 264(f64v2) 271
+             272:  149(fvec3) Load 265(f64v1)
+             273:  149(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 272
+                              Store 264(f64v2) 273
+             274:  149(fvec3) Load 265(f64v1)
+             275:  149(fvec3) ExtInst 1(GLSL.std.450) 1(Round) 274
+                              Store 264(f64v2) 275
+             276:  149(fvec3) Load 265(f64v1)
+             277:  149(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 276
+                              Store 264(f64v2) 277
+             278:  149(fvec3) Load 265(f64v1)
+             279:  149(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 278
+                              Store 264(f64v2) 279
+             280:  149(fvec3) Load 265(f64v1)
+             281:  149(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 280
+                              Store 264(f64v2) 281
+             282:  149(fvec3) Load 265(f64v1)
+             283:  149(fvec3) Load 264(f64v2)
+             284:  149(fvec3) FMod 282 283
+                              Store 264(f64v2) 284
+             285:  149(fvec3) Load 265(f64v1)
+             287:   26(float) Load 286(f64)
+             288:  149(fvec3) CompositeConstruct 287 287 287
+             289:  149(fvec3) FMod 285 288
+                              Store 264(f64v2) 289
+             291:  149(fvec3) Load 265(f64v1)
+             292:  149(fvec3) ExtInst 1(GLSL.std.450) 35(Modf) 291 264(f64v2)
+                              Store 290(f64v3) 292
+             293:  149(fvec3) Load 265(f64v1)
+             294:  149(fvec3) Load 264(f64v2)
+             295:  149(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 293 294
+                              Store 290(f64v3) 295
+             296:  149(fvec3) Load 265(f64v1)
+             297:   26(float) Load 286(f64)
+             298:  149(fvec3) CompositeConstruct 297 297 297
+             299:  149(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 296 298
+                              Store 290(f64v3) 299
+             300:  149(fvec3) Load 265(f64v1)
+             301:  149(fvec3) Load 264(f64v2)
+             302:  149(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 300 301
+                              Store 290(f64v3) 302
+             303:  149(fvec3) Load 265(f64v1)
+             304:   26(float) Load 286(f64)
+             305:  149(fvec3) CompositeConstruct 304 304 304
+             306:  149(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 303 305
+                              Store 290(f64v3) 306
+             307:  149(fvec3) Load 265(f64v1)
+             308:   26(float) Load 286(f64)
+             309:     33(ptr) AccessChain 264(f64v2) 32
+             310:   26(float) Load 309
+             311:  149(fvec3) CompositeConstruct 308 308 308
+             312:  149(fvec3) CompositeConstruct 310 310 310
+             313:  149(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 307 311 312
+                              Store 290(f64v3) 313
+             314:  149(fvec3) Load 265(f64v1)
+             315:  149(fvec3) Load 264(f64v2)
+             316:   26(float) Load 286(f64)
+             317:  149(fvec3) CompositeConstruct 316 316 316
+             318:  149(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 314 315 317
+                              Store 290(f64v3) 318
+             319:  149(fvec3) Load 265(f64v1)
+             320:  149(fvec3) Load 264(f64v2)
+             321:   26(float) Load 286(f64)
+             322:  149(fvec3) CompositeConstruct 321 321 321
+             323:  149(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 319 320 322
+                              Store 290(f64v3) 323
+             324:  149(fvec3) Load 265(f64v1)
+             325:  149(fvec3) Load 264(f64v2)
+             326:  149(fvec3) Load 290(f64v3)
+             327:  149(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 324 325 326
+                              Store 290(f64v3) 327
+             328:  149(fvec3) Load 265(f64v1)
+             329:  149(fvec3) Load 264(f64v2)
+             331:  152(bvec3) Load 330(bv)
+             332:  149(fvec3) Select 331 329 328
+                              Store 290(f64v3) 332
+             333:  149(fvec3) Load 265(f64v1)
+             334:  149(fvec3) Load 264(f64v2)
+             335:  149(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 333 334
+                              Store 290(f64v3) 335
+             336:   26(float) Load 286(f64)
+             337:  149(fvec3) Load 290(f64v3)
+             338:  149(fvec3) CompositeConstruct 336 336 336
+             339:  149(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 338 337
+                              Store 290(f64v3) 339
+             340:  149(fvec3) Load 265(f64v1)
+             341:  149(fvec3) Load 264(f64v2)
+             342:  149(fvec3) Load 290(f64v3)
+             343:  149(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 340 341 342
+                              Store 290(f64v3) 343
+             344:   26(float) Load 286(f64)
+             345:     33(ptr) AccessChain 265(f64v1) 32
+             346:   26(float) Load 345
+             347:  149(fvec3) Load 264(f64v2)
+             348:  149(fvec3) CompositeConstruct 344 344 344
+             349:  149(fvec3) CompositeConstruct 346 346 346
+             350:  149(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 348 349 347
+                              Store 290(f64v3) 350
+             352:   26(float) Load 286(f64)
+             353:   107(bool) IsNan 352
+                              Store 351(b) 353
+             354:  149(fvec3) Load 265(f64v1)
+             355:  152(bvec3) IsInf 354
+                              Store 330(bv) 355
+             356:  149(fvec3) Load 265(f64v1)
+             357:  149(fvec3) Load 264(f64v2)
+             358:  149(fvec3) Load 290(f64v3)
+             359:  149(fvec3) ExtInst 1(GLSL.std.450) 50(Fma) 356 357 358
+                              Store 290(f64v3) 359
+             360:  149(fvec3) Load 265(f64v1)
+             363:362(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 360
+             364:  183(ivec3) CompositeExtract 363 1
+                              Store 361(iv) 364
+             365:  149(fvec3) CompositeExtract 363 0
+                              Store 264(f64v2) 365
+             366:  149(fvec3) Load 265(f64v1)
+             367:  183(ivec3) Load 361(iv)
+             368:  149(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 366 367
+                              Store 264(f64v2) 368
+                              Return
+                              FunctionEnd
+18(builtinGeometryFuncs():           2 Function None 3
+              19:             Label
+        369(f64):     33(ptr) Variable Function
+      370(f64v1):    150(ptr) Variable Function
+      374(f64v2):    150(ptr) Variable Function
+      380(f64v3):    150(ptr) Variable Function
+             371:  149(fvec3) Load 370(f64v1)
+             372:   26(float) ExtInst 1(GLSL.std.450) 66(Length) 371
+                              Store 369(f64) 372
+             373:  149(fvec3) Load 370(f64v1)
+             375:  149(fvec3) Load 374(f64v2)
+             376:   26(float) ExtInst 1(GLSL.std.450) 67(Distance) 373 375
+                              Store 369(f64) 376
+             377:  149(fvec3) Load 370(f64v1)
+             378:  149(fvec3) Load 374(f64v2)
+             379:   26(float) Dot 377 378
+                              Store 369(f64) 379
+             381:  149(fvec3) Load 370(f64v1)
+             382:  149(fvec3) Load 374(f64v2)
+             383:  149(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 381 382
+                              Store 380(f64v3) 383
+             384:  149(fvec3) Load 370(f64v1)
+             385:  149(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 384
+                              Store 374(f64v2) 385
+             386:  149(fvec3) Load 370(f64v1)
+             387:  149(fvec3) Load 374(f64v2)
+             388:  149(fvec3) Load 380(f64v3)
+             389:  149(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 386 387 388
+                              Store 380(f64v3) 389
+             390:  149(fvec3) Load 370(f64v1)
+             391:  149(fvec3) Load 374(f64v2)
+             392:  149(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 390 391
+                              Store 380(f64v3) 392
+             393:  149(fvec3) Load 370(f64v1)
+             394:  149(fvec3) Load 374(f64v2)
+             395:   26(float) Load 369(f64)
+             396:  149(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 393 394 395
+                              Store 380(f64v3) 396
+                              Return
+                              FunctionEnd
+20(builtinMatrixFuncs():           2 Function None 3
+              21:             Label
+      399(f64m3):    398(ptr) Variable Function
+      400(f64m1):    398(ptr) Variable Function
+      402(f64m2):    398(ptr) Variable Function
+      411(f64v1):    150(ptr) Variable Function
+      413(f64v2):     28(ptr) Variable Function
+      418(f64m4):    417(ptr) Variable Function
+        421(f64):     33(ptr) Variable Function
+      424(f64m5):    423(ptr) Variable Function
+      429(f64m6):    428(ptr) Variable Function
+      430(f64m7):    428(ptr) Variable Function
+             401:         397 Load 400(f64m1)
+             403:         397 Load 402(f64m2)
+             404:  149(fvec3) CompositeExtract 401 0
+             405:  149(fvec3) CompositeExtract 403 0
+             406:  149(fvec3) FMul 404 405
+             407:  149(fvec3) CompositeExtract 401 1
+             408:  149(fvec3) CompositeExtract 403 1
+             409:  149(fvec3) FMul 407 408
+             410:         397 CompositeConstruct 406 409
+                              Store 399(f64m3) 410
+             412:  149(fvec3) Load 411(f64v1)
+             414:   27(fvec2) Load 413(f64v2)
+             415:         397 OuterProduct 412 414
+                              Store 400(f64m1) 415
+             419:         397 Load 400(f64m1)
+             420:         416 Transpose 419
+                              Store 418(f64m4) 420
+             425:         422 Load 424(f64m5)
+             426:   26(float) ExtInst 1(GLSL.std.450) 33(Determinant) 425
+                              Store 421(f64) 426
+             431:         427 Load 430(f64m7)
+             432:         427 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 431
+                              Store 429(f64m6) 432
+                              Return
+                              FunctionEnd
+22(builtinVecRelFuncs():           2 Function None 3
+              23:             Label
+         433(bv):    153(ptr) Variable Function
+      434(f64v1):    150(ptr) Variable Function
+      436(f64v2):    150(ptr) Variable Function
+             435:  149(fvec3) Load 434(f64v1)
+             437:  149(fvec3) Load 436(f64v2)
+             438:  152(bvec3) FOrdLessThan 435 437
+                              Store 433(bv) 438
+             439:  149(fvec3) Load 434(f64v1)
+             440:  149(fvec3) Load 436(f64v2)
+             441:  152(bvec3) FOrdLessThanEqual 439 440
+                              Store 433(bv) 441
+             442:  149(fvec3) Load 434(f64v1)
+             443:  149(fvec3) Load 436(f64v2)
+             444:  152(bvec3) FOrdGreaterThan 442 443
+                              Store 433(bv) 444
+             445:  149(fvec3) Load 434(f64v1)
+             446:  149(fvec3) Load 436(f64v2)
+             447:  152(bvec3) FOrdGreaterThanEqual 445 446
+                              Store 433(bv) 447
+             448:  149(fvec3) Load 434(f64v1)
+             449:  149(fvec3) Load 436(f64v2)
+             450:  152(bvec3) FOrdEqual 448 449
+                              Store 433(bv) 450
+             451:  149(fvec3) Load 434(f64v1)
+             452:  149(fvec3) Load 436(f64v2)
+             453:  152(bvec3) FOrdNotEqual 451 452
+                              Store 433(bv) 453
+                              Return
+                              FunctionEnd
+24(builtinFragProcFuncs():           2 Function None 3
+              25:             Label
+       454(f64v):    150(ptr) Variable Function
+             458:    457(ptr) AccessChain 456(if64v) 32
+             459:   26(float) Load 458
+             460:   26(float) DPdx 459
+             461:     33(ptr) AccessChain 454(f64v) 32
+                              Store 461 460
+             462:    457(ptr) AccessChain 456(if64v) 88
+             463:   26(float) Load 462
+             464:   26(float) DPdy 463
+             465:     33(ptr) AccessChain 454(f64v) 88
+                              Store 465 464
+             466:  149(fvec3) Load 456(if64v)
+             467:   27(fvec2) VectorShuffle 466 466 0 1
+             468:   27(fvec2) DPdxFine 467
+             469:  149(fvec3) Load 454(f64v)
+             470:  149(fvec3) VectorShuffle 469 468 3 4 2
+                              Store 454(f64v) 470
+             471:  149(fvec3) Load 456(if64v)
+             472:   27(fvec2) VectorShuffle 471 471 0 1
+             473:   27(fvec2) DPdyFine 472
+             474:  149(fvec3) Load 454(f64v)
+             475:  149(fvec3) VectorShuffle 474 473 3 4 2
+                              Store 454(f64v) 475
+             476:  149(fvec3) Load 456(if64v)
+             477:  149(fvec3) DPdxCoarse 476
+                              Store 454(f64v) 477
+             478:  149(fvec3) Load 456(if64v)
+             479:  149(fvec3) DPdxCoarse 478
+                              Store 454(f64v) 479
+             480:    457(ptr) AccessChain 456(if64v) 32
+             481:   26(float) Load 480
+             482:   26(float) Fwidth 481
+             483:     33(ptr) AccessChain 454(f64v) 32
+                              Store 483 482
+             484:  149(fvec3) Load 456(if64v)
+             485:   27(fvec2) VectorShuffle 484 484 0 1
+             486:   27(fvec2) FwidthFine 485
+             487:  149(fvec3) Load 454(f64v)
+             488:  149(fvec3) VectorShuffle 487 486 3 4 2
+                              Store 454(f64v) 488
+             489:  149(fvec3) Load 456(if64v)
+             490:  149(fvec3) FwidthCoarse 489
+                              Store 454(f64v) 490
+             491:    457(ptr) AccessChain 456(if64v) 32
+             492:   26(float) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 491
+             493:     33(ptr) AccessChain 454(f64v) 32
+                              Store 493 492
+             495:  149(fvec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 456(if64v) 494
+             496:   27(fvec2) VectorShuffle 495 495 0 1
+             497:  149(fvec3) Load 454(f64v)
+             498:  149(fvec3) VectorShuffle 497 496 3 4 2
+                              Store 454(f64v) 498
+             501:  149(fvec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 456(if64v) 500
+                              Store 454(f64v) 501
+                              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..b9949d1
--- /dev/null
+++ b/Test/baseResults/spv.int16.amd.frag.out
@@ -0,0 +1,776 @@
+spv.int16.amd.frag
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 558
+
+                              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" 517 519
+                              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 17  "u16"
+                              Name 26  "Uniforms"
+                              MemberName 26(Uniforms) 0  "i"
+                              Name 28  ""
+                              Name 34  "indexable"
+                              Name 45  "indexable"
+                              Name 51  "u16v"
+                              Name 57  "i16"
+                              Name 70  "u16"
+                              Name 127  "b"
+                              Name 148  "u"
+                              Name 158  "i"
+                              Name 188  "i16v"
+                              Name 191  "bv"
+                              Name 199  "u16v"
+                              Name 211  "iv"
+                              Name 224  "uv"
+                              Name 238  "fv"
+                              Name 250  "dv"
+                              Name 262  "f16v"
+                              Name 274  "i64v"
+                              Name 288  "u64v"
+                              Name 303  "i16v"
+                              Name 309  "i16"
+                              Name 317  "u16v"
+                              Name 319  "u16"
+                              Name 391  "f16v"
+                              Name 394  "exp"
+                              Name 395  "ResType"
+                              Name 416  "packi"
+                              Name 421  "packu"
+                              Name 430  "packi64"
+                              Name 439  "packu64"
+                              Name 448  "bv"
+                              Name 513  "Block"
+                              MemberName 513(Block) 0  "i16v"
+                              MemberName 513(Block) 1  "u16"
+                              Name 515  "block"
+                              Name 517  "iu16v"
+                              Name 519  "ii16"
+                              Name 520  "si64"
+                              Name 521  "su64"
+                              Name 522  "si"
+                              Name 523  "su"
+                              Name 524  "sb"
+                              Name 525  "si16"
+                              Name 526  "su16"
+                              MemberDecorate 26(Uniforms) 0 Offset 0
+                              Decorate 26(Uniforms) Block
+                              Decorate 28 DescriptorSet 0
+                              Decorate 28 Binding 0
+                              MemberDecorate 513(Block) 0 Offset 0
+                              MemberDecorate 513(Block) 1 Offset 6
+                              Decorate 513(Block) Block
+                              Decorate 515(block) DescriptorSet 0
+                              Decorate 515(block) Binding 1
+                              Decorate 517(iu16v) Flat
+                              Decorate 517(iu16v) Location 0
+                              Decorate 519(ii16) Flat
+                              Decorate 519(ii16) Location 1
+                              Decorate 520(si64) SpecId 100
+                              Decorate 521(su64) SpecId 101
+                              Decorate 522(si) SpecId 102
+                              Decorate 523(su) SpecId 103
+                              Decorate 524(sb) SpecId 104
+                              Decorate 525(si16) SpecId 105
+                              Decorate 526(su16) SpecId 106
+               2:             TypeVoid
+               3:             TypeFunction 2
+              14:             TypeInt 16 0
+              15:             TypeInt 32 1
+              16:             TypePointer Function 15(int)
+              18:             TypeInt 16 1
+              19:             TypeInt 32 0
+              20:     19(int) Constant 3
+              21:             TypeArray 18(int) 20
+              22:     18(int) Constant 273
+              23:     18(int) Constant 4294967294
+              24:     18(int) Constant 256
+              25:          21 ConstantComposite 22 23 24
+    26(Uniforms):             TypeStruct 19(int)
+              27:             TypePointer Uniform 26(Uniforms)
+              28:     27(ptr) Variable Uniform
+              29:     15(int) Constant 0
+              30:             TypePointer Uniform 19(int)
+              33:             TypePointer Function 21
+              35:             TypePointer Function 18(int)
+              39:             TypeArray 15(int) 20
+              40:     14(int) Constant 65535
+              41:          39 ConstantComposite 40 40 40
+              44:             TypePointer Function 39
+              49:             TypeVector 15(int) 3
+              50:             TypePointer Function 49(ivec3)
+              53:     18(int) Constant 1
+              54:             TypeVector 18(int) 3
+             111:     19(int) Constant 1
+             117:     19(int) Constant 2
+             125:             TypeBool
+             126:             TypePointer Function 125(bool)
+             128:     19(int) Constant 0
+             147:             TypePointer Function 19(int)
+             186:             TypeVector 18(int) 2
+             187:             TypePointer Function 186(ivec2)
+             189:             TypeVector 125(bool) 2
+             190:             TypePointer Function 189(bvec2)
+             193:     18(int) Constant 0
+             194:  186(ivec2) ConstantComposite 193 193
+             195:  186(ivec2) ConstantComposite 53 53
+             197:             TypeVector 15(int) 2
+             198:             TypePointer Function 197(ivec2)
+             201:     14(int) Constant 0
+             202:     14(int) Constant 1
+             203:             TypeVector 14(int) 2
+             204:  203(ivec2) ConstantComposite 201 201
+             205:  203(ivec2) ConstantComposite 202 202
+             222:             TypeVector 19(int) 2
+             223:             TypePointer Function 222(ivec2)
+             235:             TypeFloat 32
+             236:             TypeVector 235(float) 2
+             237:             TypePointer Function 236(fvec2)
+             247:             TypeFloat 64
+             248:             TypeVector 247(float) 2
+             249:             TypePointer Function 248(fvec2)
+             259:             TypeFloat 16
+             260:             TypeVector 259(float) 2
+             261:             TypePointer Function 260(fvec2)
+             271:             TypeInt 64 1
+             272:             TypeVector 271(int) 2
+             273:             TypePointer Function 272(ivec2)
+             285:             TypeInt 64 0
+             286:             TypeVector 285(int) 2
+             287:             TypePointer Function 286(ivec2)
+             314:     18(int) Constant 4294967295
+             315:  186(ivec2) ConstantComposite 314 314
+             324:   49(ivec3) ConstantComposite 201 201 201
+             366:   125(bool) ConstantTrue
+             373:   125(bool) ConstantFalse
+             374:  189(bvec2) ConstantComposite 373 373
+             386:             TypeVector 125(bool) 3
+             387:  386(bvec3) ConstantComposite 373 373 373
+             389:             TypeVector 259(float) 3
+             390:             TypePointer Function 389(fvec3)
+             393:             TypePointer Function 54(ivec3)
+    395(ResType):             TypeStruct 389(fvec3) 54(ivec3)
+             405:             TypePointer Function 259(float)
+             429:             TypePointer Function 271(int)
+             432:             TypeVector 18(int) 4
+             438:             TypePointer Function 285(int)
+             441:             TypeVector 15(int) 4
+             447:             TypePointer Function 386(bvec3)
+      513(Block):             TypeStruct 54(ivec3) 15(int)
+             514:             TypePointer Uniform 513(Block)
+      515(block):    514(ptr) Variable Uniform
+             516:             TypePointer Input 49(ivec3)
+      517(iu16v):    516(ptr) Variable Input
+             518:             TypePointer Input 18(int)
+       519(ii16):    518(ptr) Variable Input
+       520(si64):    271(int) SpecConstant 4294967286 4294967295
+       521(su64):    285(int) SpecConstant 20 0
+         522(si):     15(int) SpecConstant 4294967291
+         523(su):     19(int) SpecConstant 4
+         524(sb):   125(bool) SpecConstantTrue
+       525(si16):     18(int) SpecConstant 4294967291
+       526(su16):     14(int) SpecConstant 4
+             527:   125(bool) SpecConstantOp 171 525(si16) 201
+             528:   125(bool) SpecConstantOp 171 526(su16) 201
+             529:     18(int) SpecConstantOp 169 524(sb) 53 193
+             530:     15(int) SpecConstantOp 169 524(sb) 202 201
+             531:     15(int) SpecConstantOp 114 525(si16)
+             532:     15(int) SpecConstantOp 113 526(su16)
+             533:     15(int) SpecConstantOp 128 532 128
+             534:     18(int) SpecConstantOp 114 522(si)
+             535:     18(int) SpecConstantOp 114 522(si)
+             536:     15(int) SpecConstantOp 128 535 201
+             537:     15(int) SpecConstantOp 114 525(si16)
+             538:     19(int) SpecConstantOp 128 537 128
+             539:     19(int) SpecConstantOp 113 526(su16)
+             540:     18(int) SpecConstantOp 113 523(su)
+             541:     18(int) SpecConstantOp 128 540 201
+             542:     15(int) SpecConstantOp 113 523(su)
+             543:    271(int) SpecConstantOp 114 525(si16)
+             544:    271(int) SpecConstantOp 113 526(su16)
+             545:    285(int) Constant 0 0
+             546:    271(int) SpecConstantOp 128 544 545
+             547:     18(int) SpecConstantOp 114 520(si64)
+             548:     18(int) SpecConstantOp 114 520(si64)
+             549:     15(int) SpecConstantOp 128 548 201
+             550:    271(int) SpecConstantOp 114 525(si16)
+             551:    285(int) SpecConstantOp 128 550 545
+             552:    285(int) SpecConstantOp 113 526(su16)
+             553:     18(int) SpecConstantOp 113 521(su64)
+             554:     18(int) SpecConstantOp 128 553 201
+             555:     15(int) SpecConstantOp 113 521(su64)
+             556:     15(int) SpecConstantOp 128 525(si16) 201
+             557:     18(int) SpecConstantOp 128 526(su16) 201
+         4(main):           2 Function None 3
+               5:             Label
+             509:           2 FunctionCall 6(literal()
+             510:           2 FunctionCall 8(operators()
+             511:           2 FunctionCall 10(typeCast()
+             512:           2 FunctionCall 12(builtinFuncs()
+                              Return
+                              FunctionEnd
+     6(literal():           2 Function None 3
+               7:             Label
+         17(u16):     16(ptr) Variable Function
+   34(indexable):     33(ptr) Variable Function
+   45(indexable):     44(ptr) Variable Function
+              31:     30(ptr) AccessChain 28 29
+              32:     19(int) Load 31
+                              Store 34(indexable) 25
+              36:     35(ptr) AccessChain 34(indexable) 32
+              37:     18(int) Load 36
+              38:     15(int) Bitcast 37
+              42:     30(ptr) AccessChain 28 29
+              43:     19(int) Load 42
+                              Store 45(indexable) 41
+              46:     16(ptr) AccessChain 45(indexable) 43
+              47:     15(int) Load 46
+              48:     15(int) IAdd 38 47
+                              Store 17(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):     16(ptr) Variable Function
+          127(b):    126(ptr) Variable Function
+          148(u):    147(ptr) Variable Function
+          158(i):     16(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:     18(int) Load 57(i16)
+              59:     18(int) ISub 58 53
+                              Store 57(i16) 59
+              60:     18(int) Load 57(i16)
+              61:     18(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:     18(int) Load 57(i16)
+                              Store 57(i16) 67
+              68:   49(ivec3) Load 51(u16v)
+              69:   49(ivec3) SNegate 68
+                              Store 51(u16v) 69
+              71:     18(int) Load 57(i16)
+              72:     15(int) Bitcast 71
+              73:     15(int) Load 70(u16)
+              74:     15(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:     18(int) Load 57(i16)
+              79:     18(int) Load 57(i16)
+              80:     18(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:     18(int) Load 57(i16)
+              85:     15(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:     18(int) Load 57(i16)
+              93:     15(int) Bitcast 92
+              94:     15(int) Load 70(u16)
+              95:     15(int) ISub 93 94
+                              Store 70(u16) 95
+              96:   49(ivec3) Load 51(u16v)
+              97:     18(int) Load 57(i16)
+              98:     15(int) Bitcast 97
+              99:   49(ivec3) CompositeConstruct 98 98 98
+             100:   49(ivec3) IMul 96 99
+                              Store 51(u16v) 100
+             101:     18(int) Load 57(i16)
+             102:     18(int) Load 57(i16)
+             103:     18(int) IMul 101 102
+                              Store 57(i16) 103
+             104:     18(int) Load 57(i16)
+             105:     18(int) Load 57(i16)
+             106:     18(int) SMod 104 105
+                              Store 57(i16) 106
+             107:     18(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:     16(ptr) AccessChain 51(u16v) 111
+             113:     15(int) Load 112
+             114:     18(int) Load 57(i16)
+             115:     18(int) ShiftRightArithmetic 114 113
+                              Store 57(i16) 115
+             116:     18(int) Load 57(i16)
+             118:     16(ptr) AccessChain 51(u16v) 117
+             119:     15(int) Load 118
+             120:     18(int) ShiftLeftLogical 116 119
+                              Store 57(i16) 120
+             121:   49(ivec3) Load 51(u16v)
+             122:     18(int) Load 57(i16)
+             123:   54(ivec3) CompositeConstruct 122 122 122
+             124:   49(ivec3) ShiftLeftLogical 121 123
+                              Store 51(u16v) 124
+             129:     16(ptr) AccessChain 51(u16v) 128
+             130:     15(int) Load 129
+             131:     18(int) Load 57(i16)
+             132:     15(int) Bitcast 131
+             133:   125(bool) INotEqual 130 132
+                              Store 127(b) 133
+             134:     18(int) Load 57(i16)
+             135:     15(int) Bitcast 134
+             136:     16(ptr) AccessChain 51(u16v) 128
+             137:     15(int) Load 136
+             138:   125(bool) IEqual 135 137
+                              Store 127(b) 138
+             139:     16(ptr) AccessChain 51(u16v) 128
+             140:     15(int) Load 139
+             141:     16(ptr) AccessChain 51(u16v) 111
+             142:     15(int) Load 141
+             143:   125(bool) UGreaterThan 140 142
+                              Store 127(b) 143
+             144:     18(int) Load 57(i16)
+             145:     15(int) SConvert 144
+             146:     19(int) Bitcast 145
+             149:     19(int) Load 148(u)
+             150:   125(bool) ULessThan 146 149
+                              Store 127(b) 150
+             151:     16(ptr) AccessChain 51(u16v) 111
+             152:     15(int) Load 151
+             153:     16(ptr) AccessChain 51(u16v) 128
+             154:     15(int) Load 153
+             155:   125(bool) UGreaterThanEqual 152 154
+                              Store 127(b) 155
+             156:     18(int) Load 57(i16)
+             157:     15(int) SConvert 156
+             159:     15(int) Load 158(i)
+             160:   125(bool) SLessThanEqual 157 159
+                              Store 127(b) 160
+             161:     18(int) Load 57(i16)
+             162:     15(int) Bitcast 161
+             163:   49(ivec3) Load 51(u16v)
+             164:   49(ivec3) CompositeConstruct 162 162 162
+             165:   49(ivec3) BitwiseOr 163 164
+                              Store 51(u16v) 165
+             166:     18(int) Load 57(i16)
+             167:     15(int) Bitcast 166
+             168:     15(int) Load 70(u16)
+             169:     15(int) BitwiseOr 167 168
+                              Store 70(u16) 169
+             170:     18(int) Load 57(i16)
+             171:     18(int) Load 57(i16)
+             172:     18(int) BitwiseAnd 171 170
+                              Store 57(i16) 172
+             173:   49(ivec3) Load 51(u16v)
+             174:   49(ivec3) Load 51(u16v)
+             175:   49(ivec3) BitwiseAnd 173 174
+                              Store 51(u16v) 175
+             176:     18(int) Load 57(i16)
+             177:     15(int) Bitcast 176
+             178:   49(ivec3) Load 51(u16v)
+             179:   49(ivec3) CompositeConstruct 177 177 177
+             180:   49(ivec3) BitwiseXor 178 179
+                              Store 51(u16v) 180
+             181:   49(ivec3) Load 51(u16v)
+             182:     18(int) Load 57(i16)
+             183:     15(int) Bitcast 182
+             184:   49(ivec3) CompositeConstruct 183 183 183
+             185:   49(ivec3) BitwiseXor 181 184
+                              Store 51(u16v) 185
+                              Return
+                              FunctionEnd
+   10(typeCast():           2 Function None 3
+              11:             Label
+       188(i16v):    187(ptr) Variable Function
+         191(bv):    190(ptr) Variable Function
+       199(u16v):    198(ptr) Variable Function
+         211(iv):    198(ptr) Variable Function
+         224(uv):    223(ptr) Variable Function
+         238(fv):    237(ptr) Variable Function
+         250(dv):    249(ptr) Variable Function
+       262(f16v):    261(ptr) Variable Function
+       274(i64v):    273(ptr) Variable Function
+       288(u64v):    287(ptr) Variable Function
+             192:  189(bvec2) Load 191(bv)
+             196:  186(ivec2) Select 192 195 194
+                              Store 188(i16v) 196
+             200:  189(bvec2) Load 191(bv)
+             206:  197(ivec2) Select 200 205 204
+                              Store 199(u16v) 206
+             207:  186(ivec2) Load 188(i16v)
+             208:  189(bvec2) INotEqual 207 204
+                              Store 191(bv) 208
+             209:  197(ivec2) Load 199(u16v)
+             210:  189(bvec2) INotEqual 209 204
+                              Store 191(bv) 210
+             212:  197(ivec2) Load 211(iv)
+             213:  186(ivec2) SConvert 212
+                              Store 188(i16v) 213
+             214:  197(ivec2) Load 211(iv)
+             215:  186(ivec2) SConvert 214
+             216:  197(ivec2) Bitcast 215
+                              Store 199(u16v) 216
+             217:  186(ivec2) Load 188(i16v)
+             218:  197(ivec2) SConvert 217
+                              Store 211(iv) 218
+             219:  197(ivec2) Load 199(u16v)
+             220:  197(ivec2) UConvert 219
+             221:  197(ivec2) Bitcast 220
+                              Store 211(iv) 221
+             225:  222(ivec2) Load 224(uv)
+             226:  186(ivec2) UConvert 225
+             227:  186(ivec2) Bitcast 226
+                              Store 188(i16v) 227
+             228:  222(ivec2) Load 224(uv)
+             229:  197(ivec2) UConvert 228
+                              Store 199(u16v) 229
+             230:  186(ivec2) Load 188(i16v)
+             231:  197(ivec2) SConvert 230
+             232:  222(ivec2) Bitcast 231
+                              Store 224(uv) 232
+             233:  197(ivec2) Load 199(u16v)
+             234:  222(ivec2) UConvert 233
+                              Store 224(uv) 234
+             239:  236(fvec2) Load 238(fv)
+             240:  186(ivec2) ConvertFToS 239
+                              Store 188(i16v) 240
+             241:  236(fvec2) Load 238(fv)
+             242:  197(ivec2) ConvertFToU 241
+                              Store 199(u16v) 242
+             243:  186(ivec2) Load 188(i16v)
+             244:  236(fvec2) ConvertSToF 243
+                              Store 238(fv) 244
+             245:  197(ivec2) Load 199(u16v)
+             246:  236(fvec2) ConvertUToF 245
+                              Store 238(fv) 246
+             251:  248(fvec2) Load 250(dv)
+             252:  186(ivec2) ConvertFToS 251
+                              Store 188(i16v) 252
+             253:  248(fvec2) Load 250(dv)
+             254:  197(ivec2) ConvertFToU 253
+                              Store 199(u16v) 254
+             255:  186(ivec2) Load 188(i16v)
+             256:  248(fvec2) ConvertSToF 255
+                              Store 250(dv) 256
+             257:  197(ivec2) Load 199(u16v)
+             258:  248(fvec2) ConvertUToF 257
+                              Store 250(dv) 258
+             263:  260(fvec2) Load 262(f16v)
+             264:  186(ivec2) ConvertFToS 263
+                              Store 188(i16v) 264
+             265:  260(fvec2) Load 262(f16v)
+             266:  197(ivec2) ConvertFToU 265
+                              Store 199(u16v) 266
+             267:  186(ivec2) Load 188(i16v)
+             268:  260(fvec2) ConvertSToF 267
+                              Store 262(f16v) 268
+             269:  197(ivec2) Load 199(u16v)
+             270:  260(fvec2) ConvertUToF 269
+                              Store 262(f16v) 270
+             275:  272(ivec2) Load 274(i64v)
+             276:  186(ivec2) SConvert 275
+                              Store 188(i16v) 276
+             277:  272(ivec2) Load 274(i64v)
+             278:  186(ivec2) SConvert 277
+             279:  197(ivec2) Bitcast 278
+                              Store 199(u16v) 279
+             280:  186(ivec2) Load 188(i16v)
+             281:  272(ivec2) SConvert 280
+                              Store 274(i64v) 281
+             282:  197(ivec2) Load 199(u16v)
+             283:  272(ivec2) UConvert 282
+             284:  272(ivec2) Bitcast 283
+                              Store 274(i64v) 284
+             289:  286(ivec2) Load 288(u64v)
+             290:  186(ivec2) UConvert 289
+             291:  186(ivec2) Bitcast 290
+                              Store 188(i16v) 291
+             292:  286(ivec2) Load 288(u64v)
+             293:  197(ivec2) UConvert 292
+                              Store 199(u16v) 293
+             294:  186(ivec2) Load 188(i16v)
+             295:  272(ivec2) SConvert 294
+             296:  286(ivec2) Bitcast 295
+                              Store 288(u64v) 296
+             297:  197(ivec2) Load 199(u16v)
+             298:  286(ivec2) UConvert 297
+                              Store 288(u64v) 298
+             299:  197(ivec2) Load 199(u16v)
+             300:  186(ivec2) Bitcast 299
+                              Store 188(i16v) 300
+             301:  186(ivec2) Load 188(i16v)
+             302:  197(ivec2) Bitcast 301
+                              Store 199(u16v) 302
+                              Return
+                              FunctionEnd
+12(builtinFuncs():           2 Function None 3
+              13:             Label
+       303(i16v):    187(ptr) Variable Function
+        309(i16):     35(ptr) Variable Function
+       317(u16v):     50(ptr) Variable Function
+        319(u16):     16(ptr) Variable Function
+       391(f16v):    390(ptr) Variable Function
+        394(exp):    393(ptr) Variable Function
+      416(packi):     16(ptr) Variable Function
+      421(packu):    147(ptr) Variable Function
+    430(packi64):    429(ptr) Variable Function
+    439(packu64):    438(ptr) Variable Function
+         448(bv):    447(ptr) Variable Function
+             304:  186(ivec2) Load 303(i16v)
+             305:  186(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 304
+                              Store 303(i16v) 305
+             306:  186(ivec2) Load 303(i16v)
+             307:  186(ivec2) ExtInst 1(GLSL.std.450) 7(SSign) 306
+                              Store 303(i16v) 307
+             308:  186(ivec2) Load 303(i16v)
+             310:     18(int) Load 309(i16)
+             311:  186(ivec2) CompositeConstruct 310 310
+             312:  186(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 308 311
+                              Store 303(i16v) 312
+             313:  186(ivec2) Load 303(i16v)
+             316:  186(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 313 315
+                              Store 303(i16v) 316
+             318:   49(ivec3) Load 317(u16v)
+             320:     15(int) Load 319(u16)
+             321:   49(ivec3) CompositeConstruct 320 320 320
+             322:   49(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 318 321
+                              Store 317(u16v) 322
+             323:   49(ivec3) Load 317(u16v)
+             325:   49(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 323 324
+                              Store 317(u16v) 325
+             326:  186(ivec2) Load 303(i16v)
+             327:     18(int) Load 309(i16)
+             328:  186(ivec2) CompositeConstruct 327 327
+             329:  186(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 326 328
+                              Store 303(i16v) 329
+             330:  186(ivec2) Load 303(i16v)
+             331:  186(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 330 315
+                              Store 303(i16v) 331
+             332:   49(ivec3) Load 317(u16v)
+             333:     15(int) Load 319(u16)
+             334:   49(ivec3) CompositeConstruct 333 333 333
+             335:   49(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 332 334
+                              Store 317(u16v) 335
+             336:   49(ivec3) Load 317(u16v)
+             337:   49(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 336 324
+                              Store 317(u16v) 337
+             338:  186(ivec2) Load 303(i16v)
+             339:     18(int) Load 309(i16)
+             340:     18(int) SNegate 339
+             341:     18(int) Load 309(i16)
+             342:  186(ivec2) CompositeConstruct 340 340
+             343:  186(ivec2) CompositeConstruct 341 341
+             344:  186(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 338 342 343
+                              Store 303(i16v) 344
+             345:  186(ivec2) Load 303(i16v)
+             346:  186(ivec2) Load 303(i16v)
+             347:  186(ivec2) SNegate 346
+             348:  186(ivec2) Load 303(i16v)
+             349:  186(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 345 347 348
+                              Store 303(i16v) 349
+             350:   49(ivec3) Load 317(u16v)
+             351:     15(int) Load 319(u16)
+             352:     15(int) SNegate 351
+             353:     15(int) Load 319(u16)
+             354:   49(ivec3) CompositeConstruct 352 352 352
+             355:   49(ivec3) CompositeConstruct 353 353 353
+             356:   49(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 350 354 355
+                              Store 317(u16v) 356
+             357:   49(ivec3) Load 317(u16v)
+             358:   49(ivec3) Load 317(u16v)
+             359:   49(ivec3) SNegate 358
+             360:   49(ivec3) Load 317(u16v)
+             361:   49(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 357 359 360
+                              Store 317(u16v) 361
+             362:     35(ptr) AccessChain 303(i16v) 128
+             363:     18(int) Load 362
+             364:     35(ptr) AccessChain 303(i16v) 111
+             365:     18(int) Load 364
+             367:     18(int) Select 366 365 363
+                              Store 309(i16) 367
+             368:     18(int) Load 309(i16)
+             369:  186(ivec2) CompositeConstruct 368 368
+             370:     18(int) Load 309(i16)
+             371:     18(int) SNegate 370
+             372:  186(ivec2) CompositeConstruct 371 371
+             375:  186(ivec2) Select 374 372 369
+                              Store 303(i16v) 375
+             376:     16(ptr) AccessChain 317(u16v) 128
+             377:     15(int) Load 376
+             378:     16(ptr) AccessChain 317(u16v) 111
+             379:     15(int) Load 378
+             380:     15(int) Select 366 379 377
+                              Store 319(u16) 380
+             381:     15(int) Load 319(u16)
+             382:   49(ivec3) CompositeConstruct 381 381 381
+             383:     15(int) Load 319(u16)
+             384:     15(int) SNegate 383
+             385:   49(ivec3) CompositeConstruct 384 384 384
+             388:   49(ivec3) Select 387 385 382
+                              Store 317(u16v) 388
+             392:  389(fvec3) Load 391(f16v)
+             396:395(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 392
+             397:   54(ivec3) CompositeExtract 396 1
+                              Store 394(exp) 397
+             398:  389(fvec3) CompositeExtract 396 0
+                              Store 391(f16v) 398
+             399:  389(fvec3) Load 391(f16v)
+             400:   54(ivec3) Load 394(exp)
+             401:  389(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 399 400
+                              Store 391(f16v) 401
+             402:  389(fvec3) Load 391(f16v)
+             403:  260(fvec2) VectorShuffle 402 402 0 1
+             404:  186(ivec2) Bitcast 403
+                              Store 303(i16v) 404
+             406:    405(ptr) AccessChain 391(f16v) 117
+             407:  259(float) Load 406
+             408:     15(int) Bitcast 407
+             409:     16(ptr) AccessChain 317(u16v) 128
+                              Store 409 408
+             410:  186(ivec2) Load 303(i16v)
+             411:  260(fvec2) Bitcast 410
+             412:  389(fvec3) Load 391(f16v)
+             413:  389(fvec3) VectorShuffle 412 411 3 4 2
+                              Store 391(f16v) 413
+             414:   49(ivec3) Load 317(u16v)
+             415:  389(fvec3) Bitcast 414
+                              Store 391(f16v) 415
+             417:  186(ivec2) Load 303(i16v)
+             418:     15(int) Bitcast 417
+                              Store 416(packi) 418
+             419:     15(int) Load 416(packi)
+             420:  186(ivec2) Bitcast 419
+                              Store 303(i16v) 420
+             422:   49(ivec3) Load 317(u16v)
+             423:  197(ivec2) VectorShuffle 422 422 0 1
+             424:     19(int) Bitcast 423
+                              Store 421(packu) 424
+             425:     19(int) Load 421(packu)
+             426:  197(ivec2) Bitcast 425
+             427:   49(ivec3) Load 317(u16v)
+             428:   49(ivec3) VectorShuffle 427 426 3 4 2
+                              Store 317(u16v) 428
+             431:     18(int) Load 309(i16)
+             433:  432(ivec4) CompositeConstruct 431 431 431 431
+             434:    271(int) Bitcast 433
+                              Store 430(packi64) 434
+             435:    271(int) Load 430(packi64)
+             436:  432(ivec4) Bitcast 435
+             437:  186(ivec2) VectorShuffle 436 436 0 1
+                              Store 303(i16v) 437
+             440:     15(int) Load 319(u16)
+             442:  441(ivec4) CompositeConstruct 440 440 440 440
+             443:    285(int) Bitcast 442
+                              Store 439(packu64) 443
+             444:    285(int) Load 439(packu64)
+             445:  441(ivec4) Bitcast 444
+             446:   49(ivec3) VectorShuffle 445 445 0 1 2
+                              Store 317(u16v) 446
+             449:   49(ivec3) Load 317(u16v)
+             450:     15(int) Load 319(u16)
+             451:   49(ivec3) CompositeConstruct 450 450 450
+             452:  386(bvec3) ULessThan 449 451
+                              Store 448(bv) 452
+             453:  186(ivec2) Load 303(i16v)
+             454:     18(int) Load 309(i16)
+             455:  186(ivec2) CompositeConstruct 454 454
+             456:  189(bvec2) SLessThan 453 455
+             457:  386(bvec3) Load 448(bv)
+             458:  386(bvec3) VectorShuffle 457 456 3 4 2
+                              Store 448(bv) 458
+             459:   49(ivec3) Load 317(u16v)
+             460:     15(int) Load 319(u16)
+             461:   49(ivec3) CompositeConstruct 460 460 460
+             462:  386(bvec3) ULessThanEqual 459 461
+                              Store 448(bv) 462
+             463:  186(ivec2) Load 303(i16v)
+             464:     18(int) Load 309(i16)
+             465:  186(ivec2) CompositeConstruct 464 464
+             466:  189(bvec2) SLessThanEqual 463 465
+             467:  386(bvec3) Load 448(bv)
+             468:  386(bvec3) VectorShuffle 467 466 3 4 2
+                              Store 448(bv) 468
+             469:   49(ivec3) Load 317(u16v)
+             470:     15(int) Load 319(u16)
+             471:   49(ivec3) CompositeConstruct 470 470 470
+             472:  386(bvec3) UGreaterThan 469 471
+                              Store 448(bv) 472
+             473:  186(ivec2) Load 303(i16v)
+             474:     18(int) Load 309(i16)
+             475:  186(ivec2) CompositeConstruct 474 474
+             476:  189(bvec2) SGreaterThan 473 475
+             477:  386(bvec3) Load 448(bv)
+             478:  386(bvec3) VectorShuffle 477 476 3 4 2
+                              Store 448(bv) 478
+             479:   49(ivec3) Load 317(u16v)
+             480:     15(int) Load 319(u16)
+             481:   49(ivec3) CompositeConstruct 480 480 480
+             482:  386(bvec3) UGreaterThanEqual 479 481
+                              Store 448(bv) 482
+             483:  186(ivec2) Load 303(i16v)
+             484:     18(int) Load 309(i16)
+             485:  186(ivec2) CompositeConstruct 484 484
+             486:  189(bvec2) SGreaterThanEqual 483 485
+             487:  386(bvec3) Load 448(bv)
+             488:  386(bvec3) VectorShuffle 487 486 3 4 2
+                              Store 448(bv) 488
+             489:   49(ivec3) Load 317(u16v)
+             490:     15(int) Load 319(u16)
+             491:   49(ivec3) CompositeConstruct 490 490 490
+             492:  386(bvec3) IEqual 489 491
+                              Store 448(bv) 492
+             493:  186(ivec2) Load 303(i16v)
+             494:     18(int) Load 309(i16)
+             495:  186(ivec2) CompositeConstruct 494 494
+             496:  189(bvec2) IEqual 493 495
+             497:  386(bvec3) Load 448(bv)
+             498:  386(bvec3) VectorShuffle 497 496 3 4 2
+                              Store 448(bv) 498
+             499:   49(ivec3) Load 317(u16v)
+             500:     15(int) Load 319(u16)
+             501:   49(ivec3) CompositeConstruct 500 500 500
+             502:  386(bvec3) INotEqual 499 501
+                              Store 448(bv) 502
+             503:  186(ivec2) Load 303(i16v)
+             504:     18(int) Load 309(i16)
+             505:  186(ivec2) CompositeConstruct 504 504
+             506:  189(bvec2) INotEqual 503 505
+             507:  386(bvec3) Load 448(bv)
+             508:  386(bvec3) VectorShuffle 507 506 3 4 2
+                              Store 448(bv) 508
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.int16.frag.out b/Test/baseResults/spv.int16.frag.out
index 6cc6070..d62697b 100644
--- a/Test/baseResults/spv.int16.frag.out
+++ b/Test/baseResults/spv.int16.frag.out
@@ -1,779 +1,741 @@
 spv.int16.frag
 // Module Version 10000
 // Generated by (magic number): 80002
-// Id's are bound by 561
+// Id's are bound by 520
 
                               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 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 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 57  "u16v"
+                              Name 65  "u32v"
+                              Name 72  "i64v"
+                              Name 78  "u64v"
+                              Name 92  "f16v"
+                              Name 98  "f32v"
+                              Name 104  "f64v"
+                              Name 152  "i8v"
+                              Name 159  "u8v"
+                              Name 172  "bv"
+                              Name 192  "u16v"
+                              Name 197  "i16"
+                              Name 216  "i"
+                              Name 223  "uv"
+                              Name 239  "i64"
+                              Name 278  "b"
+                              Name 340  "i16v"
+                              Name 343  "i16"
+                              Name 353  "u16v"
+                              Name 355  "u16"
+                              Name 425  "i32"
+                              Name 428  "i64"
+                              Name 431  "i16v4"
+                              Name 434  "u32"
+                              Name 435  "u16v2"
+                              Name 439  "u64"
+                              Name 442  "u16v4"
+                              Name 454  "bv"
+                              Name 515  "Block"
+                              MemberName 515(Block) 0  "i16"
+                              MemberName 515(Block) 1  "i16v2"
+                              MemberName 515(Block) 2  "i16v3"
+                              MemberName 515(Block) 3  "i16v4"
+                              MemberName 515(Block) 4  "u16"
+                              MemberName 515(Block) 5  "u16v2"
+                              MemberName 515(Block) 6  "u16v3"
+                              MemberName 515(Block) 7  "u16v4"
+                              Name 517  "block"
+                              Name 518  "si16"
+                              Name 519  "su16"
+                              MemberDecorate 24(Uniforms) 0 Offset 0
+                              Decorate 24(Uniforms) Block
+                              Decorate 26 DescriptorSet 0
+                              Decorate 26 Binding 0
+                              MemberDecorate 515(Block) 0 Offset 0
+                              MemberDecorate 515(Block) 1 Offset 4
+                              MemberDecorate 515(Block) 2 Offset 8
+                              MemberDecorate 515(Block) 3 Offset 16
+                              MemberDecorate 515(Block) 4 Offset 24
+                              MemberDecorate 515(Block) 5 Offset 28
+                              MemberDecorate 515(Block) 6 Offset 32
+                              MemberDecorate 515(Block) 7 Offset 40
+                              Decorate 515(Block) Block
+                              Decorate 517(block) DescriptorSet 0
+                              Decorate 517(block) Binding 1
+                              Decorate 518(si16) SpecId 100
+                              Decorate 519(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 27(int)
+              39:             TypeArray 27(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)
+              63:             TypeVector 17(int) 2
+              64:             TypePointer Function 63(ivec2)
+              69:             TypeInt 64 1
+              70:             TypeVector 69(int) 2
+              71:             TypePointer Function 70(ivec2)
+              75:             TypeInt 64 0
+              76:             TypeVector 75(int) 2
+              77:             TypePointer Function 76(ivec2)
+              89:             TypeFloat 16
+              90:             TypeVector 89(float) 2
+              91:             TypePointer Function 90(fvec2)
+              95:             TypeFloat 32
+              96:             TypeVector 95(float) 2
+              97:             TypePointer Function 96(fvec2)
+             101:             TypeFloat 64
+             102:             TypeVector 101(float) 2
+             103:             TypePointer Function 102(fvec2)
+             149:             TypeInt 8 1
+             150:             TypeVector 149(int) 2
+             151:             TypePointer Function 150(ivec2)
+             158:             TypeInt 8 0
+             169:             TypeBool
+             170:             TypeVector 169(bool) 2
+             171:             TypePointer Function 170(bvec2)
+             174:     14(int) Constant 0
+             175:     14(int) Constant 1
+             176:   52(ivec2) ConstantComposite 174 174
+             177:   52(ivec2) ConstantComposite 175 175
+             180:     36(int) Constant 0
+             181:     36(int) Constant 1
+             182:             TypeVector 36(int) 2
+             183:  182(ivec2) ConstantComposite 180 180
+             184:  182(ivec2) ConstantComposite 181 181
+             190:             TypeVector 27(int) 3
+             191:             TypePointer Function 190(ivec3)
+             194:             TypeVector 14(int) 3
+             221:             TypeVector 17(int) 3
+             222:             TypePointer Function 221(ivec3)
+             238:             TypePointer Function 69(int)
+             260:     17(int) Constant 1
+             266:     17(int) Constant 2
+             277:             TypePointer Function 169(bool)
+             279:     17(int) Constant 0
+             293:             TypePointer Function 17(int)
+             351:   52(ivec2) ConstantComposite 21 21
+             360:  190(ivec3) ConstantComposite 180 180 180
+             402:   169(bool) ConstantTrue
+             409:   169(bool) ConstantFalse
+             410:  170(bvec2) ConstantComposite 409 409
+             422:             TypeVector 169(bool) 3
+             423:  422(bvec3) ConstantComposite 409 409 409
+             429:             TypeVector 14(int) 4
+             430:             TypePointer Function 429(ivec4)
+             438:             TypePointer Function 75(int)
+             440:             TypeVector 27(int) 4
+             441:             TypePointer Function 440(ivec4)
+             453:             TypePointer Function 422(bvec3)
+      515(Block):             TypeStruct 14(int) 52(ivec2) 194(ivec3) 429(ivec4) 27(int) 49(ivec2) 190(ivec3) 440(ivec4)
+             516:             TypePointer Uniform 515(Block)
+      517(block):    516(ptr) Variable Uniform
+       518(si16):     14(int) SpecConstant 4294967286
+       519(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:     27(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
+        57(u16v):     50(ptr) Variable Function
+        65(u32v):     64(ptr) Variable Function
+        72(i64v):     71(ptr) Variable Function
+        78(u64v):     77(ptr) Variable Function
+        92(f16v):     91(ptr) Variable Function
+        98(f32v):     97(ptr) Variable Function
+       104(f64v):    103(ptr) Variable Function
+        152(i8v):    151(ptr) Variable Function
+        159(u8v):     53(ptr) Variable Function
+         172(bv):    171(ptr) Variable Function
+              55:   52(ivec2) Load 54(i16v)
+              56:   49(ivec2) SConvert 55
+                              Store 51(i32v) 56
+              58:   49(ivec2) Load 57(u16v)
+              59:   49(ivec2) UConvert 58
+              60:   49(ivec2) Bitcast 59
+                              Store 51(i32v) 60
+              61:   52(ivec2) Load 54(i16v)
+              62:   49(ivec2) Bitcast 61
+                              Store 57(u16v) 62
+              66:   52(ivec2) Load 54(i16v)
+              67:   49(ivec2) SConvert 66
+              68:   63(ivec2) Bitcast 67
+                              Store 65(u32v) 68
+              73:   52(ivec2) Load 54(i16v)
+              74:   70(ivec2) SConvert 73
+                              Store 72(i64v) 74
+              79:   52(ivec2) Load 54(i16v)
+              80:   70(ivec2) SConvert 79
+              81:   76(ivec2) Bitcast 80
+                              Store 78(u64v) 81
+              82:   49(ivec2) Load 57(u16v)
+              83:   63(ivec2) UConvert 82
+                              Store 65(u32v) 83
+              84:   49(ivec2) Load 57(u16v)
+              85:   70(ivec2) UConvert 84
+              86:   70(ivec2) Bitcast 85
+                              Store 72(i64v) 86
+              87:   49(ivec2) Load 57(u16v)
+              88:   76(ivec2) UConvert 87
+                              Store 78(u64v) 88
+              93:   52(ivec2) Load 54(i16v)
+              94:   90(fvec2) ConvertSToF 93
+                              Store 92(f16v) 94
+              99:   52(ivec2) Load 54(i16v)
+             100:   96(fvec2) ConvertSToF 99
+                              Store 98(f32v) 100
+             105:   52(ivec2) Load 54(i16v)
+             106:  102(fvec2) ConvertSToF 105
+                              Store 104(f64v) 106
+             107:   49(ivec2) Load 57(u16v)
+             108:   90(fvec2) ConvertUToF 107
+                              Store 92(f16v) 108
+             109:   49(ivec2) Load 57(u16v)
+             110:   96(fvec2) ConvertUToF 109
+                              Store 98(f32v) 110
+             111:   49(ivec2) Load 57(u16v)
+             112:  102(fvec2) ConvertUToF 111
+                              Store 104(f64v) 112
+             113:   52(ivec2) Load 54(i16v)
+             114:   49(ivec2) SConvert 113
+                              Store 51(i32v) 114
+             115:   49(ivec2) Load 57(u16v)
+             116:   49(ivec2) UConvert 115
+             117:   49(ivec2) Bitcast 116
+                              Store 51(i32v) 117
+             118:   52(ivec2) Load 54(i16v)
+             119:   49(ivec2) Bitcast 118
+                              Store 57(u16v) 119
+             120:   52(ivec2) Load 54(i16v)
+             121:   49(ivec2) SConvert 120
+             122:   63(ivec2) Bitcast 121
+                              Store 65(u32v) 122
+             123:   52(ivec2) Load 54(i16v)
+             124:   70(ivec2) SConvert 123
+                              Store 72(i64v) 124
+             125:   52(ivec2) Load 54(i16v)
+             126:   70(ivec2) SConvert 125
+             127:   76(ivec2) Bitcast 126
+                              Store 78(u64v) 127
+             128:   49(ivec2) Load 57(u16v)
+             129:   63(ivec2) UConvert 128
+                              Store 65(u32v) 129
+             130:   49(ivec2) Load 57(u16v)
+             131:   70(ivec2) UConvert 130
+             132:   70(ivec2) Bitcast 131
+                              Store 72(i64v) 132
+             133:   49(ivec2) Load 57(u16v)
+             134:   70(ivec2) UConvert 133
+             135:   70(ivec2) Bitcast 134
+             136:   76(ivec2) Bitcast 135
+                              Store 78(u64v) 136
+             137:   52(ivec2) Load 54(i16v)
+             138:   90(fvec2) ConvertSToF 137
+                              Store 92(f16v) 138
+             139:   52(ivec2) Load 54(i16v)
+             140:   96(fvec2) ConvertSToF 139
+                              Store 98(f32v) 140
+             141:   52(ivec2) Load 54(i16v)
+             142:  102(fvec2) ConvertSToF 141
+                              Store 104(f64v) 142
+             143:   49(ivec2) Load 57(u16v)
+             144:   90(fvec2) ConvertUToF 143
+                              Store 92(f16v) 144
+             145:   49(ivec2) Load 57(u16v)
+             146:   96(fvec2) ConvertUToF 145
+                              Store 98(f32v) 146
+             147:   49(ivec2) Load 57(u16v)
+             148:  102(fvec2) ConvertUToF 147
+                              Store 104(f64v) 148
+             153:   52(ivec2) Load 54(i16v)
+             154:  150(ivec2) SConvert 153
+                              Store 152(i8v) 154
+             155:   49(ivec2) Load 57(u16v)
+             156:  150(ivec2) UConvert 155
+             157:  150(ivec2) Bitcast 156
+                              Store 152(i8v) 157
+             160:   52(ivec2) Load 54(i16v)
+             161:  150(ivec2) SConvert 160
+             162:   52(ivec2) Bitcast 161
+                              Store 159(u8v) 162
+             163:   49(ivec2) Load 57(u16v)
+             164:   52(ivec2) UConvert 163
+                              Store 159(u8v) 164
+             165:   49(ivec2) Load 57(u16v)
+             166:   52(ivec2) UConvert 165
+             167:   52(ivec2) UConvert 166
+             168:   52(ivec2) Bitcast 167
+                              Store 54(i16v) 168
+             173:  170(bvec2) Load 172(bv)
+             178:   52(ivec2) Select 173 177 176
+                              Store 54(i16v) 178
+             179:  170(bvec2) Load 172(bv)
+             185:   49(ivec2) Select 179 184 183
+                              Store 57(u16v) 185
+             186:   52(ivec2) Load 54(i16v)
+             187:  170(bvec2) INotEqual 186 183
+                              Store 172(bv) 187
+             188:   49(ivec2) Load 57(u16v)
+             189:  170(bvec2) INotEqual 188 183
+                              Store 172(bv) 189
                               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
-         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
-                              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
+       192(u16v):    191(ptr) Variable Function
+        197(i16):     15(ptr) Variable Function
+          216(i):     37(ptr) Variable Function
+         223(uv):    222(ptr) Variable Function
+        239(i64):    238(ptr) Variable Function
+          278(b):    277(ptr) Variable Function
+             193:  190(ivec3) Load 192(u16v)
+             195:  194(ivec3) CompositeConstruct 175 175 175
+             196:  190(ivec3) IAdd 193 195
+                              Store 192(u16v) 196
+             198:     14(int) Load 197(i16)
+             199:     14(int) ISub 198 175
+                              Store 197(i16) 199
+             200:     14(int) Load 197(i16)
+             201:     14(int) IAdd 200 175
+                              Store 197(i16) 201
+             202:  190(ivec3) Load 192(u16v)
+             203:  194(ivec3) CompositeConstruct 175 175 175
+             204:  190(ivec3) ISub 202 203
+                              Store 192(u16v) 204
+             205:  190(ivec3) Load 192(u16v)
+             206:  190(ivec3) Not 205
+                              Store 192(u16v) 206
+             207:     14(int) Load 197(i16)
+                              Store 197(i16) 207
+             208:  190(ivec3) Load 192(u16v)
+             209:  190(ivec3) SNegate 208
+                              Store 192(u16v) 209
+             210:     14(int) Load 197(i16)
+             211:     14(int) Load 197(i16)
+             212:     14(int) IAdd 211 210
+                              Store 197(i16) 212
+             213:  190(ivec3) Load 192(u16v)
+             214:  190(ivec3) Load 192(u16v)
+             215:  190(ivec3) ISub 214 213
+                              Store 192(u16v) 215
+             217:     14(int) Load 197(i16)
+             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(u16v)
+             225:  221(ivec3) UConvert 224
+             226:  221(ivec3) Load 223(uv)
+             227:  221(ivec3) UDiv 226 225
+                              Store 223(uv) 227
+             228:     14(int) Load 197(i16)
+             229:     27(int) SConvert 228
+             230:     17(int) Bitcast 229
+             231:  221(ivec3) Load 223(uv)
+             232:  221(ivec3) CompositeConstruct 230 230 230
+             233:  221(ivec3) UMod 231 232
+                              Store 223(uv) 233
+             234:  190(ivec3) Load 192(u16v)
+             235:  221(ivec3) UConvert 234
+             236:  221(ivec3) Load 223(uv)
+             237:  221(ivec3) IAdd 235 236
+                              Store 223(uv) 237
+             240:     14(int) Load 197(i16)
+             241:     69(int) SConvert 240
+             242:     69(int) Load 239(i64)
+             243:     69(int) ISub 241 242
+                              Store 239(i64) 243
+             244:  190(ivec3) Load 192(u16v)
+             245:  221(ivec3) UConvert 244
+             246:  221(ivec3) Load 223(uv)
+             247:  221(ivec3) IMul 245 246
+                              Store 223(uv) 247
+             248:     14(int) Load 197(i16)
+             249:     69(int) SConvert 248
+             250:     69(int) Load 239(i64)
+             251:     69(int) IMul 249 250
+                              Store 239(i64) 251
+             252:     14(int) Load 197(i16)
+             253:     27(int) SConvert 252
+             254:     27(int) Load 216(i)
+             255:     27(int) SMod 253 254
+                              Store 216(i) 255
+             256:     14(int) Load 197(i16)
+             257:  190(ivec3) Load 192(u16v)
+             258:  194(ivec3) CompositeConstruct 256 256 256
+             259:  190(ivec3) ShiftLeftLogical 257 258
+                              Store 192(u16v) 259
+             261:     37(ptr) AccessChain 192(u16v) 260
+             262:     27(int) Load 261
+             263:     14(int) Load 197(i16)
+             264:     14(int) ShiftRightArithmetic 263 262
+                              Store 197(i16) 264
+             265:     14(int) Load 197(i16)
+             267:     37(ptr) AccessChain 192(u16v) 266
+             268:     27(int) Load 267
+             269:     14(int) ShiftLeftLogical 265 268
+                              Store 197(i16) 269
+             270:  190(ivec3) Load 192(u16v)
+             271:  190(ivec3) UConvert 270
+             272:  190(ivec3) Bitcast 271
+             273:     27(int) Load 216(i)
+             274:  190(ivec3) CompositeConstruct 273 273 273
+             275:  190(ivec3) ShiftLeftLogical 272 274
+             276:  221(ivec3) Bitcast 275
+                              Store 223(uv) 276
+             280:     37(ptr) AccessChain 192(u16v) 279
+             281:     27(int) Load 280
+             282:     14(int) Load 197(i16)
+             283:     27(int) Bitcast 282
+             284:   169(bool) INotEqual 281 283
+                              Store 278(b) 284
+             285:     14(int) Load 197(i16)
+             286:     27(int) Bitcast 285
+             287:     37(ptr) AccessChain 192(u16v) 279
+             288:     27(int) Load 287
+             289:   169(bool) IEqual 286 288
+                              Store 278(b) 289
+             290:     37(ptr) AccessChain 192(u16v) 279
+             291:     27(int) Load 290
+             292:     17(int) UConvert 291
+             294:    293(ptr) AccessChain 223(uv) 260
+             295:     17(int) Load 294
+             296:   169(bool) UGreaterThan 292 295
+                              Store 278(b) 296
+             297:     14(int) Load 197(i16)
+             298:     27(int) SConvert 297
+             299:     27(int) Load 216(i)
+             300:   169(bool) SLessThan 298 299
+                              Store 278(b) 300
+             301:     37(ptr) AccessChain 192(u16v) 260
+             302:     27(int) Load 301
+             303:     17(int) UConvert 302
+             304:    293(ptr) AccessChain 223(uv) 279
+             305:     17(int) Load 304
+             306:   169(bool) UGreaterThanEqual 303 305
+                              Store 278(b) 306
+             307:     14(int) Load 197(i16)
+             308:     27(int) SConvert 307
+             309:     27(int) Load 216(i)
+             310:   169(bool) SLessThanEqual 308 309
+                              Store 278(b) 310
+             311:     14(int) Load 197(i16)
+             312:     27(int) SConvert 311
+             313:     17(int) Bitcast 312
+             314:  221(ivec3) Load 223(uv)
+             315:  221(ivec3) CompositeConstruct 313 313 313
+             316:  221(ivec3) BitwiseOr 314 315
+                              Store 223(uv) 316
+             317:     14(int) Load 197(i16)
+             318:     27(int) SConvert 317
+             319:     27(int) Load 216(i)
+             320:     27(int) BitwiseOr 318 319
+                              Store 216(i) 320
+             321:     14(int) Load 197(i16)
+             322:     69(int) SConvert 321
+             323:     69(int) Load 239(i64)
+             324:     69(int) BitwiseAnd 323 322
+                              Store 239(i64) 324
+             325:  190(ivec3) Load 192(u16v)
+             326:  221(ivec3) UConvert 325
+             327:  221(ivec3) Load 223(uv)
+             328:  221(ivec3) BitwiseAnd 326 327
+                              Store 223(uv) 328
+             329:     14(int) Load 197(i16)
+             330:     27(int) SConvert 329
+             331:     17(int) Bitcast 330
+             332:  221(ivec3) Load 223(uv)
+             333:  221(ivec3) CompositeConstruct 331 331 331
+             334:  221(ivec3) BitwiseXor 332 333
+                              Store 223(uv) 334
+             335:  190(ivec3) Load 192(u16v)
+             336:     14(int) Load 197(i16)
+             337:     27(int) Bitcast 336
+             338:  190(ivec3) CompositeConstruct 337 337 337
+             339:  190(ivec3) BitwiseXor 335 338
+                              Store 192(u16v) 339
                               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
+       340(i16v):     53(ptr) Variable Function
+        343(i16):     15(ptr) Variable Function
+       353(u16v):    191(ptr) Variable Function
+        355(u16):     37(ptr) Variable Function
+        425(i32):     37(ptr) Variable Function
+        428(i64):    238(ptr) Variable Function
+      431(i16v4):    430(ptr) Variable Function
+        434(u32):    293(ptr) Variable Function
+      435(u16v2):     50(ptr) Variable Function
+        439(u64):    438(ptr) Variable Function
+      442(u16v4):    441(ptr) Variable Function
+         454(bv):    453(ptr) Variable Function
+             341:   52(ivec2) Load 340(i16v)
+             342:   52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 341
+                              Store 340(i16v) 342
+             344:     14(int) Load 343(i16)
+             345:     14(int) ExtInst 1(GLSL.std.450) 7(SSign) 344
+                              Store 343(i16) 345
+             346:   52(ivec2) Load 340(i16v)
+             347:     14(int) Load 343(i16)
+             348:   52(ivec2) CompositeConstruct 347 347
+             349:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 346 348
+                              Store 340(i16v) 349
+             350:   52(ivec2) Load 340(i16v)
+             352:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 350 351
+                              Store 340(i16v) 352
+             354:  190(ivec3) Load 353(u16v)
+             356:     27(int) Load 355(u16)
+             357:  190(ivec3) CompositeConstruct 356 356 356
+             358:  190(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 354 357
+                              Store 353(u16v) 358
+             359:  190(ivec3) Load 353(u16v)
+             361:  190(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 359 360
+                              Store 353(u16v) 361
+             362:   52(ivec2) Load 340(i16v)
+             363:     14(int) Load 343(i16)
+             364:   52(ivec2) CompositeConstruct 363 363
+             365:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 362 364
+                              Store 340(i16v) 365
+             366:   52(ivec2) Load 340(i16v)
+             367:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 366 351
+                              Store 340(i16v) 367
+             368:  190(ivec3) Load 353(u16v)
+             369:     27(int) Load 355(u16)
+             370:  190(ivec3) CompositeConstruct 369 369 369
+             371:  190(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 368 370
+                              Store 353(u16v) 371
+             372:  190(ivec3) Load 353(u16v)
+             373:  190(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 372 360
+                              Store 353(u16v) 373
+             374:   52(ivec2) Load 340(i16v)
+             375:     14(int) Load 343(i16)
+             376:     14(int) SNegate 375
+             377:     14(int) Load 343(i16)
+             378:   52(ivec2) CompositeConstruct 376 376
+             379:   52(ivec2) CompositeConstruct 377 377
+             380:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 374 378 379
+                              Store 340(i16v) 380
+             381:   52(ivec2) Load 340(i16v)
+             382:   52(ivec2) Load 340(i16v)
+             383:   52(ivec2) SNegate 382
+             384:   52(ivec2) Load 340(i16v)
+             385:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 381 383 384
+                              Store 340(i16v) 385
+             386:  190(ivec3) Load 353(u16v)
+             387:     27(int) Load 355(u16)
+             388:     27(int) SNegate 387
+             389:     27(int) Load 355(u16)
+             390:  190(ivec3) CompositeConstruct 388 388 388
+             391:  190(ivec3) CompositeConstruct 389 389 389
+             392:  190(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 386 390 391
+                              Store 353(u16v) 392
+             393:  190(ivec3) Load 353(u16v)
+             394:  190(ivec3) Load 353(u16v)
+             395:  190(ivec3) SNegate 394
+             396:  190(ivec3) Load 353(u16v)
+             397:  190(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 393 395 396
+                              Store 353(u16v) 397
+             398:     15(ptr) AccessChain 340(i16v) 279
+             399:     14(int) Load 398
+             400:     15(ptr) AccessChain 340(i16v) 260
+             401:     14(int) Load 400
+             403:     14(int) Select 402 401 399
+                              Store 343(i16) 403
+             404:     14(int) Load 343(i16)
+             405:   52(ivec2) CompositeConstruct 404 404
+             406:     14(int) Load 343(i16)
+             407:     14(int) SNegate 406
+             408:   52(ivec2) CompositeConstruct 407 407
+             411:   52(ivec2) Select 410 408 405
+                              Store 340(i16v) 411
+             412:     37(ptr) AccessChain 353(u16v) 279
+             413:     27(int) Load 412
+             414:     37(ptr) AccessChain 353(u16v) 260
+             415:     27(int) Load 414
+             416:     27(int) Select 402 415 413
+                              Store 355(u16) 416
+             417:     27(int) Load 355(u16)
+             418:  190(ivec3) CompositeConstruct 417 417 417
+             419:     27(int) Load 355(u16)
+             420:     27(int) SNegate 419
+             421:  190(ivec3) CompositeConstruct 420 420 420
+             424:  190(ivec3) Select 423 421 418
+                              Store 353(u16v) 424
+             426:   52(ivec2) Load 340(i16v)
+             427:     27(int) Bitcast 426
+                              Store 425(i32) 427
+             432:  429(ivec4) Load 431(i16v4)
+             433:     69(int) Bitcast 432
+                              Store 428(i64) 433
+             436:   49(ivec2) Load 435(u16v2)
+             437:     17(int) Bitcast 436
+                              Store 434(u32) 437
+             443:  440(ivec4) Load 442(u16v4)
+             444:     75(int) Bitcast 443
+                              Store 439(u64) 444
+             445:     27(int) Load 425(i32)
+             446:   52(ivec2) Bitcast 445
+                              Store 340(i16v) 446
+             447:     69(int) Load 428(i64)
+             448:  429(ivec4) Bitcast 447
+                              Store 431(i16v4) 448
+             449:     17(int) Load 434(u32)
+             450:   49(ivec2) Bitcast 449
+                              Store 435(u16v2) 450
+             451:     75(int) Load 439(u64)
+             452:  440(ivec4) Bitcast 451
+                              Store 442(u16v4) 452
+             455:  190(ivec3) Load 353(u16v)
+             456:     27(int) Load 355(u16)
+             457:  190(ivec3) CompositeConstruct 456 456 456
+             458:  422(bvec3) ULessThan 455 457
+                              Store 454(bv) 458
+             459:   52(ivec2) Load 340(i16v)
+             460:     14(int) Load 343(i16)
+             461:   52(ivec2) CompositeConstruct 460 460
+             462:  170(bvec2) SLessThan 459 461
+             463:  422(bvec3) Load 454(bv)
+             464:  422(bvec3) VectorShuffle 463 462 3 4 2
+                              Store 454(bv) 464
+             465:  190(ivec3) Load 353(u16v)
+             466:     27(int) Load 355(u16)
+             467:  190(ivec3) CompositeConstruct 466 466 466
+             468:  422(bvec3) ULessThanEqual 465 467
+                              Store 454(bv) 468
+             469:   52(ivec2) Load 340(i16v)
+             470:     14(int) Load 343(i16)
+             471:   52(ivec2) CompositeConstruct 470 470
+             472:  170(bvec2) SLessThanEqual 469 471
+             473:  422(bvec3) Load 454(bv)
+             474:  422(bvec3) VectorShuffle 473 472 3 4 2
+                              Store 454(bv) 474
+             475:  190(ivec3) Load 353(u16v)
+             476:     27(int) Load 355(u16)
+             477:  190(ivec3) CompositeConstruct 476 476 476
+             478:  422(bvec3) UGreaterThan 475 477
+                              Store 454(bv) 478
+             479:   52(ivec2) Load 340(i16v)
+             480:     14(int) Load 343(i16)
+             481:   52(ivec2) CompositeConstruct 480 480
+             482:  170(bvec2) SGreaterThan 479 481
+             483:  422(bvec3) Load 454(bv)
+             484:  422(bvec3) VectorShuffle 483 482 3 4 2
+                              Store 454(bv) 484
+             485:  190(ivec3) Load 353(u16v)
+             486:     27(int) Load 355(u16)
+             487:  190(ivec3) CompositeConstruct 486 486 486
+             488:  422(bvec3) UGreaterThanEqual 485 487
+                              Store 454(bv) 488
+             489:   52(ivec2) Load 340(i16v)
+             490:     14(int) Load 343(i16)
+             491:   52(ivec2) CompositeConstruct 490 490
+             492:  170(bvec2) SGreaterThanEqual 489 491
+             493:  422(bvec3) Load 454(bv)
+             494:  422(bvec3) VectorShuffle 493 492 3 4 2
+                              Store 454(bv) 494
+             495:  190(ivec3) Load 353(u16v)
+             496:     27(int) Load 355(u16)
+             497:  190(ivec3) CompositeConstruct 496 496 496
+             498:  422(bvec3) IEqual 495 497
+                              Store 454(bv) 498
+             499:   52(ivec2) Load 340(i16v)
+             500:     14(int) Load 343(i16)
+             501:   52(ivec2) CompositeConstruct 500 500
+             502:  170(bvec2) IEqual 499 501
+             503:  422(bvec3) Load 454(bv)
+             504:  422(bvec3) VectorShuffle 503 502 3 4 2
+                              Store 454(bv) 504
+             505:  190(ivec3) Load 353(u16v)
+             506:     27(int) Load 355(u16)
+             507:  190(ivec3) CompositeConstruct 506 506 506
+             508:  422(bvec3) INotEqual 505 507
+                              Store 454(bv) 508
+             509:   52(ivec2) Load 340(i16v)
+             510:     14(int) Load 343(i16)
+             511:   52(ivec2) CompositeConstruct 510 510
+             512:  170(bvec2) INotEqual 509 511
+             513:  422(bvec3) Load 454(bv)
+             514:  422(bvec3) VectorShuffle 513 512 3 4 2
+                              Store 454(bv) 514
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.int32.frag.out b/Test/baseResults/spv.int32.frag.out
new file mode 100644
index 0000000..546836c
--- /dev/null
+++ b/Test/baseResults/spv.int32.frag.out
@@ -0,0 +1,712 @@
+spv.int32.frag
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 491
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Float64
+                              Capability Int64
+                              Capability Int16
+                              Capability Int8
+                              Extension  "SPV_AMD_gpu_shader_half_float"
+                              Extension  "SPV_AMD_gpu_shader_int16"
+               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 121  "u8v"
+                              Name 128  "u16v"
+                              Name 148  "f16v"
+                              Name 164  "bv"
+                              Name 182  "u32v"
+                              Name 187  "i32"
+                              Name 206  "i"
+                              Name 210  "uv"
+                              Name 223  "i64"
+                              Name 258  "b"
+                              Name 310  "i32v"
+                              Name 313  "i32"
+                              Name 323  "u32v"
+                              Name 325  "u32"
+                              Name 397  "i8v4"
+                              Name 400  "i16v2"
+                              Name 405  "u8v4"
+                              Name 408  "u16v2"
+                              Name 411  "i64"
+                              Name 414  "u32v2"
+                              Name 416  "u64"
+                              Name 420  "bv"
+                              Name 483  "Block"
+                              MemberName 483(Block) 0  "i32"
+                              MemberName 483(Block) 1  "i32v2"
+                              MemberName 483(Block) 2  "i32v3"
+                              MemberName 483(Block) 3  "i32v4"
+                              MemberName 483(Block) 4  "u32"
+                              MemberName 483(Block) 5  "u32v2"
+                              MemberName 483(Block) 6  "u32v3"
+                              MemberName 483(Block) 7  "u32v4"
+                              Name 485  "block"
+                              Name 486  "si32"
+                              Name 487  "su32"
+                              Name 488  "si"
+                              Name 489  "su"
+                              Name 490  "sb"
+                              MemberDecorate 27(Uniforms) 0 Offset 0
+                              Decorate 27(Uniforms) Block
+                              Decorate 29 DescriptorSet 0
+                              Decorate 29 Binding 0
+                              MemberDecorate 483(Block) 0 Offset 0
+                              MemberDecorate 483(Block) 1 Offset 8
+                              MemberDecorate 483(Block) 2 Offset 16
+                              MemberDecorate 483(Block) 3 Offset 32
+                              MemberDecorate 483(Block) 4 Offset 48
+                              MemberDecorate 483(Block) 5 Offset 56
+                              MemberDecorate 483(Block) 6 Offset 64
+                              MemberDecorate 483(Block) 7 Offset 80
+                              Decorate 483(Block) Block
+                              Decorate 485(block) DescriptorSet 0
+                              Decorate 485(block) Binding 1
+                              Decorate 486(si32) SpecId 100
+                              Decorate 487(su32) SpecId 101
+                              Decorate 488(si) SpecId 102
+                              Decorate 489(su) SpecId 103
+                              Decorate 490(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
+             127:             TypeInt 16 0
+             145:             TypeFloat 16
+             146:             TypeVector 145(float) 2
+             147:             TypePointer Function 146(fvec2)
+             161:             TypeBool
+             162:             TypeVector 161(bool) 2
+             163:             TypePointer Function 162(bvec2)
+             166:     18(int) Constant 1
+             167:   52(ivec2) ConstantComposite 30 30
+             168:   52(ivec2) ConstantComposite 166 166
+             171:     14(int) Constant 0
+             172:     14(int) Constant 1
+             173:   49(ivec2) ConstantComposite 171 171
+             174:   49(ivec2) ConstantComposite 172 172
+             180:             TypeVector 14(int) 3
+             181:             TypePointer Function 180(ivec3)
+             184:             TypeVector 18(int) 3
+             222:             TypePointer Function 57(int)
+             247:     14(int) Constant 2
+             257:             TypePointer Function 161(bool)
+             321:   52(ivec2) ConstantComposite 24 24
+             330:  180(ivec3) ConstantComposite 171 171 171
+             372:   161(bool) ConstantTrue
+             379:   161(bool) ConstantFalse
+             380:  162(bvec2) ConstantComposite 379 379
+             392:             TypeVector 161(bool) 3
+             393:  392(bvec3) ConstantComposite 379 379 379
+             395:             TypeVector 91(int) 4
+             396:             TypePointer Function 395(ivec4)
+             403:             TypeVector 100(int) 4
+             404:             TypePointer Function 403(ivec4)
+             415:             TypePointer Function 63(int)
+             419:             TypePointer Function 392(bvec3)
+             481:             TypeVector 18(int) 4
+             482:             TypeVector 14(int) 4
+      483(Block):             TypeStruct 18(int) 52(ivec2) 184(ivec3) 481(ivec4) 14(int) 49(ivec2) 180(ivec3) 482(ivec4)
+             484:             TypePointer Uniform 483(Block)
+      485(block):    484(ptr) Variable Uniform
+       486(si32):     18(int) SpecConstant 4294967286
+       487(su32):     14(int) SpecConstant 20
+         488(si):     18(int) SpecConstant 4294967291
+         489(su):     14(int) SpecConstant 4
+         490(sb):   161(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
+        121(u8v):    102(ptr) Variable Function
+       128(u16v):     53(ptr) Variable Function
+       148(f16v):    147(ptr) Variable Function
+         164(bv):    163(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
+             122:   52(ivec2) Load 54(i32v)
+             123:   92(ivec2) SConvert 122
+             124:  101(ivec2) Bitcast 123
+                              Store 121(u8v) 124
+             125:   49(ivec2) Load 51(u32v)
+             126:  101(ivec2) UConvert 125
+                              Store 121(u8v) 126
+             129:   52(ivec2) Load 54(i32v)
+             130:  101(ivec2) SConvert 129
+             131:   52(ivec2) Bitcast 130
+                              Store 128(u16v) 131
+             132:   49(ivec2) Load 51(u32v)
+             133:   52(ivec2) UConvert 132
+                              Store 128(u16v) 133
+             134:   52(ivec2) Load 54(i32v)
+             135:   49(ivec2) Bitcast 134
+                              Store 51(u32v) 135
+             136:   49(ivec2) Load 51(u32v)
+             137:     14(int) CompositeExtract 136 0
+             138:     14(int) CompositeExtract 136 1
+             139:   49(ivec2) CompositeConstruct 137 138
+                              Store 51(u32v) 139
+             140:   52(ivec2) Load 54(i32v)
+             141:   58(ivec2) SConvert 140
+             142:   64(ivec2) Bitcast 141
+                              Store 66(u64v) 142
+             143:   49(ivec2) Load 51(u32v)
+             144:   64(ivec2) UConvert 143
+                              Store 66(u64v) 144
+             149:   52(ivec2) Load 54(i32v)
+             150:  146(fvec2) ConvertSToF 149
+                              Store 148(f16v) 150
+             151:   52(ivec2) Load 54(i32v)
+             152:   76(fvec2) ConvertSToF 151
+                              Store 78(f32v) 152
+             153:   52(ivec2) Load 54(i32v)
+             154:   82(fvec2) ConvertSToF 153
+                              Store 84(f64v) 154
+             155:   49(ivec2) Load 51(u32v)
+             156:  146(fvec2) ConvertUToF 155
+                              Store 148(f16v) 156
+             157:   49(ivec2) Load 51(u32v)
+             158:   76(fvec2) ConvertUToF 157
+                              Store 78(f32v) 158
+             159:   49(ivec2) Load 51(u32v)
+             160:   82(fvec2) ConvertUToF 159
+                              Store 84(f64v) 160
+             165:  162(bvec2) Load 164(bv)
+             169:   52(ivec2) Select 165 168 167
+                              Store 54(i32v) 169
+             170:  162(bvec2) Load 164(bv)
+             175:   49(ivec2) Select 170 174 173
+                              Store 51(u32v) 175
+             176:   52(ivec2) Load 54(i32v)
+             177:  162(bvec2) INotEqual 176 173
+                              Store 164(bv) 177
+             178:   49(ivec2) Load 51(u32v)
+             179:  162(bvec2) INotEqual 178 173
+                              Store 164(bv) 179
+                              Return
+                              FunctionEnd
+  10(operators():           2 Function None 3
+              11:             Label
+       182(u32v):    181(ptr) Variable Function
+        187(i32):     19(ptr) Variable Function
+          206(i):     19(ptr) Variable Function
+         210(uv):    181(ptr) Variable Function
+        223(i64):    222(ptr) Variable Function
+          258(b):    257(ptr) Variable Function
+             183:  180(ivec3) Load 182(u32v)
+             185:  184(ivec3) CompositeConstruct 166 166 166
+             186:  180(ivec3) IAdd 183 185
+                              Store 182(u32v) 186
+             188:     18(int) Load 187(i32)
+             189:     18(int) ISub 188 166
+                              Store 187(i32) 189
+             190:     18(int) Load 187(i32)
+             191:     18(int) IAdd 190 166
+                              Store 187(i32) 191
+             192:  180(ivec3) Load 182(u32v)
+             193:  184(ivec3) CompositeConstruct 166 166 166
+             194:  180(ivec3) ISub 192 193
+                              Store 182(u32v) 194
+             195:  180(ivec3) Load 182(u32v)
+             196:  180(ivec3) Not 195
+                              Store 182(u32v) 196
+             197:     18(int) Load 187(i32)
+                              Store 187(i32) 197
+             198:  180(ivec3) Load 182(u32v)
+             199:  180(ivec3) SNegate 198
+                              Store 182(u32v) 199
+             200:     18(int) Load 187(i32)
+             201:     18(int) Load 187(i32)
+             202:     18(int) IAdd 201 200
+                              Store 187(i32) 202
+             203:  180(ivec3) Load 182(u32v)
+             204:  180(ivec3) Load 182(u32v)
+             205:  180(ivec3) ISub 204 203
+                              Store 182(u32v) 205
+             207:     18(int) Load 187(i32)
+             208:     18(int) Load 206(i)
+             209:     18(int) IMul 208 207
+                              Store 206(i) 209
+             211:  180(ivec3) Load 182(u32v)
+             212:  180(ivec3) Load 210(uv)
+             213:  180(ivec3) UDiv 212 211
+                              Store 210(uv) 213
+             214:     18(int) Load 187(i32)
+             215:     14(int) Bitcast 214
+             216:  180(ivec3) Load 210(uv)
+             217:  180(ivec3) CompositeConstruct 215 215 215
+             218:  180(ivec3) UMod 216 217
+                              Store 210(uv) 218
+             219:  180(ivec3) Load 182(u32v)
+             220:  180(ivec3) Load 210(uv)
+             221:  180(ivec3) IAdd 219 220
+                              Store 210(uv) 221
+             224:     18(int) Load 187(i32)
+             225:     57(int) SConvert 224
+             226:     57(int) Load 223(i64)
+             227:     57(int) ISub 225 226
+                              Store 223(i64) 227
+             228:  180(ivec3) Load 182(u32v)
+             229:  180(ivec3) Load 210(uv)
+             230:  180(ivec3) IMul 228 229
+                              Store 210(uv) 230
+             231:     18(int) Load 187(i32)
+             232:     57(int) SConvert 231
+             233:     57(int) Load 223(i64)
+             234:     57(int) IMul 232 233
+                              Store 223(i64) 234
+             235:     18(int) Load 187(i32)
+             236:     18(int) Load 206(i)
+             237:     18(int) SMod 235 236
+                              Store 206(i) 237
+             238:     18(int) Load 187(i32)
+             239:  180(ivec3) Load 182(u32v)
+             240:  184(ivec3) CompositeConstruct 238 238 238
+             241:  180(ivec3) ShiftLeftLogical 239 240
+                              Store 182(u32v) 241
+             242:     38(ptr) AccessChain 182(u32v) 172
+             243:     14(int) Load 242
+             244:     18(int) Load 187(i32)
+             245:     18(int) ShiftRightArithmetic 244 243
+                              Store 187(i32) 245
+             246:     57(int) Load 223(i64)
+             248:     38(ptr) AccessChain 182(u32v) 247
+             249:     14(int) Load 248
+             250:     57(int) UConvert 249
+             251:     57(int) Bitcast 250
+             252:     57(int) ShiftLeftLogical 246 251
+                              Store 223(i64) 252
+             253:  180(ivec3) Load 182(u32v)
+             254:     18(int) Load 206(i)
+             255:  184(ivec3) CompositeConstruct 254 254 254
+             256:  180(ivec3) ShiftLeftLogical 253 255
+                              Store 210(uv) 256
+             259:     38(ptr) AccessChain 182(u32v) 171
+             260:     14(int) Load 259
+             261:     18(int) Load 187(i32)
+             262:     14(int) Bitcast 261
+             263:   161(bool) INotEqual 260 262
+                              Store 258(b) 263
+             264:     18(int) Load 187(i32)
+             265:     14(int) Bitcast 264
+             266:     38(ptr) AccessChain 182(u32v) 171
+             267:     14(int) Load 266
+             268:   161(bool) IEqual 265 267
+                              Store 258(b) 268
+             269:     38(ptr) AccessChain 182(u32v) 171
+             270:     14(int) Load 269
+             271:     38(ptr) AccessChain 210(uv) 172
+             272:     14(int) Load 271
+             273:   161(bool) UGreaterThan 270 272
+                              Store 258(b) 273
+             274:     18(int) Load 187(i32)
+             275:     18(int) Load 206(i)
+             276:   161(bool) SLessThan 274 275
+                              Store 258(b) 276
+             277:     38(ptr) AccessChain 182(u32v) 172
+             278:     14(int) Load 277
+             279:     38(ptr) AccessChain 210(uv) 171
+             280:     14(int) Load 279
+             281:   161(bool) UGreaterThanEqual 278 280
+                              Store 258(b) 281
+             282:     18(int) Load 187(i32)
+             283:     18(int) Load 206(i)
+             284:   161(bool) SLessThanEqual 282 283
+                              Store 258(b) 284
+             285:     18(int) Load 187(i32)
+             286:     14(int) Bitcast 285
+             287:  180(ivec3) Load 210(uv)
+             288:  180(ivec3) CompositeConstruct 286 286 286
+             289:  180(ivec3) BitwiseOr 287 288
+                              Store 210(uv) 289
+             290:     18(int) Load 187(i32)
+             291:     18(int) Load 206(i)
+             292:     18(int) BitwiseOr 290 291
+                              Store 206(i) 292
+             293:     18(int) Load 187(i32)
+             294:     57(int) SConvert 293
+             295:     57(int) Load 223(i64)
+             296:     57(int) BitwiseAnd 295 294
+                              Store 223(i64) 296
+             297:  180(ivec3) Load 182(u32v)
+             298:  180(ivec3) Load 210(uv)
+             299:  180(ivec3) BitwiseAnd 297 298
+                              Store 210(uv) 299
+             300:     18(int) Load 187(i32)
+             301:     14(int) Bitcast 300
+             302:  180(ivec3) Load 210(uv)
+             303:  180(ivec3) CompositeConstruct 301 301 301
+             304:  180(ivec3) BitwiseXor 302 303
+                              Store 210(uv) 304
+             305:  180(ivec3) Load 182(u32v)
+             306:     18(int) Load 187(i32)
+             307:     14(int) Bitcast 306
+             308:  180(ivec3) CompositeConstruct 307 307 307
+             309:  180(ivec3) BitwiseXor 305 308
+                              Store 182(u32v) 309
+                              Return
+                              FunctionEnd
+12(builtinFuncs():           2 Function None 3
+              13:             Label
+       310(i32v):     53(ptr) Variable Function
+        313(i32):     19(ptr) Variable Function
+       323(u32v):    181(ptr) Variable Function
+        325(u32):     38(ptr) Variable Function
+       397(i8v4):    396(ptr) Variable Function
+      400(i16v2):    102(ptr) Variable Function
+       405(u8v4):    404(ptr) Variable Function
+      408(u16v2):     53(ptr) Variable Function
+        411(i64):    222(ptr) Variable Function
+      414(u32v2):     50(ptr) Variable Function
+        416(u64):    415(ptr) Variable Function
+         420(bv):    419(ptr) Variable Function
+             311:   52(ivec2) Load 310(i32v)
+             312:   52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 311
+                              Store 310(i32v) 312
+             314:     18(int) Load 313(i32)
+             315:     18(int) ExtInst 1(GLSL.std.450) 7(SSign) 314
+                              Store 313(i32) 315
+             316:   52(ivec2) Load 310(i32v)
+             317:     18(int) Load 313(i32)
+             318:   52(ivec2) CompositeConstruct 317 317
+             319:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 316 318
+                              Store 310(i32v) 319
+             320:   52(ivec2) Load 310(i32v)
+             322:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 320 321
+                              Store 310(i32v) 322
+             324:  180(ivec3) Load 323(u32v)
+             326:     14(int) Load 325(u32)
+             327:  180(ivec3) CompositeConstruct 326 326 326
+             328:  180(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 324 327
+                              Store 323(u32v) 328
+             329:  180(ivec3) Load 323(u32v)
+             331:  180(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 329 330
+                              Store 323(u32v) 331
+             332:   52(ivec2) Load 310(i32v)
+             333:     18(int) Load 313(i32)
+             334:   52(ivec2) CompositeConstruct 333 333
+             335:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 332 334
+                              Store 310(i32v) 335
+             336:   52(ivec2) Load 310(i32v)
+             337:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 336 321
+                              Store 310(i32v) 337
+             338:  180(ivec3) Load 323(u32v)
+             339:     14(int) Load 325(u32)
+             340:  180(ivec3) CompositeConstruct 339 339 339
+             341:  180(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 338 340
+                              Store 323(u32v) 341
+             342:  180(ivec3) Load 323(u32v)
+             343:  180(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 342 330
+                              Store 323(u32v) 343
+             344:   52(ivec2) Load 310(i32v)
+             345:     18(int) Load 313(i32)
+             346:     18(int) SNegate 345
+             347:     18(int) Load 313(i32)
+             348:   52(ivec2) CompositeConstruct 346 346
+             349:   52(ivec2) CompositeConstruct 347 347
+             350:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 344 348 349
+                              Store 310(i32v) 350
+             351:   52(ivec2) Load 310(i32v)
+             352:   52(ivec2) Load 310(i32v)
+             353:   52(ivec2) SNegate 352
+             354:   52(ivec2) Load 310(i32v)
+             355:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 351 353 354
+                              Store 310(i32v) 355
+             356:  180(ivec3) Load 323(u32v)
+             357:     14(int) Load 325(u32)
+             358:     14(int) SNegate 357
+             359:     14(int) Load 325(u32)
+             360:  180(ivec3) CompositeConstruct 358 358 358
+             361:  180(ivec3) CompositeConstruct 359 359 359
+             362:  180(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 356 360 361
+                              Store 323(u32v) 362
+             363:  180(ivec3) Load 323(u32v)
+             364:  180(ivec3) Load 323(u32v)
+             365:  180(ivec3) SNegate 364
+             366:  180(ivec3) Load 323(u32v)
+             367:  180(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 363 365 366
+                              Store 323(u32v) 367
+             368:     19(ptr) AccessChain 310(i32v) 171
+             369:     18(int) Load 368
+             370:     19(ptr) AccessChain 310(i32v) 172
+             371:     18(int) Load 370
+             373:     18(int) Select 372 371 369
+                              Store 313(i32) 373
+             374:     18(int) Load 313(i32)
+             375:   52(ivec2) CompositeConstruct 374 374
+             376:     18(int) Load 313(i32)
+             377:     18(int) SNegate 376
+             378:   52(ivec2) CompositeConstruct 377 377
+             381:   52(ivec2) Select 380 378 375
+                              Store 310(i32v) 381
+             382:     38(ptr) AccessChain 323(u32v) 171
+             383:     14(int) Load 382
+             384:     38(ptr) AccessChain 323(u32v) 172
+             385:     14(int) Load 384
+             386:     14(int) Select 372 385 383
+                              Store 325(u32) 386
+             387:     14(int) Load 325(u32)
+             388:  180(ivec3) CompositeConstruct 387 387 387
+             389:     14(int) Load 325(u32)
+             390:     14(int) SNegate 389
+             391:  180(ivec3) CompositeConstruct 390 390 390
+             394:  180(ivec3) Select 393 391 388
+                              Store 323(u32v) 394
+             398:  395(ivec4) Load 397(i8v4)
+             399:     18(int) Bitcast 398
+                              Store 313(i32) 399
+             401:  101(ivec2) Load 400(i16v2)
+             402:     18(int) Bitcast 401
+                              Store 313(i32) 402
+             406:  403(ivec4) Load 405(u8v4)
+             407:     14(int) Bitcast 406
+                              Store 325(u32) 407
+             409:   52(ivec2) Load 408(u16v2)
+             410:     14(int) Bitcast 409
+                              Store 325(u32) 410
+             412:     57(int) Load 411(i64)
+             413:   52(ivec2) Bitcast 412
+                              Store 310(i32v) 413
+             417:     63(int) Load 416(u64)
+             418:   49(ivec2) Bitcast 417
+                              Store 414(u32v2) 418
+             421:  180(ivec3) Load 323(u32v)
+             422:     14(int) Load 325(u32)
+             423:  180(ivec3) CompositeConstruct 422 422 422
+             424:  392(bvec3) ULessThan 421 423
+                              Store 420(bv) 424
+             425:   52(ivec2) Load 310(i32v)
+             426:     18(int) Load 313(i32)
+             427:   52(ivec2) CompositeConstruct 426 426
+             428:  162(bvec2) SLessThan 425 427
+             429:  392(bvec3) Load 420(bv)
+             430:  392(bvec3) VectorShuffle 429 428 3 4 2
+                              Store 420(bv) 430
+             431:  180(ivec3) Load 323(u32v)
+             432:     14(int) Load 325(u32)
+             433:  180(ivec3) CompositeConstruct 432 432 432
+             434:  392(bvec3) ULessThanEqual 431 433
+                              Store 420(bv) 434
+             435:   52(ivec2) Load 310(i32v)
+             436:     18(int) Load 313(i32)
+             437:   52(ivec2) CompositeConstruct 436 436
+             438:  162(bvec2) SLessThanEqual 435 437
+             439:  392(bvec3) Load 420(bv)
+             440:  392(bvec3) VectorShuffle 439 438 3 4 2
+                              Store 420(bv) 440
+             441:  180(ivec3) Load 323(u32v)
+             442:     14(int) Load 325(u32)
+             443:  180(ivec3) CompositeConstruct 442 442 442
+             444:  392(bvec3) UGreaterThan 441 443
+                              Store 420(bv) 444
+             445:   52(ivec2) Load 310(i32v)
+             446:     18(int) Load 313(i32)
+             447:   52(ivec2) CompositeConstruct 446 446
+             448:  162(bvec2) SGreaterThan 445 447
+             449:  392(bvec3) Load 420(bv)
+             450:  392(bvec3) VectorShuffle 449 448 3 4 2
+                              Store 420(bv) 450
+             451:  180(ivec3) Load 323(u32v)
+             452:     14(int) Load 325(u32)
+             453:  180(ivec3) CompositeConstruct 452 452 452
+             454:  392(bvec3) UGreaterThanEqual 451 453
+                              Store 420(bv) 454
+             455:   52(ivec2) Load 310(i32v)
+             456:     18(int) Load 313(i32)
+             457:   52(ivec2) CompositeConstruct 456 456
+             458:  162(bvec2) SGreaterThanEqual 455 457
+             459:  392(bvec3) Load 420(bv)
+             460:  392(bvec3) VectorShuffle 459 458 3 4 2
+                              Store 420(bv) 460
+             461:  180(ivec3) Load 323(u32v)
+             462:     14(int) Load 325(u32)
+             463:  180(ivec3) CompositeConstruct 462 462 462
+             464:  392(bvec3) IEqual 461 463
+                              Store 420(bv) 464
+             465:   52(ivec2) Load 310(i32v)
+             466:     18(int) Load 313(i32)
+             467:   52(ivec2) CompositeConstruct 466 466
+             468:  162(bvec2) IEqual 465 467
+             469:  392(bvec3) Load 420(bv)
+             470:  392(bvec3) VectorShuffle 469 468 3 4 2
+                              Store 420(bv) 470
+             471:  180(ivec3) Load 323(u32v)
+             472:     14(int) Load 325(u32)
+             473:  180(ivec3) CompositeConstruct 472 472 472
+             474:  392(bvec3) INotEqual 471 473
+                              Store 420(bv) 474
+             475:   52(ivec2) Load 310(i32v)
+             476:     18(int) Load 313(i32)
+             477:   52(ivec2) CompositeConstruct 476 476
+             478:  162(bvec2) INotEqual 475 477
+             479:  392(bvec3) Load 420(bv)
+             480:  392(bvec3) VectorShuffle 479 478 3 4 2
+                              Store 420(bv) 480
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.int64.frag.out b/Test/baseResults/spv.int64.frag.out
index 3c6dc85..c41a2fd 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): 80002
-// Id's are bound by 480
+// Id's are bound by 483
 
                               Capability Shader
                               Capability Float64
@@ -36,38 +36,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 +127,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 +266,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 +285,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 +359,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..888d5bf
--- /dev/null
+++ b/Test/baseResults/spv.int8.frag.out
@@ -0,0 +1,745 @@
+spv.int8.frag
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 526
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Float64
+                              Capability Int64
+                              Capability Int16
+                              Capability Int8
+                              Extension  "SPV_AMD_gpu_shader_half_float"
+                              Extension  "SPV_AMD_gpu_shader_int16"
+               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 39  "u8"
+                              Name 47  "indexable"
+                              Name 52  "u8v"
+                              Name 55  "i8v"
+                              Name 58  "i16v"
+                              Name 66  "i32v"
+                              Name 74  "u32v"
+                              Name 81  "i64v"
+                              Name 87  "u64v"
+                              Name 101  "f16v"
+                              Name 107  "f32v"
+                              Name 113  "f64v"
+                              Name 140  "u16v"
+                              Name 170  "bv"
+                              Name 189  "u8v"
+                              Name 193  "i8"
+                              Name 213  "i"
+                              Name 220  "uv"
+                              Name 238  "i16"
+                              Name 275  "b"
+                              Name 337  "i8v"
+                              Name 340  "i8"
+                              Name 350  "u8v"
+                              Name 352  "u8"
+                              Name 426  "i16"
+                              Name 429  "i32"
+                              Name 432  "i8v4"
+                              Name 435  "u16"
+                              Name 436  "u8v2"
+                              Name 439  "u32"
+                              Name 442  "u8v4"
+                              Name 454  "bv"
+                              Name 521  "Block"
+                              MemberName 521(Block) 0  "i8"
+                              MemberName 521(Block) 1  "i8v2"
+                              MemberName 521(Block) 2  "i8v3"
+                              MemberName 521(Block) 3  "i8v4"
+                              MemberName 521(Block) 4  "u8"
+                              MemberName 521(Block) 5  "u8v2"
+                              MemberName 521(Block) 6  "u8v3"
+                              MemberName 521(Block) 7  "u8v4"
+                              Name 523  "block"
+                              Name 524  "si8"
+                              Name 525  "su8"
+                              MemberDecorate 24(Uniforms) 0 Offset 0
+                              Decorate 24(Uniforms) Block
+                              Decorate 26 DescriptorSet 0
+                              Decorate 26 Binding 0
+                              MemberDecorate 521(Block) 0 Offset 0
+                              MemberDecorate 521(Block) 1 Offset 2
+                              MemberDecorate 521(Block) 2 Offset 4
+                              MemberDecorate 521(Block) 3 Offset 8
+                              MemberDecorate 521(Block) 4 Offset 12
+                              MemberDecorate 521(Block) 5 Offset 14
+                              MemberDecorate 521(Block) 6 Offset 16
+                              MemberDecorate 521(Block) 7 Offset 20
+                              Decorate 521(Block) Block
+                              Decorate 523(block) DescriptorSet 0
+                              Decorate 523(block) Binding 1
+                              Decorate 524(si8) SpecId 100
+                              Decorate 525(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:             TypeInt 16 1
+              38:             TypePointer Function 37(int)
+              40:             TypeArray 37(int) 18
+              41:     36(int) Constant 255
+              42:     36(int) Constant 127
+              43:          40 ConstantComposite 41 41 42
+              46:             TypePointer Function 40
+              50:             TypeVector 37(int) 2
+              51:             TypePointer Function 50(ivec2)
+              53:             TypeVector 14(int) 2
+              54:             TypePointer Function 53(ivec2)
+              64:             TypeVector 27(int) 2
+              65:             TypePointer Function 64(ivec2)
+              72:             TypeVector 17(int) 2
+              73:             TypePointer Function 72(ivec2)
+              78:             TypeInt 64 1
+              79:             TypeVector 78(int) 2
+              80:             TypePointer Function 79(ivec2)
+              84:             TypeInt 64 0
+              85:             TypeVector 84(int) 2
+              86:             TypePointer Function 85(ivec2)
+              98:             TypeFloat 16
+              99:             TypeVector 98(float) 2
+             100:             TypePointer Function 99(fvec2)
+             104:             TypeFloat 32
+             105:             TypeVector 104(float) 2
+             106:             TypePointer Function 105(fvec2)
+             110:             TypeFloat 64
+             111:             TypeVector 110(float) 2
+             112:             TypePointer Function 111(fvec2)
+             139:             TypeInt 16 0
+             167:             TypeBool
+             168:             TypeVector 167(bool) 2
+             169:             TypePointer Function 168(bvec2)
+             172:     14(int) Constant 1
+             173:   53(ivec2) ConstantComposite 22 22
+             174:   53(ivec2) ConstantComposite 172 172
+             177:     36(int) Constant 0
+             178:     36(int) Constant 1
+             179:             TypeVector 36(int) 2
+             180:  179(ivec2) ConstantComposite 177 177
+             181:  179(ivec2) ConstantComposite 178 178
+             187:             TypeVector 14(int) 3
+             188:             TypePointer Function 187(ivec3)
+             212:             TypePointer Function 27(int)
+             218:             TypeVector 17(int) 3
+             219:             TypePointer Function 218(ivec3)
+             222:             TypeVector 27(int) 3
+             260:     17(int) Constant 1
+             266:     17(int) Constant 2
+             274:             TypePointer Function 167(bool)
+             276:     17(int) Constant 0
+             289:             TypePointer Function 17(int)
+             348:   53(ivec2) ConstantComposite 21 21
+             354:             TypeVector 37(int) 3
+             358:  187(ivec3) ConstantComposite 22 22 22
+             400:   167(bool) ConstantTrue
+             407:   167(bool) ConstantFalse
+             408:  168(bvec2) ConstantComposite 407 407
+             423:             TypeVector 167(bool) 3
+             424:  423(bvec3) ConstantComposite 407 407 407
+             430:             TypeVector 14(int) 4
+             431:             TypePointer Function 430(ivec4)
+             440:             TypeVector 37(int) 4
+             441:             TypePointer Function 440(ivec4)
+             453:             TypePointer Function 423(bvec3)
+      521(Block):             TypeStruct 14(int) 53(ivec2) 187(ivec3) 430(ivec4) 37(int) 50(ivec2) 187(ivec3) 440(ivec4)
+             522:             TypePointer Uniform 521(Block)
+      523(block):    522(ptr) Variable Uniform
+        524(si8):     14(int) SpecConstant 4294967286
+        525(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
+          39(u8):     38(ptr) Variable Function
+   47(indexable):     46(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
+              44:     29(ptr) AccessChain 26 28
+              45:     17(int) Load 44
+                              Store 47(indexable) 43
+              48:     38(ptr) AccessChain 47(indexable) 45
+              49:     37(int) Load 48
+                              Store 39(u8) 49
+                              Return
+                              FunctionEnd
+   8(typeCast8():           2 Function None 3
+               9:             Label
+         52(u8v):     51(ptr) Variable Function
+         55(i8v):     54(ptr) Variable Function
+        58(i16v):     51(ptr) Variable Function
+        66(i32v):     65(ptr) Variable Function
+        74(u32v):     73(ptr) Variable Function
+        81(i64v):     80(ptr) Variable Function
+        87(u64v):     86(ptr) Variable Function
+       101(f16v):    100(ptr) Variable Function
+       107(f32v):    106(ptr) Variable Function
+       113(f64v):    112(ptr) Variable Function
+       140(u16v):     65(ptr) Variable Function
+         170(bv):    169(ptr) Variable Function
+              56:   53(ivec2) Load 55(i8v)
+              57:   50(ivec2) Bitcast 56
+                              Store 52(u8v) 57
+              59:   53(ivec2) Load 55(i8v)
+              60:   50(ivec2) SConvert 59
+                              Store 58(i16v) 60
+              61:   50(ivec2) Load 52(u8v)
+              62:   50(ivec2) UConvert 61
+              63:   50(ivec2) Bitcast 62
+                              Store 58(i16v) 63
+              67:   53(ivec2) Load 55(i8v)
+              68:   64(ivec2) SConvert 67
+                              Store 66(i32v) 68
+              69:   50(ivec2) Load 52(u8v)
+              70:   64(ivec2) UConvert 69
+              71:   64(ivec2) Bitcast 70
+                              Store 66(i32v) 71
+              75:   53(ivec2) Load 55(i8v)
+              76:   64(ivec2) SConvert 75
+              77:   72(ivec2) Bitcast 76
+                              Store 74(u32v) 77
+              82:   53(ivec2) Load 55(i8v)
+              83:   79(ivec2) SConvert 82
+                              Store 81(i64v) 83
+              88:   53(ivec2) Load 55(i8v)
+              89:   79(ivec2) SConvert 88
+              90:   85(ivec2) Bitcast 89
+                              Store 87(u64v) 90
+              91:   50(ivec2) Load 52(u8v)
+              92:   72(ivec2) UConvert 91
+                              Store 74(u32v) 92
+              93:   50(ivec2) Load 52(u8v)
+              94:   79(ivec2) UConvert 93
+              95:   79(ivec2) Bitcast 94
+                              Store 81(i64v) 95
+              96:   50(ivec2) Load 52(u8v)
+              97:   85(ivec2) UConvert 96
+                              Store 87(u64v) 97
+             102:   53(ivec2) Load 55(i8v)
+             103:   99(fvec2) ConvertSToF 102
+                              Store 101(f16v) 103
+             108:   53(ivec2) Load 55(i8v)
+             109:  105(fvec2) ConvertSToF 108
+                              Store 107(f32v) 109
+             114:   53(ivec2) Load 55(i8v)
+             115:  111(fvec2) ConvertSToF 114
+                              Store 113(f64v) 115
+             116:   50(ivec2) Load 52(u8v)
+             117:   99(fvec2) ConvertUToF 116
+                              Store 101(f16v) 117
+             118:   50(ivec2) Load 52(u8v)
+             119:  105(fvec2) ConvertUToF 118
+                              Store 107(f32v) 119
+             120:   50(ivec2) Load 52(u8v)
+             121:  111(fvec2) ConvertUToF 120
+                              Store 113(f64v) 121
+             122:   50(ivec2) Load 52(u8v)
+             123:   53(ivec2) Bitcast 122
+                              Store 55(i8v) 123
+             124:   53(ivec2) Load 55(i8v)
+             125:   50(ivec2) SConvert 124
+                              Store 58(i16v) 125
+             126:   50(ivec2) Load 52(u8v)
+             127:   50(ivec2) UConvert 126
+             128:   50(ivec2) Bitcast 127
+                              Store 58(i16v) 128
+             129:   53(ivec2) Load 55(i8v)
+             130:   64(ivec2) SConvert 129
+                              Store 66(i32v) 130
+             131:   50(ivec2) Load 52(u8v)
+             132:   64(ivec2) UConvert 131
+             133:   64(ivec2) Bitcast 132
+                              Store 66(i32v) 133
+             134:   53(ivec2) Load 55(i8v)
+             135:   79(ivec2) SConvert 134
+                              Store 81(i64v) 135
+             136:   53(ivec2) Load 55(i8v)
+             137:   79(ivec2) SConvert 136
+             138:   85(ivec2) Bitcast 137
+                              Store 87(u64v) 138
+             141:   53(ivec2) Load 55(i8v)
+             142:   50(ivec2) SConvert 141
+             143:   64(ivec2) Bitcast 142
+                              Store 140(u16v) 143
+             144:   50(ivec2) Load 52(u8v)
+             145:   64(ivec2) UConvert 144
+                              Store 140(u16v) 145
+             146:   50(ivec2) Load 52(u8v)
+             147:   72(ivec2) UConvert 146
+                              Store 74(u32v) 147
+             148:   50(ivec2) Load 52(u8v)
+             149:   79(ivec2) UConvert 148
+             150:   79(ivec2) Bitcast 149
+                              Store 81(i64v) 150
+             151:   50(ivec2) Load 52(u8v)
+             152:   79(ivec2) UConvert 151
+             153:   79(ivec2) Bitcast 152
+             154:   85(ivec2) Bitcast 153
+                              Store 87(u64v) 154
+             155:   53(ivec2) Load 55(i8v)
+             156:   99(fvec2) ConvertSToF 155
+                              Store 101(f16v) 156
+             157:   53(ivec2) Load 55(i8v)
+             158:  105(fvec2) ConvertSToF 157
+                              Store 107(f32v) 158
+             159:   53(ivec2) Load 55(i8v)
+             160:  111(fvec2) ConvertSToF 159
+                              Store 113(f64v) 160
+             161:   50(ivec2) Load 52(u8v)
+             162:   99(fvec2) ConvertUToF 161
+                              Store 101(f16v) 162
+             163:   50(ivec2) Load 52(u8v)
+             164:  105(fvec2) ConvertUToF 163
+                              Store 107(f32v) 164
+             165:   50(ivec2) Load 52(u8v)
+             166:  111(fvec2) ConvertUToF 165
+                              Store 113(f64v) 166
+             171:  168(bvec2) Load 170(bv)
+             175:   53(ivec2) Select 171 174 173
+                              Store 55(i8v) 175
+             176:  168(bvec2) Load 170(bv)
+             182:   50(ivec2) Select 176 181 180
+                              Store 52(u8v) 182
+             183:   53(ivec2) Load 55(i8v)
+             184:  168(bvec2) INotEqual 183 180
+                              Store 170(bv) 184
+             185:   50(ivec2) Load 52(u8v)
+             186:  168(bvec2) INotEqual 185 180
+                              Store 170(bv) 186
+                              Return
+                              FunctionEnd
+  10(operators():           2 Function None 3
+              11:             Label
+        189(u8v):    188(ptr) Variable Function
+         193(i8):     15(ptr) Variable Function
+          213(i):    212(ptr) Variable Function
+         220(uv):    219(ptr) Variable Function
+        238(i16):     38(ptr) Variable Function
+          275(b):    274(ptr) Variable Function
+             190:  187(ivec3) Load 189(u8v)
+             191:  187(ivec3) CompositeConstruct 172 172 172
+             192:  187(ivec3) IAdd 190 191
+                              Store 189(u8v) 192
+             194:     14(int) Load 193(i8)
+             195:     14(int) ISub 194 172
+                              Store 193(i8) 195
+             196:     14(int) Load 193(i8)
+             197:     14(int) IAdd 196 172
+                              Store 193(i8) 197
+             198:  187(ivec3) Load 189(u8v)
+             199:  187(ivec3) CompositeConstruct 172 172 172
+             200:  187(ivec3) ISub 198 199
+                              Store 189(u8v) 200
+             201:  187(ivec3) Load 189(u8v)
+             202:  187(ivec3) Not 201
+                              Store 189(u8v) 202
+             203:     14(int) Load 193(i8)
+                              Store 193(i8) 203
+             204:  187(ivec3) Load 189(u8v)
+             205:  187(ivec3) SNegate 204
+                              Store 189(u8v) 205
+             206:     14(int) Load 193(i8)
+             207:     14(int) Load 193(i8)
+             208:     14(int) IAdd 207 206
+                              Store 193(i8) 208
+             209:  187(ivec3) Load 189(u8v)
+             210:  187(ivec3) Load 189(u8v)
+             211:  187(ivec3) ISub 210 209
+                              Store 189(u8v) 211
+             214:     14(int) Load 193(i8)
+             215:     27(int) SConvert 214
+             216:     27(int) Load 213(i)
+             217:     27(int) IMul 216 215
+                              Store 213(i) 217
+             221:  187(ivec3) Load 189(u8v)
+             223:  222(ivec3) SConvert 221
+             224:  218(ivec3) Bitcast 223
+             225:  218(ivec3) Load 220(uv)
+             226:  218(ivec3) UDiv 225 224
+                              Store 220(uv) 226
+             227:     14(int) Load 193(i8)
+             228:     27(int) SConvert 227
+             229:     17(int) Bitcast 228
+             230:  218(ivec3) Load 220(uv)
+             231:  218(ivec3) CompositeConstruct 229 229 229
+             232:  218(ivec3) UMod 230 231
+                              Store 220(uv) 232
+             233:  187(ivec3) Load 189(u8v)
+             234:  222(ivec3) SConvert 233
+             235:  218(ivec3) Bitcast 234
+             236:  218(ivec3) Load 220(uv)
+             237:  218(ivec3) IAdd 235 236
+                              Store 220(uv) 237
+             239:     14(int) Load 193(i8)
+             240:     37(int) SConvert 239
+             241:     37(int) Load 238(i16)
+             242:     37(int) ISub 240 241
+                              Store 238(i16) 242
+             243:  187(ivec3) Load 189(u8v)
+             244:  222(ivec3) SConvert 243
+             245:  218(ivec3) Bitcast 244
+             246:  218(ivec3) Load 220(uv)
+             247:  218(ivec3) IMul 245 246
+                              Store 220(uv) 247
+             248:     14(int) Load 193(i8)
+             249:     37(int) SConvert 248
+             250:     37(int) Load 238(i16)
+             251:     37(int) IMul 249 250
+                              Store 238(i16) 251
+             252:     14(int) Load 193(i8)
+             253:     27(int) SConvert 252
+             254:     27(int) Load 213(i)
+             255:     27(int) SMod 253 254
+                              Store 213(i) 255
+             256:     14(int) Load 193(i8)
+             257:  187(ivec3) Load 189(u8v)
+             258:  187(ivec3) CompositeConstruct 256 256 256
+             259:  187(ivec3) ShiftLeftLogical 257 258
+                              Store 189(u8v) 259
+             261:     15(ptr) AccessChain 189(u8v) 260
+             262:     14(int) Load 261
+             263:     14(int) Load 193(i8)
+             264:     14(int) ShiftRightArithmetic 263 262
+                              Store 193(i8) 264
+             265:     14(int) Load 193(i8)
+             267:     15(ptr) AccessChain 189(u8v) 266
+             268:     14(int) Load 267
+             269:     14(int) ShiftLeftLogical 265 268
+                              Store 193(i8) 269
+             270:  187(ivec3) Load 189(u8v)
+             271:     14(int) Load 193(i8)
+             272:  187(ivec3) CompositeConstruct 271 271 271
+             273:  187(ivec3) ShiftLeftLogical 270 272
+                              Store 189(u8v) 273
+             277:     15(ptr) AccessChain 189(u8v) 276
+             278:     14(int) Load 277
+             279:     14(int) Load 193(i8)
+             280:   167(bool) INotEqual 278 279
+                              Store 275(b) 280
+             281:     14(int) Load 193(i8)
+             282:     15(ptr) AccessChain 189(u8v) 276
+             283:     14(int) Load 282
+             284:   167(bool) IEqual 281 283
+                              Store 275(b) 284
+             285:     15(ptr) AccessChain 189(u8v) 276
+             286:     14(int) Load 285
+             287:     27(int) SConvert 286
+             288:     17(int) Bitcast 287
+             290:    289(ptr) AccessChain 220(uv) 260
+             291:     17(int) Load 290
+             292:   167(bool) UGreaterThan 288 291
+                              Store 275(b) 292
+             293:     14(int) Load 193(i8)
+             294:     27(int) SConvert 293
+             295:     27(int) Load 213(i)
+             296:   167(bool) SLessThan 294 295
+                              Store 275(b) 296
+             297:     15(ptr) AccessChain 189(u8v) 260
+             298:     14(int) Load 297
+             299:     27(int) SConvert 298
+             300:     17(int) Bitcast 299
+             301:    289(ptr) AccessChain 220(uv) 276
+             302:     17(int) Load 301
+             303:   167(bool) UGreaterThanEqual 300 302
+                              Store 275(b) 303
+             304:     14(int) Load 193(i8)
+             305:     27(int) SConvert 304
+             306:     27(int) Load 213(i)
+             307:   167(bool) SLessThanEqual 305 306
+                              Store 275(b) 307
+             308:     14(int) Load 193(i8)
+             309:     27(int) SConvert 308
+             310:     17(int) Bitcast 309
+             311:  218(ivec3) Load 220(uv)
+             312:  218(ivec3) CompositeConstruct 310 310 310
+             313:  218(ivec3) BitwiseOr 311 312
+                              Store 220(uv) 313
+             314:     14(int) Load 193(i8)
+             315:     27(int) SConvert 314
+             316:     27(int) Load 213(i)
+             317:     27(int) BitwiseOr 315 316
+                              Store 213(i) 317
+             318:     14(int) Load 193(i8)
+             319:     37(int) SConvert 318
+             320:     37(int) Load 238(i16)
+             321:     37(int) BitwiseAnd 320 319
+                              Store 238(i16) 321
+             322:  187(ivec3) Load 189(u8v)
+             323:  222(ivec3) SConvert 322
+             324:  218(ivec3) Bitcast 323
+             325:  218(ivec3) Load 220(uv)
+             326:  218(ivec3) BitwiseAnd 324 325
+                              Store 220(uv) 326
+             327:     14(int) Load 193(i8)
+             328:     27(int) SConvert 327
+             329:     17(int) Bitcast 328
+             330:  218(ivec3) Load 220(uv)
+             331:  218(ivec3) CompositeConstruct 329 329 329
+             332:  218(ivec3) BitwiseXor 330 331
+                              Store 220(uv) 332
+             333:  187(ivec3) Load 189(u8v)
+             334:     14(int) Load 193(i8)
+             335:  187(ivec3) CompositeConstruct 334 334 334
+             336:  187(ivec3) BitwiseXor 333 335
+                              Store 189(u8v) 336
+                              Return
+                              FunctionEnd
+12(builtinFuncs():           2 Function None 3
+              13:             Label
+        337(i8v):     54(ptr) Variable Function
+         340(i8):     15(ptr) Variable Function
+        350(u8v):    188(ptr) Variable Function
+         352(u8):     38(ptr) Variable Function
+        426(i16):     38(ptr) Variable Function
+        429(i32):    212(ptr) Variable Function
+       432(i8v4):    431(ptr) Variable Function
+        435(u16):    212(ptr) Variable Function
+       436(u8v2):     51(ptr) Variable Function
+        439(u32):    289(ptr) Variable Function
+       442(u8v4):    441(ptr) Variable Function
+         454(bv):    453(ptr) Variable Function
+             338:   53(ivec2) Load 337(i8v)
+             339:   53(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 338
+                              Store 337(i8v) 339
+             341:     14(int) Load 340(i8)
+             342:     14(int) ExtInst 1(GLSL.std.450) 7(SSign) 341
+                              Store 340(i8) 342
+             343:   53(ivec2) Load 337(i8v)
+             344:     14(int) Load 340(i8)
+             345:   53(ivec2) CompositeConstruct 344 344
+             346:   53(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 343 345
+                              Store 337(i8v) 346
+             347:   53(ivec2) Load 337(i8v)
+             349:   53(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 347 348
+                              Store 337(i8v) 349
+             351:  187(ivec3) Load 350(u8v)
+             353:     37(int) Load 352(u8)
+             355:  354(ivec3) CompositeConstruct 353 353 353
+             356:  187(ivec3) ExtInst 1(GLSL.std.450) 39(SMin) 351 355
+                              Store 350(u8v) 356
+             357:  187(ivec3) Load 350(u8v)
+             359:  187(ivec3) ExtInst 1(GLSL.std.450) 39(SMin) 357 358
+                              Store 350(u8v) 359
+             360:   53(ivec2) Load 337(i8v)
+             361:     14(int) Load 340(i8)
+             362:   53(ivec2) CompositeConstruct 361 361
+             363:   53(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 360 362
+                              Store 337(i8v) 363
+             364:   53(ivec2) Load 337(i8v)
+             365:   53(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 364 348
+                              Store 337(i8v) 365
+             366:  187(ivec3) Load 350(u8v)
+             367:     37(int) Load 352(u8)
+             368:  354(ivec3) CompositeConstruct 367 367 367
+             369:  187(ivec3) ExtInst 1(GLSL.std.450) 42(SMax) 366 368
+                              Store 350(u8v) 369
+             370:  187(ivec3) Load 350(u8v)
+             371:  187(ivec3) ExtInst 1(GLSL.std.450) 42(SMax) 370 358
+                              Store 350(u8v) 371
+             372:   53(ivec2) Load 337(i8v)
+             373:     14(int) Load 340(i8)
+             374:     14(int) SNegate 373
+             375:     14(int) Load 340(i8)
+             376:   53(ivec2) CompositeConstruct 374 374
+             377:   53(ivec2) CompositeConstruct 375 375
+             378:   53(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 372 376 377
+                              Store 337(i8v) 378
+             379:   53(ivec2) Load 337(i8v)
+             380:   53(ivec2) Load 337(i8v)
+             381:   53(ivec2) SNegate 380
+             382:   53(ivec2) Load 337(i8v)
+             383:   53(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 379 381 382
+                              Store 337(i8v) 383
+             384:  187(ivec3) Load 350(u8v)
+             385:     37(int) Load 352(u8)
+             386:     37(int) SNegate 385
+             387:     37(int) Load 352(u8)
+             388:  354(ivec3) CompositeConstruct 386 386 386
+             389:  354(ivec3) CompositeConstruct 387 387 387
+             390:  187(ivec3) ExtInst 1(GLSL.std.450) 45(SClamp) 384 388 389
+                              Store 350(u8v) 390
+             391:  187(ivec3) Load 350(u8v)
+             392:  187(ivec3) Load 350(u8v)
+             393:  187(ivec3) SNegate 392
+             394:  187(ivec3) Load 350(u8v)
+             395:  187(ivec3) ExtInst 1(GLSL.std.450) 45(SClamp) 391 393 394
+                              Store 350(u8v) 395
+             396:     15(ptr) AccessChain 337(i8v) 276
+             397:     14(int) Load 396
+             398:     15(ptr) AccessChain 337(i8v) 260
+             399:     14(int) Load 398
+             401:     14(int) Select 400 399 397
+                              Store 340(i8) 401
+             402:     14(int) Load 340(i8)
+             403:   53(ivec2) CompositeConstruct 402 402
+             404:     14(int) Load 340(i8)
+             405:     14(int) SNegate 404
+             406:   53(ivec2) CompositeConstruct 405 405
+             409:   53(ivec2) Select 408 406 403
+                              Store 337(i8v) 409
+             410:     15(ptr) AccessChain 350(u8v) 276
+             411:     14(int) Load 410
+             412:     15(ptr) AccessChain 350(u8v) 260
+             413:     14(int) Load 412
+             414:     14(int) Select 400 413 411
+             415:     37(int) Bitcast 414
+                              Store 352(u8) 415
+             416:     37(int) Load 352(u8)
+             417:     14(int) Bitcast 416
+             418:  187(ivec3) CompositeConstruct 417 417 417
+             419:     37(int) Load 352(u8)
+             420:     37(int) SNegate 419
+             421:     14(int) Bitcast 420
+             422:  187(ivec3) CompositeConstruct 421 421 421
+             425:  187(ivec3) Select 424 422 418
+                              Store 350(u8v) 425
+             427:   53(ivec2) Load 337(i8v)
+             428:     37(int) Bitcast 427
+                              Store 426(i16) 428
+             433:  430(ivec4) Load 432(i8v4)
+             434:     27(int) Bitcast 433
+                              Store 429(i32) 434
+             437:   50(ivec2) Load 436(u8v2)
+             438:     27(int) Bitcast 437
+                              Store 435(u16) 438
+             443:  440(ivec4) Load 442(u8v4)
+             444:     17(int) Bitcast 443
+                              Store 439(u32) 444
+             445:     37(int) Load 426(i16)
+             446:   53(ivec2) Bitcast 445
+                              Store 337(i8v) 446
+             447:     27(int) Load 429(i32)
+             448:  430(ivec4) Bitcast 447
+                              Store 432(i8v4) 448
+             449:     27(int) Load 435(u16)
+             450:   50(ivec2) Bitcast 449
+                              Store 436(u8v2) 450
+             451:     17(int) Load 439(u32)
+             452:  440(ivec4) Bitcast 451
+                              Store 442(u8v4) 452
+             455:  187(ivec3) Load 350(u8v)
+             456:     37(int) Load 352(u8)
+             457:     14(int) Bitcast 456
+             458:  187(ivec3) CompositeConstruct 457 457 457
+             459:  423(bvec3) SLessThan 455 458
+                              Store 454(bv) 459
+             460:   53(ivec2) Load 337(i8v)
+             461:     14(int) Load 340(i8)
+             462:   53(ivec2) CompositeConstruct 461 461
+             463:  168(bvec2) SLessThan 460 462
+             464:  423(bvec3) Load 454(bv)
+             465:  423(bvec3) VectorShuffle 464 463 3 4 2
+                              Store 454(bv) 465
+             466:  187(ivec3) Load 350(u8v)
+             467:     37(int) Load 352(u8)
+             468:     14(int) Bitcast 467
+             469:  187(ivec3) CompositeConstruct 468 468 468
+             470:  423(bvec3) SLessThanEqual 466 469
+                              Store 454(bv) 470
+             471:   53(ivec2) Load 337(i8v)
+             472:     14(int) Load 340(i8)
+             473:   53(ivec2) CompositeConstruct 472 472
+             474:  168(bvec2) SLessThanEqual 471 473
+             475:  423(bvec3) Load 454(bv)
+             476:  423(bvec3) VectorShuffle 475 474 3 4 2
+                              Store 454(bv) 476
+             477:  187(ivec3) Load 350(u8v)
+             478:     37(int) Load 352(u8)
+             479:     14(int) Bitcast 478
+             480:  187(ivec3) CompositeConstruct 479 479 479
+             481:  423(bvec3) SGreaterThan 477 480
+                              Store 454(bv) 481
+             482:   53(ivec2) Load 337(i8v)
+             483:     14(int) Load 340(i8)
+             484:   53(ivec2) CompositeConstruct 483 483
+             485:  168(bvec2) SGreaterThan 482 484
+             486:  423(bvec3) Load 454(bv)
+             487:  423(bvec3) VectorShuffle 486 485 3 4 2
+                              Store 454(bv) 487
+             488:  187(ivec3) Load 350(u8v)
+             489:     37(int) Load 352(u8)
+             490:     14(int) Bitcast 489
+             491:  187(ivec3) CompositeConstruct 490 490 490
+             492:  423(bvec3) SGreaterThanEqual 488 491
+                              Store 454(bv) 492
+             493:   53(ivec2) Load 337(i8v)
+             494:     14(int) Load 340(i8)
+             495:   53(ivec2) CompositeConstruct 494 494
+             496:  168(bvec2) SGreaterThanEqual 493 495
+             497:  423(bvec3) Load 454(bv)
+             498:  423(bvec3) VectorShuffle 497 496 3 4 2
+                              Store 454(bv) 498
+             499:  187(ivec3) Load 350(u8v)
+             500:     37(int) Load 352(u8)
+             501:     14(int) Bitcast 500
+             502:  187(ivec3) CompositeConstruct 501 501 501
+             503:  423(bvec3) IEqual 499 502
+                              Store 454(bv) 503
+             504:   53(ivec2) Load 337(i8v)
+             505:     14(int) Load 340(i8)
+             506:   53(ivec2) CompositeConstruct 505 505
+             507:  168(bvec2) IEqual 504 506
+             508:  423(bvec3) Load 454(bv)
+             509:  423(bvec3) VectorShuffle 508 507 3 4 2
+                              Store 454(bv) 509
+             510:  187(ivec3) Load 350(u8v)
+             511:     37(int) Load 352(u8)
+             512:     14(int) Bitcast 511
+             513:  187(ivec3) CompositeConstruct 512 512 512
+             514:  423(bvec3) INotEqual 510 513
+                              Store 454(bv) 514
+             515:   53(ivec2) Load 337(i8v)
+             516:     14(int) Load 340(i8)
+             517:   53(ivec2) CompositeConstruct 516 516
+             518:  168(bvec2) INotEqual 515 517
+             519:  423(bvec3) Load 454(bv)
+             520:  423(bvec3) VectorShuffle 519 518 3 4 2
+                              Store 454(bv) 520
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.multiView.frag.out b/Test/baseResults/spv.multiView.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.specConstant.vert.out b/Test/baseResults/spv.specConstant.vert.out
index 156497b..2d57625 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[s1522];"
+                              Name 14  "foo(vf4[s2164];"
                               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[s1522];) 47(param)
+              49:           2 FunctionCall 14(foo(vf4[s2164];) 47(param)
                               Return
                               FunctionEnd
-14(foo(vf4[s1522];):           2 Function None 12
+14(foo(vf4[s2164];):           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..e148e53
--- /dev/null
+++ b/Test/baseResults/spv.subgroup.frag.out
@@ -0,0 +1,44 @@
+spv.subgroup.frag
+// Module Version 10000
+// Generated by (magic number): 80002
+// 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..159a8ac
--- /dev/null
+++ b/Test/baseResults/spv.subgroup.geom.out
@@ -0,0 +1,62 @@
+spv.subgroup.geom
+// Module Version 10000
+// Generated by (magic number): 80002
+// 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..c62e1bd
--- /dev/null
+++ b/Test/baseResults/spv.subgroup.tesc.out
@@ -0,0 +1,59 @@
+spv.subgroup.tesc
+// Module Version 10000
+// Generated by (magic number): 80002
+// 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..835fa96
--- /dev/null
+++ b/Test/baseResults/spv.subgroup.tese.out
@@ -0,0 +1,61 @@
+spv.subgroup.tese
+// Module Version 10000
+// Generated by (magic number): 80002
+// 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..cf3213b
--- /dev/null
+++ b/Test/baseResults/spv.subgroup.vert.out
@@ -0,0 +1,58 @@
+spv.subgroup.vert
+// Module Version 10000
+// Generated by (magic number): 80002
+// 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..b8d7a5a
--- /dev/null
+++ b/Test/baseResults/spv.subgroupArithmetic.comp.out
@@ -0,0 +1,2428 @@
+spv.subgroupArithmetic.comp
+// Module Version 10000
+// Generated by (magic number): 80002
+// 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..539a66b
--- /dev/null
+++ b/Test/baseResults/spv.subgroupBallot.comp.out
@@ -0,0 +1,525 @@
+spv.subgroupBallot.comp
+// Module Version 10000
+// Generated by (magic number): 80002
+// 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..a0ad565
--- /dev/null
+++ b/Test/baseResults/spv.subgroupBasic.comp.out
@@ -0,0 +1,85 @@
+spv.subgroupBasic.comp
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 41
+
+                              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 40 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 1
+              33:     12(int) Constant 0
+              34:     12(int) Constant 4048
+              35:     12(int) Constant 64
+              36:     12(int) Constant 256
+              37:     12(int) Constant 2048
+              38:             TypeVector 12(int) 3
+              39:     12(int) Constant 8
+              40:   38(ivec3) ConstantComposite 39 39 32
+         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 32 33
+                              MemoryBarrier 28 34
+                              MemoryBarrier 28 35
+                              MemoryBarrier 28 36
+                              MemoryBarrier 28 37
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroupClustered.comp.out b/Test/baseResults/spv.subgroupClustered.comp.out
new file mode 100644
index 0000000..d3f45b5
--- /dev/null
+++ b/Test/baseResults/spv.subgroupClustered.comp.out
@@ -0,0 +1,880 @@
+spv.subgroupClustered.comp
+// Module Version 10000
+// Generated by (magic number): 80002
+// 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.subgroupQuad.comp.out b/Test/baseResults/spv.subgroupQuad.comp.out
new file mode 100644
index 0000000..97a082a
--- /dev/null
+++ b/Test/baseResults/spv.subgroupQuad.comp.out
@@ -0,0 +1,739 @@
+spv.subgroupQuad.comp
+// Module Version 10000
+// Generated by (magic number): 80002
+// 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..04bc200
--- /dev/null
+++ b/Test/baseResults/spv.subgroupShuffle.comp.out
@@ -0,0 +1,462 @@
+spv.subgroupShuffle.comp
+// Module Version 10000
+// Generated by (magic number): 80002
+// 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..bba49e7
--- /dev/null
+++ b/Test/baseResults/spv.subgroupShuffleRelative.comp.out
@@ -0,0 +1,462 @@
+spv.subgroupShuffleRelative.comp
+// Module Version 10000
+// Generated by (magic number): 80002
+// 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..831e8fa
--- /dev/null
+++ b/Test/baseResults/spv.subgroupVote.comp.out
@@ -0,0 +1,288 @@
+spv.subgroupVote.comp
+// Module Version 10000
+// Generated by (magic number): 80002
+// 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/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.waveordered.comp b/Test/hlsl.waveordered.comp
new file mode 100644
index 0000000..032c8da
--- /dev/null
+++ b/Test/hlsl.waveordered.comp
@@ -0,0 +1,7 @@
+RWStructuredBuffer<uint> data;

+

+[numthreads(32, 16, 1)]

+void CSMain()

+{

+	data[WaveGetOrderedIndex()] = 1;

+}

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

+{

+    if (0 == WaveGetOrderedIndex())

+    {

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

+    }

+    else

+    {

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

+    }

+}

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

+

+[numthreads(32, 16, 1)]

+void CSMain()

+{

+	uint i = 42;

+	data[GlobalOrderedCountIncrement(i)] = 1;

+}

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

+{

+	uint i = 42;

+    if (0 == GlobalOrderedCountIncrement(i))

+    {

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

+    }

+    else

+    {

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

+    }

+}

diff --git a/Test/hlsl.waveprefix.comp b/Test/hlsl.waveprefix.comp
new file mode 100644
index 0000000..514cffd
--- /dev/null
+++ b/Test/hlsl.waveprefix.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 = 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);

+}

diff --git a/Test/hlsl.wavequad.comp b/Test/hlsl.wavequad.comp
new file mode 100644
index 0000000..801ba89
--- /dev/null
+++ b/Test/hlsl.wavequad.comp
@@ -0,0 +1,133 @@
+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 = QuadSwapX(data[dti.x].u);

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+}

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

+

+[numthreads(32, 16, 1)]

+void CSMain()

+{

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

+}

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

+{

+    if (WaveIsHelperLane())

+    {

+        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..3b8ca1e
--- /dev/null
+++ b/Test/hlsl.wavereduction.comp
@@ -0,0 +1,123 @@
+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 = WaveAllSum(data[dti.x].u);

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+}

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

+

+[numthreads(32, 16, 1)]

+void CSMain(uint3 dti : SV_DispatchThreadID)

+{

+	data[dti.x] = WaveBallot(WaveAnyTrue(dti.x == 0));

+	data[dti.y] = WaveBallot(WaveAllTrue(dti.y == 0));

+	data[dti.z] = WaveBallot(WaveAllEqual(dti.z == 0));

+}

diff --git a/Test/runtests b/Test/runtests
index acba825..24d4004 100755
--- a/Test/runtests
+++ b/Test/runtests
@@ -122,6 +122,9 @@
 $EXE -g --relaxed-errors --suppress-warnings --aml --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 --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 -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
@@ -155,6 +158,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.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.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/glslang/Include/BaseTypes.h b/glslang/Include/BaseTypes.h
index 0a46a7c..a11b659 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,
@@ -218,7 +226,7 @@
     EbvSecondaryViewportMaskNV,
     EbvPositionPerViewNV,
     EbvViewportMaskPerViewNV,
-#endif 
+#endif
 
     // HLSL built-ins that live only temporarily, until they get remapped
     // to one of the above.
@@ -355,7 +363,7 @@
     case EbvSecondaryViewportMaskNV:    return "SecondaryViewportMaskNV";
     case EbvPositionPerViewNV:          return "PositionPerViewNV";
     case EbvViewportMaskPerViewNV:      return "ViewportMaskPerViewNV";
-#endif 
+#endif
     default:                      return "unknown built-in variable";
     }
 }
@@ -371,7 +379,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;
@@ -380,6 +388,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 f66a7ff..0ebec58 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.
 //
@@ -45,6 +46,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;
@@ -87,6 +112,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; }
@@ -95,6 +124,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)
@@ -149,6 +210,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;
@@ -186,6 +267,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);
@@ -225,6 +326,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;
@@ -260,6 +381,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;
@@ -296,8 +437,12 @@
         TConstUnion returnValue;
         assert(type == constant.type);
         switch (type) {
+        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.setU8Const(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;
@@ -312,8 +457,12 @@
         TConstUnion returnValue;
         assert(type == constant.type);
         switch (type) {
+        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.setU8Const(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;
@@ -328,8 +477,12 @@
         TConstUnion returnValue;
         assert(type == constant.type);
         switch (type) {
+        case EbtInt8: returnValue.setI8Const(i8Const * constant.i8Const); break;
+        case EbtInt16: returnValue.setI8Const(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.setU8Const(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;
@@ -344,8 +497,12 @@
         TConstUnion returnValue;
         assert(type == constant.type);
         switch (type) {
+        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.setU8Const(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");
@@ -358,8 +515,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;
@@ -369,6 +582,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;
@@ -378,6 +595,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;
@@ -387,6 +608,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;
@@ -404,8 +629,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;
@@ -415,6 +696,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;
@@ -422,8 +707,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;
@@ -433,6 +722,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;
@@ -451,6 +744,10 @@
         TConstUnion returnValue;
         assert(type == constant.type);
         switch (type) {
+        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;
@@ -466,6 +763,10 @@
         TConstUnion returnValue;
         assert(type == constant.type);
         switch (type) {
+        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;
@@ -481,6 +782,10 @@
         TConstUnion returnValue;
         assert(type == constant.type);
         switch (type) {
+        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;
@@ -495,6 +800,10 @@
     {
         TConstUnion returnValue;
         switch (type) {
+        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;
@@ -533,6 +842,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 b5b91f5..5b860b6 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,9 +205,15 @@
         }
 
         switch (type) {
-        case EbtFloat:               break;
-        case EbtInt:  s.append("i"); break;
-        case EbtUint: s.append("u"); break;
+        case EbtFloat:                   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) {
@@ -1358,11 +1365,7 @@
     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) {
@@ -1370,10 +1373,8 @@
         case EbtUint:
         case EbtInt64:
         case EbtUint64:
-#ifdef AMD_EXTENSIONS
         case EbtInt16:
         case EbtUint16:
-#endif
         case EbtAtomicUint:
             return true;
         default:
@@ -1389,7 +1390,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))
@@ -1442,17 +1443,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:
@@ -1529,17 +1528,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 12f17e3..f0cda5f 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,62 @@
     EOpAllInvocations,
     EOpAllInvocationsEqual,
 
+    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,
+
 #ifdef AMD_EXTENSIONS
     EOpMinInvocations,
     EOpMaxInvocations,
@@ -451,32 +599,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 +641,6 @@
     EOpConstructU64Vec2,
     EOpConstructU64Vec3,
     EOpConstructU64Vec4,
-#ifdef AMD_EXTENSIONS
-    EOpConstructI16Vec2,
-    EOpConstructI16Vec3,
-    EOpConstructI16Vec4,
-    EOpConstructU16Vec2,
-    EOpConstructU16Vec3,
-    EOpConstructU16Vec4,
-#endif
     EOpConstructMat2x2,
     EOpConstructMat2x3,
     EOpConstructMat2x4,
@@ -542,7 +686,10 @@
     EOpConstructBMat4x2,
     EOpConstructBMat4x3,
     EOpConstructBMat4x4,
-#ifdef AMD_EXTENSIONS
+    EOpConstructFloat16,
+    EOpConstructF16Vec2,
+    EOpConstructF16Vec3,
+    EOpConstructF16Vec4,
     EOpConstructF16Mat2x2,
     EOpConstructF16Mat2x3,
     EOpConstructF16Mat2x4,
@@ -552,7 +699,6 @@
     EOpConstructF16Mat4x2,
     EOpConstructF16Mat4x3,
     EOpConstructF16Mat4x4,
-#endif
     EOpConstructStruct,
     EOpConstructTextureSampler,
     EOpConstructGuardEnd,
@@ -776,6 +922,14 @@
 
     // matrix
     EOpMatrixSwizzle,                    // select multiple matrix components (non-column)
+
+    // SM6 wave ops
+    EOpWaveGetLaneCount,                 // Will decompose to gl_SubgroupSize.
+    EOpWaveGetLaneIndex,                 // Will decompose to gl_SubgroupInvocationID.
+    EOpWaveIsHelperLane,                 // Will decompose to gl_HelperInvocation.
+    EOpWaveBallot,                       // Will decompose to subgroupBallot.
+    EOpWaveGetOrderedIndex,              // Will decompose to an equation containing gl_SubgroupID.
+    EOpGlobalOrderedCountIncrement,      // Will nice error.
 };
 
 class TIntermTraverser;
diff --git a/glslang/MachineIndependent/Constant.cpp b/glslang/MachineIndependent/Constant.cpp
index 625b8e9..313c54f 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.
 //
@@ -176,11 +177,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)
@@ -213,23 +243,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;
             }
@@ -387,6 +400,12 @@
         resultSize = 2;
         break;
 
+    case EOpPack16:
+    case EOpPack32:
+    case EOpPack64:
+    case EOpUnpack32:
+    case EOpUnpack16:
+    case EOpUnpack8:
     case EOpNormalize:
         componentWise = false;
         resultSize = objectSize;
@@ -445,6 +464,12 @@
     case EOpPackSnorm2x16:
     case EOpPackUnorm2x16:
     case EOpPackHalf2x16:
+    case EOpPack16:
+    case EOpPack32:
+    case EOpPack64:
+    case EOpUnpack32:
+    case EOpUnpack16:
+    case EOpUnpack8:
 
     case EOpUnpackSnorm2x16:
     case EOpUnpackUnorm2x16:
@@ -470,17 +495,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;
@@ -635,13 +656,10 @@
         case EOpDoubleBitsToUint64:
         case EOpInt64BitsToDouble:
         case EOpUint64BitsToDouble:
-#ifdef AMD_EXTENSIONS
         case EOpFloat16BitsToInt16:
         case EOpFloat16BitsToUint16:
         case EOpInt16BitsToFloat16:
         case EOpUint16BitsToFloat16:
-#endif
-
         default:
             return 0;
         }
@@ -725,20 +743,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++) {
 
@@ -759,53 +763,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 a837efd..bad9244 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-2016 Google, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -83,6 +84,10 @@
     // Set up textual representations for making all the permutations
     // of texturing/imaging functions.
     prefixes[EbtFloat] =  "";
+    prefixes[EbtInt8]  = "i8";
+    prefixes[EbtUint8] = "u8";
+    prefixes[EbtInt16]  = "i16";
+    prefixes[EbtUint16] = "u16";
     prefixes[EbtInt]   = "i";
     prefixes[EbtUint]  = "u";
     postfixes[2] = "2";
@@ -799,7 +804,6 @@
             "bvec3 notEqual(u64vec3, u64vec3);"
             "bvec4 notEqual(u64vec4, u64vec4);"
 
-#ifdef AMD_EXTENSIONS
             "int   findLSB(int64_t);"
             "ivec2 findLSB(i64vec2);"
             "ivec3 findLSB(i64vec3);"
@@ -819,7 +823,7 @@
             "ivec2 findMSB(u64vec2);"
             "ivec3 findMSB(u64vec3);"
             "ivec4 findMSB(u64vec4);"
-#endif
+
             "\n"
         );
     }
@@ -1627,6 +1631,727 @@
             "\n");
     }
 
+    // GL_KHR_shader_subgroup
+    if (spvVersion.vulkan >= 100) {
+        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);"
@@ -2330,7 +3055,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);"
@@ -2678,9 +3427,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);"
@@ -2691,50 +3599,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);"
@@ -2755,6 +3666,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);"
@@ -2775,6 +3696,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);"
@@ -2826,33 +3757,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.
@@ -4011,17 +5154,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) ||
@@ -4032,6 +5188,39 @@
             "\n");
     }
 
+    // GL_KHR_shader_subgroup
+    if (spvVersion.vulkan >= 100) {
+        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
@@ -5409,6 +6598,8 @@
             if (spvVersion.vulkan >= 100)
                 // 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);
@@ -5647,6 +6838,25 @@
             symbolTable.setVariableExtensions("gl_ViewIndex", 1, &E_GL_EXT_multiview);
             BuiltInVariable("gl_ViewIndex", EbvViewIndex, symbolTable);
         }
+        
+        // GL_KHR_shader_subgroup
+        if (spvVersion.vulkan >= 100) {
+            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;
 
@@ -5885,6 +7095,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 >= 100)
+                // 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 >= 100) {
+            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);
@@ -5923,6 +7231,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 >= 100)
+                // 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 >= 100) {
+            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);
@@ -5931,6 +7282,16 @@
             BuiltInVariable("gl_ViewIndex", EbvViewIndex, symbolTable);
         }
 
+        // GL_KHR_shader_subgroup
+        if (spvVersion.vulkan >= 100) {
+            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:
@@ -6016,12 +7377,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);
@@ -6044,7 +7408,6 @@
     symbolTable.relateToOperator("packUint2x32",    EOpPackUint2x32);
     symbolTable.relateToOperator("unpackUint2x32",  EOpUnpackUint2x32);
 
-#ifdef AMD_EXTENSIONS
     symbolTable.relateToOperator("packInt2x16",     EOpPackInt2x16);
     symbolTable.relateToOperator("unpackInt2x16",   EOpUnpackInt2x16);
     symbolTable.relateToOperator("packUint2x16",    EOpPackUint2x16);
@@ -6054,10 +7417,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);
@@ -6301,6 +7670,65 @@
             symbolTable.relateToOperator("fragmentFetchAMD",                    EOpFragmentFetch);
 #endif
         }
+
+        // GL_KHR_shader_subgroup
+        if (spvVersion.vulkan >= 100) {
+            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);
@@ -6345,8 +7773,9 @@
 #endif
 
     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 04a45e0..80d5be9 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
     }
@@ -446,27 +439,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
@@ -484,11 +464,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;
@@ -519,11 +910,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;
@@ -536,14 +937,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;
@@ -619,40 +1012,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
@@ -669,207 +1060,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;
 }
@@ -1019,12 +1210,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.
@@ -1080,6 +1270,165 @@
     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.
@@ -1125,120 +1474,214 @@
         }
     }
 
-    switch (to) {
-    case EbtDouble:
-        switch (from) {
-        case EbtInt:
+
+    // 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;
+    }
+
+    return false;
+}
+
+static bool canSignedIntTypeRepresentAllUnsignedValues(TBasicType sintType, TBasicType uintType) {
+    switch(sintType) {
+    case EbtInt8:
+        switch(uintType) {
+        case EbtUint8:
+        case EbtUint16:
         case EbtUint:
-        case EbtInt64:
         case EbtUint64:
-#ifdef AMD_EXTENSIONS
-        case EbtInt16:
-        case EbtUint16:
-#endif
-        case EbtFloat:
-        case EbtDouble:
-#ifdef AMD_EXTENSIONS
-        case EbtFloat16:
-#endif
-            return true;
+            return false;
         default:
+            assert(false);
             return false;
         }
-    case EbtFloat:
-        switch (from) {
-        case EbtInt:
+        break;
+    case EbtInt16:
+        switch(uintType) {
+        case EbtUint8:
+            return true;
+        case EbtUint16:
         case EbtUint:
-#ifdef AMD_EXTENSIONS
-        case EbtInt16:
-        case EbtUint16:
-#endif
-        case EbtFloat:
-#ifdef AMD_EXTENSIONS
-        case EbtFloat16:
-#endif
-            return true;
-        case EbtBool:
-            return (source == EShSourceHlsl);
+        case EbtUint64:
+            return false;
         default:
+            assert(false);
             return false;
         }
-    case EbtUint:
-        switch (from) {
-        case EbtInt:
-            return version >= 400 || (source == EShSourceHlsl);
-        case EbtUint:
-#ifdef AMD_EXTENSIONS
-        case EbtInt16:
-        case EbtUint16:
-#endif
-            return true;
-        case EbtBool:
-            return (source == EShSourceHlsl);
-        default:
-            return false;
-        }
+        break;
     case EbtInt:
-        switch (from) {
-        case EbtInt:
-#ifdef AMD_EXTENSIONS
-        case EbtInt16:
-#endif
+        switch(uintType) {
+        case EbtUint8:
+        case EbtUint16:
             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:
-#endif
-            return true;
+            return false;
         default:
+            assert(false);
             return false;
         }
+        break;
     case EbtInt64:
-        switch (from) {
-        case EbtInt:
-        case EbtInt64:
-#ifdef AMD_EXTENSIONS
-        case EbtInt16:
-#endif
-            return true;
-        default:
-            return false;
-        }
-#ifdef AMD_EXTENSIONS
-    case EbtFloat16:
-        switch (from) {
-        case EbtInt16:
+        switch(uintType) {
+        case EbtUint8:
         case EbtUint16:
-        case EbtFloat16:
+        case EbtUint:
             return true;
+        case EbtUint64:
+            return false;
         default:
+            assert(false);
             return false;
         }
-    case EbtUint16:
-        switch (from) {
-        case EbtInt16:
-        case EbtUint16:
-            return true;
-        default:
-            return false;
-        }
-#endif
+        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.
 //
@@ -1331,7 +1774,6 @@
             }
         }
         break;
-#ifdef AMD_EXTENSIONS
     case EbtFloat16:
         if (type.getMatrixCols()) {
             switch (type.getMatrixCols()) {
@@ -1371,7 +1813,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()) {
@@ -1466,26 +1943,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()) {
@@ -1677,16 +2134,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()) {
@@ -1761,6 +2214,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
 {
@@ -1794,24 +2278,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);
@@ -1822,11 +2288,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);
@@ -2121,12 +2583,10 @@
         case EOpVectorSwizzle:
         case EOpConvFloatToDouble:
         case EOpConvDoubleToFloat:
-#ifdef AMD_EXTENSIONS
         case EOpConvFloat16ToFloat:
         case EOpConvFloatToFloat16:
         case EOpConvFloat16ToDouble:
         case EOpConvDoubleToFloat16:
-#endif
             return true;
         default:
             return false;
@@ -2150,51 +2610,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:
@@ -2321,15 +2827,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:
@@ -2337,18 +2835,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;
@@ -2368,11 +2857,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;
     }
@@ -2550,16 +3035,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;
@@ -2860,11 +3336,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);
@@ -2875,11 +3347,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;
@@ -2954,9 +3422,7 @@
                 break;
             case EbtFloat:
             case EbtDouble:
-#ifdef AMD_EXTENSIONS
             case EbtFloat16:
-#endif
                 leftUnionArray[i] = rightUnionArray[i];
                 break;
             default:
@@ -2982,16 +3448,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:
@@ -3018,7 +3481,6 @@
                 return node;
             }
             break;
-#endif
         case EbtInt:
             switch (node->getType().getBasicType()) {
             case EbtInt:
@@ -3038,9 +3500,7 @@
                 break;
             case EbtFloat:
             case EbtDouble:
-#ifdef AMD_EXTENSIONS
             case EbtFloat16:
-#endif
                 leftUnionArray[i].setIConst(static_cast<int>(rightUnionArray[i].getDConst()));
                 break;
             default:
@@ -3066,9 +3526,7 @@
                 break;
             case EbtFloat:
             case EbtDouble:
-#ifdef AMD_EXTENSIONS
             case EbtFloat16:
-#endif
                 leftUnionArray[i].setUConst(static_cast<unsigned int>(rightUnionArray[i].getDConst()));
                 break;
             default:
@@ -3094,9 +3552,7 @@
                 break;
             case EbtFloat:
             case EbtDouble:
-#ifdef AMD_EXTENSIONS
             case EbtFloat16:
-#endif
                 leftUnionArray[i].setBConst(rightUnionArray[i].getDConst() != 0.0);
                 break;
             default:
@@ -3122,9 +3578,7 @@
                 break;
             case EbtFloat:
             case EbtDouble:
-#ifdef AMD_EXTENSIONS
             case EbtFloat16:
-#endif
                 leftUnionArray[i].setI64Const(static_cast<long long>(rightUnionArray[i].getDConst()));
                 break;
             default:
@@ -3150,9 +3604,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 33e35e8..c03ba93 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.
 //
@@ -2156,7 +2157,6 @@
     case EOpConstructDMat4x2:
     case EOpConstructDMat4x3:
     case EOpConstructDMat4x4:
-#ifdef AMD_EXTENSIONS
     case EOpConstructF16Mat2x2:
     case EOpConstructF16Mat2x3:
     case EOpConstructF16Mat2x4:
@@ -2166,7 +2166,6 @@
     case EOpConstructF16Mat4x2:
     case EOpConstructF16Mat4x3:
     case EOpConstructF16Mat4x4:
-#endif
         constructingMatrix = true;
         break;
     default:
@@ -2223,18 +2222,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:
@@ -2247,14 +2258,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();
@@ -2562,12 +2565,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
@@ -2575,13 +2573,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) ||
@@ -4577,11 +4575,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", "");
     }
@@ -4681,20 +4677,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", "");
@@ -4891,10 +4885,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);
 
@@ -5079,6 +5084,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)
@@ -5603,7 +5687,6 @@
         basicOp = EOpConstructDouble;
         break;
 
-#ifdef AMD_EXTENSIONS
     case EOpConstructF16Vec2:
     case EOpConstructF16Vec3:
     case EOpConstructF16Vec4:
@@ -5619,7 +5702,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:
@@ -5649,22 +5759,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 2a054c1..6e87266 100644
--- a/glslang/MachineIndependent/ParseHelper.h
+++ b/glslang/MachineIndependent/ParseHelper.h
@@ -386,6 +386,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 68d1500..10b3d9e 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.
 //
@@ -463,16 +464,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;
@@ -489,7 +508,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;
@@ -714,19 +765,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();
@@ -985,12 +1032,29 @@
     case U64VEC4:
         afterType = true;
         if (parseContext.symbolTable.atBuiltInLevel() ||
-            (parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_int64) &&
-             parseContext.profile != EEsProfile && parseContext.version >= 450))
+            ((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)) &&
+              parseContext.profile != EEsProfile && parseContext.version >= 450))
             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:
@@ -1001,10 +1065,77 @@
     case U16VEC4:
         afterType = true;
         if (parseContext.symbolTable.atBuiltInLevel() ||
-            (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)) &&
+              parseContext.profile != EEsProfile && parseContext.version >= 450))
+            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();
 
     case FLOAT16_T:
     case F16VEC2:
@@ -1024,11 +1155,15 @@
     case F16MAT4X4:
         afterType = true;
         if (parseContext.symbolTable.atBuiltInLevel() ||
-            (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)) &&
              parseContext.profile != EEsProfile && parseContext.version >= 450))
             return keyword;
         return identifierOrType();
-#endif
 
     case SAMPLERCUBEARRAY:
     case SAMPLERCUBEARRAYSHADOW:
diff --git a/glslang/MachineIndependent/SymbolTable.cpp b/glslang/MachineIndependent/SymbolTable.cpp
index 233033e..e3c03bf 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 b1893b3..daf2dc1 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;
@@ -249,6 +259,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,
@@ -328,6 +348,16 @@
             "#define GL_EXT_shader_image_load_formatted 1\n"
             "#define GL_EXT_post_depth_coverage 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"
@@ -346,6 +376,14 @@
             "#define GL_NV_viewport_array2 1\n"
             "#define GL_NV_shader_atomic_int64 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) {
@@ -680,6 +718,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)
@@ -737,35 +790,105 @@
     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)
+// 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_int16, "shader int16");
+    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 float16 data-type support.
-void TParseVersions::float16Check(const TSourceLoc& loc, const char* op, bool builtIn)
+// Call for any operation needing GLSL float32 data-type support.
+void TParseVersions::explicitFloat32Check(const TSourceLoc& loc, const char* op, bool builtIn)
 {
-    if (! builtIn) {
-        requireExtensions(loc, 1, &E_GL_AMD_gpu_shader_half_float, "shader half float");
+    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);
+    }
+}
+
+// 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, "shader int64");
+        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 bd57103..ead9075 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";
 
@@ -218,6 +228,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 a011935..c87ac7d 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.
 //
@@ -121,15 +122,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
@@ -141,6 +155,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
@@ -189,7 +209,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
@@ -259,6 +279,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);
     }
@@ -275,16 +303,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);
@@ -294,10 +318,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);
@@ -1356,11 +1378,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());
@@ -1371,6 +1401,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());
@@ -1381,20 +1441,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;
@@ -1433,28 +1479,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());
@@ -1486,6 +1562,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());
@@ -1504,30 +1634,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());
@@ -1546,6 +1652,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());
@@ -1564,30 +1724,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;
@@ -1721,100 +1857,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 fabec4b..4682b99 100644
--- a/glslang/MachineIndependent/glslang_tab.cpp
+++ b/glslang/MachineIndependent/glslang_tab.cpp
@@ -62,7 +62,7 @@
 
 
 /* Copy the first part of user declarations.  */
-#line 41 "MachineIndependent/glslang.y" /* yacc.c:339  */
+#line 42 "MachineIndependent/glslang.y" /* yacc.c:339  */
 
 
 /* Based on:
@@ -124,299 +124,349 @@
   {
     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,
-    SAMPLER = 410,
-    SAMPLERSHADOW = 411,
-    TEXTURE1D = 412,
-    TEXTURE2D = 413,
-    TEXTURE3D = 414,
-    TEXTURECUBE = 415,
-    TEXTURE1DARRAY = 416,
-    TEXTURE2DARRAY = 417,
-    ITEXTURE1D = 418,
-    ITEXTURE2D = 419,
-    ITEXTURE3D = 420,
-    ITEXTURECUBE = 421,
-    ITEXTURE1DARRAY = 422,
-    ITEXTURE2DARRAY = 423,
-    UTEXTURE1D = 424,
-    UTEXTURE2D = 425,
-    UTEXTURE3D = 426,
-    UTEXTURECUBE = 427,
-    UTEXTURE1DARRAY = 428,
-    UTEXTURE2DARRAY = 429,
-    TEXTURE2DRECT = 430,
-    ITEXTURE2DRECT = 431,
-    UTEXTURE2DRECT = 432,
-    TEXTUREBUFFER = 433,
-    ITEXTUREBUFFER = 434,
-    UTEXTUREBUFFER = 435,
-    TEXTURECUBEARRAY = 436,
-    ITEXTURECUBEARRAY = 437,
-    UTEXTURECUBEARRAY = 438,
-    TEXTURE2DMS = 439,
-    ITEXTURE2DMS = 440,
-    UTEXTURE2DMS = 441,
-    TEXTURE2DMSARRAY = 442,
-    ITEXTURE2DMSARRAY = 443,
-    UTEXTURE2DMSARRAY = 444,
-    SUBPASSINPUT = 445,
-    SUBPASSINPUTMS = 446,
-    ISUBPASSINPUT = 447,
-    ISUBPASSINPUTMS = 448,
-    USUBPASSINPUT = 449,
-    USUBPASSINPUTMS = 450,
-    IMAGE1D = 451,
-    IIMAGE1D = 452,
-    UIMAGE1D = 453,
-    IMAGE2D = 454,
-    IIMAGE2D = 455,
-    UIMAGE2D = 456,
-    IMAGE3D = 457,
-    IIMAGE3D = 458,
-    UIMAGE3D = 459,
-    IMAGE2DRECT = 460,
-    IIMAGE2DRECT = 461,
-    UIMAGE2DRECT = 462,
-    IMAGECUBE = 463,
-    IIMAGECUBE = 464,
-    UIMAGECUBE = 465,
-    IMAGEBUFFER = 466,
-    IIMAGEBUFFER = 467,
-    UIMAGEBUFFER = 468,
-    IMAGE1DARRAY = 469,
-    IIMAGE1DARRAY = 470,
-    UIMAGE1DARRAY = 471,
-    IMAGE2DARRAY = 472,
-    IIMAGE2DARRAY = 473,
-    UIMAGE2DARRAY = 474,
-    IMAGECUBEARRAY = 475,
-    IIMAGECUBEARRAY = 476,
-    UIMAGECUBEARRAY = 477,
-    IMAGE2DMS = 478,
-    IIMAGE2DMS = 479,
-    UIMAGE2DMS = 480,
-    IMAGE2DMSARRAY = 481,
-    IIMAGE2DMSARRAY = 482,
-    UIMAGE2DMSARRAY = 483,
-    STRUCT = 484,
-    VOID = 485,
-    WHILE = 486,
-    IDENTIFIER = 487,
-    TYPE_NAME = 488,
-    FLOATCONSTANT = 489,
-    DOUBLECONSTANT = 490,
-    INTCONSTANT = 491,
-    UINTCONSTANT = 492,
-    INT64CONSTANT = 493,
-    UINT64CONSTANT = 494,
-    INT16CONSTANT = 495,
-    UINT16CONSTANT = 496,
-    BOOLCONSTANT = 497,
-    FLOAT16CONSTANT = 498,
-    LEFT_OP = 499,
-    RIGHT_OP = 500,
-    INC_OP = 501,
-    DEC_OP = 502,
-    LE_OP = 503,
-    GE_OP = 504,
-    EQ_OP = 505,
-    NE_OP = 506,
-    AND_OP = 507,
-    OR_OP = 508,
-    XOR_OP = 509,
-    MUL_ASSIGN = 510,
-    DIV_ASSIGN = 511,
-    ADD_ASSIGN = 512,
-    MOD_ASSIGN = 513,
-    LEFT_ASSIGN = 514,
-    RIGHT_ASSIGN = 515,
-    AND_ASSIGN = 516,
-    XOR_ASSIGN = 517,
-    OR_ASSIGN = 518,
-    SUB_ASSIGN = 519,
-    LEFT_PAREN = 520,
-    RIGHT_PAREN = 521,
-    LEFT_BRACKET = 522,
-    RIGHT_BRACKET = 523,
-    LEFT_BRACE = 524,
-    RIGHT_BRACE = 525,
-    DOT = 526,
-    COMMA = 527,
-    COLON = 528,
-    EQUAL = 529,
-    SEMICOLON = 530,
-    BANG = 531,
-    DASH = 532,
-    TILDE = 533,
-    PLUS = 534,
-    STAR = 535,
-    SLASH = 536,
-    PERCENT = 537,
-    LEFT_ANGLE = 538,
-    RIGHT_ANGLE = 539,
-    VERTICAL_BAR = 540,
-    CARET = 541,
-    AMPERSAND = 542,
-    QUESTION = 543,
-    INVARIANT = 544,
-    PRECISE = 545,
-    HIGH_PRECISION = 546,
-    MEDIUM_PRECISION = 547,
-    LOW_PRECISION = 548,
-    PRECISION = 549,
-    PACKED = 550,
-    RESOURCE = 551,
-    SUPERP = 552
+    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,
+    SAMPLER = 458,
+    SAMPLERSHADOW = 459,
+    TEXTURE1D = 460,
+    TEXTURE2D = 461,
+    TEXTURE3D = 462,
+    TEXTURECUBE = 463,
+    TEXTURE1DARRAY = 464,
+    TEXTURE2DARRAY = 465,
+    ITEXTURE1D = 466,
+    ITEXTURE2D = 467,
+    ITEXTURE3D = 468,
+    ITEXTURECUBE = 469,
+    ITEXTURE1DARRAY = 470,
+    ITEXTURE2DARRAY = 471,
+    UTEXTURE1D = 472,
+    UTEXTURE2D = 473,
+    UTEXTURE3D = 474,
+    UTEXTURECUBE = 475,
+    UTEXTURE1DARRAY = 476,
+    UTEXTURE2DARRAY = 477,
+    TEXTURE2DRECT = 478,
+    ITEXTURE2DRECT = 479,
+    UTEXTURE2DRECT = 480,
+    TEXTUREBUFFER = 481,
+    ITEXTUREBUFFER = 482,
+    UTEXTUREBUFFER = 483,
+    TEXTURECUBEARRAY = 484,
+    ITEXTURECUBEARRAY = 485,
+    UTEXTURECUBEARRAY = 486,
+    TEXTURE2DMS = 487,
+    ITEXTURE2DMS = 488,
+    UTEXTURE2DMS = 489,
+    TEXTURE2DMSARRAY = 490,
+    ITEXTURE2DMSARRAY = 491,
+    UTEXTURE2DMSARRAY = 492,
+    SUBPASSINPUT = 493,
+    SUBPASSINPUTMS = 494,
+    ISUBPASSINPUT = 495,
+    ISUBPASSINPUTMS = 496,
+    USUBPASSINPUT = 497,
+    USUBPASSINPUTMS = 498,
+    IMAGE1D = 499,
+    IIMAGE1D = 500,
+    UIMAGE1D = 501,
+    IMAGE2D = 502,
+    IIMAGE2D = 503,
+    UIMAGE2D = 504,
+    IMAGE3D = 505,
+    IIMAGE3D = 506,
+    UIMAGE3D = 507,
+    IMAGE2DRECT = 508,
+    IIMAGE2DRECT = 509,
+    UIMAGE2DRECT = 510,
+    IMAGECUBE = 511,
+    IIMAGECUBE = 512,
+    UIMAGECUBE = 513,
+    IMAGEBUFFER = 514,
+    IIMAGEBUFFER = 515,
+    UIMAGEBUFFER = 516,
+    IMAGE1DARRAY = 517,
+    IIMAGE1DARRAY = 518,
+    UIMAGE1DARRAY = 519,
+    IMAGE2DARRAY = 520,
+    IIMAGE2DARRAY = 521,
+    UIMAGE2DARRAY = 522,
+    IMAGECUBEARRAY = 523,
+    IIMAGECUBEARRAY = 524,
+    UIMAGECUBEARRAY = 525,
+    IMAGE2DMS = 526,
+    IIMAGE2DMS = 527,
+    UIMAGE2DMS = 528,
+    IMAGE2DMSARRAY = 529,
+    IIMAGE2DMSARRAY = 530,
+    UIMAGE2DMSARRAY = 531,
+    STRUCT = 532,
+    VOID = 533,
+    WHILE = 534,
+    IDENTIFIER = 535,
+    TYPE_NAME = 536,
+    FLOATCONSTANT = 537,
+    DOUBLECONSTANT = 538,
+    INT16CONSTANT = 539,
+    UINT16CONSTANT = 540,
+    INT32CONSTANT = 541,
+    UINT32CONSTANT = 542,
+    INTCONSTANT = 543,
+    UINTCONSTANT = 544,
+    INT64CONSTANT = 545,
+    UINT64CONSTANT = 546,
+    BOOLCONSTANT = 547,
+    FLOAT16CONSTANT = 548,
+    LEFT_OP = 549,
+    RIGHT_OP = 550,
+    INC_OP = 551,
+    DEC_OP = 552,
+    LE_OP = 553,
+    GE_OP = 554,
+    EQ_OP = 555,
+    NE_OP = 556,
+    AND_OP = 557,
+    OR_OP = 558,
+    XOR_OP = 559,
+    MUL_ASSIGN = 560,
+    DIV_ASSIGN = 561,
+    ADD_ASSIGN = 562,
+    MOD_ASSIGN = 563,
+    LEFT_ASSIGN = 564,
+    RIGHT_ASSIGN = 565,
+    AND_ASSIGN = 566,
+    XOR_ASSIGN = 567,
+    OR_ASSIGN = 568,
+    SUB_ASSIGN = 569,
+    LEFT_PAREN = 570,
+    RIGHT_PAREN = 571,
+    LEFT_BRACKET = 572,
+    RIGHT_BRACKET = 573,
+    LEFT_BRACE = 574,
+    RIGHT_BRACE = 575,
+    DOT = 576,
+    COMMA = 577,
+    COLON = 578,
+    EQUAL = 579,
+    SEMICOLON = 580,
+    BANG = 581,
+    DASH = 582,
+    TILDE = 583,
+    PLUS = 584,
+    STAR = 585,
+    SLASH = 586,
+    PERCENT = 587,
+    LEFT_ANGLE = 588,
+    RIGHT_ANGLE = 589,
+    VERTICAL_BAR = 590,
+    CARET = 591,
+    AMPERSAND = 592,
+    QUESTION = 593,
+    INVARIANT = 594,
+    PRECISE = 595,
+    HIGH_PRECISION = 596,
+    MEDIUM_PRECISION = 597,
+    LOW_PRECISION = 598,
+    PRECISION = 599,
+    PACKED = 600,
+    RESOURCE = 601,
+    SUPERP = 602
   };
 #endif
 
@@ -425,7 +475,7 @@
 typedef union YYSTYPE YYSTYPE;
 union YYSTYPE
 {
-#line 68 "MachineIndependent/glslang.y" /* yacc.c:355  */
+#line 69 "MachineIndependent/glslang.y" /* yacc.c:355  */
 
     struct {
         glslang::TSourceLoc loc;
@@ -459,7 +509,7 @@
         };
     } interm;
 
-#line 463 "MachineIndependent/glslang_tab.cpp" /* yacc.c:355  */
+#line 513 "MachineIndependent/glslang_tab.cpp" /* yacc.c:355  */
 };
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
@@ -472,7 +522,7 @@
 #endif /* !YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED  */
 
 /* Copy the second part of user declarations.  */
-#line 102 "MachineIndependent/glslang.y" /* yacc.c:358  */
+#line 103 "MachineIndependent/glslang.y" /* yacc.c:358  */
 
 
 /* windows only pragma */
@@ -488,7 +538,7 @@
 extern int yylex(YYSTYPE*, TParseContext&);
 
 
-#line 492 "MachineIndependent/glslang_tab.cpp" /* yacc.c:358  */
+#line 542 "MachineIndependent/glslang_tab.cpp" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -709,23 +759,23 @@
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  274
+#define YYFINAL  322
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   6614
+#define YYLAST   7751
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  298
+#define YYNTOKENS  348
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  100
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  450
+#define YYNRULES  500
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  582
+#define YYNSTATES  632
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   552
+#define YYMAXUTOK   602
 
 #define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -789,59 +839,69 @@
      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
+     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,   336,   337,   338,   339,   340,   341,   342,   343,   344,
+     345,   346,   347
 };
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   253,   253,   259,   262,   265,   269,   273,   277,   283,
-     289,   292,   296,   302,   305,   313,   316,   319,   322,   325,
-     330,   338,   345,   352,   358,   362,   369,   372,   378,   385,
-     395,   403,   408,   438,   444,   448,   452,   472,   473,   474,
-     475,   481,   482,   487,   492,   501,   502,   507,   515,   516,
-     522,   531,   532,   537,   542,   547,   555,   556,   564,   575,
-     576,   585,   586,   595,   596,   605,   606,   614,   615,   623,
-     624,   632,   633,   633,   651,   652,   667,   671,   675,   679,
-     684,   688,   692,   696,   700,   704,   708,   715,   718,   729,
-     736,   741,   746,   754,   758,   762,   766,   771,   776,   785,
-     785,   796,   800,   807,   814,   817,   824,   832,   852,   875,
-     890,   913,   924,   934,   944,   954,   963,   966,   970,   974,
-     979,   987,   992,   997,  1002,  1007,  1016,  1027,  1054,  1063,
-    1070,  1077,  1084,  1096,  1102,  1105,  1112,  1116,  1120,  1128,
-    1137,  1140,  1151,  1154,  1157,  1161,  1165,  1169,  1176,  1180,
-    1192,  1206,  1211,  1217,  1223,  1230,  1236,  1241,  1246,  1251,
-    1259,  1263,  1267,  1271,  1275,  1279,  1285,  1294,  1297,  1305,
-    1309,  1318,  1323,  1331,  1335,  1345,  1349,  1353,  1358,  1365,
-    1369,  1374,  1379,  1384,  1391,  1398,  1402,  1407,  1412,  1417,
-    1423,  1429,  1435,  1443,  1451,  1459,  1464,  1469,  1474,  1479,
-    1484,  1489,  1495,  1501,  1507,  1515,  1523,  1531,  1537,  1543,
-    1549,  1555,  1561,  1567,  1575,  1583,  1591,  1596,  1601,  1606,
-    1611,  1616,  1621,  1626,  1631,  1636,  1641,  1646,  1651,  1657,
-    1663,  1669,  1675,  1681,  1687,  1693,  1699,  1705,  1711,  1717,
-    1723,  1731,  1739,  1747,  1755,  1763,  1771,  1779,  1787,  1795,
-    1803,  1811,  1819,  1824,  1829,  1834,  1839,  1844,  1849,  1854,
-    1859,  1864,  1869,  1874,  1879,  1884,  1889,  1894,  1899,  1904,
-    1909,  1914,  1919,  1924,  1929,  1934,  1939,  1944,  1949,  1954,
-    1959,  1964,  1969,  1974,  1979,  1984,  1989,  1994,  1999,  2004,
-    2009,  2014,  2019,  2024,  2029,  2034,  2039,  2044,  2049,  2054,
-    2059,  2064,  2069,  2074,  2079,  2084,  2089,  2094,  2099,  2104,
-    2109,  2114,  2119,  2124,  2129,  2134,  2139,  2144,  2149,  2154,
-    2159,  2164,  2169,  2174,  2179,  2184,  2189,  2194,  2199,  2204,
-    2209,  2214,  2219,  2224,  2229,  2234,  2239,  2244,  2249,  2254,
-    2259,  2264,  2269,  2274,  2279,  2284,  2289,  2294,  2299,  2304,
-    2309,  2314,  2319,  2324,  2329,  2334,  2339,  2344,  2349,  2354,
-    2359,  2364,  2370,  2376,  2382,  2388,  2394,  2400,  2406,  2411,
-    2427,  2432,  2437,  2445,  2445,  2456,  2456,  2466,  2469,  2482,
-    2500,  2524,  2528,  2534,  2539,  2550,  2553,  2559,  2568,  2571,
-    2577,  2581,  2582,  2588,  2589,  2590,  2591,  2592,  2593,  2594,
-    2598,  2599,  2603,  2599,  2615,  2616,  2620,  2620,  2627,  2627,
-    2641,  2644,  2652,  2660,  2671,  2672,  2676,  2683,  2687,  2695,
-    2699,  2712,  2712,  2732,  2735,  2741,  2753,  2765,  2765,  2780,
-    2780,  2796,  2796,  2817,  2820,  2826,  2829,  2835,  2839,  2846,
-    2851,  2856,  2863,  2866,  2875,  2879,  2888,  2891,  2894,  2902,
-    2902
+       0,   273,   273,   279,   282,   286,   290,   293,   297,   301,
+     305,   309,   313,   316,   320,   324,   327,   335,   338,   341,
+     344,   347,   352,   360,   367,   374,   380,   384,   391,   394,
+     400,   407,   417,   425,   430,   460,   466,   470,   474,   494,
+     495,   496,   497,   503,   504,   509,   514,   523,   524,   529,
+     537,   538,   544,   553,   554,   559,   564,   569,   577,   578,
+     586,   597,   598,   607,   608,   617,   618,   627,   628,   636,
+     637,   645,   646,   654,   655,   655,   673,   674,   689,   693,
+     697,   701,   706,   710,   714,   718,   722,   726,   730,   737,
+     740,   751,   758,   763,   768,   776,   780,   784,   788,   793,
+     798,   807,   807,   818,   822,   829,   836,   839,   846,   854,
+     874,   897,   912,   935,   946,   956,   966,   976,   985,   988,
+     992,   996,  1001,  1009,  1014,  1019,  1024,  1029,  1038,  1049,
+    1076,  1085,  1092,  1099,  1106,  1118,  1124,  1127,  1134,  1138,
+    1142,  1150,  1159,  1162,  1173,  1176,  1179,  1183,  1187,  1191,
+    1198,  1202,  1214,  1228,  1233,  1239,  1245,  1252,  1258,  1263,
+    1268,  1273,  1281,  1285,  1289,  1293,  1297,  1301,  1307,  1316,
+    1319,  1327,  1331,  1340,  1345,  1353,  1357,  1367,  1371,  1375,
+    1380,  1385,  1390,  1395,  1399,  1404,  1409,  1414,  1419,  1424,
+    1429,  1434,  1439,  1444,  1448,  1453,  1458,  1463,  1469,  1475,
+    1481,  1487,  1493,  1499,  1505,  1511,  1517,  1523,  1529,  1535,
+    1540,  1545,  1550,  1555,  1560,  1565,  1571,  1577,  1583,  1589,
+    1595,  1601,  1607,  1613,  1619,  1625,  1631,  1637,  1643,  1649,
+    1655,  1661,  1667,  1673,  1679,  1685,  1691,  1697,  1703,  1709,
+    1715,  1721,  1727,  1732,  1737,  1742,  1747,  1752,  1757,  1762,
+    1767,  1772,  1777,  1782,  1787,  1793,  1799,  1805,  1811,  1817,
+    1823,  1829,  1835,  1841,  1847,  1853,  1859,  1865,  1871,  1877,
+    1883,  1889,  1895,  1901,  1907,  1913,  1919,  1925,  1931,  1937,
+    1943,  1949,  1955,  1961,  1967,  1973,  1979,  1985,  1991,  1997,
+    2003,  2009,  2015,  2021,  2027,  2033,  2039,  2045,  2051,  2057,
+    2063,  2069,  2075,  2080,  2085,  2090,  2095,  2100,  2105,  2110,
+    2115,  2120,  2125,  2130,  2135,  2140,  2145,  2150,  2155,  2160,
+    2165,  2170,  2175,  2180,  2185,  2190,  2195,  2200,  2205,  2210,
+    2215,  2220,  2225,  2230,  2235,  2240,  2245,  2250,  2255,  2260,
+    2265,  2270,  2275,  2280,  2285,  2290,  2295,  2300,  2305,  2310,
+    2315,  2320,  2325,  2330,  2335,  2340,  2345,  2350,  2355,  2360,
+    2365,  2370,  2375,  2380,  2385,  2390,  2395,  2400,  2405,  2410,
+    2415,  2420,  2425,  2430,  2435,  2440,  2445,  2450,  2455,  2460,
+    2465,  2470,  2475,  2480,  2485,  2490,  2495,  2500,  2505,  2510,
+    2515,  2520,  2525,  2530,  2535,  2540,  2545,  2550,  2555,  2560,
+    2565,  2570,  2575,  2580,  2585,  2590,  2595,  2600,  2605,  2610,
+    2615,  2620,  2626,  2632,  2638,  2644,  2650,  2656,  2662,  2667,
+    2683,  2688,  2693,  2701,  2701,  2712,  2712,  2722,  2725,  2738,
+    2756,  2780,  2784,  2790,  2795,  2806,  2809,  2815,  2824,  2827,
+    2833,  2837,  2838,  2844,  2845,  2846,  2847,  2848,  2849,  2850,
+    2854,  2855,  2859,  2855,  2871,  2872,  2876,  2876,  2883,  2883,
+    2897,  2900,  2908,  2916,  2927,  2928,  2932,  2939,  2943,  2951,
+    2955,  2968,  2968,  2988,  2991,  2997,  3009,  3021,  3021,  3036,
+    3036,  3052,  3052,  3073,  3076,  3082,  3085,  3091,  3095,  3102,
+    3107,  3112,  3119,  3122,  3131,  3135,  3144,  3147,  3150,  3158,
+    3158
 };
 #endif
 
@@ -850,36 +910,45 @@
    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", "SAMPLER", "SAMPLERSHADOW",
-  "TEXTURE1D", "TEXTURE2D", "TEXTURE3D", "TEXTURECUBE", "TEXTURE1DARRAY",
+  "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", "SAMPLER", "SAMPLERSHADOW", "TEXTURE1D",
+  "TEXTURE2D", "TEXTURE3D", "TEXTURECUBE", "TEXTURE1DARRAY",
   "TEXTURE2DARRAY", "ITEXTURE1D", "ITEXTURE2D", "ITEXTURE3D",
   "ITEXTURECUBE", "ITEXTURE1DARRAY", "ITEXTURE2DARRAY", "UTEXTURE1D",
   "UTEXTURE2D", "UTEXTURE3D", "UTEXTURECUBE", "UTEXTURE1DARRAY",
@@ -897,21 +966,22 @@
   "IIMAGECUBEARRAY", "UIMAGECUBEARRAY", "IMAGE2DMS", "IIMAGE2DMS",
   "UIMAGE2DMS", "IMAGE2DMSARRAY", "IIMAGE2DMSARRAY", "UIMAGE2DMSARRAY",
   "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",
+  "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",
@@ -979,16 +1049,21 @@
      515,   516,   517,   518,   519,   520,   521,   522,   523,   524,
      525,   526,   527,   528,   529,   530,   531,   532,   533,   534,
      535,   536,   537,   538,   539,   540,   541,   542,   543,   544,
-     545,   546,   547,   548,   549,   550,   551,   552
+     545,   546,   547,   548,   549,   550,   551,   552,   553,   554,
+     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,
+     595,   596,   597,   598,   599,   600,   601,   602
 };
 # endif
 
-#define YYPACT_NINF -525
+#define YYPACT_NINF -448
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-525)))
+  (!!((Yystate) == (-448)))
 
-#define YYTABLE_NINF -407
+#define YYTABLE_NINF -457
 
 #define yytable_value_is_error(Yytable_value) \
   0
@@ -997,65 +1072,70 @@
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    2619,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -243,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -228,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -215,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -157,  -525,  -216,  -218,  -205,
-    -141,  4260,  -165,  -525,   -94,  -525,  -525,  -525,  -525,  3183,
-    -525,  -525,  -525,  -117,  -525,  -525,   575,  -525,  -525,   -80,
-     -48,  -114,  -525,  6381,  -242,  -525,  -525,  -113,  -525,  4260,
-    -525,  -525,  -525,  4260,   -75,   -74,  -525,  -235,  -190,  -525,
-    -525,  -525,  4765,  -108,  -525,  -525,  -525,  -186,  -525,  -112,
-    -178,  -525,  -525,  4260,  -115,  -525,  -226,   867,  -525,  -525,
-    -525,  -525,  -117,  -229,  -525,  5039,  -224,  -525,   -71,  -525,
-    -158,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  5861,  5861,  5861,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -223,  -525,  -525,  -525,  -102,  -177,  6121,  -100,
-    -525,  5861,  -204,  -171,  -132,  -221,  -199,  -124,  -120,  -111,
-     -84,   -83,  -233,   -98,  -525,  5313,  -525,   -60,  5861,  -525,
-     -48,  4260,  4260,   -59,  3456,  -525,  -525,  -525,   -99,   -97,
-    -525,   -90,   -88,   -96,  5587,   -85,  5861,   -92,   -79,   -81,
-    -525,  -525,  -191,  -525,  -525,  -153,  -525,  -218,   -78,  -525,
-    -525,  -525,  -525,  1159,  -525,  -525,  -525,  -525,  -525,  -525,
-    -108,  5039,  -193,  5039,  -525,  -525,  5039,  4260,  -525,   -47,
-    -525,  -525,  -525,  -176,  -525,  -525,  5861,   -42,  -525,  -525,
-    5861,   -73,  -525,  -525,  -525,  5861,  5861,  5861,  5861,  5861,
-    5861,  5861,  5861,  5861,  5861,  5861,  5861,  5861,  5861,  5861,
-    5861,  5861,  5861,  5861,  -525,  -525,  -525,   -76,  -525,  -525,
-    -525,  -525,  3724,   -59,  -117,  -152,  -525,  -525,  -525,  -525,
-    -525,  1451,  -525,  5861,  -525,  -525,  -143,  5861,  -180,  -525,
-    -525,  -525,  1451,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  5861,  5861,  -525,  -525,  -525,  -525,
-    5039,  -525,  -133,  -525,  3992,  -525,  -525,   -72,   -77,  -525,
-    -525,  -525,  -525,  -525,  -204,  -204,  -171,  -171,  -132,  -132,
-    -132,  -132,  -221,  -221,  -199,  -124,  -120,  -111,   -84,   -83,
-    5861,  -525,  -525,  -142,  -108,   -59,  -525,   -37,  2327,  -175,
-    -525,  -163,  -525,  2892,  1451,  -525,  -525,  -525,  -525,  4491,
-    -525,  -525,  -129,  -525,  -525,   -68,  -525,  -525,  2892,   -70,
-    -525,   -77,   -32,  4260,   -63,   -66,  -525,  -525,  5861,  5861,
-    -525,   -69,   -61,   188,   -58,  2035,  -525,   -56,   -57,  1743,
-    -525,  -525,  -161,  5861,  1743,   -70,  -525,  -525,  1451,  5039,
-    -525,  -525,  -525,   -67,   -77,  -525,  -525,  1451,   -54,  -525,
-    -525,  -525
+      -1,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
+    -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
+    -286,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
+    -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
+    -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
+    -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
+    -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
+    -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
+    -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
+    -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
+    -448,    51,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
+    -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
+    -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
+    -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
+    -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
+    -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
+    -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
+    -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
+    -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
+    -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
+    -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
+    -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
+    -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
+    -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
+    -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
+    -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
+    -448,  -448,  -448,  -448,    13,  -448,  -448,  -448,  -448,  -448,
+    -448,  -448,  -448,    98,  -448,    12,    43,    61,    57,  4724,
+      24,  -448,   101,  -448,  -448,  -448,  -448,  3360,  -448,  -448,
+    -448,    71,  -448,  -448,   625,  -448,  -448,   120,   202,   105,
+    -448,  7309,    27,  -448,  -448,   126,  -448,  4724,  -448,  -448,
+    -448,  4724,   130,   132,  -448,  -293,    64,  -448,  -448,  -448,
+    5359,   129,  -448,  -448,  -448,    68,  -448,   124,    75,  -448,
+    -448,  4724,   125,  -448,    53,   967,  -448,  -448,  -448,  -448,
+      71,  -294,  -448,  5684,     4,  -448,   171,  -448,    95,  -448,
+    -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
+    -448,  -448,  6659,  6659,  6659,  -448,  -448,  -448,  -448,  -448,
+    -448,  -448,    54,  -448,  -448,  -448,   136,    76,  6984,   138,
+    -448,  6659,   112,   -21,    28,    14,    26,   117,   119,   121,
+     155,   154,   -13,   141,  -448,  6009,  -448,   180,  6659,  -448,
+     202,  4724,  4724,   181,  3701,  -448,  -448,  -448,   137,   140,
+    -448,   151,   152,   143,  6334,   156,  6659,   147,   157,   153,
+    -448,  -448,    49,  -448,  -448,    96,  -448,    43,   159,  -448,
+    -448,  -448,  -448,  1309,  -448,  -448,  -448,  -448,  -448,  -448,
+     129,  5684,    48,  5684,  -448,  -448,  5684,  4724,  -448,   195,
+    -448,  -448,  -448,    89,  -448,  -448,  6659,   197,  -448,  -448,
+    6659,   162,  -448,  -448,  -448,  6659,  6659,  6659,  6659,  6659,
+    6659,  6659,  6659,  6659,  6659,  6659,  6659,  6659,  6659,  6659,
+    6659,  6659,  6659,  6659,  -448,  -448,  -448,   163,  -448,  -448,
+    -448,  -448,  4042,   181,    71,    97,  -448,  -448,  -448,  -448,
+    -448,  1651,  -448,  6659,  -448,  -448,   103,  6659,   -26,  -448,
+    -448,  -448,  1651,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
+    -448,  -448,  -448,  -448,  6659,  6659,  -448,  -448,  -448,  -448,
+    5684,  -448,    -4,  -448,  4383,  -448,  -448,   166,   164,  -448,
+    -448,  -448,  -448,  -448,   112,   112,   -21,   -21,    28,    28,
+      28,    28,    14,    14,    26,   117,   119,   121,   155,   154,
+    6659,  -448,  -448,   107,   129,   181,  -448,   206,  2677,    91,
+    -448,    92,  -448,  3019,  1651,  -448,  -448,  -448,  -448,  5034,
+    -448,  -448,    73,  -448,  -448,   172,  -448,  -448,  3019,   169,
+    -448,   164,   209,  4724,   174,   175,  -448,  -448,  6659,  6659,
+    -448,   173,   183,   466,   177,  2335,  -448,   178,   176,  1993,
+    -448,  -448,    93,  6659,  1993,   169,  -448,  -448,  1651,  5684,
+    -448,  -448,  -448,   179,   164,  -448,  -448,  1651,   182,  -448,
+    -448,  -448
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1063,95 +1143,100 @@
      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,   266,   267,   268,   269,   270,   271,   273,   274,
-     275,   276,   277,   278,   280,   281,   282,   283,   284,   285,
-     286,   264,   265,   272,   279,   287,   288,   289,   290,   291,
-     292,   361,   293,   294,   295,   296,   297,   298,   299,   300,
-     302,   303,   304,   305,   306,   307,   309,   310,   311,   312,
-     313,   314,   316,   317,   318,   319,   320,   321,   301,   308,
-     315,   322,   323,   324,   325,   326,   327,   362,   363,   364,
-     365,   366,   367,   328,   329,   330,   331,   332,   333,   334,
-     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,     0,   175,   369,   448,
-     128,   139,   370,   371,   372,     0,   447,     0,   449,     0,
-     105,   104,     0,   116,   121,   146,   145,   143,   147,     0,
-     140,   142,   126,   169,   144,   368,     0,   444,   446,     0,
-       0,     0,   375,     0,     0,    93,    90,     0,   103,     0,
-     112,   106,   114,     0,   115,     0,    91,   122,     0,    96,
-     141,   127,     0,   170,     1,   445,   167,     0,   138,   136,
-       0,   134,   373,     0,     0,    94,     0,     0,   450,   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,   377,    92,    95,     0,     0,
-     429,     0,     0,     0,     0,     0,     0,     0,     0,   401,
-     410,   414,    41,    74,    87,     0,   390,     0,   126,   393,
-     412,   392,   391,     0,   394,   395,   396,   397,   398,   399,
-     110,     0,   118,     0,   385,   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,   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,
+     316,   317,   318,   319,   320,   321,   323,   324,   325,   326,
+     327,   328,   330,   331,   332,   333,   334,   335,   336,   314,
+     315,   322,   329,   337,   338,   339,   340,   341,   342,   411,
+     343,   344,   345,   346,   347,   348,   349,   350,   352,   353,
+     354,   355,   356,   357,   359,   360,   361,   362,   363,   364,
+     366,   367,   368,   369,   370,   371,   351,   358,   365,   372,
+     373,   374,   375,   376,   377,   412,   413,   414,   415,   416,
+     417,   378,   379,   380,   381,   382,   383,   384,   385,   386,
+     387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
+     397,   398,   399,   400,   401,   402,   403,   404,   405,   406,
+     407,   408,   409,   410,     0,   177,   419,   498,   130,   141,
+     420,   421,   422,     0,   497,     0,   499,     0,   107,   106,
+       0,   118,   123,   148,   147,   145,   149,     0,   142,   144,
+     128,   171,   146,   418,     0,   494,   496,     0,     0,     0,
+     425,     0,     0,    95,    92,     0,   105,     0,   114,   108,
+     116,     0,   117,     0,    93,   124,     0,    98,   143,   129,
+       0,   172,     1,   495,   169,     0,   140,   138,     0,   136,
+     423,     0,     0,    96,     0,     0,   500,   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,   427,    94,    97,     0,     0,
+     479,     0,     0,     0,     0,     0,     0,     0,     0,   451,
+     460,   464,    43,    76,    89,     0,   440,     0,   128,   443,
+     462,   442,   441,     0,   444,   445,   446,   447,   448,   449,
+     112,     0,   120,     0,   435,   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,   383,     0,   381,   376,   378,   440,
-     439,     0,   431,     0,   443,   441,     0,     0,     0,   426,
-     427,   400,     0,    77,    78,    80,    79,    82,    83,    84,
-      85,    86,    81,    76,     0,     0,   415,   411,   413,   120,
-       0,   388,     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,   374,     0,   384,     0,   379,     0,     0,     0,
-     442,     0,   425,     0,   402,    75,    88,   119,   386,     0,
-     100,    16,     0,   380,   382,     0,   434,   433,   436,   408,
-     421,   419,     0,     0,     0,     0,   387,   389,     0,     0,
-     435,     0,     0,   418,     0,     0,   416,     0,     0,     0,
-     403,    73,     0,   437,     0,   408,   407,   409,   423,     0,
-     405,   428,   404,     0,   438,   432,   417,   424,     0,   420,
-     430,   422
+       0,     0,     0,     0,    74,   174,   175,     0,   170,    91,
+     139,   137,     0,     0,   433,     0,   431,   426,   428,   490,
+     489,     0,   481,     0,   493,   491,     0,     0,     0,   476,
+     477,   450,     0,    79,    80,    82,    81,    84,    85,    86,
+      87,    88,    83,    78,     0,     0,   465,   461,   463,   122,
+       0,   438,     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,   424,     0,   434,     0,   429,     0,     0,     0,
+     492,     0,   475,     0,   452,    77,    90,   121,   436,     0,
+     102,    18,     0,   430,   432,     0,   484,   483,   486,   458,
+     471,   469,     0,     0,     0,     0,   437,   439,     0,     0,
+     485,     0,     0,   468,     0,     0,   466,     0,     0,     0,
+     453,    75,     0,   487,     0,   458,   457,   459,   473,     0,
+     455,   478,   454,     0,   488,   482,   467,   474,     0,   470,
+     480,   472
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -103,  -525,  -278,  -274,  -297,  -273,  -214,  -211,
-    -210,  -212,  -209,  -208,  -525,  -261,  -525,  -292,  -525,  -308,
-    -525,     4,  -525,  -525,  -525,     5,  -525,  -525,  -525,   -41,
-     -38,   -39,  -525,  -525,  -504,  -525,  -525,  -525,  -525,  -123,
-    -525,  -230,  -237,  -525,  -525,     0,  -246,  -525,     1,  -525,
-    -525,  -525,  -337,  -342,  -207,  -286,  -378,  -525,  -285,  -376,
-    -524,  -322,  -525,  -525,  -330,  -327,  -525,  -525,   -22,  -452,
-    -275,  -525,  -525,  -298,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,    -2,  -525,  -525
+    -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
+    -448,  -448,  7268,  -448,   -38,   -36,  -447,   -39,    25,    30,
+      31,    29,    23,    32,  -448,   -31,  -448,   -61,  -448,   -80,
+    -448,     1,  -448,  -448,  -448,    21,  -448,  -448,  -448,   196,
+     199,   203,  -448,  -448,  -268,  -448,  -448,  -448,  -448,   113,
+    -448,     2,    -9,  -448,  -448,     0,   -11,  -448,   243,  -448,
+    -448,  -448,  -102,  -118,    33,   -48,  -143,  -448,   -47,  -148,
+    -295,   -84,  -448,  -448,   -92,   -91,  -448,  -448,   218,  -224,
+     -43,  -448,  -448,   -60,  -448,  -448,  -448,  -448,  -448,  -448,
+    -448,  -448,  -448,  -448,  -448,  -448,  -448,   233,  -448,  -448
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   320,   321,   322,   487,   323,   324,   325,   326,   327,
-     328,   329,   372,   331,   332,   333,   334,   335,   336,   337,
-     338,   339,   340,   341,   342,   373,   510,   374,   474,   375,
-     440,   376,   227,   397,   300,   377,   229,   230,   231,   260,
-     261,   262,   232,   233,   234,   235,   236,   237,   280,   281,
-     238,   239,   240,   241,   277,   344,   273,   243,   244,   245,
-     351,   283,   354,   355,   445,   446,   395,   482,   379,   380,
-     381,   382,   462,   545,   571,   553,   554,   555,   572,   383,
-     384,   385,   556,   544,   386,   557,   578,   387,   388,   523,
-     451,   518,   538,   551,   552,   389,   246,   247,   248,   257
+      -1,   370,   371,   372,   537,   373,   374,   375,   376,   377,
+     378,   379,   422,   381,   382,   383,   384,   385,   386,   387,
+     388,   389,   390,   391,   392,   423,   560,   424,   524,   425,
+     490,   426,   275,   447,   348,   427,   277,   278,   279,   308,
+     309,   310,   280,   281,   282,   283,   284,   285,   328,   329,
+     286,   287,   288,   289,   325,   394,   321,   291,   292,   293,
+     401,   331,   404,   405,   495,   496,   445,   532,   429,   430,
+     431,   432,   512,   595,   621,   603,   604,   605,   622,   433,
+     434,   435,   606,   594,   436,   607,   628,   437,   438,   573,
+     501,   568,   588,   601,   602,   439,   294,   295,   296,   305
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -1159,126 +1244,10 @@
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-     242,   263,   270,   394,   226,   228,   403,   478,   286,   278,
-     524,   343,   448,   479,   442,   481,   254,   251,   483,   542,
-     433,   296,   249,   404,   405,   272,   270,   422,   423,   263,
-     294,   567,   272,   285,   542,   570,   412,   250,   272,   295,
-     570,   345,   -32,   345,   406,   391,   390,   392,   407,   357,
-     396,   426,   427,   352,   252,   434,   456,   256,   458,   255,
-     484,   258,   424,   425,   463,   464,   465,   466,   467,   468,
-     469,   470,   471,   472,   345,   517,   415,   416,   417,   297,
-     346,   480,   298,   473,   437,   299,   347,   439,   349,   409,
-     486,   539,   475,   522,   350,   410,   475,   475,   488,   394,
-     448,   394,   527,   540,   394,   573,   418,   265,   419,   475,
-     266,   475,   420,   421,   399,   270,   577,   400,   490,   475,
-     515,   352,   476,   516,   352,   498,   499,   500,   501,   475,
-     515,   259,   520,   533,   222,   223,   224,   528,   267,   529,
-     494,   495,   448,   475,   548,   519,   496,   497,   478,   521,
-     272,   547,   276,   502,   503,   282,   287,   292,   293,   345,
-     356,   398,   348,   428,   408,   413,   429,   352,   431,   330,
-     435,   432,   438,   444,   430,   452,   449,   453,   450,   454,
-     457,   459,   525,   526,   279,   485,   460,   -31,   394,   461,
-     489,   579,   511,   -26,   535,   475,   531,   549,   514,  -406,
-     558,   478,   532,   559,   560,   564,   563,   565,   580,   401,
-     402,   369,   352,   568,   504,   541,   581,   569,   505,   507,
-     506,   289,   290,   508,   291,   509,   253,   441,   414,   534,
-     541,   264,   566,   536,   575,   288,   513,   394,   576,   271,
-     550,   562,   330,   537,   275,   330,   242,     0,     0,     0,
-     226,   228,     0,   284,   352,   574,   561,     0,     0,   264,
-       0,     0,     0,   264,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   394,     0,     0,
-       0,     0,     0,   353,     0,     0,     0,   378,     0,     0,
-       0,     0,     0,   543,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   270,     0,   543,     0,
-       0,     0,   491,   492,   493,   330,   330,   330,   330,   330,
-     330,   330,   330,   330,   330,   330,   330,   330,   330,   330,
-     330,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   353,   443,     0,   353,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   378,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   353,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   353,     0,     0,     0,     0,     0,     0,     0,
-       0,   378,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   378,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   353,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   378,     0,
-       0,     0,     0,   378,   378,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   378,     0,
-       0,     0,     0,   271,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   378,     0,     0,     0,   378,
-       0,     0,     0,     0,   378,     0,     0,     0,   378,     0,
-       0,     0,     0,     0,     0,   274,     0,   378,     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,     0,     0,   218,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     219,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   220,   221,   222,   223,   224,   225,
-       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,   358,   359,   360,     0,   361,   362,   363,
-     364,   365,   366,   367,    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,   368,   301,
-     218,   302,   303,   304,   305,   306,   307,   308,   309,   310,
-     311,     0,     0,   312,   313,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   314,     0,     0,     0,   369,   370,     0,     0,
-       0,     0,   371,   316,   317,   318,   319,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   220,   221,   222,   223,
-     224,   225,     1,     2,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,   358,   359,   360,     0,   361,
-     362,   363,   364,   365,   366,   367,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+     290,   274,     1,     2,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,   276,   342,   320,   320,   548,   549,   550,   551,   297,
+     441,   343,    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,
@@ -1298,16 +1267,152 @@
      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,
-     368,   301,   218,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,     0,     0,   312,   313,     0,     0,     0,
+     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,   318,   312,
+     266,   311,   444,   326,   453,   528,   498,   319,   574,   393,
+     483,   334,   302,   299,   290,   274,   525,   572,   529,   492,
+     531,   332,   318,   533,   344,   592,   468,   312,   469,   311,
+     617,   312,   472,   473,   620,   276,   578,   462,   579,   620,
+     592,   395,   470,   471,   267,   484,   476,   477,   446,   440,
+     442,   403,   300,   402,   506,   428,   508,   303,   268,   269,
+     270,   271,   272,   273,   320,   534,   313,   474,   475,   314,
+     454,   455,   333,   567,   513,   514,   515,   516,   517,   518,
+     519,   520,   521,   522,   487,   395,   298,   489,   304,   -34,
+     395,   456,   530,   523,   498,   457,   538,   306,   407,   307,
+     444,   315,   444,   345,   396,   444,   346,   577,   320,   347,
+     397,   399,   459,   318,   627,   525,   598,   400,   460,   540,
+     324,   403,   493,   402,   403,   536,   402,   589,   590,   623,
+     340,   525,   341,   525,   525,   525,   498,   449,   525,   565,
+     450,   526,   566,   569,   330,   525,   528,   571,   570,   565,
+     544,   545,   583,   428,   546,   547,   597,   552,   553,   270,
+     271,   272,   465,   466,   467,   335,   395,   403,   398,   402,
+     406,   448,   458,   463,   478,   479,   480,   481,   482,   485,
+     488,   494,   499,   575,   576,   500,   502,   503,   504,   444,
+     509,   507,   510,   511,   -33,   535,   629,   539,   -28,   528,
+     582,   561,   327,   564,   581,   585,   525,   599,  -456,   608,
+     609,   615,   403,   591,   402,   610,   419,   618,   613,   614,
+     619,   428,   631,   554,   630,   558,   337,   338,   591,   555,
+     557,   556,   428,   491,   339,   559,   301,   584,   444,   612,
+     616,   586,   625,   336,   626,   587,   563,   323,   600,     0,
+       0,     0,     0,   624,   403,     0,   402,   611,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   314,     0,     0,     0,   369,   477,
-       0,     0,     0,     0,   371,   316,   317,   318,   319,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   220,   221,
-     222,   223,   224,   225,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,   358,   359,   360,
-       0,   361,   362,   363,   364,   365,   366,   367,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+       0,     0,     0,     0,     0,     0,     0,     0,   444,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   428,     0,
+       0,     0,     0,   428,   428,   593,     0,     0,     0,     0,
+       0,     0,     0,     0,   318,     0,     0,     0,   428,     0,
+     593,     0,     0,   319,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   428,     0,     0,     0,   428,
+       0,     0,     0,     0,   428,     0,     0,     0,   428,     0,
+       0,     0,     0,     0,     0,   322,     0,   428,     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,     0,     0,   266,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     267,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   268,   269,   270,   271,   272,   273,
+       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,   408,
+     409,   410,     0,   411,   412,   413,   414,   415,   416,   417,
+      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,   418,   349,   266,   350,
+     351,   352,   353,   354,   355,   356,   357,   358,   359,   360,
+     361,     0,     0,   362,   363,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   364,     0,     0,     0,   419,   420,     0,     0,
+       0,     0,   421,   366,   367,   368,   369,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   268,   269,   270,   271,
+     272,   273,     1,     2,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,   408,   409,   410,     0,   411,   412,   413,   414,   415,
+     416,   417,    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,   418,   349,
+     266,   350,   351,   352,   353,   354,   355,   356,   357,   358,
+     359,   360,   361,     0,     0,   362,   363,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   364,     0,     0,     0,   419,   527,
+       0,     0,     0,     0,   421,   366,   367,   368,   369,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   268,   269,
+     270,   271,   272,   273,     1,     2,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,   408,   409,   410,     0,   411,   412,   413,
+     414,   415,   416,   417,    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,
@@ -1327,16 +1432,21 @@
      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,   368,   301,   218,   302,   303,   304,   305,   306,
-     307,   308,   309,   310,   311,     0,     0,   312,   313,     0,
+     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,
+     418,   349,   266,   350,   351,   352,   353,   354,   355,   356,
+     357,   358,   359,   360,   361,     0,     0,   362,   363,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   314,     0,     0,     0,
-     369,     0,     0,     0,     0,     0,   371,   316,   317,   318,
-     319,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     220,   221,   222,   223,   224,   225,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,   358,
-     359,   360,     0,   361,   362,   363,   364,   365,   366,   367,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+       0,     0,     0,     0,     0,     0,   364,     0,     0,     0,
+     419,     0,     0,     0,     0,     0,   421,   366,   367,   368,
+     369,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     268,   269,   270,   271,   272,   273,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,   408,   409,   410,     0,   411,
+     412,   413,   414,   415,   416,   417,    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,
@@ -1356,16 +1466,21 @@
      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,   368,   301,   218,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,     0,     0,   312,
-     313,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   314,     0,
-       0,     0,   287,     0,     0,     0,     0,     0,   371,   316,
-     317,   318,   319,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   220,   221,   222,   223,   224,   225,     1,     2,
+     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,   418,   349,   266,   350,   351,   352,   353,   354,
+     355,   356,   357,   358,   359,   360,   361,     0,     0,   362,
+     363,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   364,     0,
+       0,     0,   335,     0,     0,     0,     0,     0,   421,   366,
+     367,   368,   369,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   268,   269,   270,   271,   272,   273,     1,     2,
        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,   358,   359,   360,     0,   361,   362,   363,   364,   365,
-     366,   367,    14,    15,    16,    17,    18,    19,    20,    21,
+      13,    14,    15,    16,    17,    18,    19,   408,   409,   410,
+       0,   411,   412,   413,   414,   415,   416,   417,    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,
@@ -1385,16 +1500,21 @@
      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,   368,   301,   218,   302,
-     303,   304,   305,   306,   307,   308,   309,   310,   311,     0,
-       0,   312,   313,     0,     0,     0,     0,     0,     0,     0,
+     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,   418,   349,   266,   350,   351,   352,
+     353,   354,   355,   356,   357,   358,   359,   360,   361,     0,
+       0,   362,   363,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     314,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     371,   316,   317,   318,   319,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   220,   221,   222,   223,   224,   225,
+     364,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     421,   366,   367,   368,   369,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   268,   269,   270,   271,   272,   273,
        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,
+      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,
@@ -1414,17 +1534,22 @@
      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,     0,   301,
-     218,   302,   303,   304,   305,   306,   307,   308,   309,   310,
-     311,     0,     0,   312,   313,     0,     0,     0,     0,     0,
+     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,     0,   349,   266,   350,
+     351,   352,   353,   354,   355,   356,   357,   358,   359,   360,
+     361,     0,     0,   362,   363,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   314,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   371,   316,   317,   318,   319,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   220,   221,   222,   223,
-     224,   225,     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,
+       0,     0,   364,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   421,   366,   367,   368,   369,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   268,   269,   270,   271,
+     272,   273,     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,
@@ -1444,151 +1569,21 @@
      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,
-       0,     0,   218,     0,     0,     0,     0,     0,     0,     0,
+     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,     0,   349,
+     266,   350,   351,   352,   353,   354,   355,   356,   357,   358,
+     359,   360,   361,     0,     0,   362,   363,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   219,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,   220,   221,
-     222,   223,   224,   225,     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,     0,   301,   218,   302,   303,   304,   305,
-     306,   307,   308,   309,   310,   311,     0,     0,   312,   313,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   314,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   316,   317,
-     318,   319,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   220,   221,   222,   223,   224,     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,     0,   268,   218,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   269,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,   220,   221,   222,   223,   224,     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,     0,     0,   218,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   447,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-       0,     0,     0,     0,     0,   220,   221,   222,   223,   224,
-       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,     0,     0,   218,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   512,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,     0,     0,
-       0,     0,     0,   220,   221,   222,   223,   224,     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,     0,     0,   218,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   530,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,     0,     0,     0,     0,
-       0,   220,   221,   222,   223,   224,     0,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+       0,     0,     0,     0,   364,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   366,   367,   368,   369,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   268,   269,
+     270,   271,   272,     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,
@@ -1608,15 +1603,26 @@
      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,     0,     0,   218,     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,
+     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,     0,
+     316,   266,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   317,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   268,
+     269,   270,   271,   272,     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,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   220,
-     221,   222,   223,   224,    50,    51,    52,    53,    54,    55,
+      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,     0,     0,     0,     0,     0,    73,    74,    75,
+      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,
@@ -1631,261 +1637,22 @@
      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,     0,   301,   218,   302,   303,   304,   305,   306,
-     307,   308,   309,   310,   311,     0,     0,   312,   313,     0,
+     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,
+       0,     0,   266,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   314,     0,     0,     0,
-     393,   546,     0,     0,     0,     0,     0,   316,   317,   318,
-     319,     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,     0,   301,   218,   302,
-     303,   304,   305,   306,   307,   308,   309,   310,   311,     0,
-       0,   312,   313,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     314,     0,     0,   315,     0,     0,     0,     0,     0,     0,
-       0,   316,   317,   318,   319,     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,
-       0,   301,   218,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,     0,     0,   312,   313,     0,     0,     0,
+       0,   497,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   314,     0,     0,     0,   393,     0,
-       0,     0,     0,     0,     0,   316,   317,   318,   319,     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,     0,   301,   218,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,     0,     0,   312,
-     313,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   314,     0,
-       0,   436,     0,     0,     0,     0,     0,     0,     0,   316,
-     317,   318,   319,     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,     0,   301,
-     218,   302,   303,   304,   305,   306,   307,   308,   309,   310,
-     311,     0,     0,   312,   313,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   314,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   455,   316,   317,   318,   319,     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,     0,   301,   218,   302,   303,   304,   305,   306,
-     307,   308,   309,   310,   311,     0,     0,   312,   313,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   314,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,   316,   317,   318,
-     319,     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,   411,     0,   301,   218,   302,   303,   304,   305,   306,
-     307,   308,   309,   310,   311,     0,     0,   312,   313,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   314,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,   316,   317,   318,
-     319,     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,     0,     0,   218
-};
-
-static const yytype_int16 yycheck[] =
-{
-       0,   231,   239,   295,     0,     0,   314,   383,   254,    57,
-     462,   272,   354,   391,   351,   393,   232,   232,   396,   523,
-     253,   267,   265,   246,   247,   267,   263,   248,   249,   259,
-     265,   555,   267,   275,   538,   559,   328,   265,   267,   274,
-     564,   267,   265,   267,   267,   274,   292,   293,   271,   275,
-     274,   250,   251,   283,   269,   288,   364,   275,   366,   275,
-     397,   266,   283,   284,   255,   256,   257,   258,   259,   260,
-     261,   262,   263,   264,   267,   451,   280,   281,   282,   269,
-     266,   274,   272,   274,   345,   275,   272,   348,   266,   266,
-     266,   266,   272,   273,   272,   272,   272,   272,   406,   391,
-     442,   393,   480,   266,   396,   266,   277,   272,   279,   272,
-     275,   272,   244,   245,   272,   352,   568,   275,   410,   272,
-     272,   351,   275,   275,   354,   422,   423,   424,   425,   272,
-     272,   272,   275,   275,   291,   292,   293,   270,   232,   272,
-     418,   419,   484,   272,   273,   453,   420,   421,   524,   457,
-     267,   529,   232,   426,   427,   269,   269,   232,   232,   267,
-     275,   232,   274,   287,   266,   265,   286,   397,   252,   272,
-     268,   254,   232,   232,   285,   265,   275,   265,   275,   275,
-     265,   273,   474,   475,   232,   232,   265,   265,   480,   270,
-     232,   569,   268,   266,   231,   272,   268,   265,   444,   269,
-     232,   577,   510,   266,   270,   266,   275,    19,   275,   312,
-     313,   269,   442,   269,   428,   523,   270,   274,   429,   431,
-     430,   259,   263,   432,   263,   433,   225,   350,   331,   515,
-     538,   231,   554,   518,   564,   257,   443,   529,   565,   239,
-     538,   549,   345,   518,   246,   348,   246,    -1,    -1,    -1,
-     246,   246,    -1,   253,   484,   563,   548,    -1,    -1,   259,
-      -1,    -1,    -1,   263,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   569,    -1,    -1,
-      -1,    -1,    -1,   283,    -1,    -1,    -1,   287,    -1,    -1,
-      -1,    -1,    -1,   523,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   543,    -1,   538,    -1,
-      -1,    -1,   415,   416,   417,   418,   419,   420,   421,   422,
-     423,   424,   425,   426,   427,   428,   429,   430,   431,   432,
-     433,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   351,   352,    -1,   354,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   383,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   397,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   442,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   451,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   462,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   484,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   518,    -1,
-      -1,    -1,    -1,   523,   524,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   538,    -1,
-      -1,    -1,    -1,   543,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   555,    -1,    -1,    -1,   559,
-      -1,    -1,    -1,    -1,   564,    -1,    -1,    -1,   568,    -1,
-      -1,    -1,    -1,    -1,    -1,     0,    -1,   577,     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,
+     268,   269,   270,   271,   272,     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,
@@ -1905,15 +1672,54 @@
      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,    -1,    -1,   233,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     275,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   289,   290,   291,   292,   293,   294,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    -1,    20,    21,    22,
+     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,     0,     0,   266,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   562,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   268,   269,   270,   271,   272,     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,     0,     0,   266,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   580,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   268,   269,   270,   271,   272,     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,
@@ -1936,14 +1742,422 @@
      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,    -1,    -1,   246,   247,    -1,    -1,    -1,    -1,    -1,
+     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
+     263,   264,   265,     0,     0,   266,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     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,   268,   269,   270,   271,   272,    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,     0,   349,   266,   350,   351,   352,   353,
+     354,   355,   356,   357,   358,   359,   360,   361,     0,     0,
+     362,   363,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   364,
+       0,     0,     0,   443,   596,     0,     0,     0,     0,     0,
+     366,   367,   368,   369,     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,     0,   349,
+     266,   350,   351,   352,   353,   354,   355,   356,   357,   358,
+     359,   360,   361,     0,     0,   362,   363,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   364,     0,     0,   365,     0,     0,
+       0,     0,     0,     0,     0,   366,   367,   368,   369,     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,     0,   349,   266,   350,   351,   352,   353,
+     354,   355,   356,   357,   358,   359,   360,   361,     0,     0,
+     362,   363,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   364,
+       0,     0,     0,   443,     0,     0,     0,     0,     0,     0,
+     366,   367,   368,   369,     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,     0,   349,
+     266,   350,   351,   352,   353,   354,   355,   356,   357,   358,
+     359,   360,   361,     0,     0,   362,   363,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   364,     0,     0,   486,     0,     0,
+       0,     0,     0,     0,     0,   366,   367,   368,   369,     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,     0,   349,   266,   350,   351,   352,   353,
+     354,   355,   356,   357,   358,   359,   360,   361,     0,     0,
+     362,   363,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   364,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   505,
+     366,   367,   368,   369,     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,     0,   349,
+     266,   350,   351,   352,   353,   354,   355,   356,   357,   358,
+     359,   360,   361,     0,     0,   362,   363,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   364,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   366,   367,   368,   369,     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,   461,     0,   349,   266,   350,   351,   352,   353,
+     354,   355,   356,   357,   358,   359,   360,   361,     0,     0,
+     362,   363,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   364,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     366,   367,   368,   369,     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,   380,     0,
+     266,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     451,   452,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   464,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   380,     0,     0,   380,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   541,   542,   543,   380,   380,   380,   380,
+     380,   380,   380,   380,   380,   380,   380,   380,   380,   380,
+     380,   380
+};
+
+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,   315,   317,   317,   472,   473,   474,   475,   315,
+     324,   324,    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,   287,   279,
+     281,   279,   343,    81,   364,   433,   404,   287,   512,   320,
+     303,   302,   280,   280,   294,   294,   322,   323,   441,   401,
+     443,   301,   311,   446,   315,   573,   327,   307,   329,   307,
+     605,   311,   298,   299,   609,   294,   320,   378,   322,   614,
+     588,   317,   294,   295,   325,   338,   300,   301,   324,   340,
+     341,   331,   319,   331,   414,   335,   416,   325,   339,   340,
+     341,   342,   343,   344,   317,   447,   322,   333,   334,   325,
+     296,   297,   325,   501,   305,   306,   307,   308,   309,   310,
+     311,   312,   313,   314,   395,   317,   315,   398,   325,   315,
+     317,   317,   324,   324,   492,   321,   456,   316,   325,   322,
+     441,   280,   443,   319,   316,   446,   322,   530,   317,   325,
+     322,   316,   316,   402,   618,   322,   323,   322,   322,   460,
+     280,   401,   402,   401,   404,   316,   404,   316,   316,   316,
+     280,   322,   280,   322,   322,   322,   534,   322,   322,   322,
+     325,   325,   325,   503,   319,   322,   574,   507,   325,   322,
+     468,   469,   325,   433,   470,   471,   579,   476,   477,   341,
+     342,   343,   330,   331,   332,   319,   317,   447,   324,   447,
+     325,   280,   316,   315,   337,   336,   335,   302,   304,   318,
+     280,   280,   325,   524,   525,   325,   315,   315,   325,   530,
+     323,   315,   315,   320,   315,   280,   619,   280,   316,   627,
+     560,   318,   280,   494,   318,   279,   322,   315,   319,   280,
+     316,    25,   492,   573,   492,   320,   319,   319,   325,   316,
+     324,   501,   320,   478,   325,   482,   307,   311,   588,   479,
+     481,   480,   512,   400,   311,   483,   273,   565,   579,   599,
+     604,   568,   614,   305,   615,   568,   493,   294,   588,    -1,
+      -1,    -1,    -1,   613,   534,    -1,   534,   598,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   265,    -1,    -1,    -1,   269,   270,    -1,    -1,
-      -1,    -1,   275,   276,   277,   278,   279,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   289,   290,   291,   292,
-     293,   294,     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,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   619,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   568,    -1,
+      -1,    -1,    -1,   573,   574,   573,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   593,    -1,    -1,    -1,   588,    -1,
+     588,    -1,    -1,   593,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   605,    -1,    -1,    -1,   609,
+      -1,    -1,    -1,    -1,   614,    -1,    -1,    -1,   618,    -1,
+      -1,    -1,    -1,    -1,    -1,     0,    -1,   627,     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,    -1,    -1,   281,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     325,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   339,   340,   341,   342,   343,   344,
+       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,    -1,    -1,   296,   297,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   315,    -1,    -1,    -1,   319,   320,    -1,    -1,
+      -1,    -1,   325,   326,   327,   328,   329,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   339,   340,   341,   342,
+     343,   344,     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,
@@ -1965,14 +2179,19 @@
      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,    -1,    -1,   246,   247,    -1,    -1,    -1,
+     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,    -1,    -1,   296,   297,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   265,    -1,    -1,    -1,   269,   270,
-      -1,    -1,    -1,    -1,   275,   276,   277,   278,   279,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   289,   290,
-     291,   292,   293,   294,     3,     4,     5,     6,     7,     8,
+      -1,    -1,    -1,    -1,   315,    -1,    -1,    -1,   319,   320,
+      -1,    -1,    -1,    -1,   325,   326,   327,   328,   329,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   339,   340,
+     341,   342,   343,   344,     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,
+      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,
@@ -1994,14 +2213,19 @@
      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,    -1,    -1,   246,   247,    -1,
+     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,    -1,    -1,   296,   297,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   265,    -1,    -1,    -1,
-     269,    -1,    -1,    -1,    -1,    -1,   275,   276,   277,   278,
-     279,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     289,   290,   291,   292,   293,   294,     3,     4,     5,     6,
+      -1,    -1,    -1,    -1,    -1,    -1,   315,    -1,    -1,    -1,
+     319,    -1,    -1,    -1,    -1,    -1,   325,   326,   327,   328,
+     329,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     339,   340,   341,   342,   343,   344,     3,     4,     5,     6,
        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    -1,    20,    21,    22,    23,    24,    25,    26,
+      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,
@@ -2023,15 +2247,20 @@
      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,    -1,    -1,   246,
-     247,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   265,    -1,
-      -1,    -1,   269,    -1,    -1,    -1,    -1,    -1,   275,   276,
-     277,   278,   279,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   289,   290,   291,   292,   293,   294,     3,     4,
+     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,    -1,    -1,   296,
+     297,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   315,    -1,
+      -1,    -1,   319,    -1,    -1,    -1,    -1,    -1,   325,   326,
+     327,   328,   329,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   339,   340,   341,   342,   343,   344,     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,
+      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,
@@ -2052,15 +2281,20 @@
      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,    -1,
-      -1,   246,   247,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     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,    -1,
+      -1,   296,   297,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     265,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     275,   276,   277,   278,   279,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   289,   290,   291,   292,   293,   294,
+     315,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     325,   326,   327,   328,   329,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   339,   340,   341,   342,   343,   344,
        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,
+      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,
@@ -2080,17 +2314,22 @@
      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,    -1,   232,
+     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
      233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
-     243,    -1,    -1,   246,   247,    -1,    -1,    -1,    -1,    -1,
+     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,    -1,   280,   281,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,    -1,    -1,   296,   297,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   265,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   275,   276,   277,   278,   279,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   289,   290,   291,   292,
-     293,   294,     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,
+      -1,    -1,   315,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   325,   326,   327,   328,   329,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   339,   340,   341,   342,
+     343,   344,     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,
@@ -2110,151 +2349,21 @@
      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,
-      -1,    -1,   233,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     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,    -1,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,    -1,    -1,   296,   297,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   275,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,   289,   290,
-     291,   292,   293,   294,    -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,    -1,   232,   233,   234,   235,   236,   237,
-     238,   239,   240,   241,   242,   243,    -1,    -1,   246,   247,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   265,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   276,   277,
-     278,   279,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   289,   290,   291,   292,   293,     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,    -1,   232,   233,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   275,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,   289,   290,   291,   292,   293,    -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,    -1,    -1,   233,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   270,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      -1,    -1,    -1,    -1,    -1,   289,   290,   291,   292,   293,
-      -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,    -1,    -1,   233,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   270,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    -1,    -1,
-      -1,    -1,    -1,   289,   290,   291,   292,   293,    -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,    -1,    -1,   233,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   270,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    -1,    -1,    -1,    -1,
-      -1,   289,   290,   291,   292,   293,    -1,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      -1,    -1,    -1,    -1,   315,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   326,   327,   328,   329,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   339,   340,
+     341,   342,   343,     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,
@@ -2274,15 +2383,26 @@
      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,    -1,    -1,   233,    -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,
+     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,    -1,
+     280,   281,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   325,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   339,
+     340,   341,   342,   343,     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,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   289,
-     290,   291,   292,   293,    63,    64,    65,    66,    67,    68,
+      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,    -1,    86,    87,    88,
+      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,
@@ -2297,74 +2417,60 @@
      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,    -1,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,    -1,    -1,   246,   247,    -1,
+     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,
+      -1,    -1,   281,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   265,    -1,    -1,    -1,
-     269,   270,    -1,    -1,    -1,    -1,    -1,   276,   277,   278,
-     279,     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,    -1,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,    -1,
-      -1,   246,   247,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     265,    -1,    -1,   268,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   276,   277,   278,   279,     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,
-      -1,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,    -1,    -1,   246,   247,    -1,    -1,    -1,
+      -1,   320,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   265,    -1,    -1,    -1,   269,    -1,
-      -1,    -1,    -1,    -1,    -1,   276,   277,   278,   279,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    -1,
+     339,   340,   341,   342,   343,     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,    -1,    -1,   281,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   320,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   339,   340,   341,   342,   343,     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,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    63,    64,    65,    66,
+      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,    -1,    86,
+      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,
@@ -2379,114 +2485,321 @@
      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,    -1,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,    -1,    -1,   246,
-     247,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   265,    -1,
-      -1,   268,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   276,
-     277,   278,   279,     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,
+     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,    -1,    -1,   281,    -1,    -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,    -1,   232,
-     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
-     243,    -1,    -1,   246,   247,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   265,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   275,   276,   277,   278,   279,     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,    -1,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,    -1,    -1,   246,   247,    -1,
+      -1,    -1,    -1,   320,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   265,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,   276,   277,   278,
-     279,    -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,   339,   340,   341,   342,   343,     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,    -1,    -1,   281,    -1,    -1,    -1,    -1,
       -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,    -1,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,    -1,    -1,   246,   247,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   265,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,   276,   277,   278,
-     279,    -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,     5,
+       6,     7,     8,     9,    -1,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   339,   340,   341,   342,   343,    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,    -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,    -1,    -1,   233
+      -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,    -1,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,    -1,    -1,
+     296,   297,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   315,
+      -1,    -1,    -1,   319,   320,    -1,    -1,    -1,    -1,    -1,
+     326,   327,   328,   329,     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,    -1,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,    -1,    -1,   296,   297,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   315,    -1,    -1,   318,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   326,   327,   328,   329,     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,    -1,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,    -1,    -1,
+     296,   297,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   315,
+      -1,    -1,    -1,   319,    -1,    -1,    -1,    -1,    -1,    -1,
+     326,   327,   328,   329,     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,    -1,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,    -1,    -1,   296,   297,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   315,    -1,    -1,   318,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   326,   327,   328,   329,     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,    -1,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,    -1,    -1,
+     296,   297,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   315,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   325,
+     326,   327,   328,   329,     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,    -1,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,    -1,    -1,   296,   297,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   315,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   326,   327,   328,   329,     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,    -1,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,    -1,    -1,
+     296,   297,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   315,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     326,   327,   328,   329,     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,   320,    -1,
+     281,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -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,   363,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   381,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   395,    -1,    -1,   398,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   465,   466,   467,   468,   469,   470,   471,
+     472,   473,   474,   475,   476,   477,   478,   479,   480,   481,
+     482,   483
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -2494,7 +2807,7 @@
 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,
+      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,
@@ -2514,118 +2827,133 @@
      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,   233,   275,
-     289,   290,   291,   292,   293,   294,   329,   330,   333,   334,
-     335,   336,   340,   341,   342,   343,   344,   345,   348,   349,
-     350,   351,   353,   355,   356,   357,   394,   395,   396,   265,
-     265,   232,   269,   356,   232,   275,   275,   397,   266,   272,
-     337,   338,   339,   349,   353,   272,   275,   232,   232,   275,
-     350,   353,   267,   354,     0,   395,   232,   352,    57,   232,
-     346,   347,   269,   359,   353,   275,   354,   269,   376,   338,
-     337,   339,   232,   232,   265,   274,   354,   269,   272,   275,
-     332,   232,   234,   235,   236,   237,   238,   239,   240,   241,
-     242,   243,   246,   247,   265,   268,   276,   277,   278,   279,
-     299,   300,   301,   303,   304,   305,   306,   307,   308,   309,
-     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
-     320,   321,   322,   323,   353,   267,   266,   272,   274,   266,
-     272,   358,   349,   353,   360,   361,   275,   275,    16,    17,
-      18,    20,    21,    22,    23,    24,    25,    26,   231,   269,
-     270,   275,   310,   323,   325,   327,   329,   333,   353,   366,
-     367,   368,   369,   377,   378,   379,   382,   385,   386,   393,
-     354,   274,   354,   269,   325,   364,   274,   331,   232,   272,
-     275,   310,   310,   327,   246,   247,   267,   271,   266,   266,
-     272,   230,   325,   265,   310,   280,   281,   282,   277,   279,
-     244,   245,   248,   249,   283,   284,   250,   251,   287,   286,
-     285,   252,   254,   253,   288,   268,   268,   323,   232,   323,
-     328,   347,   360,   353,   232,   362,   363,   270,   361,   275,
-     275,   388,   265,   265,   275,   275,   327,   265,   327,   273,
-     265,   270,   370,   255,   256,   257,   258,   259,   260,   261,
-     262,   263,   264,   274,   326,   272,   275,   270,   367,   364,
-     274,   364,   365,   364,   360,   232,   266,   302,   327,   232,
-     325,   310,   310,   310,   312,   312,   313,   313,   314,   314,
-     314,   314,   315,   315,   316,   317,   318,   319,   320,   321,
-     324,   268,   270,   362,   354,   272,   275,   367,   389,   327,
-     275,   327,   273,   387,   377,   325,   325,   364,   270,   272,
-     270,   268,   327,   275,   363,   231,   366,   378,   390,   266,
-     266,   327,   342,   349,   381,   371,   270,   364,   273,   265,
-     381,   391,   392,   373,   374,   375,   380,   383,   232,   266,
-     270,   325,   327,   275,   266,    19,   369,   368,   269,   274,
-     368,   372,   376,   266,   327,   372,   373,   377,   384,   364,
-     275,   270
+     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,   281,   325,   339,   340,
+     341,   342,   343,   344,   379,   380,   383,   384,   385,   386,
+     390,   391,   392,   393,   394,   395,   398,   399,   400,   401,
+     403,   405,   406,   407,   444,   445,   446,   315,   315,   280,
+     319,   406,   280,   325,   325,   447,   316,   322,   387,   388,
+     389,   399,   403,   322,   325,   280,   280,   325,   400,   403,
+     317,   404,     0,   445,   280,   402,    81,   280,   396,   397,
+     319,   409,   403,   325,   404,   319,   426,   388,   387,   389,
+     280,   280,   315,   324,   404,   319,   322,   325,   382,   280,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   296,   297,   315,   318,   326,   327,   328,   329,
+     349,   350,   351,   353,   354,   355,   356,   357,   358,   359,
+     360,   361,   362,   363,   364,   365,   366,   367,   368,   369,
+     370,   371,   372,   373,   403,   317,   316,   322,   324,   316,
+     322,   408,   399,   403,   410,   411,   325,   325,    22,    23,
+      24,    26,    27,    28,    29,    30,    31,    32,   279,   319,
+     320,   325,   360,   373,   375,   377,   379,   383,   403,   416,
+     417,   418,   419,   427,   428,   429,   432,   435,   436,   443,
+     404,   324,   404,   319,   375,   414,   324,   381,   280,   322,
+     325,   360,   360,   377,   296,   297,   317,   321,   316,   316,
+     322,   278,   375,   315,   360,   330,   331,   332,   327,   329,
+     294,   295,   298,   299,   333,   334,   300,   301,   337,   336,
+     335,   302,   304,   303,   338,   318,   318,   373,   280,   373,
+     378,   397,   410,   403,   280,   412,   413,   320,   411,   325,
+     325,   438,   315,   315,   325,   325,   377,   315,   377,   323,
+     315,   320,   420,   305,   306,   307,   308,   309,   310,   311,
+     312,   313,   314,   324,   376,   322,   325,   320,   417,   414,
+     324,   414,   415,   414,   410,   280,   316,   352,   377,   280,
+     375,   360,   360,   360,   362,   362,   363,   363,   364,   364,
+     364,   364,   365,   365,   366,   367,   368,   369,   370,   371,
+     374,   318,   320,   412,   404,   322,   325,   417,   439,   377,
+     325,   377,   323,   437,   427,   375,   375,   414,   320,   322,
+     320,   318,   377,   325,   413,   279,   416,   428,   440,   316,
+     316,   377,   392,   399,   431,   421,   320,   414,   323,   315,
+     431,   441,   442,   423,   424,   425,   430,   433,   280,   316,
+     320,   375,   377,   325,   316,    25,   419,   418,   319,   324,
+     418,   422,   426,   316,   377,   422,   423,   427,   434,   414,
+     325,   320
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint16 yyr1[] =
 {
-       0,   298,   299,   300,   300,   300,   300,   300,   300,   300,
-     300,   300,   300,   300,   300,   301,   301,   301,   301,   301,
-     301,   302,   303,   304,   305,   305,   306,   306,   307,   307,
-     308,   309,   309,   310,   310,   310,   310,   311,   311,   311,
-     311,   312,   312,   312,   312,   313,   313,   313,   314,   314,
-     314,   315,   315,   315,   315,   315,   316,   316,   316,   317,
-     317,   318,   318,   319,   319,   320,   320,   321,   321,   322,
-     322,   323,   324,   323,   325,   325,   326,   326,   326,   326,
-     326,   326,   326,   326,   326,   326,   326,   327,   327,   328,
-     329,   329,   329,   329,   329,   329,   329,   329,   329,   331,
-     330,   332,   332,   333,   334,   334,   335,   335,   336,   337,
-     337,   338,   338,   338,   338,   339,   340,   340,   340,   340,
-     340,   341,   341,   341,   341,   341,   342,   342,   343,   344,
-     344,   344,   344,   345,   346,   346,   347,   347,   347,   348,
-     349,   349,   350,   350,   350,   350,   350,   350,   351,   351,
-     351,   351,   351,   351,   351,   351,   351,   351,   351,   351,
-     351,   351,   351,   351,   351,   351,   351,   352,   352,   353,
-     353,   354,   354,   354,   354,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     356,   356,   356,   358,   357,   359,   357,   360,   360,   361,
-     361,   362,   362,   363,   363,   364,   364,   364,   365,   365,
-     366,   367,   367,   368,   368,   368,   368,   368,   368,   368,
-     369,   370,   371,   369,   372,   372,   374,   373,   375,   373,
-     376,   376,   377,   377,   378,   378,   379,   380,   380,   381,
-     381,   383,   382,   384,   384,   385,   385,   387,   386,   388,
-     386,   389,   386,   390,   390,   391,   391,   392,   392,   393,
-     393,   393,   393,   393,   394,   394,   395,   395,   395,   397,
-     396
+       0,   348,   349,   350,   350,   350,   350,   350,   350,   350,
+     350,   350,   350,   350,   350,   350,   350,   351,   351,   351,
+     351,   351,   351,   352,   353,   354,   355,   355,   356,   356,
+     357,   357,   358,   359,   359,   360,   360,   360,   360,   361,
+     361,   361,   361,   362,   362,   362,   362,   363,   363,   363,
+     364,   364,   364,   365,   365,   365,   365,   365,   366,   366,
+     366,   367,   367,   368,   368,   369,   369,   370,   370,   371,
+     371,   372,   372,   373,   374,   373,   375,   375,   376,   376,
+     376,   376,   376,   376,   376,   376,   376,   376,   376,   377,
+     377,   378,   379,   379,   379,   379,   379,   379,   379,   379,
+     379,   381,   380,   382,   382,   383,   384,   384,   385,   385,
+     386,   387,   387,   388,   388,   388,   388,   389,   390,   390,
+     390,   390,   390,   391,   391,   391,   391,   391,   392,   392,
+     393,   394,   394,   394,   394,   395,   396,   396,   397,   397,
+     397,   398,   399,   399,   400,   400,   400,   400,   400,   400,
+     401,   401,   401,   401,   401,   401,   401,   401,   401,   401,
+     401,   401,   401,   401,   401,   401,   401,   401,   401,   402,
+     402,   403,   403,   404,   404,   404,   404,   405,   405,   405,
+     405,   405,   405,   405,   405,   405,   405,   405,   405,   405,
+     405,   405,   405,   405,   405,   405,   405,   405,   405,   405,
+     405,   405,   405,   405,   405,   405,   405,   405,   405,   405,
+     405,   405,   405,   405,   405,   405,   405,   405,   405,   405,
+     405,   405,   405,   405,   405,   405,   405,   405,   405,   405,
+     405,   405,   405,   405,   405,   405,   405,   405,   405,   405,
+     405,   405,   405,   405,   405,   405,   405,   405,   405,   405,
+     405,   405,   405,   405,   405,   405,   405,   405,   405,   405,
+     405,   405,   405,   405,   405,   405,   405,   405,   405,   405,
+     405,   405,   405,   405,   405,   405,   405,   405,   405,   405,
+     405,   405,   405,   405,   405,   405,   405,   405,   405,   405,
+     405,   405,   405,   405,   405,   405,   405,   405,   405,   405,
+     405,   405,   405,   405,   405,   405,   405,   405,   405,   405,
+     405,   405,   405,   405,   405,   405,   405,   405,   405,   405,
+     405,   405,   405,   405,   405,   405,   405,   405,   405,   405,
+     405,   405,   405,   405,   405,   405,   405,   405,   405,   405,
+     405,   405,   405,   405,   405,   405,   405,   405,   405,   405,
+     405,   405,   405,   405,   405,   405,   405,   405,   405,   405,
+     405,   405,   405,   405,   405,   405,   405,   405,   405,   405,
+     405,   405,   405,   405,   405,   405,   405,   405,   405,   405,
+     405,   405,   405,   405,   405,   405,   405,   405,   405,   405,
+     405,   405,   405,   405,   405,   405,   405,   405,   405,   405,
+     405,   405,   405,   405,   405,   405,   405,   405,   405,   405,
+     405,   405,   405,   405,   405,   405,   405,   405,   405,   405,
+     406,   406,   406,   408,   407,   409,   407,   410,   410,   411,
+     411,   412,   412,   413,   413,   414,   414,   414,   415,   415,
+     416,   417,   417,   418,   418,   418,   418,   418,   418,   418,
+     419,   420,   421,   419,   422,   422,   424,   423,   425,   423,
+     426,   426,   427,   427,   428,   428,   429,   430,   430,   431,
+     431,   433,   432,   434,   434,   435,   435,   437,   436,   438,
+     436,   439,   436,   440,   440,   441,   441,   442,   442,   443,
+     443,   443,   443,   443,   444,   444,   445,   445,   445,   447,
+     446
 };
 
   /* 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,
@@ -3336,238 +3664,250 @@
   switch (yyn)
     {
         case 2:
-#line 253 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 273 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string);
     }
-#line 3344 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3672 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 3:
-#line 259 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 279 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 3352 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3680 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 4:
-#line 262 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 282 "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 3360 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3689 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 5:
-#line 265 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 286 "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 3698 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 6:
+#line 290 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
+    }
+#line 3706 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 7:
+#line 293 "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 3369 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3715 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 6:
-#line 269 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 8:
+#line 297 "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 3378 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3724 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 7:
-#line 273 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 9:
+#line 301 "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 3387 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 8:
-#line 277 "MachineIndependent/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 3398 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 9:
-#line 283 "MachineIndependent/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 3409 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3733 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 10:
-#line 289 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 305 "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 3417 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3742 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 11:
-#line 292 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 309 "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 3751 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 12:
+#line 313 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
+    }
+#line 3759 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 13:
+#line 316 "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 3426 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 12:
-#line 296 "MachineIndependent/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 3437 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 13:
-#line 302 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
-    }
-#line 3445 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3768 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 14:
-#line 305 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 320 "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 3777 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 15:
+#line 324 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
+    }
+#line 3785 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 16:
+#line 327 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
         if ((yyval.interm.intermTypedNode)->getAsConstantUnion())
             (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
     }
-#line 3455 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 15:
-#line 313 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
-    }
-#line 3463 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 16:
-#line 316 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode));
-    }
-#line 3471 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3795 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 17:
-#line 319 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 335 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 3479 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3803 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 18:
-#line 322 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 338 "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 3487 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3811 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 19:
-#line 325 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 341 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
+    }
+#line 3819 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 20:
+#line 344 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string);
+    }
+#line 3827 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 21:
+#line 347 "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 3497 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3837 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 20:
-#line 330 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 22:
+#line 352 "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 3507 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3847 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 21:
-#line 338 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 23:
+#line 360 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 3516 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3856 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 22:
-#line 345 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 24:
+#line 367 "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 3525 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 23:
-#line 352 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm) = (yyvsp[0].interm);
-    }
-#line 3533 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 24:
-#line 358 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm) = (yyvsp[-1].interm);
-        (yyval.interm).loc = (yyvsp[0].lex).loc;
-    }
-#line 3542 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3865 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 25:
-#line 362 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 374 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm) = (yyvsp[0].interm);
+    }
+#line 3873 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 26:
+#line 380 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-1].interm);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 3551 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 26:
-#line 369 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm) = (yyvsp[-1].interm);
-    }
-#line 3559 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3882 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 27:
-#line 372 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 384 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        (yyval.interm) = (yyvsp[0].interm);
+        (yyval.interm) = (yyvsp[-1].interm);
+        (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 3567 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3891 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 28:
-#line 378 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 391 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm) = (yyvsp[-1].interm);
+    }
+#line 3899 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 29:
+#line 394 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm) = (yyvsp[0].interm);
+    }
+#line 3907 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 30:
+#line 400 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         TParameter param = { 0, new TType };
         param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
@@ -3575,11 +3915,11 @@
         (yyval.interm).function = (yyvsp[-1].interm).function;
         (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode);
     }
-#line 3579 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3919 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 29:
-#line 385 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 31:
+#line 407 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         TParameter param = { 0, new TType };
         param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
@@ -3587,29 +3927,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 3591 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3931 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 30:
-#line 395 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 32:
+#line 417 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-1].interm);
     }
-#line 3599 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3939 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 31:
-#line 403 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 33:
+#line 425 "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 3609 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3949 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 32:
-#line 408 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 34:
+#line 430 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         //
         // Should be a method or subroutine call, but we haven't recognized the arguments yet.
@@ -3637,40 +3977,40 @@
             (yyval.interm).function = new TFunction(&empty, TType(EbtVoid), EOpNull);
         }
     }
-#line 3641 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3981 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 33:
-#line 438 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 35:
+#line 460 "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 3652 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3992 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 34:
-#line 444 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 36:
+#line 466 "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 3661 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4001 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 35:
-#line 448 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 37:
+#line 470 "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 3670 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4010 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 36:
-#line 452 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 38:
+#line 474 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-1].interm).op != EOpNull) {
             char errorOp[2] = {0, 0};
@@ -3687,179 +4027,179 @@
                 (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
         }
     }
-#line 3691 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 37:
-#line 472 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; }
-#line 3697 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 38:
-#line 473 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; }
-#line 3703 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4031 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 39:
-#line 474 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; }
-#line 3709 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 494 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; }
+#line 4037 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 40:
-#line 475 "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 3716 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 495 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; }
+#line 4043 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 41:
-#line 481 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3722 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 496 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; }
+#line 4049 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 42:
-#line 482 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 497 "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 4056 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 43:
+#line 503 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4062 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 44:
+#line 504 "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 3732 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4072 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 43:
-#line 487 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 45:
+#line 509 "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 3742 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4082 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 44:
-#line 492 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 46:
+#line 514 "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 3753 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4093 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 45:
-#line 501 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 47:
+#line 523 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3759 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4099 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 46:
-#line 502 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 48:
+#line 524 "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 3769 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4109 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 47:
-#line 507 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 49:
+#line 529 "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 3779 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4119 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 48:
-#line 515 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 50:
+#line 537 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3785 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4125 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 49:
-#line 516 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 51:
+#line 538 "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 3796 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4136 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 50:
-#line 522 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 52:
+#line 544 "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 3807 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4147 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 51:
-#line 531 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 53:
+#line 553 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3813 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4153 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 52:
-#line 532 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 54:
+#line 554 "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 3823 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4163 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 53:
-#line 537 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 55:
+#line 559 "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 3833 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4173 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 54:
-#line 542 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 56:
+#line 564 "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 3843 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4183 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 55:
-#line 547 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 57:
+#line 569 "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 3853 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4193 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 56:
-#line 555 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 58:
+#line 577 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3859 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4199 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 57:
-#line 556 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 59:
+#line 578 "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(), "==");
@@ -3868,11 +4208,11 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 3872 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4212 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 58:
-#line 564 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 60:
+#line 586 "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(), "!=");
@@ -3881,124 +4221,124 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 3885 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4225 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 59:
-#line 575 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 61:
+#line 597 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3891 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4231 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 60:
-#line 576 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 62:
+#line 598 "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 3902 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4242 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 61:
-#line 585 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 63:
+#line 607 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3908 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4248 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 62:
-#line 586 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 64:
+#line 608 "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 3919 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4259 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 63:
-#line 595 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 65:
+#line 617 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3925 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4265 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 64:
-#line 596 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 66:
+#line 618 "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 3936 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4276 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 65:
-#line 605 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 67:
+#line 627 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3942 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4282 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 66:
-#line 606 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 68:
+#line 628 "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 3952 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4292 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 67:
-#line 614 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 69:
+#line 636 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3958 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4298 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 68:
-#line 615 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 70:
+#line 637 "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 3968 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4308 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 69:
-#line 623 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 71:
+#line 645 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3974 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4314 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 70:
-#line 624 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 72:
+#line 646 "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 3984 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 71:
-#line 632 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 72:
-#line 633 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        ++parseContext.controlFlowNestingLevel;
-    }
-#line 3998 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4324 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 73:
-#line 636 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 654 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4330 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 74:
+#line 655 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        ++parseContext.controlFlowNestingLevel;
+    }
+#line 4338 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 75:
+#line 658 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         --parseContext.controlFlowNestingLevel;
         parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-5].interm.intermTypedNode));
@@ -4011,17 +4351,17 @@
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 4015 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4355 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 74:
-#line 651 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 76:
+#line 673 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4021 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4361 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 75:
-#line 652 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 77:
+#line 674 "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(), "=");
@@ -4034,119 +4374,119 @@
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
         }
     }
-#line 4038 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4378 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 76:
-#line 667 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 78:
+#line 689 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAssign;
     }
-#line 4047 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4387 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 77:
-#line 671 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 79:
+#line 693 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpMulAssign;
     }
-#line 4056 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4396 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 78:
-#line 675 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 80:
+#line 697 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpDivAssign;
     }
-#line 4065 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4405 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 79:
-#line 679 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 81:
+#line 701 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "%=");
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpModAssign;
     }
-#line 4075 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4415 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 80:
-#line 684 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 82:
+#line 706 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAddAssign;
     }
-#line 4084 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4424 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 81:
-#line 688 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 83:
+#line 710 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpSubAssign;
     }
-#line 4093 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4433 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 82:
-#line 692 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 84:
+#line 714 "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 4102 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4442 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 83:
-#line 696 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 85:
+#line 718 "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 4111 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4451 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 84:
-#line 700 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 86:
+#line 722 "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 4120 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4460 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 85:
-#line 704 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 87:
+#line 726 "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 4129 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4469 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 86:
-#line 708 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 88:
+#line 730 "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 4138 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4478 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 87:
-#line 715 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 89:
+#line 737 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4146 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4486 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 88:
-#line 718 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 90:
+#line 740 "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);
@@ -4155,40 +4495,40 @@
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 4159 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4499 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 89:
-#line 729 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 91:
+#line 751 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), "");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4168 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4508 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 90:
-#line 736 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 92:
+#line 758 "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 4178 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4518 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 91:
-#line 741 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 93:
+#line 763 "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 4188 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4528 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 92:
-#line 746 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 94:
+#line 768 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[-3].lex).loc, ENoProfile, 130, 0, "precision statement");
 
@@ -4197,75 +4537,75 @@
         parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision);
         (yyval.interm.intermNode) = 0;
     }
-#line 4201 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4541 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 93:
-#line 754 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 95:
+#line 776 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList);
         (yyval.interm.intermNode) = 0;
     }
-#line 4210 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4550 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 94:
-#line 758 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 96:
+#line 780 "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 4219 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4559 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 95:
-#line 762 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 97:
+#line 784 "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 4228 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4568 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 96:
-#line 766 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 98:
+#line 788 "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 4238 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4578 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 97:
-#line 771 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 99:
+#line 793 "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 4248 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4588 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 98:
-#line 776 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 100:
+#line 798 "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 4259 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4599 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 99:
-#line 785 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 101:
+#line 807 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); }
-#line 4265 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4605 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 100:
-#line 785 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 102:
+#line 807 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         --parseContext.structNestingLevel;
         parseContext.blockName = (yyvsp[-4].lex).string;
@@ -4275,54 +4615,54 @@
         (yyval.interm).loc = (yyvsp[-5].interm.type).loc;
         (yyval.interm).typeList = (yyvsp[-1].interm.typeList);
     }
-#line 4279 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4619 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 101:
-#line 796 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 103:
+#line 818 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.identifierList) = new TIdentifierList;
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 4288 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4628 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 102:
-#line 800 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 104:
+#line 822 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList);
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 4297 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4637 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 103:
-#line 807 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 105:
+#line 829 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).function = (yyvsp[-1].interm.function);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 4306 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 104:
-#line 814 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.function) = (yyvsp[0].interm.function);
-    }
-#line 4314 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 105:
-#line 817 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.function) = (yyvsp[0].interm.function);
-    }
-#line 4322 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4646 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 106:
-#line 824 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 836 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.function) = (yyvsp[0].interm.function);
+    }
+#line 4654 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 107:
+#line 839 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.function) = (yyvsp[0].interm.function);
+    }
+#line 4662 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 108:
+#line 846 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // Add the parameter
         (yyval.interm.function) = (yyvsp[-1].interm.function);
@@ -4331,11 +4671,11 @@
         else
             delete (yyvsp[0].interm).param.type;
     }
-#line 4335 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4675 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 107:
-#line 832 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 109:
+#line 854 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         //
         // Only first parameter of one-parameter functions can be void
@@ -4353,11 +4693,11 @@
             (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param);
         }
     }
-#line 4357 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4697 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 108:
-#line 852 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 110:
+#line 874 "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",
@@ -4377,11 +4717,11 @@
         function = new TFunction((yyvsp[-1].lex).string, type);
         (yyval.interm.function) = function;
     }
-#line 4381 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4721 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 109:
-#line 875 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 111:
+#line 897 "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");
@@ -4397,11 +4737,11 @@
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).param = param;
     }
-#line 4401 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4741 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 110:
-#line 890 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 112:
+#line 912 "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");
@@ -4419,11 +4759,11 @@
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).param = param;
     }
-#line 4423 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4763 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 111:
-#line 913 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 113:
+#line 935 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
         if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
@@ -4435,11 +4775,11 @@
         parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
 
     }
-#line 4439 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4779 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 112:
-#line 924 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 114:
+#line 946 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
 
@@ -4447,11 +4787,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 4451 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4791 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 113:
-#line 934 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 115:
+#line 956 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
         if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
@@ -4462,11 +4802,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 4466 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4806 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 114:
-#line 944 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 116:
+#line 966 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
 
@@ -4474,118 +4814,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 4478 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4818 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 115:
-#line 954 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 117:
+#line 976 "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 4489 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4829 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 116:
-#line 963 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 118:
+#line 985 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 4497 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4837 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 117:
-#line 966 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 119:
+#line 988 "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 4506 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4846 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 118:
-#line 970 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 120:
+#line 992 "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 4515 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4855 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 119:
-#line 974 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 121:
+#line 996 "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 4525 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4865 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 120:
-#line 979 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 122:
+#line 1001 "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 4535 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4875 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 121:
-#line 987 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 123:
+#line 1009 "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 4545 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4885 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 122:
-#line 992 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 124:
+#line 1014 "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 4555 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4895 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 123:
-#line 997 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 125:
+#line 1019 "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 4565 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4905 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 124:
-#line 1002 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 126:
+#line 1024 "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 4575 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4915 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 125:
-#line 1007 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 127:
+#line 1029 "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 4585 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4925 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 126:
-#line 1016 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 128:
+#line 1038 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
 
@@ -4597,11 +4937,11 @@
 
         parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier);
     }
-#line 4601 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4941 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 127:
-#line 1027 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 129:
+#line 1049 "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));
@@ -4626,22 +4966,22 @@
              (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn)))
             (yyval.interm.type).qualifier.smooth = true;
     }
-#line 4630 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4970 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 128:
-#line 1054 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 130:
+#line 1076 "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 4641 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4981 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 129:
-#line 1063 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 131:
+#line 1085 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "smooth");
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "smooth");
@@ -4649,11 +4989,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.smooth = true;
     }
-#line 4653 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4993 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 130:
-#line 1070 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 132:
+#line 1092 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "flat");
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "flat");
@@ -4661,11 +5001,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.flat = true;
     }
-#line 4665 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5005 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 131:
-#line 1077 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 133:
+#line 1099 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "noperspective");
         parseContext.requireProfile((yyvsp[0].lex).loc, ~EEsProfile, "noperspective");
@@ -4673,11 +5013,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.nopersp = true;
     }
-#line 4677 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5017 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 132:
-#line 1084 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 134:
+#line 1106 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.globalCheck((yyvsp[0].lex).loc, "__explicitInterpAMD");
@@ -4687,84 +5027,84 @@
         (yyval.interm.type).qualifier.explicitInterp = true;
 #endif
     }
-#line 4691 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 133:
-#line 1096 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type) = (yyvsp[-1].interm.type);
-    }
-#line 4699 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 134:
-#line 1102 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 4707 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5031 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 135:
-#line 1105 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1118 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type) = (yyvsp[-1].interm.type);
+    }
+#line 5039 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 136:
+#line 1124 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 5047 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 137:
+#line 1127 "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 4717 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5057 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 136:
-#line 1112 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 138:
+#line 1134 "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 4726 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5066 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 137:
-#line 1116 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 139:
+#line 1138 "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 4735 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5075 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 138:
-#line 1120 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 140:
+#line 1142 "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 4745 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5085 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 139:
-#line 1128 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 141:
+#line 1150 "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 4756 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5096 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 140:
-#line 1137 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 142:
+#line 1159 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 4764 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5104 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 141:
-#line 1140 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 143:
+#line 1162 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
         if ((yyval.interm.type).basicType == EbtVoid)
@@ -4773,72 +5113,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 4777 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 142:
-#line 1151 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 4785 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 143:
-#line 1154 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 4793 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5117 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 144:
-#line 1157 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1173 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 5125 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 145:
+#line 1176 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 5133 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 146:
+#line 1179 "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 4802 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 145:
-#line 1161 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        // allow inheritance of storage qualifier from block declaration
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 4811 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 146:
-#line 1165 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        // allow inheritance of storage qualifier from block declaration
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 4820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5142 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 147:
-#line 1169 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1183 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 4829 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5151 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 148:
-#line 1176 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1187 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        // allow inheritance of storage qualifier from block declaration
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 5160 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 149:
+#line 1191 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        // allow inheritance of storage qualifier from block declaration
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 5169 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 150:
+#line 1198 "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 4838 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5178 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 149:
-#line 1180 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 151:
+#line 1202 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute");
@@ -4851,11 +5191,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 4855 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5195 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 150:
-#line 1192 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 152:
+#line 1214 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying");
@@ -4870,43 +5210,43 @@
         else
             (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 4874 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5214 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 151:
-#line 1206 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 153:
+#line 1228 "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 4884 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5224 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 152:
-#line 1211 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 154:
+#line 1233 "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 4895 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5235 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 153:
-#line 1217 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 155:
+#line 1239 "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 4906 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5246 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 154:
-#line 1223 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 156:
+#line 1245 "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");
@@ -4914,52 +5254,52 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.centroid = true;
     }
-#line 4918 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5258 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 155:
-#line 1230 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 157:
+#line 1252 "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 4929 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5269 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 156:
-#line 1236 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 158:
+#line 1258 "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 4939 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5279 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 157:
-#line 1241 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 159:
+#line 1263 "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 4949 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5289 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 158:
-#line 1246 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 160:
+#line 1268 "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 4959 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5299 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 159:
-#line 1251 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 161:
+#line 1273 "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");
@@ -4968,126 +5308,126 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqShared;
     }
-#line 4972 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5312 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 160:
-#line 1259 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 162:
+#line 1281 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.coherent = true;
     }
-#line 4981 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5321 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 161:
-#line 1263 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 163:
+#line 1285 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.volatil = true;
     }
-#line 4990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5330 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 162:
-#line 1267 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 164:
+#line 1289 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.restrict = true;
     }
-#line 4999 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5339 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 163:
-#line 1271 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 165:
+#line 1293 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.readonly = true;
     }
-#line 5008 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5348 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 164:
-#line 1275 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 166:
+#line 1297 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.writeonly = true;
     }
-#line 5017 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5357 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 165:
-#line 1279 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 167:
+#line 1301 "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 5028 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5368 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 166:
-#line 1285 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 168:
+#line 1307 "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 5039 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5379 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 167:
-#line 1294 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 169:
+#line 1316 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // TODO
     }
-#line 5047 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5387 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 168:
-#line 1297 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 170:
+#line 1319 "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 5057 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5397 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 169:
-#line 1305 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 171:
+#line 1327 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
         (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
     }
-#line 5066 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5406 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 170:
-#line 1309 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 172:
+#line 1331 "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 5077 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5417 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 171:
-#line 1318 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 173:
+#line 1340 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 5087 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5427 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 172:
-#line 1323 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 174:
+#line 1345 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[-2].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
@@ -5096,20 +5436,20 @@
         parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size);
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 5100 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5440 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 173:
-#line 1331 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 175:
+#line 1353 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-2].interm);
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 5109 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5449 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 174:
-#line 1335 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 176:
+#line 1357 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-3].interm);
 
@@ -5117,2047 +5457,2521 @@
         parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size);
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 5121 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5461 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 175:
-#line 1345 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 177:
+#line 1367 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtVoid;
     }
-#line 5130 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5470 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 176:
-#line 1349 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 178:
+#line 1371 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
     }
-#line 5139 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5479 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 177:
-#line 1353 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 179:
+#line 1375 "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 5149 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5489 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 178:
-#line 1358 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 180:
+#line 1380 "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 5161 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5499 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 179:
-#line 1365 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 181:
+#line 1385 "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 5509 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 182:
+#line 1390 "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 5519 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 183:
+#line 1395 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
     }
-#line 5170 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5528 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 180:
-#line 1369 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 184:
+#line 1399 "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 5180 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5538 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 181:
-#line 1374 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 185:
+#line 1404 "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 5548 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 186:
+#line 1409 "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 5558 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 187:
+#line 1414 "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 5568 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 188:
+#line 1419 "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 5578 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 189:
+#line 1424 "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 5588 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 190:
+#line 1429 "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 5598 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 191:
+#line 1434 "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 5190 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5608 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 182:
-#line 1379 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 192:
+#line 1439 "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 5200 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 183:
-#line 1384 "MachineIndependent/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 5212 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 184:
-#line 1391 "MachineIndependent/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 5224 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 185:
-#line 1398 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtBool;
-    }
-#line 5233 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 186:
-#line 1402 "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(2);
-    }
-#line 5243 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 187:
-#line 1407 "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 5253 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 188:
-#line 1412 "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 5263 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 189:
-#line 1417 "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 5274 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 190:
-#line 1423 "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 5285 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 191:
-#line 1429 "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 5296 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 192:
-#line 1435 "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(2);
-#endif
-    }
-#line 5309 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5618 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 193:
-#line 1443 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1444 "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 5322 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5627 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 194:
-#line 1451 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1448 "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 5637 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 195:
+#line 1453 "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 5647 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 196:
+#line 1458 "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 5657 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 197:
+#line 1463 "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 5668 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 198:
+#line 1469 "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 5679 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 199:
+#line 1475 "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 5690 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 200:
+#line 1481 "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 5701 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 201:
+#line 1487 "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 5712 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 202:
+#line 1493 "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 5335 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 195:
-#line 1459 "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 5345 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 196:
-#line 1464 "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 5355 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 197:
-#line 1469 "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 5365 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 198:
-#line 1474 "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 5375 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 199:
-#line 1479 "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 5385 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 200:
-#line 1484 "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 5395 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 201:
-#line 1489 "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 5406 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 202:
-#line 1495 "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 5417 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5723 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 203:
-#line 1501 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1499 "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);
+    	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 5428 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5734 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 204:
-#line 1507 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1505 "MachineIndependent/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
+    	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 5441 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5745 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 205:
-#line 1515 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1511 "MachineIndependent/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
+    	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 5454 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5756 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 206:
-#line 1523 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1517 "MachineIndependent/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
+    	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 5467 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5767 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 207:
-#line 1531 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1523 "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);
+    	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 5478 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5778 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 208:
-#line 1537 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1529 "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);
+    	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 5489 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5789 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 209:
-#line 1543 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1535 "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);
+        (yyval.interm.type).basicType = EbtBool;
+        (yyval.interm.type).setVector(2);
     }
-#line 5500 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5799 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 210:
-#line 1549 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1540 "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);
+        (yyval.interm.type).basicType = EbtBool;
+        (yyval.interm.type).setVector(3);
     }
-#line 5511 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5809 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 211:
-#line 1555 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1545 "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);
+        (yyval.interm.type).basicType = EbtBool;
+        (yyval.interm.type).setVector(4);
     }
-#line 5522 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5819 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 212:
-#line 1561 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1550 "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);
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(2);
     }
-#line 5533 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5829 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 213:
-#line 1567 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1555 "MachineIndependent/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
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(3);
     }
-#line 5546 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5839 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 214:
-#line 1575 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1560 "MachineIndependent/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
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(4);
     }
-#line 5559 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5849 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 215:
-#line 1583 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1565 "MachineIndependent/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
+ 	   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 5572 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5860 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 216:
-#line 1591 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1571 "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);
+ 	   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 5582 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5871 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 217:
-#line 1596 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1577 "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);
+ 	   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 5592 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5882 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 218:
-#line 1601 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1583 "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);
+ 	   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 5602 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5893 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 219:
-#line 1606 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1589 "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);
+ 	   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 5612 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5904 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 220:
-#line 1611 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1595 "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, 3);
-    }
-#line 5622 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 221:
-#line 1616 "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, 4);
-    }
-#line 5632 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 222:
-#line 1621 "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 5642 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 223:
-#line 1626 "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 5652 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 224:
-#line 1631 "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 5662 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 225:
-#line 1636 "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 5672 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 226:
-#line 1641 "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 5682 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 227:
-#line 1646 "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 5692 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 228:
-#line 1651 "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 5703 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 229:
-#line 1657 "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 5714 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 230:
-#line 1663 "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 5725 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 231:
-#line 1669 "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 5736 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 232:
-#line 1675 "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 5747 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 233:
-#line 1681 "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 5758 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 234:
-#line 1687 "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 5769 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 235:
-#line 1693 "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 5780 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 236:
-#line 1699 "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 5791 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 237:
-#line 1705 "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 5802 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 238:
-#line 1711 "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 5813 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 239:
-#line 1717 "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 5824 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 240:
-#line 1723 "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, 2);
-#endif
-    }
-#line 5837 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 241:
-#line 1731 "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, 3);
-#endif
-    }
-#line 5850 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 242:
-#line 1739 "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(4, 4);
-#endif
-    }
-#line 5863 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 243:
-#line 1747 "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, 2);
-#endif
-    }
-#line 5876 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 244:
-#line 1755 "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, 3);
-#endif
-    }
-#line 5889 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 245:
-#line 1763 "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
-    }
-#line 5902 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 246:
-#line 1771 "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
+ 	   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 5915 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 247:
-#line 1779 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 221:
+#line 1601 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        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 = EbtFloat16;
-        (yyval.interm.type).setMatrix(3, 3);
-#endif
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(2);
     }
-#line 5928 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5926 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 248:
-#line 1787 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 222:
+#line 1607 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        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 = EbtFloat16;
-        (yyval.interm.type).setMatrix(3, 4);
-#endif
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(3);
     }
-#line 5941 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5937 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 249:
-#line 1795 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 223:
+#line 1613 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        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 = EbtFloat16;
-        (yyval.interm.type).setMatrix(4, 2);
-#endif
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(4);
     }
-#line 5954 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5948 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 250:
-#line 1803 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 224:
+#line 1619 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        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 = EbtFloat16;
-        (yyval.interm.type).setMatrix(4, 3);
-#endif
+        (yyval.interm.type).basicType = EbtInt64;
+        (yyval.interm.type).setVector(2);
     }
-#line 5967 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5959 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 251:
-#line 1811 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 225:
+#line 1625 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        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 = EbtFloat16;
-        (yyval.interm.type).setMatrix(4, 4);
-#endif
+        (yyval.interm.type).basicType = EbtInt64;
+        (yyval.interm.type).setVector(3);
     }
-#line 5980 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5970 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 252:
-#line 1819 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 226:
+#line 1631 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.vulkanRemoved((yyvsp[0].lex).loc, "atomic counter types");
+        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 = EbtAtomicUint;
+        (yyval.interm.type).basicType = EbtInt64;
+        (yyval.interm.type).setVector(4);
     }
-#line 5990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5981 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 253:
-#line 1824 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 227:
+#line 1637 "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 = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, Esd1D);
+        (yyval.interm.type).basicType = EbtUint;
+        (yyval.interm.type).setVector(2);
     }
-#line 6000 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5992 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 254:
-#line 1829 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 228:
+#line 1643 "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 = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
+        (yyval.interm.type).basicType = EbtUint;
+        (yyval.interm.type).setVector(3);
     }
-#line 6010 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6003 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 255:
-#line 1834 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 229:
+#line 1649 "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 = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, Esd3D);
+        (yyval.interm.type).basicType = EbtUint;
+        (yyval.interm.type).setVector(4);
     }
-#line 6020 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6014 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 256:
-#line 1839 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 230:
+#line 1655 "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 = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, EsdCube);
+        (yyval.interm.type).basicType = EbtUint8;
+        (yyval.interm.type).setVector(2);
     }
-#line 6030 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6025 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 257:
-#line 1844 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 231:
+#line 1661 "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 = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, Esd1D, false, true);
+        (yyval.interm.type).basicType = EbtInt8;
+        (yyval.interm.type).setVector(3);
     }
-#line 6040 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6036 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 258:
-#line 1849 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 232:
+#line 1667 "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 = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, true);
+        (yyval.interm.type).basicType = EbtUint8;
+        (yyval.interm.type).setVector(4);
     }
-#line 6050 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6047 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 259:
-#line 1854 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 233:
+#line 1673 "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 = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, EsdCube, false, true);
+        (yyval.interm.type).basicType = EbtUint16;
+        (yyval.interm.type).setVector(2);
     }
-#line 6060 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6058 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 260:
-#line 1859 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 234:
+#line 1679 "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 = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true);
+        (yyval.interm.type).basicType = EbtUint16;
+        (yyval.interm.type).setVector(3);
     }
-#line 6070 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6069 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 261:
-#line 1864 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 235:
+#line 1685 "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 = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true);
+        (yyval.interm.type).basicType = EbtUint16;
+        (yyval.interm.type).setVector(4);
     }
 #line 6080 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 262:
-#line 1869 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 236:
+#line 1691 "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 = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true, true);
+        (yyval.interm.type).basicType = EbtUint;
+        (yyval.interm.type).setVector(2);
     }
-#line 6090 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6091 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 263:
-#line 1874 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 237:
+#line 1697 "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 = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, true);
+        (yyval.interm.type).basicType = EbtUint;
+        (yyval.interm.type).setVector(3);
     }
-#line 6100 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6102 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 264:
-#line 1879 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 238:
+#line 1703 "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 = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true);
+        (yyval.interm.type).basicType = EbtUint;
+        (yyval.interm.type).setVector(4);
     }
-#line 6110 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6113 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 265:
-#line 1884 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 239:
+#line 1709 "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 = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true, true);
+        (yyval.interm.type).basicType = EbtUint64;
+        (yyval.interm.type).setVector(2);
     }
-#line 6120 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6124 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 266:
-#line 1889 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 240:
+#line 1715 "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 = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtInt, Esd1D);
+        (yyval.interm.type).basicType = EbtUint64;
+        (yyval.interm.type).setVector(3);
     }
-#line 6130 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6135 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 267:
-#line 1894 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 241:
+#line 1721 "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 = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtInt, Esd2D);
+        (yyval.interm.type).basicType = EbtUint64;
+        (yyval.interm.type).setVector(4);
     }
-#line 6140 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6146 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 268:
-#line 1899 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 242:
+#line 1727 "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);
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6150 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6156 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 269:
-#line 1904 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 243:
+#line 1732 "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);
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(3, 3);
     }
-#line 6160 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6166 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 270:
-#line 1909 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 244:
+#line 1737 "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);
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(4, 4);
     }
-#line 6170 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6176 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 271:
-#line 1914 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 245:
+#line 1742 "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);
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6180 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6186 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 272:
-#line 1919 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 246:
+#line 1747 "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);
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 3);
     }
-#line 6190 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6196 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 273:
-#line 1924 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 247:
+#line 1752 "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);
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 4);
     }
-#line 6200 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6206 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 274:
-#line 1929 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 248:
+#line 1757 "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);
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(3, 2);
     }
-#line 6210 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6216 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 275:
-#line 1934 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 249:
+#line 1762 "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);
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(3, 3);
     }
-#line 6220 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6226 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 276:
-#line 1939 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 250:
+#line 1767 "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);
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(3, 4);
     }
-#line 6230 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6236 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 277:
-#line 1944 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 251:
+#line 1772 "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);
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(4, 2);
     }
-#line 6240 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6246 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 278:
-#line 1949 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 252:
+#line 1777 "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);
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(4, 3);
     }
-#line 6250 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6256 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 279:
-#line 1954 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 253:
+#line 1782 "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);
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(4, 4);
     }
-#line 6260 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6266 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 280:
-#line 1959 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 254:
+#line 1787 "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 = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, EsdRect);
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6270 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6277 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 281:
-#line 1964 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 255:
+#line 1793 "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 = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, EsdRect, false, true);
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(3, 3);
     }
-#line 6280 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6288 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 282:
-#line 1969 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 256:
+#line 1799 "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 = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtInt, EsdRect);
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(4, 4);
     }
-#line 6290 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6299 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 283:
-#line 1974 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 257:
+#line 1805 "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 = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtUint, EsdRect);
-    }
-#line 6300 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 284:
-#line 1979 "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);
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(2, 2);
     }
 #line 6310 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 285:
-#line 1984 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 258:
+#line 1811 "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 = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtInt, EsdBuffer);
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(2, 3);
     }
-#line 6320 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6321 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 259:
+#line 1817 "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 6332 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 260:
+#line 1823 "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 6343 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 261:
+#line 1829 "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 6354 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 262:
+#line 1835 "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 6365 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 263:
+#line 1841 "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 6376 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 264:
+#line 1847 "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 6387 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 265:
+#line 1853 "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 6398 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 266:
+#line 1859 "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 6409 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 267:
+#line 1865 "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 6420 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 268:
+#line 1871 "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 6431 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 269:
+#line 1877 "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 6442 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 270:
+#line 1883 "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 6453 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 271:
+#line 1889 "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 6464 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 272:
+#line 1895 "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 6475 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 273:
+#line 1901 "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 6486 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 274:
+#line 1907 "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 6497 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 275:
+#line 1913 "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 6508 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 276:
+#line 1919 "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 6519 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 277:
+#line 1925 "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 6530 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 278:
+#line 1931 "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 6541 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 279:
+#line 1937 "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 6552 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 280:
+#line 1943 "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 6563 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 281:
+#line 1949 "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 6574 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 282:
+#line 1955 "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 6585 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 283:
+#line 1961 "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 6596 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 284:
+#line 1967 "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 6607 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 285:
+#line 1973 "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 6618 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 286:
-#line 1989 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1979 "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);
+    	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 6330 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6629 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 287:
-#line 1994 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1985 "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);
+    	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 6340 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6640 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 288:
-#line 1999 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1991 "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);
+    	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 6350 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6651 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 289:
-#line 2004 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1997 "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);
+    	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 6360 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6662 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 290:
-#line 2009 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2003 "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);
+    	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 6370 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6673 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 291:
-#line 2014 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2009 "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);
+    	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 6380 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6684 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 292:
-#line 2019 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2015 "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);
+    	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 6390 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6695 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 293:
-#line 2024 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2021 "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);
+    	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 6400 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6706 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 294:
-#line 2029 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2027 "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);
+    	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 6410 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6717 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 295:
-#line 2034 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2033 "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);
+    	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 6420 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6728 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 296:
 #line 2039 "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 6739 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 297:
+#line 2045 "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 6750 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 298:
+#line 2051 "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 6761 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 299:
+#line 2057 "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 6772 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 300:
+#line 2063 "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 6783 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 301:
+#line 2069 "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 6794 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 302:
+#line 2075 "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 6804 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 303:
+#line 2080 "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 6814 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 304:
+#line 2085 "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 6824 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 305:
+#line 2090 "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 6834 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 306:
+#line 2095 "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 6844 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 307:
+#line 2100 "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 6854 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 308:
+#line 2105 "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 6864 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 309:
+#line 2110 "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 6874 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 310:
+#line 2115 "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 6884 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 311:
+#line 2120 "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 6894 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 312:
+#line 2125 "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 6904 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 313:
+#line 2130 "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 6914 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 314:
+#line 2135 "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 6924 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 315:
+#line 2140 "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 6934 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 316:
+#line 2145 "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 6944 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 317:
+#line 2150 "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 6954 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 318:
+#line 2155 "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 6964 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 319:
+#line 2160 "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 6974 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 320:
+#line 2165 "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 6984 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 321:
+#line 2170 "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 6994 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 322:
+#line 2175 "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 7004 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 323:
+#line 2180 "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 7014 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 324:
+#line 2185 "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 7024 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 325:
+#line 2190 "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 7034 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 326:
+#line 2195 "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 7044 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 327:
+#line 2200 "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 7054 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 328:
+#line 2205 "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 7064 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 329:
+#line 2210 "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 7074 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 330:
+#line 2215 "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 7084 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 331:
+#line 2220 "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 7094 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 332:
+#line 2225 "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 7104 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 333:
+#line 2230 "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 7114 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 334:
+#line 2235 "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 7124 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 335:
+#line 2240 "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 7134 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 336:
+#line 2245 "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 7144 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 337:
+#line 2250 "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 7154 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 338:
+#line 2255 "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 7164 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 339:
+#line 2260 "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 7174 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 340:
+#line 2265 "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 7184 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 341:
+#line 2270 "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 7194 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 342:
+#line 2275 "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 7204 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 343:
+#line 2280 "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 7214 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 344:
+#line 2285 "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 7224 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 345:
+#line 2290 "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 7234 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 346:
+#line 2295 "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 6430 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7244 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 297:
-#line 2044 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 347:
+#line 2300 "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 6440 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7254 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 298:
-#line 2049 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 348:
+#line 2305 "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 6450 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7264 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 299:
-#line 2054 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 349:
+#line 2310 "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 6460 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7274 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 300:
-#line 2059 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 350:
+#line 2315 "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 6470 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7284 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 301:
-#line 2064 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 351:
+#line 2320 "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 6480 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7294 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 302:
-#line 2069 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 352:
+#line 2325 "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 6490 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7304 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 303:
-#line 2074 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 353:
+#line 2330 "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 6500 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7314 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 304:
-#line 2079 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 354:
+#line 2335 "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 6510 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7324 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 305:
-#line 2084 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 355:
+#line 2340 "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 6520 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7334 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 306:
-#line 2089 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 356:
+#line 2345 "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 6530 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7344 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 307:
-#line 2094 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 357:
+#line 2350 "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 6540 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7354 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 308:
-#line 2099 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 358:
+#line 2355 "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 6550 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7364 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 309:
-#line 2104 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 359:
+#line 2360 "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 6560 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7374 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 310:
-#line 2109 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 360:
+#line 2365 "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 6570 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7384 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 311:
-#line 2114 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 361:
+#line 2370 "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 6580 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7394 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 312:
-#line 2119 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 362:
+#line 2375 "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 6590 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7404 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 313:
-#line 2124 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 363:
+#line 2380 "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 6600 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7414 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 314:
-#line 2129 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 364:
+#line 2385 "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 6610 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7424 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 315:
-#line 2134 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 365:
+#line 2390 "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 6620 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7434 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 316:
-#line 2139 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 366:
+#line 2395 "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 6630 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7444 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 317:
-#line 2144 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 367:
+#line 2400 "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 6640 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7454 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 318:
-#line 2149 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 368:
+#line 2405 "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 6650 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7464 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 319:
-#line 2154 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 369:
+#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.setTexture(EbtFloat, EsdBuffer);
     }
-#line 6660 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7474 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 320:
-#line 2159 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 370:
+#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.setTexture(EbtInt, EsdBuffer);
     }
-#line 6670 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7484 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 321:
-#line 2164 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 371:
+#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.setTexture(EbtUint, EsdBuffer);
     }
-#line 6680 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7494 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 322:
-#line 2169 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 372:
+#line 2425 "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 6690 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7504 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 323:
-#line 2174 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 373:
+#line 2430 "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 6700 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7514 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 324:
-#line 2179 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 374:
+#line 2435 "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 6710 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7524 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 325:
-#line 2184 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 375:
+#line 2440 "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 6720 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7534 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 326:
-#line 2189 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 376:
+#line 2445 "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 6730 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7544 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 327:
-#line 2194 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 377:
+#line 2450 "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 6740 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7554 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 328:
-#line 2199 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 378:
+#line 2455 "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 6750 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7564 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 329:
-#line 2204 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 379:
+#line 2460 "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 6760 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7574 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 330:
-#line 2209 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 380:
+#line 2465 "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 6770 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7584 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 331:
-#line 2214 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 381:
+#line 2470 "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 6780 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7594 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 332:
-#line 2219 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 382:
+#line 2475 "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 6790 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7604 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 333:
-#line 2224 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 383:
+#line 2480 "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 6800 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7614 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 334:
-#line 2229 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 384:
+#line 2485 "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 6810 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7624 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 335:
-#line 2234 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 385:
+#line 2490 "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 6820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7634 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 336:
-#line 2239 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 386:
+#line 2495 "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 6830 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7644 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 337:
-#line 2244 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 387:
+#line 2500 "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 6840 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7654 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 338:
-#line 2249 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 388:
+#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.setImage(EbtInt, EsdRect);
     }
-#line 6850 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7664 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 339:
-#line 2254 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 389:
+#line 2510 "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 6860 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7674 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 340:
-#line 2259 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 390:
+#line 2515 "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 6870 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7684 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 341:
-#line 2264 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 391:
+#line 2520 "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 6880 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7694 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 342:
-#line 2269 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 392:
+#line 2525 "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 6890 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7704 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 343:
-#line 2274 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 393:
+#line 2530 "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 6900 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7714 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 344:
-#line 2279 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 394:
+#line 2535 "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 6910 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7724 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 345:
-#line 2284 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 395:
+#line 2540 "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 6920 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7734 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 346:
-#line 2289 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 396:
+#line 2545 "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 6930 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7744 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 347:
-#line 2294 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 397:
+#line 2550 "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 6940 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7754 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 348:
-#line 2299 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 398:
+#line 2555 "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 6950 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7764 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 349:
-#line 2304 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 399:
+#line 2560 "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 6960 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7774 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 350:
-#line 2309 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 400:
+#line 2565 "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 6970 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7784 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 351:
-#line 2314 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 401:
+#line 2570 "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 6980 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7794 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 352:
-#line 2319 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 402:
+#line 2575 "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 6990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7804 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 353:
-#line 2324 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 403:
+#line 2580 "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 7000 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7814 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 354:
-#line 2329 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 404:
+#line 2585 "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 7010 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7824 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 355:
-#line 2334 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 405:
+#line 2590 "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 7020 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7834 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 356:
-#line 2339 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 406:
+#line 2595 "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 7030 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7844 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 357:
-#line 2344 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 407:
+#line 2600 "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 7040 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7854 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 358:
-#line 2349 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 408:
+#line 2605 "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 7050 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7864 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 359:
-#line 2354 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 409:
+#line 2610 "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 7060 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7874 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 360:
-#line 2359 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 410:
+#line 2615 "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 7070 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7884 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 361:
-#line 2364 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 411:
+#line 2620 "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 7081 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7895 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 362:
-#line 2370 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 412:
+#line 2626 "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 7092 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7906 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 363:
-#line 2376 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 413:
+#line 2632 "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 7103 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7917 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 364:
-#line 2382 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 414:
+#line 2638 "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 7114 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7928 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 365:
-#line 2388 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 415:
+#line 2644 "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 7125 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7939 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 366:
-#line 2394 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 416:
+#line 2650 "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 7136 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7950 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 367:
-#line 2400 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 417:
+#line 2656 "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 7147 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7961 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 368:
-#line 2406 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 418:
+#line 2662 "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 7157 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7971 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 369:
-#line 2411 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 419:
+#line 2667 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         //
         // This is for user defined type names.  The lexical phase looked up the
@@ -7171,47 +7985,47 @@
         } else
             parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), "");
     }
-#line 7175 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7989 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 370:
-#line 2427 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 420:
+#line 2683 "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 7185 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7999 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 371:
-#line 2432 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 421:
+#line 2688 "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 7195 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8009 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 372:
-#line 2437 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 422:
+#line 2693 "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 7205 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8019 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 373:
-#line 2445 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 423:
+#line 2701 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); }
-#line 7211 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8025 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 374:
-#line 2445 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 424:
+#line 2701 "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);
@@ -7223,17 +8037,17 @@
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 7227 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8041 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 375:
-#line 2456 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 425:
+#line 2712 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); }
-#line 7233 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8047 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 376:
-#line 2456 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 426:
+#line 2712 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         TType* structure = new TType((yyvsp[-1].interm.typeList), TString(""));
         (yyval.interm.type).init((yyvsp[-4].lex).loc);
@@ -7241,19 +8055,19 @@
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 7245 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8059 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 377:
-#line 2466 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 427:
+#line 2722 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList) = (yyvsp[0].interm.typeList);
     }
-#line 7253 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8067 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 378:
-#line 2469 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 428:
+#line 2725 "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) {
@@ -7264,11 +8078,11 @@
             (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]);
         }
     }
-#line 7268 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8082 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 379:
-#line 2482 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 429:
+#line 2738 "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");
@@ -7287,11 +8101,11 @@
             (*(yyval.interm.typeList))[i].type->mergeType((yyvsp[-2].interm.type));
         }
     }
-#line 7291 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8105 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 380:
-#line 2500 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 430:
+#line 2756 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalQualifierFixCheck((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier);
         if ((yyvsp[-2].interm.type).arraySizes) {
@@ -7313,38 +8127,38 @@
             (*(yyval.interm.typeList))[i].type->mergeType((yyvsp[-2].interm.type));
         }
     }
-#line 7317 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8131 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 381:
-#line 2524 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 431:
+#line 2780 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList) = new TTypeList;
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 7326 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8140 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 382:
-#line 2528 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 432:
+#line 2784 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 7334 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8148 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 383:
-#line 2534 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 433:
+#line 2790 "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 7344 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8158 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 384:
-#line 2539 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 434:
+#line 2795 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayDimCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes, 0);
 
@@ -7353,219 +8167,219 @@
         (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string);
         (yyval.interm.typeLine).type->newArraySizes(*(yyvsp[0].interm).arraySizes);
     }
-#line 7357 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8171 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 385:
-#line 2550 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 435:
+#line 2806 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 7365 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8179 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 386:
-#line 2553 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 436:
+#line 2809 "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 7376 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8190 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 387:
-#line 2559 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 437:
+#line 2815 "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 7387 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8201 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 388:
-#line 2568 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 438:
+#line 2824 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc());
     }
-#line 7395 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8209 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 389:
-#line 2571 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 439:
+#line 2827 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
     }
-#line 7403 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8217 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 390:
-#line 2577 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 440:
+#line 2833 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7409 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8223 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 391:
-#line 2581 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 441:
+#line 2837 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7415 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8229 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 392:
-#line 2582 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 442:
+#line 2838 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7421 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8235 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 393:
-#line 2588 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 443:
+#line 2844 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7427 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8241 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 394:
-#line 2589 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 444:
+#line 2845 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7433 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8247 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 395:
-#line 2590 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 445:
+#line 2846 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7439 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8253 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 396:
-#line 2591 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 446:
+#line 2847 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7445 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8259 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 397:
-#line 2592 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 447:
+#line 2848 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7451 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8265 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 398:
-#line 2593 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 448:
+#line 2849 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7457 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8271 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 399:
-#line 2594 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 449:
+#line 2850 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7463 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8277 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 400:
-#line 2598 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 450:
+#line 2854 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = 0; }
-#line 7469 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8283 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 401:
-#line 2599 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 451:
+#line 2855 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
     }
-#line 7478 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8292 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 402:
-#line 2603 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 452:
+#line 2859 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
     }
-#line 7487 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8301 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 403:
-#line 2607 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 453:
+#line 2863 "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 7497 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8311 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 404:
-#line 2615 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 454:
+#line 2871 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7503 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8317 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 405:
-#line 2616 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 455:
+#line 2872 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7509 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8323 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 406:
-#line 2620 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 456:
+#line 2876 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         ++parseContext.controlFlowNestingLevel;
     }
-#line 7517 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8331 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 407:
-#line 2623 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 457:
+#line 2879 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 7526 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8340 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 408:
-#line 2627 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 458:
+#line 2883 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 7536 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8350 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 409:
-#line 2632 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 459:
+#line 2888 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 7547 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8361 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 410:
-#line 2641 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 460:
+#line 2897 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
     }
-#line 7555 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8369 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 411:
-#line 2644 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 461:
+#line 2900 "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 7565 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8379 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 412:
-#line 2652 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 462:
+#line 2908 "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 ||
@@ -7574,11 +8388,11 @@
             (yyval.interm.intermNode) = 0;  // start a fresh subsequence for what's after this case
         }
     }
-#line 7578 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8392 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 413:
-#line 2660 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 463:
+#line 2916 "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)) {
@@ -7587,59 +8401,59 @@
         } else
             (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
     }
-#line 7591 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8405 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 414:
-#line 2671 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 464:
+#line 2927 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = 0; }
-#line 7597 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8411 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 415:
-#line 2672 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 465:
+#line 2928 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[-1].interm.intermTypedNode)); }
-#line 7603 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8417 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 416:
-#line 2676 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 466:
+#line 2932 "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 7612 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8426 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 417:
-#line 2683 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 467:
+#line 2939 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode);
     }
-#line 7621 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8435 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 418:
-#line 2687 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 468:
+#line 2943 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 7630 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8444 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 419:
-#line 2695 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 469:
+#line 2951 "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 7639 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8453 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 420:
-#line 2699 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 470:
+#line 2955 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type));
 
@@ -7650,11 +8464,11 @@
         else
             (yyval.interm.intermTypedNode) = 0;
     }
-#line 7654 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8468 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 421:
-#line 2712 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 471:
+#line 2968 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // start new switch sequence on the switch stack
         ++parseContext.controlFlowNestingLevel;
@@ -7663,11 +8477,11 @@
         parseContext.switchLevel.push_back(parseContext.statementNestingLevel);
         parseContext.symbolTable.push();
     }
-#line 7667 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8481 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 422:
-#line 2720 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 472:
+#line 2976 "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();
@@ -7677,27 +8491,27 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 7681 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8495 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 423:
-#line 2732 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 473:
+#line 2988 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
     }
-#line 7689 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8503 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 424:
-#line 2735 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 474:
+#line 2991 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 7697 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8511 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 425:
-#line 2741 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 475:
+#line 2997 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
@@ -7710,11 +8524,11 @@
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc);
         }
     }
-#line 7714 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8528 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 426:
-#line 2753 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 476:
+#line 3009 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
@@ -7724,11 +8538,11 @@
         else
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc);
     }
-#line 7728 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8542 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 427:
-#line 2765 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 477:
+#line 3021 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", "");
@@ -7737,11 +8551,11 @@
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 7741 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8555 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 428:
-#line 2773 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 478:
+#line 3029 "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);
@@ -7749,21 +8563,21 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 7753 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8567 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 429:
-#line 2780 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 479:
+#line 3036 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 7763 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8577 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 430:
-#line 2785 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 480:
+#line 3041 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", "");
@@ -7775,22 +8589,22 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 7779 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8593 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 431:
-#line 2796 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 481:
+#line 3052 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.push();
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 7790 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8604 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 432:
-#line 2802 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 482:
+#line 3058 "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);
@@ -7803,81 +8617,81 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 7807 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8621 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 433:
-#line 2817 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 483:
+#line 3073 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 7815 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8629 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 434:
-#line 2820 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 484:
+#line 3076 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 7823 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8637 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 435:
-#line 2826 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 485:
+#line 3082 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 7831 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8645 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 436:
-#line 2829 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 486:
+#line 3085 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = 0;
     }
-#line 7839 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8653 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 437:
-#line 2835 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 487:
+#line 3091 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 7848 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8662 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 438:
-#line 2839 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 488:
+#line 3095 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode);
     }
-#line 7857 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8671 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 439:
-#line 2846 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 489:
+#line 3102 "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 7867 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8681 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 440:
-#line 2851 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 490:
+#line 3107 "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 7877 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8691 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 441:
-#line 2856 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 491:
+#line 3112 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc);
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid)
@@ -7885,83 +8699,83 @@
         if (parseContext.inMain)
             parseContext.postEntryPointReturn = true;
     }
-#line 7889 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8703 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 442:
-#line 2863 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 492:
+#line 3119 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 7897 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8711 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 443:
-#line 2866 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 493:
+#line 3122 "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 7906 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8720 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 444:
-#line 2875 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 494:
+#line 3131 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
         parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
     }
-#line 7915 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8729 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 445:
-#line 2879 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 495:
+#line 3135 "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 7926 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8740 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 446:
-#line 2888 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 496:
+#line 3144 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 7934 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8748 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 447:
-#line 2891 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 497:
+#line 3147 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 7942 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8756 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 448:
-#line 2894 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 498:
+#line 3150 "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 7952 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8766 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 449:
-#line 2902 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 499:
+#line 3158 "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 7961 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8775 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 450:
-#line 2906 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 500:
+#line 3162 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         //   May be best done as post process phase on intermediate code
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue)
@@ -7977,11 +8791,11 @@
         (yyval.interm.intermNode)->getAsAggregate()->setDebug(parseContext.contextPragma.debug);
         (yyval.interm.intermNode)->getAsAggregate()->addToPragmaTable(parseContext.contextPragma.pragmaTable);
     }
-#line 7981 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8795 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
 
-#line 7985 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8799 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -8209,5 +9023,5 @@
 #endif
   return yyresult;
 }
-#line 2923 "MachineIndependent/glslang.y" /* yacc.c:1906  */
+#line 3179 "MachineIndependent/glslang.y" /* yacc.c:1906  */
 
diff --git a/glslang/MachineIndependent/glslang_tab.cpp.h b/glslang/MachineIndependent/glslang_tab.cpp.h
index b2e0063..59c547f 100644
--- a/glslang/MachineIndependent/glslang_tab.cpp.h
+++ b/glslang/MachineIndependent/glslang_tab.cpp.h
@@ -47,299 +47,349 @@
   {
     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,
-    SAMPLER = 410,
-    SAMPLERSHADOW = 411,
-    TEXTURE1D = 412,
-    TEXTURE2D = 413,
-    TEXTURE3D = 414,
-    TEXTURECUBE = 415,
-    TEXTURE1DARRAY = 416,
-    TEXTURE2DARRAY = 417,
-    ITEXTURE1D = 418,
-    ITEXTURE2D = 419,
-    ITEXTURE3D = 420,
-    ITEXTURECUBE = 421,
-    ITEXTURE1DARRAY = 422,
-    ITEXTURE2DARRAY = 423,
-    UTEXTURE1D = 424,
-    UTEXTURE2D = 425,
-    UTEXTURE3D = 426,
-    UTEXTURECUBE = 427,
-    UTEXTURE1DARRAY = 428,
-    UTEXTURE2DARRAY = 429,
-    TEXTURE2DRECT = 430,
-    ITEXTURE2DRECT = 431,
-    UTEXTURE2DRECT = 432,
-    TEXTUREBUFFER = 433,
-    ITEXTUREBUFFER = 434,
-    UTEXTUREBUFFER = 435,
-    TEXTURECUBEARRAY = 436,
-    ITEXTURECUBEARRAY = 437,
-    UTEXTURECUBEARRAY = 438,
-    TEXTURE2DMS = 439,
-    ITEXTURE2DMS = 440,
-    UTEXTURE2DMS = 441,
-    TEXTURE2DMSARRAY = 442,
-    ITEXTURE2DMSARRAY = 443,
-    UTEXTURE2DMSARRAY = 444,
-    SUBPASSINPUT = 445,
-    SUBPASSINPUTMS = 446,
-    ISUBPASSINPUT = 447,
-    ISUBPASSINPUTMS = 448,
-    USUBPASSINPUT = 449,
-    USUBPASSINPUTMS = 450,
-    IMAGE1D = 451,
-    IIMAGE1D = 452,
-    UIMAGE1D = 453,
-    IMAGE2D = 454,
-    IIMAGE2D = 455,
-    UIMAGE2D = 456,
-    IMAGE3D = 457,
-    IIMAGE3D = 458,
-    UIMAGE3D = 459,
-    IMAGE2DRECT = 460,
-    IIMAGE2DRECT = 461,
-    UIMAGE2DRECT = 462,
-    IMAGECUBE = 463,
-    IIMAGECUBE = 464,
-    UIMAGECUBE = 465,
-    IMAGEBUFFER = 466,
-    IIMAGEBUFFER = 467,
-    UIMAGEBUFFER = 468,
-    IMAGE1DARRAY = 469,
-    IIMAGE1DARRAY = 470,
-    UIMAGE1DARRAY = 471,
-    IMAGE2DARRAY = 472,
-    IIMAGE2DARRAY = 473,
-    UIMAGE2DARRAY = 474,
-    IMAGECUBEARRAY = 475,
-    IIMAGECUBEARRAY = 476,
-    UIMAGECUBEARRAY = 477,
-    IMAGE2DMS = 478,
-    IIMAGE2DMS = 479,
-    UIMAGE2DMS = 480,
-    IMAGE2DMSARRAY = 481,
-    IIMAGE2DMSARRAY = 482,
-    UIMAGE2DMSARRAY = 483,
-    STRUCT = 484,
-    VOID = 485,
-    WHILE = 486,
-    IDENTIFIER = 487,
-    TYPE_NAME = 488,
-    FLOATCONSTANT = 489,
-    DOUBLECONSTANT = 490,
-    INTCONSTANT = 491,
-    UINTCONSTANT = 492,
-    INT64CONSTANT = 493,
-    UINT64CONSTANT = 494,
-    INT16CONSTANT = 495,
-    UINT16CONSTANT = 496,
-    BOOLCONSTANT = 497,
-    FLOAT16CONSTANT = 498,
-    LEFT_OP = 499,
-    RIGHT_OP = 500,
-    INC_OP = 501,
-    DEC_OP = 502,
-    LE_OP = 503,
-    GE_OP = 504,
-    EQ_OP = 505,
-    NE_OP = 506,
-    AND_OP = 507,
-    OR_OP = 508,
-    XOR_OP = 509,
-    MUL_ASSIGN = 510,
-    DIV_ASSIGN = 511,
-    ADD_ASSIGN = 512,
-    MOD_ASSIGN = 513,
-    LEFT_ASSIGN = 514,
-    RIGHT_ASSIGN = 515,
-    AND_ASSIGN = 516,
-    XOR_ASSIGN = 517,
-    OR_ASSIGN = 518,
-    SUB_ASSIGN = 519,
-    LEFT_PAREN = 520,
-    RIGHT_PAREN = 521,
-    LEFT_BRACKET = 522,
-    RIGHT_BRACKET = 523,
-    LEFT_BRACE = 524,
-    RIGHT_BRACE = 525,
-    DOT = 526,
-    COMMA = 527,
-    COLON = 528,
-    EQUAL = 529,
-    SEMICOLON = 530,
-    BANG = 531,
-    DASH = 532,
-    TILDE = 533,
-    PLUS = 534,
-    STAR = 535,
-    SLASH = 536,
-    PERCENT = 537,
-    LEFT_ANGLE = 538,
-    RIGHT_ANGLE = 539,
-    VERTICAL_BAR = 540,
-    CARET = 541,
-    AMPERSAND = 542,
-    QUESTION = 543,
-    INVARIANT = 544,
-    PRECISE = 545,
-    HIGH_PRECISION = 546,
-    MEDIUM_PRECISION = 547,
-    LOW_PRECISION = 548,
-    PRECISION = 549,
-    PACKED = 550,
-    RESOURCE = 551,
-    SUPERP = 552
+    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,
+    SAMPLER = 458,
+    SAMPLERSHADOW = 459,
+    TEXTURE1D = 460,
+    TEXTURE2D = 461,
+    TEXTURE3D = 462,
+    TEXTURECUBE = 463,
+    TEXTURE1DARRAY = 464,
+    TEXTURE2DARRAY = 465,
+    ITEXTURE1D = 466,
+    ITEXTURE2D = 467,
+    ITEXTURE3D = 468,
+    ITEXTURECUBE = 469,
+    ITEXTURE1DARRAY = 470,
+    ITEXTURE2DARRAY = 471,
+    UTEXTURE1D = 472,
+    UTEXTURE2D = 473,
+    UTEXTURE3D = 474,
+    UTEXTURECUBE = 475,
+    UTEXTURE1DARRAY = 476,
+    UTEXTURE2DARRAY = 477,
+    TEXTURE2DRECT = 478,
+    ITEXTURE2DRECT = 479,
+    UTEXTURE2DRECT = 480,
+    TEXTUREBUFFER = 481,
+    ITEXTUREBUFFER = 482,
+    UTEXTUREBUFFER = 483,
+    TEXTURECUBEARRAY = 484,
+    ITEXTURECUBEARRAY = 485,
+    UTEXTURECUBEARRAY = 486,
+    TEXTURE2DMS = 487,
+    ITEXTURE2DMS = 488,
+    UTEXTURE2DMS = 489,
+    TEXTURE2DMSARRAY = 490,
+    ITEXTURE2DMSARRAY = 491,
+    UTEXTURE2DMSARRAY = 492,
+    SUBPASSINPUT = 493,
+    SUBPASSINPUTMS = 494,
+    ISUBPASSINPUT = 495,
+    ISUBPASSINPUTMS = 496,
+    USUBPASSINPUT = 497,
+    USUBPASSINPUTMS = 498,
+    IMAGE1D = 499,
+    IIMAGE1D = 500,
+    UIMAGE1D = 501,
+    IMAGE2D = 502,
+    IIMAGE2D = 503,
+    UIMAGE2D = 504,
+    IMAGE3D = 505,
+    IIMAGE3D = 506,
+    UIMAGE3D = 507,
+    IMAGE2DRECT = 508,
+    IIMAGE2DRECT = 509,
+    UIMAGE2DRECT = 510,
+    IMAGECUBE = 511,
+    IIMAGECUBE = 512,
+    UIMAGECUBE = 513,
+    IMAGEBUFFER = 514,
+    IIMAGEBUFFER = 515,
+    UIMAGEBUFFER = 516,
+    IMAGE1DARRAY = 517,
+    IIMAGE1DARRAY = 518,
+    UIMAGE1DARRAY = 519,
+    IMAGE2DARRAY = 520,
+    IIMAGE2DARRAY = 521,
+    UIMAGE2DARRAY = 522,
+    IMAGECUBEARRAY = 523,
+    IIMAGECUBEARRAY = 524,
+    UIMAGECUBEARRAY = 525,
+    IMAGE2DMS = 526,
+    IIMAGE2DMS = 527,
+    UIMAGE2DMS = 528,
+    IMAGE2DMSARRAY = 529,
+    IIMAGE2DMSARRAY = 530,
+    UIMAGE2DMSARRAY = 531,
+    STRUCT = 532,
+    VOID = 533,
+    WHILE = 534,
+    IDENTIFIER = 535,
+    TYPE_NAME = 536,
+    FLOATCONSTANT = 537,
+    DOUBLECONSTANT = 538,
+    INT16CONSTANT = 539,
+    UINT16CONSTANT = 540,
+    INT32CONSTANT = 541,
+    UINT32CONSTANT = 542,
+    INTCONSTANT = 543,
+    UINTCONSTANT = 544,
+    INT64CONSTANT = 545,
+    UINT64CONSTANT = 546,
+    BOOLCONSTANT = 547,
+    FLOAT16CONSTANT = 548,
+    LEFT_OP = 549,
+    RIGHT_OP = 550,
+    INC_OP = 551,
+    DEC_OP = 552,
+    LE_OP = 553,
+    GE_OP = 554,
+    EQ_OP = 555,
+    NE_OP = 556,
+    AND_OP = 557,
+    OR_OP = 558,
+    XOR_OP = 559,
+    MUL_ASSIGN = 560,
+    DIV_ASSIGN = 561,
+    ADD_ASSIGN = 562,
+    MOD_ASSIGN = 563,
+    LEFT_ASSIGN = 564,
+    RIGHT_ASSIGN = 565,
+    AND_ASSIGN = 566,
+    XOR_ASSIGN = 567,
+    OR_ASSIGN = 568,
+    SUB_ASSIGN = 569,
+    LEFT_PAREN = 570,
+    RIGHT_PAREN = 571,
+    LEFT_BRACKET = 572,
+    RIGHT_BRACKET = 573,
+    LEFT_BRACE = 574,
+    RIGHT_BRACE = 575,
+    DOT = 576,
+    COMMA = 577,
+    COLON = 578,
+    EQUAL = 579,
+    SEMICOLON = 580,
+    BANG = 581,
+    DASH = 582,
+    TILDE = 583,
+    PLUS = 584,
+    STAR = 585,
+    SLASH = 586,
+    PERCENT = 587,
+    LEFT_ANGLE = 588,
+    RIGHT_ANGLE = 589,
+    VERTICAL_BAR = 590,
+    CARET = 591,
+    AMPERSAND = 592,
+    QUESTION = 593,
+    INVARIANT = 594,
+    PRECISE = 595,
+    HIGH_PRECISION = 596,
+    MEDIUM_PRECISION = 597,
+    LOW_PRECISION = 598,
+    PRECISION = 599,
+    PACKED = 600,
+    RESOURCE = 601,
+    SUPERP = 602
   };
 #endif
 
@@ -348,7 +398,7 @@
 typedef union YYSTYPE YYSTYPE;
 union YYSTYPE
 {
-#line 68 "MachineIndependent/glslang.y" /* yacc.c:1909  */
+#line 69 "MachineIndependent/glslang.y" /* yacc.c:1909  */
 
     struct {
         glslang::TSourceLoc loc;
@@ -382,7 +432,7 @@
         };
     } interm;
 
-#line 386 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909  */
+#line 436 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909  */
 };
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp
index 7e15392..fcea4d5 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;
 
@@ -790,11 +940,67 @@
     case EOpSinCos:                     out.debug << "sincos";                break;
     case EOpGenMul:                     out.debug << "mul";                   break;
 
-    case EOpAllMemoryBarrierWithGroupSync:    out.debug << "AllMemoryBarrierWithGroupSync";    break;
-    case EOpGroupMemoryBarrierWithGroupSync: out.debug << "GroupMemoryBarrierWithGroupSync"; break;
-    case EOpWorkgroupMemoryBarrier:           out.debug << "WorkgroupMemoryBarrier";           break;
+    case EOpAllMemoryBarrierWithGroupSync:       out.debug << "AllMemoryBarrierWithGroupSync";    break;
+    case EOpGroupMemoryBarrierWithGroupSync:     out.debug << "GroupMemoryBarrierWithGroupSync"; break;
+    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;
 
@@ -861,9 +1067,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.
@@ -883,6 +1087,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;
@@ -919,26 +1159,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 9ca1557..6d4164e 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 e0133dc..1e62e9b 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
@@ -77,7 +78,7 @@
         assert(i < MaxSwizzleSelectors);
         return components[i];
     }
-    
+
 private:
     int size_;
     selectorType components[MaxSwizzleSelectors];
@@ -400,6 +401,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*);
@@ -409,6 +411,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&);
@@ -422,15 +429,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;
@@ -638,14 +644,17 @@
     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;
 
     const EShLanguage language;  // stage, known at construction time
     EShSource source;            // source language, known a bit later
     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 5f26b43..c3d792c 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,11 +78,13 @@
     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);
-#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 ecda34c..1b4fbae 100644
--- a/glslang/MachineIndependent/preprocessor/Pp.cpp
+++ b/glslang/MachineIndependent/preprocessor/Pp.cpp
@@ -721,12 +721,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) {
@@ -765,9 +763,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 fa01549..cd8613f 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
@@ -107,13 +108,16 @@
     bool acceptFloat16 = parseContext.intermediate.getSource() == EShSourceHlsl;
     bool isFloat16 = false;
     bool requireHF = false;
+    if (
 #ifdef AMD_EXTENSIONS
-    if (parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float)) {
+        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)) {
         acceptFloat16 = true;
         generateFloat16 = true;
         requireHF = true;
     }
-#endif
 
     const auto saveName = [&](int ch) {
         if (len <= MaxTokenLength)
@@ -197,10 +201,8 @@
             isDouble = 1;
         }
     } else if (acceptFloat16 && (ch == 'h' || ch == 'H')) {
-#ifdef AMD_EXTENSIONS
         if (generateFloat16)
             parseContext.float16Check(ppToken->loc, "half floating-point suffix");
-#endif
         if (!HasDecimalOrExponent)
             parseContext.ppError(ppToken->loc, "float literal needs a decimal point or exponent", "", "");
         if (requireHF) {
@@ -333,15 +335,27 @@
     int ch = 0;
     int ii = 0;
     unsigned long long ival = 0;
-    bool enableInt64 = pp->parseContext.version >= 450 && pp->parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_int64);
+    bool enableInt64 = pp->parseContext.version >= 450 &&
+                      (pp->parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_int64) ||
+                       pp->parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
+                       pp->parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int64));
+    bool enableInt16 = pp->parseContext.version >= 450 &&
+                       (
 #ifdef AMD_EXTENSIONS
-    bool enableInt16 = pp->parseContext.version >= 450 && pp->parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_int16);
+                       pp->parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_int16) ||
 #endif
+                       pp->parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
+                       pp->parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int16));
     bool acceptHalf = pp->parseContext.intermediate.getSource() == EShSourceHlsl;
+    if (pp->parseContext.version >= 450 &&
+        (
 #ifdef AMD_EXTENSIONS
-    if (pp->parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float))
-        acceptHalf = true;
+         pp->parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float) ||
 #endif
+         pp->parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
+         pp->parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_float16))) {
+        acceptHalf = true;
+    }
 
     const auto floatingPointChar = [&](int ch) { return ch == '.' || ch == 'e' || ch == 'E' ||
                                                                      ch == 'f' || ch == 'F' ||
@@ -409,9 +423,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') ||
@@ -452,15 +464,13 @@
 
                     if (enableInt64) {
                         int nextCh = getch();
-                        if ((ch == 'u' && nextCh == 'l') || (ch == 'U' && nextCh == 'L')) {
+                        if ((ch == 'u' || ch == 'U') && (nextCh == 'l' || nextCh == 'L')) {
                             if (len < MaxTokenLength)
                                 ppToken->name[len++] = (char)nextCh;
                             isInt64 = true;
                         } else
                             ungetch();
                     }
-
-#ifdef AMD_EXTENSIONS
                     if (enableInt16) {
                         int nextCh = getch();
                         if ((ch == 'u' && nextCh == 's') || (ch == 'U' && nextCh == 'S')) {
@@ -470,17 +480,14 @@
                         } else
                             ungetch();
                     }
-#endif
                 } else if (enableInt64 && (ch == 'l' || ch == 'L')) {
                     if (len < MaxTokenLength)
                         ppToken->name[len++] = (char)ch;
                     isInt64 = true;
-#ifdef AMD_EXTENSIONS
                 } else if (enableInt16 && (ch == 's' || ch == 'S')) {
                     if (len < MaxTokenLength)
                         ppToken->name[len++] = (char)ch;
                     isInt16 = true;
-#endif
                 } else
                     ungetch();
                 ppToken->name[len] = '\0';
@@ -488,11 +495,9 @@
                 if (isInt64) {
                     ppToken->i64val = ival;
                     return isUnsigned ? PpAtomConstUint64 : PpAtomConstInt64;
-#ifdef AMD_EXTENSIONS
                 } else if (isInt16) {
                     ppToken->ival = (int)ival;
                     return isUnsigned ? PpAtomConstUint16 : PpAtomConstInt16;
-#endif
                 } else {
                     ppToken->ival = (int)ival;
                     return isUnsigned ? PpAtomConstUint : PpAtomConstInt;
@@ -502,9 +507,7 @@
 
                 bool isUnsigned = false;
                 bool isInt64 = false;
-#ifdef AMD_EXTENSIONS
                 bool isInt16 = false;
-#endif
                 bool octalOverflow = false;
                 bool nonOctal = false;
                 ival = 0;
@@ -552,7 +555,7 @@
 
                     if (enableInt64) {
                         int nextCh = getch();
-                        if ((ch == 'u' && nextCh == 'l') || (ch == 'U' && nextCh == 'L')) {
+                        if ((ch == 'u' || ch == 'U') && (nextCh == 'l' || nextCh == 'L')) {
                             if (len < MaxTokenLength)
                                 ppToken->name[len++] = (char)nextCh;
                             isInt64 = true;
@@ -560,7 +563,6 @@
                             ungetch();
                     }
 
-#ifdef AMD_EXTENSIONS
                     if (enableInt16) {
                         int nextCh = getch();
                         if ((ch == 'u' && nextCh == 's') || (ch == 'U' && nextCh == 'S')) {
@@ -570,17 +572,14 @@
                         } else
                             ungetch();
                     }
-#endif
                 } else if (enableInt64 && (ch == 'l' || ch == 'L')) {
                     if (len < MaxTokenLength)
                         ppToken->name[len++] = (char)ch;
                     isInt64 = true;
-#ifdef AMD_EXTENSIONS
                 } else if (enableInt16 && (ch == 's' || ch == 'S')) {
                     if (len < MaxTokenLength)
                         ppToken->name[len++] = (char)ch;
                     isInt16 = true;
-#endif
                 } else
                     ungetch();
                 ppToken->name[len] = '\0';
@@ -591,11 +590,9 @@
                 if (isInt64) {
                     ppToken->i64val = ival;
                     return isUnsigned ? PpAtomConstUint64 : PpAtomConstInt64;
-#ifdef AMD_EXTENSIONS
                 } else if (isInt16) {
                     ppToken->ival = (int)ival;
                     return isUnsigned ? PpAtomConstUint16 : PpAtomConstInt16;
-#endif
                 } else {
                     ppToken->ival = (int)ival;
                     return isUnsigned ? PpAtomConstUint : PpAtomConstInt;
@@ -622,9 +619,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;
@@ -632,7 +627,7 @@
 
                     if (enableInt64) {
                         int nextCh = getch();
-                        if ((ch == 'u' && nextCh == 'l') || (ch == 'U' && nextCh == 'L')) {
+                        if ((ch == 'u' || ch == 'U') && (nextCh == 'l' || nextCh == 'L')) {
                             if (len < MaxTokenLength)
                                 ppToken->name[len++] = (char)nextCh;
                             isInt64 = true;
@@ -640,7 +635,6 @@
                             ungetch();
                     }
 
-#ifdef AMD_EXTENSIONS
                     if (enableInt16) {
                         int nextCh = getch();
                         if ((ch == 'u' && nextCh == 's') || (ch == 'U' && nextCh == 'S')) {
@@ -650,17 +644,14 @@
                         } else
                             ungetch();
                     }
-#endif
-                } else if (enableInt64 && (ch == 'l' || ch == 'L')) {
+               } else if (enableInt64 && (ch == 'l' || ch == 'L')) {
                     if (len < MaxTokenLength)
                         ppToken->name[len++] = (char)ch;
                     isInt64 = true;
-#ifdef AMD_EXTENSIONS
                 } else if (enableInt16 && (ch == 's' || ch == 'S')) {
                     if (len < MaxTokenLength)
                         ppToken->name[len++] = (char)ch;
                     isInt16 = true;
-#endif
                 } else
                     ungetch();
 
@@ -670,19 +661,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) {
@@ -696,11 +683,9 @@
                 if (isInt64) {
                     ppToken->i64val = ival;
                     return isUnsigned ? PpAtomConstUint64 : PpAtomConstInt64;
-#ifdef AMD_EXTENSIONS
                 } else if (isInt16) {
                     ppToken->ival = (int)ival;
                     return isUnsigned ? PpAtomConstUint16 : PpAtomConstInt16;
-#endif
                 } else {
                     ppToken->ival = (int)ival;
                     return isUnsigned ? PpAtomConstUint : PpAtomConstInt;
@@ -950,14 +935,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/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp
index fbbf81b..c4cb3c5 100644
--- a/gtests/AST.FromFile.cpp
+++ b/gtests/AST.FromFile.cpp
@@ -203,6 +203,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 8a64991..a96dbbf 100644
--- a/gtests/Hlsl.FromFile.cpp
+++ b/gtests/Hlsl.FromFile.cpp
@@ -355,6 +355,17 @@
         {"hlsl.type.identifier.frag", "main"},
         {"hlsl.typeGraphCopy.vert", "main"},
         {"hlsl.typedef.frag", "PixelShaderFunction"},
+        {"hlsl.wavequery.comp", "CSMain"},
+        {"hlsl.wavequery.frag", "PixelShaderFunction"},
+        {"hlsl.wavevote.comp", "CSMain"},
+        {"hlsl.wavebroadcast.comp", "CSMain"},
+        {"hlsl.wavereduction.comp", "CSMain"},
+        {"hlsl.waveprefix.comp", "CSMain"},
+        {"hlsl.wavequad.comp", "CSMain"},
+        {"hlsl.waveordered.comp", "CSMain"},
+        {"hlsl.waveordered2.comp", "CSMain"},
+        {"hlsl.waveordered.frag", "PixelShaderFunction"},
+        {"hlsl.waveordered2.frag", "PixelShaderFunction"},
         {"hlsl.whileLoop.frag", "PixelShaderFunction"},
         {"hlsl.void.frag", "PixelShaderFunction"}
     }),
diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp
index 63992f1..ec73ba1 100644
--- a/gtests/Spv.FromFile.cpp
+++ b/gtests/Spv.FromFile.cpp
@@ -323,6 +323,24 @@
         "spv.storageBuffer.vert",
         "spv.precise.tese",
         "spv.precise.tesc",
+        "spv.subgroup.frag",
+        "spv.subgroup.geom",
+        "spv.subgroup.tesc",
+        "spv.subgroup.tese",
+        "spv.subgroup.vert",
+        "spv.subgroupBasic.comp",
+        "spv.subgroupVote.comp",
+        "spv.subgroupBallot.comp",
+        "spv.subgroupShuffle.comp",
+        "spv.subgroupShuffleRelative.comp",
+        "spv.subgroupArithmetic.comp",
+        "spv.subgroupClustered.comp",
+        "spv.subgroupQuad.comp",
+        "spv.int8.frag",
+        "spv.int16.frag",
+        "spv.int32.frag",
+        "spv.float32.frag",
+        "spv.float64.frag",
     })),
     FileNameAsCustomTestSuffix
 );
@@ -409,6 +427,7 @@
         "spv.float16.frag",
         "spv.imageLoadStoreLod.frag",
         "spv.int16.frag",
+        "spv.int16.amd.frag",
         "spv.shaderBallotAMD.comp",
         "spv.shaderFragMaskAMD.frag",
         "spv.textureGatherBiasLod.frag",
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 515922e..5b078ba 100755
--- a/hlsl/hlslGrammar.cpp
+++ b/hlsl/hlslGrammar.cpp
@@ -1549,6 +1549,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 706173d..e34ab3a 100755
--- a/hlsl/hlslParseHelper.cpp
+++ b/hlsl/hlslParseHelper.cpp
@@ -4400,6 +4400,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;
@@ -4949,7 +4965,104 @@
 
             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 EOpWaveIsHelperLane:
+        {
+            // Mapped to gl_HelperInvocation 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(EbtBool, EvqVaryingIn);
+            node = lookupBuiltinVariable("@gl_HelperInvocation", EbvHelperInvocation, type);
+            break;
+        }
+    case EOpWaveBallot:
+        {
+            // Mapped to subgroupBallot() builtin (NOTE: if an IHV has
+            // a subgroup size > 64 these wave ops will not work for them!)
+
+            // uvec4 type.
+            TType uvec4Type(EbtUint, EvqTemporary, 4);
+
+            // Get the uvec4 return from subgroupBallot().
+            TIntermTyped* res = intermediate.addBuiltInFunctionCall(loc,
+                EOpSubgroupBallot, true, arguments, uvec4Type);
+
+            // And extract a uvec2 for the two highest components.
+            TIntermTyped* xy = handleDotDereference(loc, res, "xy");
+
+            // uint64_t type.
+            TType uint64Type(EbtUint64, EvqTemporary);
+
+            // And bitcast the result for a uint64_t
+            node = intermediate.addBuiltInFunctionCall(loc,
+                EOpPackUint2x32, true, xy, uint64Type);
+
+            break;
+        }
+    case EOpWaveGetOrderedIndex:
+        {
+            if (language == EShLangFragment) {
+                // NOTE: For HLSL SM6.0 this should work for PS too, but the current GLSL extensions don't allow this.
+                error(loc, "WaveGetOrderedIndex() unsupported in a pixel/fragment shader", "WaveGetOrderedIndex", "");
+                break;
+            }
+
+            TType uintType(EbtUint, EvqVaryingIn);
+            TIntermTyped* subgroupID = lookupBuiltinVariable("@gl_SubgroupID", EbvSubgroupID, uintType);
+            TIntermTyped* numSubgroups = lookupBuiltinVariable("@gl_NumSubgroups", EbvNumSubgroups, uintType);
+
+            TType uvec3Type(EbtUint, EvqVaryingIn, 3);
+            TIntermTyped* numWorkGroups = lookupBuiltinVariable("@gl_NumWorkGroups", EbvNumWorkGroups, uvec3Type);
+            TIntermTyped* workGroupID = lookupBuiltinVariable("@gl_WorkGroupID", EbvWorkGroupId, uvec3Type);
+
+            //x & y components of gl_NumWorkGroups
+            TIntermTyped* numWorkGroupsX = handleDotDereference(loc, numWorkGroups, "x");
+            TIntermTyped* numWorkGroupsY = handleDotDereference(loc, numWorkGroups, "y");
+
+            // x & y components of globalSize
+            TIntermTyped* globalSizeX = handleBinaryMath(loc, "mul", EOpMul, numSubgroups, numWorkGroupsX);
+            TIntermTyped* globalSizeY = numWorkGroupsY;
+
+            // x, y & z components of gl_WorkGroupID
+            TIntermTyped* workGroupX = handleDotDereference(loc, workGroupID, "x");
+            TIntermTyped* workGroupY = handleDotDereference(loc, workGroupID, "y");
+            TIntermTyped* workGroupZ = handleDotDereference(loc, workGroupID, "z");
+
+            // We're going to build up the following variables to get a uniquely ordered ID:
+            // (globalSize.y * gl_WorkGroupID.z + gl_WorkGroupID.y) * globalSize.x + gl_WorkGroupID.x + gl_SubgroupID
+            node = handleBinaryMath(loc, "mul", EOpMul, globalSizeY, workGroupZ);
+            node = handleBinaryMath(loc, "add", EOpAdd, node, workGroupY);
+            node = handleBinaryMath(loc, "mul", EOpMul, node, globalSizeX);
+            node = handleBinaryMath(loc, "add", EOpAdd, node, workGroupX);
+            node = handleBinaryMath(loc, "add", EOpAdd, node, subgroupID);
+
+            break;
+        }
+    case EOpGlobalOrderedCountIncrement:
+        {
+            // NOTE: For HLSL SM6.0 this should work, but the current GLSL extensions don't allow this.
+            error(loc, "GlobalOrderedCountIncrement() unsupported", "GlobalOrderedCountIncrement", "");
+            break;
+        }
+
     default:
         break; // most pass through unchanged
     }
diff --git a/hlsl/hlslParseables.cpp b/hlsl/hlslParseables.cpp
index 31f6801..946d91b 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,32 @@
         { "DecrementCounter",                 nullptr, nullptr,   "-",              "-",              EShLangAll,   true },
         { "Consume",                          nullptr, nullptr,   "-",              "-",              EShLangAll,   true },
 
+        // SM 6.0
+        { "WaveOnce",                         "S",     "B",       "-",              "-",              EShLangPSCS,  false},
+        { "WaveGetLaneCount",                 "S",     "U",       "-",              "-",              EShLangPSCS,  false},
+        { "WaveGetLaneIndex",                 "S",     "U",       "-",              "-",              EShLangPSCS,  false},
+        { "WaveIsHelperLane",                 "S",     "B",       "-",              "-",              EShLangPS,    false},
+        { "WaveAnyTrue",                      "S",     "B",       "S",              "B",              EShLangPSCS,  false},
+        { "WaveAllTrue",                      "S",     "B",       "S",              "B",              EShLangPSCS,  false},
+        { "WaveAllEqual",                     "S",     "B",       "S",              "B",              EShLangPSCS,  false},
+        { "WaveBallot",                       "S",     "M",       "S",              "B",              EShLangPSCS,  false},
+        { "WaveReadLaneAt",                   nullptr, nullptr,   "SV,S",           "DFUI,U",         EShLangPSCS,  false},
+        { "WaveReadFirstLane",                nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "WaveAllSum",                       nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "WaveAllProduct",                   nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "WaveAllMin",                       nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "WaveAllMax",                       nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "WaveAllBitAnd",                    nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "WaveAllBitOr",                     nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "WaveAllBitXor",                    nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "WavePrefixSum",                    nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "WavePrefixProduct",                nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "QuadReadLaneAt",                   nullptr, nullptr,   "SV,S",           "DFUI,U",         EShLangPSCS,  false},
+        { "QuadSwapX",                        nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "QuadSwapY",                        nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "WaveGetOrderedIndex",              "S",     "U",       "-",              "-",              EShLangPSCS,  false},
+        { "GlobalOrderedCountIncrement",      "S",     "U",       "S",              "U",              EShLangPSCS,  false},
+
         // Methods for subpass input objects
         { "SubpassLoad",                      "V4",    nullptr,   "[",              "FIU",            EShLangPS,    true },
         { "SubpassLoad",                      "V4",    nullptr,   "],S",            "FIU,I",          EShLangPS,    true },
@@ -1244,6 +1272,32 @@
     symbolTable.relateToOperator(BUILTIN_PREFIX "Append",                      EOpMethodAppend);
     symbolTable.relateToOperator(BUILTIN_PREFIX "RestartStrip",                EOpMethodRestartStrip);
 
+    // Wave ops
+    symbolTable.relateToOperator("WaveOnce",                                   EOpSubgroupElect);
+    symbolTable.relateToOperator("WaveGetLaneCount",                           EOpWaveGetLaneCount);
+    symbolTable.relateToOperator("WaveGetLaneIndex",                           EOpWaveGetLaneIndex);
+    symbolTable.relateToOperator("WaveIsHelperLane",                           EOpWaveIsHelperLane);
+    symbolTable.relateToOperator("WaveAnyTrue",                                EOpSubgroupAny);
+    symbolTable.relateToOperator("WaveAllTrue",                                EOpSubgroupAll);
+    symbolTable.relateToOperator("WaveAllEqual",                               EOpSubgroupAllEqual);
+    symbolTable.relateToOperator("WaveBallot",                                 EOpWaveBallot);
+    symbolTable.relateToOperator("WaveReadLaneAt",                             EOpSubgroupShuffle);
+    symbolTable.relateToOperator("WaveReadFirstLane",                          EOpSubgroupBroadcastFirst);
+    symbolTable.relateToOperator("WaveAllSum",                                 EOpSubgroupAdd);
+    symbolTable.relateToOperator("WaveAllProduct",                             EOpSubgroupMul);
+    symbolTable.relateToOperator("WaveAllMin",                                 EOpSubgroupMin);
+    symbolTable.relateToOperator("WaveAllMax",                                 EOpSubgroupMax);
+    symbolTable.relateToOperator("WaveAllBitAnd",                              EOpSubgroupAnd);
+    symbolTable.relateToOperator("WaveAllBitOr",                               EOpSubgroupOr);
+    symbolTable.relateToOperator("WaveAllBitXor",                              EOpSubgroupXor);
+    symbolTable.relateToOperator("WavePrefixSum",                              EOpSubgroupInclusiveAdd);
+    symbolTable.relateToOperator("WavePrefixProduct",                          EOpSubgroupInclusiveMul);
+    symbolTable.relateToOperator("QuadReadLaneAt",                             EOpSubgroupQuadBroadcast);
+    symbolTable.relateToOperator("QuadSwapX",                                  EOpSubgroupQuadSwapHorizontal);
+    symbolTable.relateToOperator("QuadSwapY",                                  EOpSubgroupQuadSwapVertical);
+    symbolTable.relateToOperator("WaveGetOrderedIndex",                        EOpWaveGetOrderedIndex);
+    symbolTable.relateToOperator("GlobalOrderedCountIncrement",                EOpGlobalOrderedCountIncrement);
+
     // 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 c16fdfa..c6fb122 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;
@@ -644,6 +645,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 1c827bf..621e272 100755
--- a/hlsl/hlslTokens.h
+++ b/hlsl/hlslTokens.h
@@ -95,6 +95,7 @@
     EHTokBool,
     EHTokInt,
     EHTokUint,
+    EHTokUint64,
     EHTokDword,
     EHTokHalf,
     EHTokFloat,