Merge remote-tracking branch 'aosp/upstream-master' into update-shaderc

Includes the following:
20f01e7 Fix last commit; EOptionKeepUncalled incorrect enum bug.
906cc21 Linker: Eliminate uncalled functions, because they can be ill-defined.
bf6d7f4 Linker: Track the mangled entry-point name along with the non-mangled one.
4b6ce41 GLSL Linker: Track entry point across compilation units.
6a60c2f Linker: Walk the call graph to report an error on missing bodies.
e795cc9 Merge pull request #621 from steve-lunarg/recursive-flattening
302e619 Merge pull request #619 from steve-lunarg/opcode-specific-promote
56b4547 Merge pull request #620 from fjhenigman/foo
a2b01a0 HLSL: Recursive composite flattening
05f7514 HLSL: opcode specific promotion rules for interlocked ops
8dcf202 GLSL: Always define TShader::~Includer().
b56f4ac Merge pull request #615 from dneto0/consistent-location-for-test-files
9df6aa5 GLSL: Allow desktop shaders to call functions from outside main().
ec2e27a Merge pull request #613 from Corillian/hlslpreprocess
5cc92c5 runtests should refer to test files in current directory
205dc4e Fixed processing #include's when preprocessing HLSL
fb06e95 Don't print the "Linked stage" message unless the AST is being dumped.
09512cb Merge branch 'steve-lunarg-intrinsic-promotion'
21b11f4 Merge branch 'intrinsic-promotion' of https://github.com/steve-lunarg/glslang into steve-lunarg-intrinsic-promotion
41be1cb Merge pull request #604 from steve-lunarg/entry-rename-2
f1e0c87 allow renaming of shader entry point when creating SPIR-V
ef33ec0 HLSL: add intrinsic function implicit promotions

Test: Linux x86-64; ran Windows unit tests
Change-Id: Ia03a8b944010267019fda338436c74050bce0cb9
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index 7abd04d..15af947 100755
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -1352,7 +1352,7 @@
             // anything else gets there, so visit out of order, doing them all now.
             makeGlobalInitializers(node->getAsAggregate()->getSequence());
 
-            // Initializers are done, don't want to visit again, but functions link objects need to be processed,
+            // Initializers are done, don't want to visit again, but functions and link objects need to be processed,
             // so do them manually.
             visitFunctions(node->getAsAggregate()->getSequence());
 
@@ -2634,7 +2634,7 @@
 {
     for (int f = 0; f < (int)glslFunctions.size(); ++f) {
         glslang::TIntermAggregate* node = glslFunctions[f]->getAsAggregate();
-        if (node && (node->getOp() == glslang::EOpFunction || node->getOp() == glslang ::EOpLinkerObjects))
+        if (node && (node->getOp() == glslang::EOpFunction || node->getOp() == glslang::EOpLinkerObjects))
             node->traverse(this);
     }
 }
diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp
index 377e7cb..d40673c 100644
--- a/StandAlone/StandAlone.cpp
+++ b/StandAlone/StandAlone.cpp
@@ -60,29 +60,30 @@
 
 // Command-line options
 enum TOptions {
-    EOptionNone               = 0,
-    EOptionIntermediate       = (1 <<  0),
-    EOptionSuppressInfolog    = (1 <<  1),
-    EOptionMemoryLeakMode     = (1 <<  2),
-    EOptionRelaxedErrors      = (1 <<  3),
-    EOptionGiveWarnings       = (1 <<  4),
-    EOptionLinkProgram        = (1 <<  5),
-    EOptionMultiThreaded      = (1 <<  6),
-    EOptionDumpConfig         = (1 <<  7),
-    EOptionDumpReflection     = (1 <<  8),
-    EOptionSuppressWarnings   = (1 <<  9),
-    EOptionDumpVersions       = (1 << 10),
-    EOptionSpv                = (1 << 11),
-    EOptionHumanReadableSpv   = (1 << 12),
-    EOptionVulkanRules        = (1 << 13),
-    EOptionDefaultDesktop     = (1 << 14),
-    EOptionOutputPreprocessed = (1 << 15),
-    EOptionOutputHexadecimal  = (1 << 16),
-    EOptionReadHlsl           = (1 << 17),
-    EOptionCascadingErrors    = (1 << 18),
-    EOptionAutoMapBindings    = (1 << 19),
+    EOptionNone                 = 0,
+    EOptionIntermediate         = (1 <<  0),
+    EOptionSuppressInfolog      = (1 <<  1),
+    EOptionMemoryLeakMode       = (1 <<  2),
+    EOptionRelaxedErrors        = (1 <<  3),
+    EOptionGiveWarnings         = (1 <<  4),
+    EOptionLinkProgram          = (1 <<  5),
+    EOptionMultiThreaded        = (1 <<  6),
+    EOptionDumpConfig           = (1 <<  7),
+    EOptionDumpReflection       = (1 <<  8),
+    EOptionSuppressWarnings     = (1 <<  9),
+    EOptionDumpVersions         = (1 << 10),
+    EOptionSpv                  = (1 << 11),
+    EOptionHumanReadableSpv     = (1 << 12),
+    EOptionVulkanRules          = (1 << 13),
+    EOptionDefaultDesktop       = (1 << 14),
+    EOptionOutputPreprocessed   = (1 << 15),
+    EOptionOutputHexadecimal    = (1 << 16),
+    EOptionReadHlsl             = (1 << 17),
+    EOptionCascadingErrors      = (1 << 18),
+    EOptionAutoMapBindings      = (1 << 19),
     EOptionFlattenUniformArrays = (1 << 20),
-    EOptionNoStorageFormat    = (1 << 21),
+    EOptionNoStorageFormat      = (1 << 21),
+    EOptionKeepUncalled         = (1 << 22),
 };
 
 //
@@ -160,6 +161,7 @@
 const char* ExecutableName = nullptr;
 const char* binaryFileName = nullptr;
 const char* entryPointName = nullptr;
+const char* sourceEntryPointName = nullptr;
 const char* shaderStageName = nullptr;
 
 std::array<unsigned int, EShLangCount> baseSamplerBinding;
@@ -300,6 +302,18 @@
                     } else if (lowerword == "no-storage-format" || // synonyms
                                lowerword == "nsf") {
                         Options |= EOptionNoStorageFormat;
+                    } else if (lowerword == "source-entrypoint" || // synonyms
+                               lowerword == "sep") {
+                        sourceEntryPointName = argv[1];
+                        if (argc > 0) {
+                            argc--;
+                            argv++;
+                        } else
+                            Error("no <entry-point> provided for --source-entrypoint");
+                        break;
+                    } else if (lowerword == "keep-uncalled" || // synonyms
+                               lowerword == "ku") {
+                        Options |= EOptionKeepUncalled;
                     } else {
                         usage();
                     }
@@ -449,6 +463,8 @@
         messages = (EShMessages)(messages | EShMsgReadHlsl);
     if (Options & EOptionCascadingErrors)
         messages = (EShMessages)(messages | EShMsgCascadingErrors);
+    if (Options & EOptionKeepUncalled)
+        messages = (EShMessages)(messages | EShMsgKeepUncalled);
 }
 
 //
@@ -547,6 +563,8 @@
         shader->setStringsWithLengthsAndNames(compUnit.text, NULL, compUnit.fileNameList, 1);
         if (entryPointName) // HLSL todo: this needs to be tracked per compUnits
             shader->setEntryPoint(entryPointName);
+        if (sourceEntryPointName)
+            shader->setSourceEntryPoint(sourceEntryPointName);
 
         shader->setShiftSamplerBinding(baseSamplerBinding[compUnit.stage]);
         shader->setShiftTextureBinding(baseTextureBinding[compUnit.stage]);
@@ -963,6 +981,12 @@
            "\n"
            "  --no-storage-format                     use Unknown image format\n"
            "  --nsf                                   synonym for --no-storage-format\n"
+           "\n"
+           "  --source-entrypoint name                the given shader source function is renamed to be the entry point given in -e\n"
+           "  --sep                                   synonym for --source-entrypoint\n"
+           "\n"
+           "  --keep-uncalled                         don't eliminate uncalled functions when linking\n"
+           "  --ku                                    synonym for --keep-uncalled\n"
            );
 
     exit(EFailUsage);
diff --git a/Test/baseResults/100.frag.out b/Test/baseResults/100.frag.out
index 74a597f..42635d3 100644
--- a/Test/baseResults/100.frag.out
+++ b/Test/baseResults/100.frag.out
@@ -507,123 +507,6 @@
 0:38          's2' (temp structure{temp mediump float f, temp 10-element array of mediump float a})
 0:38        true case is null
 0:40      'b' (temp mediump int)
-0:54  Function Definition: foo10( (global void)
-0:54    Function Parameters: 
-0:67  Function Definition: f11(s21; (global void)
-0:67    Function Parameters: 
-0:67      'p2d' (in lowp sampler2D)
-0:87  Function Definition: foo234( (global void)
-0:87    Function Parameters: 
-0:89    Sequence
-0:89      texture (global highp 4-component vector of float)
-0:89        's3D2' (uniform highp sampler3D)
-0:89        Constant:
-0:89          0.200000
-0:89          0.200000
-0:89          0.200000
-0:89        Constant:
-0:89          0.200000
-0:90      textureProj (global highp 4-component vector of float)
-0:90        's3D2' (uniform highp sampler3D)
-0:90        direct index (smooth temp mediump 4-component vector of float)
-0:90          'v' (smooth in 3-element array of mediump 4-component vector of float)
-0:90          Constant:
-0:90            1 (const int)
-0:90        Constant:
-0:90          0.400000
-0:91      dPdx (global mediump 4-component vector of float)
-0:91        direct index (smooth temp mediump 4-component vector of float)
-0:91          'v' (smooth in 3-element array of mediump 4-component vector of float)
-0:91          Constant:
-0:91            0 (const int)
-0:92      Constant:
-0:92        0.000000
-0:93      fwidth (global mediump float)
-0:93        'f13' (invariant global mediump float)
-0:98  Function Definition: foo236( (global void)
-0:98    Function Parameters: 
-0:100    Sequence
-0:100      dPdx (global mediump 4-component vector of float)
-0:100        direct index (smooth temp mediump 4-component vector of float)
-0:100          'v' (smooth in 3-element array of mediump 4-component vector of float)
-0:100          Constant:
-0:100            0 (const int)
-0:101      Constant:
-0:101        0.000000
-0:102      fwidth (global mediump float)
-0:102        'f13' (invariant global mediump float)
-0:103      move second child to first child (temp mediump float)
-0:103        'gl_FragDepth' (temp mediump float)
-0:103        'f13' (invariant global mediump float)
-0:104      move second child to first child (temp highp float)
-0:104        'gl_FragDepthEXT' (gl_FragDepth highp float FragDepth)
-0:104        'f13' (invariant global mediump float)
-0:109  Function Definition: foo239( (global void)
-0:109    Function Parameters: 
-0:111    Sequence
-0:111      move second child to first child (temp mediump float)
-0:111        'gl_FragDepth' (temp mediump float)
-0:111        'f13' (invariant global mediump float)
-0:112      move second child to first child (temp highp float)
-0:112        'gl_FragDepthEXT' (gl_FragDepth highp float FragDepth)
-0:112        'f13' (invariant global mediump float)
-0:119  Function Definition: foo245( (global void)
-0:119    Function Parameters: 
-0:121    Sequence
-0:121      texture (global lowp 4-component vector of float)
-0:121        'sExt' (uniform lowp samplerExternalOES)
-0:121        Constant:
-0:121          0.200000
-0:121          0.200000
-0:122      textureProj (global lowp 4-component vector of float)
-0:122        'sExt' (uniform lowp samplerExternalOES)
-0:122        Construct vec3 (temp lowp 3-component vector of float)
-0:122          'f13' (invariant global mediump float)
-0:123      textureProj (global lowp 4-component vector of float, operation at mediump)
-0:123        'sExt' (uniform lowp samplerExternalOES)
-0:123        direct index (smooth temp mediump 4-component vector of float)
-0:123          'v' (smooth in 3-element array of mediump 4-component vector of float)
-0:123          Constant:
-0:123            2 (const int)
-0:130  Function Definition: foo246( (global void)
-0:130    Function Parameters: 
-0:132    Sequence
-0:132      texture (global mediump 4-component vector of float)
-0:132        'mediumExt' (uniform mediump samplerExternalOES)
-0:132        Constant:
-0:132          0.200000
-0:132          0.200000
-0:133      textureProj (global highp 4-component vector of float)
-0:133        'highExt' (uniform highp samplerExternalOES)
-0:133        direct index (smooth temp mediump 4-component vector of float)
-0:133          'v' (smooth in 3-element array of mediump 4-component vector of float)
-0:133          Constant:
-0:133            2 (const int)
-0:134      Constant:
-0:134        0.000000
-0:135      Constant:
-0:135        0.000000
-0:137      Bitwise not (temp mediump int)
-0:137        'a' (temp mediump int)
-0:138      inclusive-or (temp mediump int)
-0:138        'a' (temp mediump int)
-0:138        'a' (temp mediump int)
-0:139      bitwise and (temp mediump int)
-0:139        'a' (temp mediump int)
-0:139        'a' (temp mediump int)
-0:145  Function Definition: foo203940(i1;f1;f1; (global mediump int)
-0:145    Function Parameters: 
-0:145      'a' (in mediump int)
-0:145      'b' (in mediump float)
-0:147    Sequence
-0:147      textureProjGrad (global lowp 4-component vector of float, operation at mediump)
-0:147        's2Dg' (uniform lowp sampler2D)
-0:147        Construct vec3 (temp mediump 3-component vector of float)
-0:147          'f13' (invariant global mediump float)
-0:147        'uv2' (invariant uniform mediump 2-component vector of float)
-0:147        'uv2' (invariant uniform mediump 2-component vector of float)
-0:148      Branch: Return with expression
-0:148        'a' (in mediump int)
 0:151  Sequence
 0:151    move second child to first child (temp mediump float)
 0:151      'f123' (global mediump float)
@@ -634,75 +517,6 @@
 0:152      'f124' (global mediump float)
 0:152      Constant:
 0:152        50000000000.000000
-0:158  Function Definition: foo323433( (global void)
-0:158    Function Parameters: 
-0:160    Sequence
-0:160      textureLod (global lowp 4-component vector of float, operation at mediump)
-0:160        's2Dg' (uniform lowp sampler2D)
-0:160        'uv2' (invariant uniform mediump 2-component vector of float)
-0:160        'f13' (invariant global mediump float)
-0:161      textureProjGrad (global lowp 4-component vector of float, operation at mediump)
-0:161        's2Dg' (uniform lowp sampler2D)
-0:161        Construct vec3 (temp mediump 3-component vector of float)
-0:161          'f13' (invariant global mediump float)
-0:161        'uv2' (invariant uniform mediump 2-component vector of float)
-0:161        'uv2' (invariant uniform mediump 2-component vector of float)
-0:162      textureGrad (global lowp 4-component vector of float, operation at mediump)
-0:162        's2Dg' (uniform lowp sampler2D)
-0:162        'uv2' (invariant uniform mediump 2-component vector of float)
-0:162        'uv2' (invariant uniform mediump 2-component vector of float)
-0:162        'uv2' (invariant uniform mediump 2-component vector of float)
-0:163      textureGrad (global lowp 4-component vector of float)
-0:163        'sCube' (uniform lowp samplerCube)
-0:163        Construct vec3 (temp lowp 3-component vector of float)
-0:163          'f13' (invariant global mediump float)
-0:163        Construct vec3 (temp lowp 3-component vector of float)
-0:163          'f13' (invariant global mediump float)
-0:163        Construct vec3 (temp lowp 3-component vector of float)
-0:163          'f13' (invariant global mediump float)
-0:167  Function Definition: fgfg(f1;i1; (global mediump int)
-0:167    Function Parameters: 
-0:167      'f' (in mediump float)
-0:167      'i' (in highp int)
-0:167    Sequence
-0:167      Branch: Return with expression
-0:167        Constant:
-0:167          2 (const int)
-0:173  Function Definition: gggf(f1; (global mediump int)
-0:173    Function Parameters: 
-0:173      'f' (in mediump float)
-0:173    Sequence
-0:173      Branch: Return with expression
-0:173        Constant:
-0:173          2 (const int)
-0:175  Function Definition: agggf(f1; (global mediump int)
-0:175    Function Parameters: 
-0:175      'f' (in mediump float)
-0:175    Sequence
-0:175      Branch: Return with expression
-0:175        Constant:
-0:175          2 (const int)
-0:187  Function Definition: badswizzle( (global void)
-0:187    Function Parameters: 
-0:?     Sequence
-0:190      'a' (temp 5-element array of mediump 3-component vector of float)
-0:191      'a' (temp 5-element array of mediump 3-component vector of float)
-0:192      'a' (temp 5-element array of mediump 3-component vector of float)
-0:193      Constant:
-0:193        5 (const int)
-0:194      Constant:
-0:194        0.000000
-0:199  Function Definition: fooinittest( (global mediump float)
-0:199    Function Parameters: 
-0:201    Sequence
-0:201      Branch: Return with expression
-0:201        Function Call: fooinit( (global mediump float)
-0:209  Function Definition: fooinit( (global mediump float)
-0:209    Function Parameters: 
-0:211    Sequence
-0:211      Branch: Return with expression
-0:211        Constant:
-0:211          12.000000
 0:214  Sequence
 0:214    move second child to first child (temp mediump int)
 0:214      'init1' (global mediump int)
diff --git a/Test/baseResults/100LimitsConf.vert.out b/Test/baseResults/100LimitsConf.vert.out
index e27c2cc..46cb845 100644
--- a/Test/baseResults/100LimitsConf.vert.out
+++ b/Test/baseResults/100LimitsConf.vert.out
@@ -22,7 +22,3 @@
 ERROR: 20 compilation errors.  No code generated.
 
 
-
-Linked vertex stage:
-
-
diff --git a/Test/baseResults/100scope.vert.out b/Test/baseResults/100scope.vert.out
index 2b542b0..17423dc 100644
--- a/Test/baseResults/100scope.vert.out
+++ b/Test/baseResults/100scope.vert.out
@@ -128,6 +128,8 @@
 
 Linked vertex stage:
 
+ERROR: Linking vertex stage: No function definition (body) found: 
+    g(
 
 Shader version: 100
 ERROR: node is still EOpNull!
@@ -148,20 +150,6 @@
 0:8                1.000000
 0:11      Branch: Return with expression
 0:11        'a' (in highp int)
-0:25  Function Definition: cos(f1; (global highp float)
-0:25    Function Parameters: 
-0:25      'x' (in highp float)
-0:27    Sequence
-0:27      Branch: Return with expression
-0:27        Constant:
-0:27          1.000000
-0:29  Function Definition: radians(b1; (global bool)
-0:29    Function Parameters: 
-0:29      'x' (in bool)
-0:31    Sequence
-0:31      Branch: Return with expression
-0:31        Constant:
-0:31          true (const bool)
 0:36  Function Definition: main( (global void)
 0:36    Function Parameters: 
 0:?     Sequence
diff --git a/Test/baseResults/110scope.vert.out b/Test/baseResults/110scope.vert.out
index 5f41b86..74002ba 100644
--- a/Test/baseResults/110scope.vert.out
+++ b/Test/baseResults/110scope.vert.out
@@ -1,9 +1,8 @@
 110scope.vert
 ERROR: 0:5: 'a' : redefinition 
-ERROR: 0:34: 'f' : can't call user function from global scope 
 ERROR: 0:57: 'z' : undeclared identifier 
 ERROR: 0:57: 'z' : redefinition 
-ERROR: 4 compilation errors.  No code generated.
+ERROR: 3 compilation errors.  No code generated.
 
 
 Shader version: 110
@@ -131,6 +130,10 @@
 
 Linked vertex stage:
 
+ERROR: Linking vertex stage: No function definition (body) found: 
+    sin(f1;
+ERROR: Linking vertex stage: No function definition (body) found: 
+    g(
 
 Shader version: 110
 ERROR: node is still EOpNull!
@@ -151,20 +154,6 @@
 0:8                1.000000
 0:11      Branch: Return with expression
 0:11        'a' (in int)
-0:25  Function Definition: cos(f1; (global float)
-0:25    Function Parameters: 
-0:25      'x' (in float)
-0:27    Sequence
-0:27      Branch: Return with expression
-0:27        Constant:
-0:27          1.000000
-0:29  Function Definition: radians(b1; (global bool)
-0:29    Function Parameters: 
-0:29      'x' (in bool)
-0:31    Sequence
-0:31      Branch: Return with expression
-0:31        Constant:
-0:31          true (const bool)
 0:34  Sequence
 0:34    move second child to first child (temp int)
 0:34      'gi' (global int)
diff --git a/Test/baseResults/120.frag.out b/Test/baseResults/120.frag.out
index 4fa7600..79898aa 100644
--- a/Test/baseResults/120.frag.out
+++ b/Test/baseResults/120.frag.out
@@ -630,537 +630,9 @@
 Requested GL_ARB_shader_texture_lod
 Requested GL_ARB_texture_rectangle
 ERROR: node is still EOpNull!
-0:21  Function Definition: main( (global void)
-0:21    Function Parameters: 
-0:23    Sequence
-0:23      Sequence
-0:23        move second child to first child (temp 2X3 matrix of float)
-0:23          'm23' (temp 2X3 matrix of float)
-0:23          Construct mat2x3 (temp 2X3 matrix of float)
-0:23            'm' (uniform 4X2 matrix of float)
-0:27      Sequence
-0:27        move second child to first child (temp structure{global float f})
-0:27          'sv' (temp structure{global float f})
-0:27          Construct structure (temp structure{global float f})
-0:27            Convert int to float (temp float)
-0:27              'a' (temp int)
-0:28      Sequence
-0:28        move second child to first child (temp 2-element array of float)
-0:28          'ia' (temp 2-element array of float)
-0:28          Construct float (temp 2-element array of float)
-0:28            Constant:
-0:28              3.000000
-0:28            direct index (temp float)
-0:28              'i' (smooth in 4-component vector of float)
-0:28              Constant:
-0:28                1 (const int)
-0:29      Sequence
-0:29        move second child to first child (temp float)
-0:29          'f1' (temp float)
-0:29          Constant:
-0:29            1.000000
-0:30      Sequence
-0:30        move second child to first child (temp float)
-0:30          'f' (temp float)
-0:30          Convert int to float (temp float)
-0:30            'a' (temp int)
-0:31      move second child to first child (temp float)
-0:31        'f' (temp float)
-0:31        Convert int to float (temp float)
-0:31          'a' (temp int)
-0:33      Sequence
-0:33        move second child to first child (temp 3-component vector of float)
-0:33          'v3' (temp 3-component vector of float)
-0:33          Convert int to float (temp 3-component vector of float)
-0:33            'iv3' (temp 3-component vector of int)
-0:34      move second child to first child (temp float)
-0:34        'f' (temp float)
-0:34        add (temp float)
-0:34          'f' (temp float)
-0:34          Convert int to float (temp float)
-0:34            'a' (temp int)
-0:35      move second child to first child (temp float)
-0:35        'f' (temp float)
-0:35        subtract (temp float)
-0:35          Convert int to float (temp float)
-0:35            'a' (temp int)
-0:35          'f' (temp float)
-0:36      add second child into first child (temp float)
-0:36        'f' (temp float)
-0:36        Convert int to float (temp float)
-0:36          'a' (temp int)
-0:37      move second child to first child (temp float)
-0:37        'f' (temp float)
-0:37        subtract (temp float)
-0:37          Convert int to float (temp float)
-0:37            'a' (temp int)
-0:37          'f' (temp float)
-0:38      multiply second child into first child (temp 3-component vector of float)
-0:38        'v3' (temp 3-component vector of float)
-0:38        Convert int to float (temp 3-component vector of float)
-0:38          'iv3' (temp 3-component vector of int)
-0:39      move second child to first child (temp 3-component vector of float)
-0:39        'v3' (temp 3-component vector of float)
-0:39        divide (temp 3-component vector of float)
-0:39          Convert int to float (temp 3-component vector of float)
-0:39            'iv3' (temp 3-component vector of int)
-0:39          Constant:
-0:39            2.000000
-0:40      move second child to first child (temp 3-component vector of float)
-0:40        'v3' (temp 3-component vector of float)
-0:40        vector-scale (temp 3-component vector of float)
-0:40          Constant:
-0:40            3.000000
-0:40          Convert int to float (temp 3-component vector of float)
-0:40            'iv3' (temp 3-component vector of int)
-0:41      move second child to first child (temp 3-component vector of float)
-0:41        'v3' (temp 3-component vector of float)
-0:41        vector-scale (temp 3-component vector of float)
-0:41          Constant:
-0:41            2.000000
-0:41          'v3' (temp 3-component vector of float)
-0:42      move second child to first child (temp 3-component vector of float)
-0:42        'v3' (temp 3-component vector of float)
-0:42        subtract (temp 3-component vector of float)
-0:42          'v3' (temp 3-component vector of float)
-0:42          Constant:
-0:42            2.000000
-0:43      Test condition and select (temp void)
-0:43        Condition
-0:47        logical-or (temp bool)
-0:46          logical-or (temp bool)
-0:45            logical-or (temp bool)
-0:44              logical-or (temp bool)
-0:43                logical-or (temp bool)
-0:43                  Compare Less Than (temp bool)
-0:43                    'f' (temp float)
-0:43                    Convert int to float (temp float)
-0:43                      'a' (temp int)
-0:44                  Compare Less Than or Equal (temp bool)
-0:44                    Convert int to float (temp float)
-0:44                      'a' (temp int)
-0:44                    'f' (temp float)
-0:45                Compare Greater Than (temp bool)
-0:45                  'f' (temp float)
-0:45                  Convert int to float (temp float)
-0:45                    'a' (temp int)
-0:46              Compare Greater Than or Equal (temp bool)
-0:46                'f' (temp float)
-0:46                Convert int to float (temp float)
-0:46                  'a' (temp int)
-0:47            Compare Equal (temp bool)
-0:47              Convert int to float (temp float)
-0:47                'a' (temp int)
-0:47              'f' (temp float)
-0:48          Compare Not Equal (temp bool)
-0:48            'f' (temp float)
-0:48            Convert int to float (temp float)
-0:48              'a' (temp int)
-0:43        true case is null
-0:49      move second child to first child (temp float)
-0:49        'f' (temp float)
-0:49        Test condition and select (temp float)
-0:49          Condition
-0:49          'b' (temp bool)
-0:49          true case
-0:49          Convert int to float (temp float)
-0:49            'a' (temp int)
-0:49          false case
-0:49          'f' (temp float)
-0:50      move second child to first child (temp float)
-0:50        'f' (temp float)
-0:50        Test condition and select (temp float)
-0:50          Condition
-0:50          'b' (temp bool)
-0:50          true case
-0:50          'f' (temp float)
-0:50          false case
-0:50          Convert int to float (temp float)
-0:50            'a' (temp int)
-0:51      move second child to first child (temp float)
-0:51        'f' (temp float)
-0:51        Convert int to float (temp float)
-0:51          Test condition and select (temp int)
-0:51            Condition
-0:51            'b' (temp bool)
-0:51            true case
-0:51            'a' (temp int)
-0:51            false case
-0:51            'a' (temp int)
-0:52      Sequence
-0:52        move second child to first child (temp structure{global float f})
-0:52          'news' (temp structure{global float f})
-0:52          'sv' (temp structure{global float f})
-0:54      vector swizzle (temp 2-component vector of float)
-0:54        'i' (smooth in 4-component vector of float)
-0:54        Sequence
-0:54          Constant:
-0:54            0 (const int)
-0:54          Constant:
-0:54            1 (const int)
-0:55      'm' (uniform 4X2 matrix of float)
-0:56      'm' (uniform 4X2 matrix of float)
-0:58      'f' (temp float)
-0:59      move second child to first child (temp float)
-0:59        'f' (temp float)
-0:59        Convert int to float (temp float)
-0:59          'a' (temp int)
-0:60      'f' (temp float)
-0:61      'b' (temp bool)
-0:62      move second child to first child (temp bool)
-0:62        'b' (temp bool)
-0:62        'b' (temp bool)
-0:63      'f' (temp float)
-0:65      move second child to first child (temp 4-component vector of float)
-0:65        'gl_FragColor' (fragColor 4-component vector of float FragColor)
-0:65        texture (global 4-component vector of float)
-0:65          's2D' (uniform sampler2D)
-0:65          'centTexCoord' (centroid smooth in 2-component vector of float)
-0:?       Sequence
-0:79        'gl_FragColor' (fragColor 4-component vector of float FragColor)
-0:82      direct index (temp float)
-0:82        'gl_FragColor' (fragColor 4-component vector of float FragColor)
-0:82        Constant:
-0:82          0 (const int)
-0:83      direct index (temp float)
-0:83        'gl_FragColor' (fragColor 4-component vector of float FragColor)
-0:83        Constant:
-0:83          0 (const int)
-0:84      direct index (temp float)
-0:84        'centTexCoord' (centroid smooth in 2-component vector of float)
-0:84        Constant:
-0:84          0 (const int)
-0:85      move second child to first child (temp bool)
-0:85        Comma (temp bool)
-0:85          'a' (temp int)
-0:85          'b' (temp bool)
-0:85        Constant:
-0:85          true (const bool)
-0:91  Function Definition: main( (global int)
-0:91    Function Parameters: 
 0:92  Function Definition: main(i1; (global void)
 0:92    Function Parameters: 
 0:92      'a' (in int)
-0:97  Function Definition: foo(f1; (global int)
-0:97    Function Parameters: 
-0:97      'a' (out float)
-0:99    Sequence
-0:99      Branch: Return with expression
-0:99        Constant:
-0:99          3.200000
-0:100      Function Call: foo(f1; (global int)
-0:100        'a' (out float)
-0:103  Function Definition: gen(vf3; (global bool)
-0:103    Function Parameters: 
-0:103      'v' (in 3-component vector of float)
-0:105    Sequence
-0:105      Test condition and select (temp void)
-0:105        Condition
-0:105        logical-and (temp bool)
-0:105          Compare Less Than (temp bool)
-0:105            Absolute value (global float)
-0:105              direct index (temp float)
-0:105                'v' (in 3-component vector of float)
-0:105                Constant:
-0:105                  0 (const int)
-0:105            Constant:
-0:105              0.000100
-0:105          Compare Less Than (temp bool)
-0:105            Absolute value (global float)
-0:105              direct index (temp float)
-0:105                'v' (in 3-component vector of float)
-0:105                Constant:
-0:105                  1 (const int)
-0:105            Constant:
-0:105              0.000100
-0:105        true case
-0:106        Branch: Return with expression
-0:106          Constant:
-0:106            true (const bool)
-0:109  Function Definition: v1( (global void)
-0:109    Function Parameters: 
-0:113  Function Definition: v2( (global void)
-0:113    Function Parameters: 
-0:115    Sequence
-0:115      Branch: Return
-0:118  Function Definition: atest( (global void)
-0:118    Function Parameters: 
-0:120    Sequence
-0:120      Sequence
-0:120        move second child to first child (temp 4-component vector of float)
-0:120          'v' (temp 4-component vector of float)
-0:120          direct index (smooth temp 4-component vector of float TexCoord)
-0:120            'gl_TexCoord' (smooth in 6-element array of 4-component vector of float TexCoord)
-0:120            Constant:
-0:120              1 (const int)
-0:121      add second child into first child (temp 4-component vector of float)
-0:121        'v' (temp 4-component vector of float)
-0:121        direct index (smooth temp 4-component vector of float TexCoord)
-0:121          'gl_TexCoord' (smooth in 6-element array of 4-component vector of float TexCoord)
-0:121          Constant:
-0:121            3 (const int)
-0:139  Function Definition: foo123( (global void)
-0:139    Function Parameters: 
-0:141    Sequence
-0:141      Sequence
-0:141        move second child to first child (temp 2X2 matrix of float)
-0:141          'r2' (temp 2X2 matrix of float)
-0:141          component-wise multiply (global 2X2 matrix of float)
-0:141            'm22' (global 2X2 matrix of float)
-0:141            'm22' (global 2X2 matrix of float)
-0:142      Sequence
-0:142        move second child to first child (temp 3X3 matrix of float)
-0:142          'r3' (temp 3X3 matrix of float)
-0:142          component-wise multiply (global 3X3 matrix of float)
-0:142            'm33' (global 3X3 matrix of float)
-0:142            'm33' (global 3X3 matrix of float)
-0:143      Sequence
-0:143        move second child to first child (temp 4X4 matrix of float)
-0:143          'r4' (temp 4X4 matrix of float)
-0:143          component-wise multiply (global 4X4 matrix of float)
-0:143            'm44' (global 4X4 matrix of float)
-0:143            'm44' (global 4X4 matrix of float)
-0:145      Sequence
-0:145        move second child to first child (temp 2X3 matrix of float)
-0:145          'r23' (temp 2X3 matrix of float)
-0:145          component-wise multiply (global 2X3 matrix of float)
-0:145            'm23' (global 2X3 matrix of float)
-0:145            'm23' (global 2X3 matrix of float)
-0:146      Sequence
-0:146        move second child to first child (temp 2X4 matrix of float)
-0:146          'r24' (temp 2X4 matrix of float)
-0:146          component-wise multiply (global 2X4 matrix of float)
-0:146            'm24' (global 2X4 matrix of float)
-0:146            'm24' (global 2X4 matrix of float)
-0:147      Sequence
-0:147        move second child to first child (temp 3X2 matrix of float)
-0:147          'r32' (temp 3X2 matrix of float)
-0:147          component-wise multiply (global 3X2 matrix of float)
-0:147            'm32' (global 3X2 matrix of float)
-0:147            'm32' (global 3X2 matrix of float)
-0:148      Sequence
-0:148        move second child to first child (temp 3X4 matrix of float)
-0:148          'r34' (temp 3X4 matrix of float)
-0:148          component-wise multiply (global 3X4 matrix of float)
-0:148            'm34' (global 3X4 matrix of float)
-0:148            'm34' (global 3X4 matrix of float)
-0:149      Sequence
-0:149        move second child to first child (temp 4X2 matrix of float)
-0:149          'r42' (temp 4X2 matrix of float)
-0:149          component-wise multiply (global 4X2 matrix of float)
-0:149            'm42' (global 4X2 matrix of float)
-0:149            'm42' (global 4X2 matrix of float)
-0:150      Sequence
-0:150        move second child to first child (temp 4X3 matrix of float)
-0:150          'r43' (temp 4X3 matrix of float)
-0:150          component-wise multiply (global 4X3 matrix of float)
-0:150            'm43' (global 4X3 matrix of float)
-0:150            'm43' (global 4X3 matrix of float)
-0:156  Function Definition: matConst( (global void)
-0:156    Function Parameters: 
-0:?     Sequence
-0:162      Sequence
-0:162        move second child to first child (temp 4X4 matrix of float)
-0:162          'm4g' (temp 4X4 matrix of float)
-0:162          Construct mat4 (temp 4X4 matrix of float)
-0:162            'v2' (temp 2-component vector of float)
-0:162            'v3' (temp 3-component vector of float)
-0:162            'v3' (temp 3-component vector of float)
-0:162            'v3' (temp 3-component vector of float)
-0:162            'v3' (temp 3-component vector of float)
-0:162            'v3' (temp 3-component vector of float)
-0:163      Sequence
-0:163        move second child to first child (temp 4X4 matrix of float)
-0:163          'm4' (temp 4X4 matrix of float)
-0:163          Construct mat4 (temp 4X4 matrix of float)
-0:163            'v2' (temp 2-component vector of float)
-0:163            'v3' (temp 3-component vector of float)
-0:163            'v3' (temp 3-component vector of float)
-0:163            'v3' (temp 3-component vector of float)
-0:163            'v3' (temp 3-component vector of float)
-0:163            'v2' (temp 2-component vector of float)
-0:164      Sequence
-0:164        move second child to first child (temp 3X3 matrix of float)
-0:164          'm3' (temp 3X3 matrix of float)
-0:164          Construct mat3 (temp 3X3 matrix of float)
-0:164            'm4' (temp 4X4 matrix of float)
-0:165      Sequence
-0:165        move second child to first child (temp 3X3 matrix of float)
-0:165          'm3b1' (temp 3X3 matrix of float)
-0:165          Construct mat3 (temp 3X3 matrix of float)
-0:165            'm4' (temp 4X4 matrix of float)
-0:165            'v2' (temp 2-component vector of float)
-0:166      Sequence
-0:166        move second child to first child (temp 3X3 matrix of float)
-0:166          'm3b2' (temp 3X3 matrix of float)
-0:166          Construct mat3 (temp 3X3 matrix of float)
-0:166            'm4' (temp 4X4 matrix of float)
-0:166            'm4' (temp 4X4 matrix of float)
-0:167      Sequence
-0:167        move second child to first child (temp 3X2 matrix of float)
-0:167          'm32' (temp 3X2 matrix of float)
-0:167          Construct mat3x2 (temp 3X2 matrix of float)
-0:167            'm4' (temp 4X4 matrix of float)
-0:168      Sequence
-0:168        move second child to first child (temp 4X4 matrix of float)
-0:168          'm4c' (temp 4X4 matrix of float)
-0:168          Construct mat4 (temp 4X4 matrix of float)
-0:168            'm32' (temp 3X2 matrix of float)
-0:169      Sequence
-0:169        move second child to first child (temp 3X3 matrix of float)
-0:169          'm3s' (temp 3X3 matrix of float)
-0:169          Construct mat3 (temp 3X3 matrix of float)
-0:169            direct index (temp float)
-0:169              'v2' (temp 2-component vector of float)
-0:169              Constant:
-0:169                0 (const int)
-0:171      Sequence
-0:171        move second child to first child (temp 2-element array of 3X3 matrix of float)
-0:171          'm3a1' (temp 2-element array of 3X3 matrix of float)
-0:171          Construct mat3 (temp 2-element array of 3X3 matrix of float)
-0:171            'm3s' (temp 3X3 matrix of float)
-0:171            'm3s' (temp 3X3 matrix of float)
-0:179  Function Definition: foo2323( (global void)
-0:179    Function Parameters: 
-0:?     Sequence
-0:184      move second child to first child (temp 4-component vector of float)
-0:184        'v' (temp 4-component vector of float)
-0:184        textureLod (global 4-component vector of float)
-0:184          's2D' (uniform sampler2D)
-0:184          'v2' (temp 2-component vector of float)
-0:184          'f' (temp float)
-0:185      move second child to first child (temp 4-component vector of float)
-0:185        'v' (temp 4-component vector of float)
-0:185        textureProjLod (global 4-component vector of float)
-0:185          's3D' (uniform sampler3D)
-0:185          'v' (temp 4-component vector of float)
-0:185          'f' (temp float)
-0:186      move second child to first child (temp 4-component vector of float)
-0:186        'v' (temp 4-component vector of float)
-0:186        textureProjLod (global 4-component vector of float)
-0:186          's1D' (uniform sampler1D)
-0:186          'v' (temp 4-component vector of float)
-0:186          'f' (temp float)
-0:187      move second child to first child (temp 4-component vector of float)
-0:187        'v' (temp 4-component vector of float)
-0:187        textureProjLod (global 4-component vector of float)
-0:187          's2DS' (uniform sampler2DShadow)
-0:187          'v' (temp 4-component vector of float)
-0:187          'f' (temp float)
-0:189      move second child to first child (temp 4-component vector of float)
-0:189        'v' (temp 4-component vector of float)
-0:189        textureGrad (global 4-component vector of float)
-0:189          's1D' (uniform sampler1D)
-0:189          'f' (temp float)
-0:189          'f' (temp float)
-0:189          'f' (temp float)
-0:190      move second child to first child (temp 4-component vector of float)
-0:190        'v' (temp 4-component vector of float)
-0:190        textureProjGrad (global 4-component vector of float)
-0:190          's2D' (uniform sampler2D)
-0:190          'v' (temp 4-component vector of float)
-0:190          'v2' (temp 2-component vector of float)
-0:190          'v2' (temp 2-component vector of float)
-0:191      move second child to first child (temp 4-component vector of float)
-0:191        'v' (temp 4-component vector of float)
-0:191        textureProjGrad (global 4-component vector of float)
-0:191          's2DS' (uniform sampler2DShadow)
-0:191          'v' (temp 4-component vector of float)
-0:191          'v2' (temp 2-component vector of float)
-0:191          'v2' (temp 2-component vector of float)
-0:196  Function Definition: foo2324( (global void)
-0:196    Function Parameters: 
-0:?     Sequence
-0:201      move second child to first child (temp 4-component vector of float)
-0:201        'v' (temp 4-component vector of float)
-0:201        textureLod (global 4-component vector of float)
-0:201          's2D' (uniform sampler2D)
-0:201          'v2' (temp 2-component vector of float)
-0:201          'f' (temp float)
-0:202      move second child to first child (temp 4-component vector of float)
-0:202        'v' (temp 4-component vector of float)
-0:202        textureProjLod (global 4-component vector of float)
-0:202          's3D' (uniform sampler3D)
-0:202          'v' (temp 4-component vector of float)
-0:202          'f' (temp float)
-0:203      move second child to first child (temp 4-component vector of float)
-0:203        'v' (temp 4-component vector of float)
-0:203        textureProjLod (global 4-component vector of float)
-0:203          's1D' (uniform sampler1D)
-0:203          'v' (temp 4-component vector of float)
-0:203          'f' (temp float)
-0:204      move second child to first child (temp 4-component vector of float)
-0:204        'v' (temp 4-component vector of float)
-0:204        textureProjLod (global 4-component vector of float)
-0:204          's2DS' (uniform sampler2DShadow)
-0:204          'v' (temp 4-component vector of float)
-0:204          'f' (temp float)
-0:206      move second child to first child (temp 4-component vector of float)
-0:206        'v' (temp 4-component vector of float)
-0:206        textureGrad (global 4-component vector of float)
-0:206          's1D' (uniform sampler1D)
-0:206          'f' (temp float)
-0:206          'f' (temp float)
-0:206          'f' (temp float)
-0:207      move second child to first child (temp 4-component vector of float)
-0:207        'v' (temp 4-component vector of float)
-0:207        textureProjGrad (global 4-component vector of float)
-0:207          's2D' (uniform sampler2D)
-0:207          'v' (temp 4-component vector of float)
-0:207          'v2' (temp 2-component vector of float)
-0:207          'v2' (temp 2-component vector of float)
-0:208      move second child to first child (temp 4-component vector of float)
-0:208        'v' (temp 4-component vector of float)
-0:208        textureProjGrad (global 4-component vector of float)
-0:208          's2DS' (uniform sampler2DShadow)
-0:208          'v' (temp 4-component vector of float)
-0:208          'v2' (temp 2-component vector of float)
-0:208          'v2' (temp 2-component vector of float)
-0:209      'v' (temp 4-component vector of float)
-0:214  Function Definition: foo121111( (global void)
-0:214    Function Parameters: 
-0:?     Sequence
-0:217      Sequence
-0:217        move second child to first child (temp 4-component vector of float)
-0:217          'v' (temp 4-component vector of float)
-0:217          texture (global 4-component vector of float)
-0:217            's2DRbad' (uniform sampler2DRect)
-0:217            'v2' (temp 2-component vector of float)
-0:225  Function Definition: foo12111( (global void)
-0:225    Function Parameters: 
-0:?     Sequence
-0:231      move second child to first child (temp 4-component vector of float)
-0:231        'v' (temp 4-component vector of float)
-0:231        texture (global 4-component vector of float)
-0:231          's2DR' (uniform sampler2DRect)
-0:231          'v2' (temp 2-component vector of float)
-0:232      move second child to first child (temp 4-component vector of float)
-0:232        'v' (temp 4-component vector of float)
-0:232        textureProj (global 4-component vector of float)
-0:232          's2DR' (uniform sampler2DRect)
-0:232          'v3' (temp 3-component vector of float)
-0:233      move second child to first child (temp 4-component vector of float)
-0:233        'v' (temp 4-component vector of float)
-0:233        textureProj (global 4-component vector of float)
-0:233          's2DR' (uniform sampler2DRect)
-0:233          'v4' (temp 4-component vector of float)
-0:234      move second child to first child (temp 4-component vector of float)
-0:234        'v' (temp 4-component vector of float)
-0:234        texture (global 4-component vector of float)
-0:234          's2DRS' (uniform sampler2DRectShadow)
-0:234          'v3' (temp 3-component vector of float)
-0:235      move second child to first child (temp 4-component vector of float)
-0:235        'v' (temp 4-component vector of float)
-0:235        textureProj (global 4-component vector of float)
-0:235          's2DRS' (uniform sampler2DRectShadow)
-0:235          'v4' (temp 4-component vector of float)
-0:237      move second child to first child (temp 4-component vector of float)
-0:237        'v' (temp 4-component vector of float)
-0:237        textureProjGrad (global 4-component vector of float)
-0:237          's2DRS' (uniform sampler2DRectShadow)
-0:237          'v' (temp 4-component vector of float)
-0:237          'v2' (temp 2-component vector of float)
-0:237          'v2' (temp 2-component vector of float)
 0:?   Linker Objects
 0:?     'lowp' (global float)
 0:?     'mediump' (global float)
diff --git a/Test/baseResults/120.vert.out b/Test/baseResults/120.vert.out
index 18fb221..94a97b5 100644
--- a/Test/baseResults/120.vert.out
+++ b/Test/baseResults/120.vert.out
@@ -480,285 +480,6 @@
 0:43        'gl_PointSize' (invariant gl_PointSize float PointSize)
 0:43        Constant:
 0:43          3.800000
-0:61  Function Definition: overloadB(f1;f1; (global void)
-0:61    Function Parameters: 
-0:61      '' (in float)
-0:61      '' (const (read only) float)
-0:78  Function Definition: foo( (global void)
-0:78    Function Parameters: 
-0:?     Sequence
-0:83      Function Call: overloadB(f1;f1; (global void)
-0:83        'f' (temp float)
-0:83        'f' (temp float)
-0:84      Function Call: overloadB(f1;f1; (global void)
-0:84        'f' (temp float)
-0:84        Constant:
-0:84          2.000000
-0:85      Function Call: overloadB(f1;f1; (global void)
-0:85        Constant:
-0:85          1.000000
-0:85        Convert int to float (temp float)
-0:85          'i' (temp int)
-0:87      Constant:
-0:87        0.000000
-0:88      Function Call: overloadC(i1;i1; (global 2-component vector of float)
-0:88        Constant:
-0:88          1 (const int)
-0:88        'i' (temp int)
-0:89      Function Call: overloadC(vf2;vf2; (global 2-component vector of float)
-0:89        Constant:
-0:89          1.000000
-0:89          1.000000
-0:89        Constant:
-0:89          2.000000
-0:89          2.000000
-0:90      Constant:
-0:90        0.000000
-0:91      Function Call: overloadC(vf2;vf2; (global 2-component vector of float)
-0:91        Constant:
-0:91          1.000000
-0:91          1.000000
-0:91        Constant:
-0:91          2.000000
-0:91          2.000000
-0:93      Function Call: overloadD(i1;f1; (global 3-component vector of float)
-0:93        'i' (temp int)
-0:93        'f' (temp float)
-0:94      Function Call: overloadD(f1;i1; (global 3-component vector of float)
-0:94        'f' (temp float)
-0:94        'i' (temp int)
-0:95      Function Call: overloadD(f1;i1; (global 3-component vector of float)
-0:95        Convert int to float (temp float)
-0:95          'i' (temp int)
-0:95        'i' (temp int)
-0:98      Constant:
-0:98        0.000000
-0:100      Constant:
-0:100        0.841471
-0:101      texture (global 4-component vector of float)
-0:101        's2D' (uniform sampler2D)
-0:101        Constant:
-0:101          0.000000
-0:101          0.000000
-0:102      clamp (global 4-component vector of float)
-0:102        'attv4' (in 4-component vector of float)
-0:102        Constant:
-0:102          0.000000
-0:102        Constant:
-0:102          1.000000
-0:103      clamp (global 4-component vector of float)
-0:103        Convert int to float (temp 4-component vector of float)
-0:103          Convert float to int (temp 4-component vector of int)
-0:103            'attv4' (in 4-component vector of float)
-0:103        Constant:
-0:103          0.000000
-0:103        Constant:
-0:103          1.000000
-0:106      Constant:
-0:106        0.000000
-0:107      Constant:
-0:107        0.000000
-0:108      Constant:
-0:108        0.000000
-0:109      Function Call: overloadE(vf2; (global 3-component vector of float)
-0:109        Constant:
-0:109          3.300000
-0:109          3.300000
-0:110      Function Call: overloadE(mf22; (global 3-component vector of float)
-0:110        Constant:
-0:110          0.500000
-0:110          0.000000
-0:110          0.000000
-0:110          0.500000
-0:111      Constant:
-0:111        0.000000
-0:112      Function Call: overloadE(vf2; (global 3-component vector of float)
-0:112        Constant:
-0:112          1.000000
-0:112          1.000000
-0:115      Function Call: overloadE(f1[2]; (global 3-component vector of float)
-0:115        'b' (temp 2-element array of float)
-0:117      Constant:
-0:117        0.000000
-0:118      Function Call: overloadF(i1; (global 3-component vector of float)
-0:118        Constant:
-0:118          1 (const int)
-0:128  Function Definition: foo2( (global void)
-0:128    Function Parameters: 
-0:?     Sequence
-0:135      Comma (global void)
-0:135        Function Call: outFun(f1;vi2;i1;f1; (global void)
-0:135          Convert int to float (temp float)
-0:135            'i' (temp int)
-0:135          'tempArg' (temp 2-component vector of int)
-0:135          'i' (temp int)
-0:135          'f' (temp float)
-0:135        move second child to first child (temp 2-component vector of float)
-0:135          'v2' (temp 2-component vector of float)
-0:135          Convert int to float (temp 2-component vector of float)
-0:135            'tempArg' (temp 2-component vector of int)
-0:136      Comma (global int)
-0:136        move second child to first child (temp int)
-0:136          'tempReturn' (global int)
-0:136          Function Call: outFunRet(f1;i1;i1;vi4; (global int)
-0:136            Convert int to float (temp float)
-0:136              'i' (temp int)
-0:136            'tempArg' (temp int)
-0:136            'i' (temp int)
-0:136            'tempArg' (temp 4-component vector of int)
-0:136        move second child to first child (temp float)
-0:136          'f' (temp float)
-0:136          Convert int to float (temp float)
-0:136            'tempArg' (temp int)
-0:136        move second child to first child (temp 4-component vector of float)
-0:136          'v4' (temp 4-component vector of float)
-0:136          Convert int to float (temp 4-component vector of float)
-0:136            'tempArg' (temp 4-component vector of int)
-0:136        'tempReturn' (global int)
-0:137      Sequence
-0:137        move second child to first child (temp float)
-0:137          'ret' (temp float)
-0:137          Convert int to float (temp float)
-0:137            Comma (global int)
-0:137              move second child to first child (temp int)
-0:137                'tempReturn' (global int)
-0:137                Function Call: outFunRet(f1;i1;i1;vi4; (global int)
-0:137                  Convert int to float (temp float)
-0:137                    'i' (temp int)
-0:137                  'tempArg' (temp int)
-0:137                  'i' (temp int)
-0:137                  'tempArg' (temp 4-component vector of int)
-0:137              move second child to first child (temp float)
-0:137                'f' (temp float)
-0:137                Convert int to float (temp float)
-0:137                  'tempArg' (temp int)
-0:137              move second child to first child (temp 4-component vector of float)
-0:137                'v4' (temp 4-component vector of float)
-0:137                Convert int to float (temp 4-component vector of float)
-0:137                  'tempArg' (temp 4-component vector of int)
-0:137              'tempReturn' (global int)
-0:138      Sequence
-0:138        move second child to first child (temp 2-component vector of float)
-0:138          'ret2' (temp 2-component vector of float)
-0:138          Convert int to float (temp 2-component vector of float)
-0:138            Comma (global 2-component vector of int)
-0:138              move second child to first child (temp 2-component vector of int)
-0:138                'tempReturn' (global 2-component vector of int)
-0:138                Function Call: outFunRet(f1;vi4;i1;vi4; (global 2-component vector of int)
-0:138                  Convert int to float (temp float)
-0:138                    'i' (temp int)
-0:138                  'tempArg' (temp 4-component vector of int)
-0:138                  'i' (temp int)
-0:138                  'tempArg' (temp 4-component vector of int)
-0:138              move second child to first child (temp 4-component vector of float)
-0:138                'v4' (temp 4-component vector of float)
-0:138                Convert int to float (temp 4-component vector of float)
-0:138                  'tempArg' (temp 4-component vector of int)
-0:138              move second child to first child (temp 4-component vector of float)
-0:138                'v4' (temp 4-component vector of float)
-0:138                Convert int to float (temp 4-component vector of float)
-0:138                  'tempArg' (temp 4-component vector of int)
-0:138              'tempReturn' (global 2-component vector of int)
-0:139      Sequence
-0:139        move second child to first child (temp bool)
-0:139          'b' (temp bool)
-0:139          any (global bool)
-0:139            Compare Less Than (global 4-component vector of bool)
-0:139              'v4' (temp 4-component vector of float)
-0:139              'attv4' (in 4-component vector of float)
-0:142  Function Definition: noise( (global void)
-0:142    Function Parameters: 
-0:144    Sequence
-0:144      Sequence
-0:144        move second child to first child (temp float)
-0:144          'f1' (temp float)
-0:144          noise (global float)
-0:144            Constant:
-0:144              1.000000
-0:145      Sequence
-0:145        move second child to first child (temp 2-component vector of float)
-0:145          'f2' (temp 2-component vector of float)
-0:145          noise (global 2-component vector of float)
-0:145            Constant:
-0:145              1.000000
-0:145              1.000000
-0:146      Sequence
-0:146        move second child to first child (temp 3-component vector of float)
-0:146          'f3' (temp 3-component vector of float)
-0:146          noise (global 3-component vector of float)
-0:146            Constant:
-0:146              1.000000
-0:146              1.000000
-0:146              1.000000
-0:147      Sequence
-0:147        move second child to first child (temp 4-component vector of float)
-0:147          'f4' (temp 4-component vector of float)
-0:147          noise (global 4-component vector of float)
-0:147            Constant:
-0:147              1.000000
-0:147              1.000000
-0:147              1.000000
-0:147              1.000000
-0:162  Function Definition: foo213( (global void)
-0:162    Function Parameters: 
-0:164    Sequence
-0:164      Sequence
-0:164        move second child to first child (temp float)
-0:164          'f' (temp float)
-0:164          Constant:
-0:164            3.000000
-0:165      switch
-0:165      condition
-0:165        'c' (uniform int)
-0:165      body
-0:165        Sequence
-0:166          case:  with expression
-0:166            Constant:
-0:166              1 (const int)
-0:?           Sequence
-0:167            move second child to first child (temp float)
-0:167              'f' (temp float)
-0:167              sine (global float)
-0:167                'f' (temp float)
-0:168            Branch: Break
-0:169          case:  with expression
-0:169            Constant:
-0:169              2 (const int)
-0:?           Sequence
-0:170            move second child to first child (temp float)
-0:170              'f' (temp float)
-0:170              component-wise multiply (temp float)
-0:170                'f' (temp float)
-0:170                'f' (temp float)
-0:171          default: 
-0:?           Sequence
-0:172            move second child to first child (temp float)
-0:172              'f' (temp float)
-0:172              Constant:
-0:172                3.000000
-0:176      inclusive-or (temp int)
-0:176        left-shift (temp int)
-0:176          'i' (temp int)
-0:176          Constant:
-0:176            3 (const int)
-0:176        Constant:
-0:176          69 (const int)
-0:180      Sequence
-0:180        move second child to first child (temp float)
-0:180          't' (temp float)
-0:180          Constant:
-0:180            0.000000
-0:186      Constant:
-0:186        0.000000
-0:188      Constant:
-0:188        0.000000
-0:189      Constant:
-0:189        0.000000
-0:192      move second child to first child (temp float)
-0:192        Constant:
-0:192          0.000000
-0:192        Constant:
-0:192          0.300000
 0:?   Linker Objects
 0:?     'i' (in 4-component vector of float)
 0:?     'o' (smooth out 4-component vector of float)
diff --git a/Test/baseResults/130.frag.out b/Test/baseResults/130.frag.out
index a28908e..e71b3e2 100644
--- a/Test/baseResults/130.frag.out
+++ b/Test/baseResults/130.frag.out
@@ -427,326 +427,6 @@
 0:18            'gl_ClipDistance' (smooth in 4-element array of float ClipDistance)
 0:18            Constant:
 0:18              3 (const int)
-0:23  Function Definition: foo( (global void)
-0:23    Function Parameters: 
-0:25    Sequence
-0:25      Sequence
-0:25        move second child to first child (temp 4-component vector of float)
-0:25          's' (temp 4-component vector of float)
-0:25          textureGather (global 4-component vector of float)
-0:25            'sampC' (uniform samplerCube)
-0:25            Constant:
-0:25              0.200000
-0:25              0.200000
-0:25              0.200000
-0:30  Function Definition: bar( (global void)
-0:30    Function Parameters: 
-0:32    Sequence
-0:32      Sequence
-0:32        move second child to first child (temp 4-component vector of float)
-0:32          's' (temp 4-component vector of float)
-0:32          textureGather (global 4-component vector of float)
-0:32            'sampC' (uniform samplerCube)
-0:32            Constant:
-0:32              0.200000
-0:32              0.200000
-0:32              0.200000
-0:43  Function Definition: bar2( (global void)
-0:43    Function Parameters: 
-0:45    Sequence
-0:45      Sequence
-0:45        move second child to first child (temp 4-component vector of float)
-0:45          's' (temp 4-component vector of float)
-0:45          textureGather (global 4-component vector of float)
-0:45            'sampC' (uniform samplerCube)
-0:45            Constant:
-0:45              0.200000
-0:45              0.200000
-0:45              0.200000
-0:49      move second child to first child (temp 3-component vector of bool)
-0:49        'b3' (temp 3-component vector of bool)
-0:49        Compare Less Than (global 3-component vector of bool)
-0:49          'uv3' (temp 3-component vector of uint)
-0:49          'uv3' (temp 3-component vector of uint)
-0:50      move second child to first child (temp 3-component vector of bool)
-0:50        'b3' (temp 3-component vector of bool)
-0:50        Equal (global 3-component vector of bool)
-0:50          'uv3' (temp 3-component vector of uint)
-0:50          'uv3' (temp 3-component vector of uint)
-0:56      direct index (temp int)
-0:56        'a1' (temp 1-element array of int)
-0:56        Constant:
-0:56          0 (const int)
-0:57      direct index (temp int)
-0:57        'a2' (temp 1-element array of int)
-0:57        Constant:
-0:57          0 (const int)
-0:60      direct index (temp int)
-0:60        'a3' (temp 4-element array of int)
-0:60        Constant:
-0:60          3 (const int)
-0:61      Compare Not Equal (temp bool)
-0:61        'b3' (temp 3-component vector of bool)
-0:61        'b3' (temp 3-component vector of bool)
-0:62      Constant:
-0:62        false (const bool)
-0:63      Constant:
-0:63        false (const bool)
-0:64      Constant:
-0:64        false (const bool)
-0:65      Constant:
-0:65        true (const bool)
-0:66      Constant:
-0:66        false (const bool)
-0:77  Function Definition: bar23( (global void)
-0:77    Function Parameters: 
-0:?     Sequence
-0:80      's' (temp 4-component vector of float)
-0:81      move second child to first child (temp 4-component vector of float)
-0:81        's' (temp 4-component vector of float)
-0:81        textureGatherOffset (global 4-component vector of float)
-0:81          'samp2DR' (uniform sampler2DRect)
-0:81          Constant:
-0:81            0.300000
-0:81            0.300000
-0:81          Constant:
-0:81            1 (const int)
-0:81            1 (const int)
-0:82      move second child to first child (temp 4-component vector of float)
-0:82        's' (temp 4-component vector of float)
-0:82        textureGatherOffset (global 4-component vector of float)
-0:82          'samp2D' (uniform sampler2D)
-0:82          Constant:
-0:82            0.300000
-0:82            0.300000
-0:82          Constant:
-0:82            1 (const int)
-0:82            1 (const int)
-0:83      move second child to first child (temp 4-component vector of float)
-0:83        's' (temp 4-component vector of float)
-0:83        textureGatherOffset (global 4-component vector of float)
-0:83          'samp2DA' (uniform sampler2DArray)
-0:83          Constant:
-0:83            0.300000
-0:83            0.300000
-0:83            0.300000
-0:83          Constant:
-0:83            1 (const int)
-0:83            1 (const int)
-0:84      move second child to first child (temp 4-component vector of float)
-0:84        's' (temp 4-component vector of float)
-0:84        textureGatherOffset (global 4-component vector of float)
-0:84          'samp2DS' (uniform sampler2DShadow)
-0:84          Constant:
-0:84            0.300000
-0:84            0.300000
-0:84          Constant:
-0:84            1.300000
-0:84          Constant:
-0:84            1 (const int)
-0:84            1 (const int)
-0:85      move second child to first child (temp 4-component vector of float)
-0:85        's' (temp 4-component vector of float)
-0:85        textureGatherOffset (global 4-component vector of float)
-0:85          'samp2D' (uniform sampler2D)
-0:85          Constant:
-0:85            0.300000
-0:85            0.300000
-0:85          Constant:
-0:85            1 (const int)
-0:85            1 (const int)
-0:85          Constant:
-0:85            2 (const int)
-0:90  Function Definition: bar234( (global void)
-0:90    Function Parameters: 
-0:?     Sequence
-0:93      move second child to first child (temp 4-component vector of float)
-0:93        's' (temp 4-component vector of float)
-0:93        textureGatherOffset (global 4-component vector of float)
-0:93          'samp2D' (uniform sampler2D)
-0:93          Constant:
-0:93            0.300000
-0:93            0.300000
-0:93          Constant:
-0:93            1 (const int)
-0:93            1 (const int)
-0:94      move second child to first child (temp 4-component vector of float)
-0:94        's' (temp 4-component vector of float)
-0:94        textureGatherOffset (global 4-component vector of float)
-0:94          'samp2DA' (uniform sampler2DArray)
-0:94          Constant:
-0:94            0.300000
-0:94            0.300000
-0:94            0.300000
-0:94          Constant:
-0:94            1 (const int)
-0:94            1 (const int)
-0:95      move second child to first child (temp 4-component vector of float)
-0:95        's' (temp 4-component vector of float)
-0:95        textureGatherOffset (global 4-component vector of float)
-0:95          'samp2DR' (uniform sampler2DRect)
-0:95          Constant:
-0:95            0.300000
-0:95            0.300000
-0:95          Constant:
-0:95            1 (const int)
-0:95            1 (const int)
-0:96      move second child to first child (temp 4-component vector of float)
-0:96        's' (temp 4-component vector of float)
-0:96        textureGatherOffset (global 4-component vector of float)
-0:96          'samp2DS' (uniform sampler2DShadow)
-0:96          Constant:
-0:96            0.300000
-0:96            0.300000
-0:96          Constant:
-0:96            1.300000
-0:96          Constant:
-0:96            1 (const int)
-0:96            1 (const int)
-0:97      move second child to first child (temp 4-component vector of float)
-0:97        's' (temp 4-component vector of float)
-0:97        textureGatherOffset (global 4-component vector of float)
-0:97          'samp2D' (uniform sampler2D)
-0:97          Constant:
-0:97            0.300000
-0:97            0.300000
-0:97          Constant:
-0:97            1 (const int)
-0:97            1 (const int)
-0:97          Constant:
-0:97            2 (const int)
-0:107  Function Definition: bar235( (global void)
-0:107    Function Parameters: 
-0:109    Sequence
-0:109      Sequence
-0:109        move second child to first child (temp 3-component vector of int)
-0:109          'a' (temp 3-component vector of int)
-0:109          textureSize (global 3-component vector of int)
-0:109            'Sca' (uniform samplerCubeArray)
-0:109            Constant:
-0:109              3 (const int)
-0:110      Sequence
-0:110        move second child to first child (temp 4-component vector of float)
-0:110          'b' (temp 4-component vector of float)
-0:110          texture (global 4-component vector of float)
-0:110            'Sca' (uniform samplerCubeArray)
-0:110            'i' (smooth in 4-component vector of float)
-0:111      Sequence
-0:111        move second child to first child (temp 4-component vector of int)
-0:111          'c' (temp 4-component vector of int)
-0:111          texture (global 4-component vector of int)
-0:111            'Isca' (uniform isamplerCubeArray)
-0:111            'i' (smooth in 4-component vector of float)
-0:111            Constant:
-0:111              0.700000
-0:112      Sequence
-0:112        move second child to first child (temp 4-component vector of uint)
-0:112          'd' (temp 4-component vector of uint)
-0:112          texture (global 4-component vector of uint)
-0:112            'Usca' (uniform usamplerCubeArray)
-0:112            'i' (smooth in 4-component vector of float)
-0:114      move second child to first child (temp 4-component vector of float)
-0:114        'b' (temp 4-component vector of float)
-0:114        textureLod (global 4-component vector of float)
-0:114          'Sca' (uniform samplerCubeArray)
-0:114          'i' (smooth in 4-component vector of float)
-0:114          Constant:
-0:114            1.700000
-0:115      move second child to first child (temp 3-component vector of int)
-0:115        'a' (temp 3-component vector of int)
-0:115        textureSize (global 3-component vector of int)
-0:115          'Scas' (uniform samplerCubeArrayShadow)
-0:115          direct index (temp int)
-0:115            'a' (temp 3-component vector of int)
-0:115            Constant:
-0:115              0 (const int)
-0:116      Sequence
-0:116        move second child to first child (temp float)
-0:116          'f' (temp float)
-0:116          texture (global float)
-0:116            'Scas' (uniform samplerCubeArrayShadow)
-0:116            'i' (smooth in 4-component vector of float)
-0:116            direct index (temp float)
-0:116              'b' (temp 4-component vector of float)
-0:116              Constant:
-0:116                1 (const int)
-0:117      move second child to first child (temp 4-component vector of int)
-0:117        'c' (temp 4-component vector of int)
-0:117        textureGrad (global 4-component vector of int)
-0:117          'Isca' (uniform isamplerCubeArray)
-0:117          'i' (smooth in 4-component vector of float)
-0:117          Constant:
-0:117            0.100000
-0:117            0.100000
-0:117            0.100000
-0:117          Constant:
-0:117            0.200000
-0:117            0.200000
-0:117            0.200000
-0:129  Function Definition: bar23444( (global void)
-0:129    Function Parameters: 
-0:?     Sequence
-0:132      Sequence
-0:132        move second child to first child (temp float)
-0:132          'a1' (temp float)
-0:132          direct index (temp float)
-0:132            direct index (temp 3-component vector of float)
-0:132              'm43' (temp 4X3 matrix of float)
-0:132              Constant:
-0:132                3 (const int)
-0:132            Constant:
-0:132              1 (const int)
-0:134      Sequence
-0:134        move second child to first child (temp int)
-0:134          'a2' (temp int)
-0:134          Constant:
-0:134            4 (const int)
-0:135      add second child into first child (temp int)
-0:135        'a2' (temp int)
-0:135        Constant:
-0:135          3 (const int)
-0:136      add second child into first child (temp int)
-0:136        'a2' (temp int)
-0:136        Constant:
-0:136          3 (const int)
-0:137      Sequence
-0:137        move second child to first child (temp float)
-0:137          'b' (const (read only) float)
-0:137          component-wise multiply (temp float)
-0:137            Constant:
-0:137              2.000000
-0:137            'a1' (temp float)
-0:138      move second child to first child (temp float)
-0:138        direct index (temp float)
-0:138          'a' (global 3-component vector of float)
-0:138          Constant:
-0:138            0 (const int)
-0:138        Constant:
-0:138          -1.000000
-0:140      Constant:
-0:140        0.000000
-0:141      Constant:
-0:141        0.000000
-0:143      Constant:
-0:143        1 (const int)
-0:162  Function Definition: qux2( (global void)
-0:162    Function Parameters: 
-0:?     Sequence
-0:165      imageAtomicCompSwap (global int)
-0:165        'iimg2D' (layout(r32i ) uniform iimage2D)
-0:165        Construct ivec2 (temp 2-component vector of int)
-0:165          'i' (temp int)
-0:165          'i' (temp int)
-0:165        'i' (temp int)
-0:165        'i' (temp int)
-0:166      Sequence
-0:166        move second child to first child (temp 4-component vector of int)
-0:166          'pos' (temp 4-component vector of int)
-0:166          imageLoad (global 4-component vector of int)
-0:166            'iimg2D' (layout(r32i ) uniform iimage2D)
-0:166            Construct ivec2 (temp 2-component vector of int)
-0:166              'i' (temp int)
-0:166              'i' (temp int)
 0:?   Linker Objects
 0:?     'a' (global 3-component vector of float)
 0:?     'b' (global float)
diff --git a/Test/baseResults/130.vert.out b/Test/baseResults/130.vert.out
index 7cfeb19..1b3a0e1 100644
--- a/Test/baseResults/130.vert.out
+++ b/Test/baseResults/130.vert.out
@@ -269,23 +269,6 @@
 0:46            1 (const int)
 0:46        Constant:
 0:46          0.300000
-0:57  Function Definition: foo88( (global void)
-0:57    Function Parameters: 
-0:?     Sequence
-0:61      'id' (temp int)
-0:63      'gl_ClipVertex' (gl_ClipVertex 4-component vector of float ClipVertex)
-0:64      'gl_Color' (in 4-component vector of float Color)
-0:65      direct index (temp structure{global 4-component vector of float ambient, global 4-component vector of float diffuse, global 4-component vector of float specular, global 4-component vector of float position, global 4-component vector of float halfVector, global 3-component vector of float spotDirection, global float spotExponent, global float spotCutoff, global float spotCosCutoff, global float constantAttenuation, global float linearAttenuation, global float quadraticAttenuation})
-0:65        'gl_LightSource' (uniform 32-element array of structure{global 4-component vector of float ambient, global 4-component vector of float diffuse, global 4-component vector of float specular, global 4-component vector of float position, global 4-component vector of float halfVector, global 3-component vector of float spotDirection, global float spotExponent, global float spotCutoff, global float spotCosCutoff, global float constantAttenuation, global float linearAttenuation, global float quadraticAttenuation})
-0:65        Constant:
-0:65          0 (const int)
-0:66      far: direct index for structure (global float)
-0:66        'gl_DepthRange' (uniform structure{global float near, global float far, global float diff})
-0:66        Constant:
-0:66          1 (const int)
-0:67      'gl_TexCoord' (smooth out 1-element array of 4-component vector of float TexCoord)
-0:68      'gl_FogFragCoord' (smooth out float FogFragCoord)
-0:69      'gl_FrontColor' (smooth out 4-component vector of float FrontColor)
 0:?   Linker Objects
 0:?     'c' (uniform int)
 0:?     'us2D' (uniform usampler2D)
diff --git a/Test/baseResults/140.frag.out b/Test/baseResults/140.frag.out
index 38c3b9f..224cd30 100644
--- a/Test/baseResults/140.frag.out
+++ b/Test/baseResults/140.frag.out
@@ -136,51 +136,6 @@
 0:22      'patch' (global float)
 0:22      Constant:
 0:22        3.100000
-0:38  Function Definition: foo( (global void)
-0:38    Function Parameters: 
-0:40    Sequence
-0:40      Sequence
-0:40        move second child to first child (temp 2-component vector of float)
-0:40          'r1' (temp 2-component vector of float)
-0:40          modf (global 2-component vector of float)
-0:40            vector swizzle (temp 2-component vector of float)
-0:40              'v' (smooth in 4-component vector of float)
-0:40              Sequence
-0:40                Constant:
-0:40                  0 (const int)
-0:40                Constant:
-0:40                  1 (const int)
-0:40            vector swizzle (temp 2-component vector of float)
-0:40              'v' (smooth in 4-component vector of float)
-0:40              Sequence
-0:40                Constant:
-0:40                  2 (const int)
-0:40                Constant:
-0:40                  3 (const int)
-0:41      Sequence
-0:41        move second child to first child (temp 2-component vector of float)
-0:41          'r2' (temp 2-component vector of float)
-0:41          modf (global 2-component vector of float)
-0:41            vector swizzle (temp 2-component vector of float)
-0:41              'o' (out 4-component vector of float)
-0:41              Sequence
-0:41                Constant:
-0:41                  0 (const int)
-0:41                Constant:
-0:41                  1 (const int)
-0:41            vector swizzle (temp 2-component vector of float)
-0:41              'o' (out 4-component vector of float)
-0:41              Sequence
-0:41                Constant:
-0:41                  2 (const int)
-0:41                Constant:
-0:41                  3 (const int)
-0:42      move second child to first child (temp float)
-0:42        direct index (temp float)
-0:42          'o' (out 4-component vector of float)
-0:42          Constant:
-0:42            2 (const int)
-0:42        Function Call: fooi( (global float)
 0:47  Sequence
 0:47    move second child to first child (temp float)
 0:47      'i1' (global float)
@@ -198,13 +153,6 @@
 0:48      'i2' (global float)
 0:48      Constant:
 0:48        102.000000
-0:50  Function Definition: fooi( (global float)
-0:50    Function Parameters: 
-0:52    Sequence
-0:52      Branch: Return with expression
-0:52        add (temp float)
-0:52          'i1' (global float)
-0:52          'i2' (global float)
 0:?   Linker Objects
 0:?     'v' (smooth in 4-component vector of float)
 0:?     'i' (smooth in 4-component vector of float)
diff --git a/Test/baseResults/140.vert.out b/Test/baseResults/140.vert.out
index 365a0aa..e7f88e3 100644
--- a/Test/baseResults/140.vert.out
+++ b/Test/baseResults/140.vert.out
@@ -178,71 +178,6 @@
 0:18      'gl_TexCoord' (smooth out 1-element array of 4-component vector of float TexCoord)
 0:19      'gl_FogFragCoord' (smooth out float FogFragCoord)
 0:20      'gl_FrontColor' (smooth out 4-component vector of float FrontColor)
-0:48  Function Definition: foo( (global void)
-0:48    Function Parameters: 
-0:50    Sequence
-0:50      Sequence
-0:50        move second child to first child (temp 4-component vector of float)
-0:50          'v' (temp 4-component vector of float)
-0:50          textureFetch (global 4-component vector of float)
-0:50            's2dr' (uniform sampler2DRect)
-0:50            'itloc2' (in 2-component vector of int)
-0:51      add second child into first child (temp 4-component vector of float)
-0:51        'v' (temp 4-component vector of float)
-0:51        Constant:
-0:51          0.000000
-0:52      add second child into first child (temp 4-component vector of float)
-0:52        'v' (temp 4-component vector of float)
-0:52        texture (global 4-component vector of float)
-0:52          's2dr' (uniform sampler2DRect)
-0:52          'tloc2' (in 2-component vector of float)
-0:53      add second child into first child (temp 4-component vector of float)
-0:53        'v' (temp 4-component vector of float)
-0:53        Constant:
-0:53          0.000000
-0:54      add second child into first child (temp 4-component vector of float)
-0:54        'v' (temp 4-component vector of float)
-0:54        texture (global float)
-0:54          's2drs' (uniform sampler2DRectShadow)
-0:54          'tloc3' (in 3-component vector of float)
-0:55      add second child into first child (temp 4-component vector of float)
-0:55        'v' (temp 4-component vector of float)
-0:55        textureProj (global 4-component vector of float)
-0:55          's2dr' (uniform sampler2DRect)
-0:55          'tloc3' (in 3-component vector of float)
-0:56      add second child into first child (temp 4-component vector of float)
-0:56        'v' (temp 4-component vector of float)
-0:56        textureProj (global 4-component vector of float)
-0:56          's2dr' (uniform sampler2DRect)
-0:56          'tloc4' (in 4-component vector of float)
-0:57      add second child into first child (temp 4-component vector of float)
-0:57        'v' (temp 4-component vector of float)
-0:57        textureProjGradOffset (global 4-component vector of float)
-0:57          's2dr' (uniform sampler2DRect)
-0:57          'tloc4' (in 4-component vector of float)
-0:57          Constant:
-0:57            0.000000
-0:57            0.000000
-0:57          Constant:
-0:57            0.000000
-0:57            0.000000
-0:57          Constant:
-0:57            1 (const int)
-0:57            2 (const int)
-0:58      add second child into first child (temp 4-component vector of float)
-0:58        'v' (temp 4-component vector of float)
-0:58        textureProjGradOffset (global float)
-0:58          's2drs' (uniform sampler2DRectShadow)
-0:58          'tloc4' (in 4-component vector of float)
-0:58          Constant:
-0:58            0.000000
-0:58            0.000000
-0:58          Constant:
-0:58            0.000000
-0:58            0.000000
-0:58          Constant:
-0:58            1 (const int)
-0:58            2 (const int)
 0:?   Linker Objects
 0:?     'sbuf' (uniform isamplerBuffer)
 0:?     'anon@0' (layout(column_major std140 ) uniform block{layout(column_major std140 offset=0 ) uniform int anonMem})
diff --git a/Test/baseResults/150.frag.out b/Test/baseResults/150.frag.out
index 0972fdc..143de3b 100644
--- a/Test/baseResults/150.frag.out
+++ b/Test/baseResults/150.frag.out
@@ -141,90 +141,6 @@
 0:18      'patch' (global float)
 0:18      Constant:
 0:18        3.100000
-0:31  Function Definition: barWxyz( (global void)
-0:31    Function Parameters: 
-0:33    Sequence
-0:33      Sequence
-0:33        move second child to first child (temp 2-component vector of int)
-0:33          't11' (temp 2-component vector of int)
-0:33          textureSize (global 2-component vector of int)
-0:33            'sms' (uniform sampler2DMS)
-0:34      Sequence
-0:34        move second child to first child (temp 2-component vector of int)
-0:34          't12' (temp 2-component vector of int)
-0:34          textureSize (global 2-component vector of int)
-0:34            'isms' (uniform isampler2DMS)
-0:35      Sequence
-0:35        move second child to first child (temp 2-component vector of int)
-0:35          't13' (temp 2-component vector of int)
-0:35          textureSize (global 2-component vector of int)
-0:35            'usms' (uniform usampler2DMS)
-0:36      Sequence
-0:36        move second child to first child (temp 3-component vector of int)
-0:36          't21' (temp 3-component vector of int)
-0:36          textureSize (global 3-component vector of int)
-0:36            'smsa' (uniform sampler2DMSArray)
-0:37      Sequence
-0:37        move second child to first child (temp 3-component vector of int)
-0:37          't22' (temp 3-component vector of int)
-0:37          textureSize (global 3-component vector of int)
-0:37            'ismsa' (uniform isampler2DMSArray)
-0:38      Sequence
-0:38        move second child to first child (temp 3-component vector of int)
-0:38          't23' (temp 3-component vector of int)
-0:38          textureSize (global 3-component vector of int)
-0:38            'usmsa' (uniform usampler2DMSArray)
-0:39      Sequence
-0:39        move second child to first child (temp 4-component vector of float)
-0:39          't31' (temp 4-component vector of float)
-0:39          textureFetch (global 4-component vector of float)
-0:39            'sms' (uniform sampler2DMS)
-0:39            'p2' (flat in 2-component vector of int)
-0:39            'samp' (flat in int)
-0:40      Sequence
-0:40        move second child to first child (temp 4-component vector of int)
-0:40          't32' (temp 4-component vector of int)
-0:40          textureFetch (global 4-component vector of int)
-0:40            'isms' (uniform isampler2DMS)
-0:40            'p2' (flat in 2-component vector of int)
-0:40            'samp' (flat in int)
-0:41      Sequence
-0:41        move second child to first child (temp 4-component vector of uint)
-0:41          't33' (temp 4-component vector of uint)
-0:41          textureFetch (global 4-component vector of uint)
-0:41            'usms' (uniform usampler2DMS)
-0:41            'p2' (flat in 2-component vector of int)
-0:41            Constant:
-0:41              3 (const int)
-0:42      Sequence
-0:42        move second child to first child (temp 4-component vector of float)
-0:42          't41' (temp 4-component vector of float)
-0:42          textureFetch (global 4-component vector of float)
-0:42            'smsa' (uniform sampler2DMSArray)
-0:42            'p3' (flat in 3-component vector of int)
-0:42            'samp' (flat in int)
-0:43      Sequence
-0:43        move second child to first child (temp 4-component vector of int)
-0:43          't42' (temp 4-component vector of int)
-0:43          textureFetch (global 4-component vector of int)
-0:43            'ismsa' (uniform isampler2DMSArray)
-0:43            Constant:
-0:43              2 (const int)
-0:43              2 (const int)
-0:43              2 (const int)
-0:43            'samp' (flat in int)
-0:44      Sequence
-0:44        move second child to first child (temp 4-component vector of uint)
-0:44          't43' (temp 4-component vector of uint)
-0:44          textureFetch (global 4-component vector of uint)
-0:44            'usmsa' (uniform usampler2DMSArray)
-0:44            'p3' (flat in 3-component vector of int)
-0:44            'samp' (flat in int)
-0:47  Function Definition: primitiveID( (global int)
-0:47    Function Parameters: 
-0:49    Sequence
-0:49      Branch: Return with expression
-0:49        'gl_PrimitiveID' (flat in int PrimitiveID)
 0:?   Linker Objects
 0:?     'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord)
 0:?     'foo' (smooth in 4-component vector of float)
diff --git a/Test/baseResults/150.geom.out b/Test/baseResults/150.geom.out
index 48b7925..dc5a41a 100644
--- a/Test/baseResults/150.geom.out
+++ b/Test/baseResults/150.geom.out
@@ -255,39 +255,11 @@
 0:37        'gl_Layer' (layout(stream=0 ) out int Layer)
 0:37        Constant:
 0:37          2 (const int)
-0:67  Function Definition: foo(i1; (global void)
-0:67    Function Parameters: 
-0:67      'a' (in int)
-0:69    Sequence
-0:69      move second child to first child (temp 4-component vector of float)
-0:69        a: direct index for structure (layout(stream=6 ) out 4-component vector of float)
-0:69          'ouuaa6' (layout(stream=6 ) out block{layout(stream=6 ) out 4-component vector of float a})
-0:69          Constant:
-0:69            0 (const int)
-0:69        Constant:
-0:69          1.000000
-0:69          1.000000
-0:69          1.000000
-0:69          1.000000
 0:107  Sequence
 0:107    move second child to first child (temp float)
 0:107      'summ' (global float)
 0:107      Constant:
 0:107        11332.000000
-0:127  Function Definition: fooe1( (global void)
-0:127    Function Parameters: 
-0:129    Sequence
-0:129      move second child to first child (temp int)
-0:129        'gl_ViewportIndex' (layout(stream=0 ) out int ViewportIndex)
-0:129        Constant:
-0:129          15 (const int)
-0:134  Function Definition: fooe2( (global void)
-0:134    Function Parameters: 
-0:136    Sequence
-0:136      move second child to first child (temp int)
-0:136        'gl_ViewportIndex' (layout(stream=0 ) out int ViewportIndex)
-0:136        Constant:
-0:136          15 (const int)
 0:?   Linker Objects
 0:?     'fromV' (in 4-element array of block{in 3-component vector of float color})
 0:?     'toF' (layout(stream=0 ) out block{layout(stream=0 ) out 3-component vector of float color})
diff --git a/Test/baseResults/150.tesc.out b/Test/baseResults/150.tesc.out
index 1736bf0..21fade7 100644
--- a/Test/baseResults/150.tesc.out
+++ b/Test/baseResults/150.tesc.out
@@ -910,8 +910,10 @@
 
 Linked tessellation control stage:
 
+ERROR: Linking tessellation control stage: can't handle multiple entry points per stage
 ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage:
     main(
+ERROR: Linking tessellation control stage: can't handle multiple entry points per stage
 ERROR: Linking tessellation control stage: Contradictory layout vertices values
 ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage:
     main(
@@ -921,6 +923,7 @@
     gl_out: "out 4-element array of block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}" versus "out implicitly-sized array of block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}"
 ERROR: Linking tessellation control stage: Types must match:
     outa: "global 4-element array of int" versus "global 1-element array of int"
+ERROR: Linking tessellation control stage: can't handle multiple entry points per stage
 ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage:
     main(
 ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage:
@@ -934,8 +937,10 @@
 
 Linked tessellation evaluation stage:
 
+ERROR: Linking tessellation evaluation stage: can't handle multiple entry points per stage
 ERROR: Linking tessellation evaluation stage: Multiple function bodies in multiple compilation units for the same signature in the same stage:
     main(
+ERROR: Linking tessellation evaluation stage: can't handle multiple entry points per stage
 ERROR: Linking tessellation evaluation stage: Contradictory input layout primitives
 ERROR: Linking tessellation evaluation stage: Contradictory input vertex spacing
 ERROR: Linking tessellation evaluation stage: Contradictory triangle ordering
@@ -1184,35 +1189,6 @@
 0:56        Barrier (global void)
 0:59      Branch: Return
 0:61      Barrier (global void)
-0:67  Function Definition: foo( (global void)
-0:67    Function Parameters: 
-0:69    Sequence
-0:69      gl_PointSize: direct index for structure (out float PointSize)
-0:69        direct index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 2-element array of float ClipDistance gl_ClipDistance})
-0:69          'gl_out' (out 4-element array of block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 2-element array of float ClipDistance gl_ClipDistance})
-0:69          Constant:
-0:69            4 (const int)
-0:69        Constant:
-0:69          1 (const int)
-0:71      Barrier (global void)
-0:91  Function Definition: foop( (global void)
-0:91    Function Parameters: 
-0:?     Sequence
-0:95      multiply second child into first child (temp 3-component vector of float)
-0:95        'pv3' (noContraction temp 3-component vector of float)
-0:95        'pv3' (noContraction temp 3-component vector of float)
-0:96      move second child to first child (temp 3-component vector of float)
-0:96        'pv3' (noContraction temp 3-component vector of float)
-0:96        fma (global 3-component vector of float)
-0:96          'pv3' (noContraction temp 3-component vector of float)
-0:96          'pv3' (noContraction temp 3-component vector of float)
-0:96          'pv3' (noContraction temp 3-component vector of float)
-0:97      move second child to first child (temp double)
-0:97        'd' (noContraction temp double)
-0:97        fma (global double)
-0:97          'd' (noContraction temp double)
-0:97          'd' (noContraction temp double)
-0:97          'd' (noContraction temp double)
 0:8  Function Definition: main( (global void)
 0:8    Function Parameters: 
 0:15  Function Definition: main( (global void)
@@ -1274,41 +1250,6 @@
 0:26      indirect index (temp block{out 4-component vector of float Position gl_Position})
 0:26        'gl_out' (out 3-element array of block{out 4-component vector of float Position gl_Position})
 0:26        'gl_InvocationID' (in int InvocationID)
-0:34  Function Definition: foo( (global void)
-0:34    Function Parameters: 
-0:36    Sequence
-0:36      Test condition and select (temp void)
-0:36        Condition
-0:36        logical-or (temp bool)
-0:36          Compare Not Equal (temp bool)
-0:36            Constant:
-0:36              -0.625000
-0:36              -0.500000
-0:36              -0.375000
-0:36              -0.250000
-0:36              -0.375000
-0:36              -0.250000
-0:36              -0.125000
-0:36              0.000000
-0:36            direct index (layout(location=0 ) temp 2X4 matrix of double)
-0:36              'vs_tcs_first' (layout(location=0 ) in 32-element array of 2X4 matrix of double)
-0:36              Constant:
-0:36                0 (const int)
-0:37          Compare Not Equal (temp bool)
-0:37            Constant:
-0:37              0.375000
-0:37              0.500000
-0:37              0.625000
-0:37              0.750000
-0:37              0.625000
-0:37              0.750000
-0:37              0.875000
-0:37              -0.625000
-0:37            direct index (layout(location=12 ) temp 2X4 matrix of double)
-0:37              'vs_tcs_last' (layout(location=12 ) in 32-element array of 2X4 matrix of double)
-0:37              Constant:
-0:37                0 (const int)
-0:36        true case is null
 0:?   Linker Objects
 0:?     'gl_out' (out 4-element array of block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 2-element array of float ClipDistance gl_ClipDistance})
 0:?     'outa' (global 4-element array of int)
diff --git a/Test/baseResults/300.frag.out b/Test/baseResults/300.frag.out
index 6ec58aa..cca6abd 100644
--- a/Test/baseResults/300.frag.out
+++ b/Test/baseResults/300.frag.out
@@ -592,131 +592,6 @@
 0:96          'c4D' (smooth temp lowp 4-component vector of float)
 0:97      arc hyp. tangent (global lowp 3-component vector of float)
 0:97        'c3D' (smooth in lowp 3-component vector of float)
-0:108  Function Definition: foo( (global void)
-0:108    Function Parameters: 
-0:110    Sequence
-0:110      move second child to first child (temp lowp 4-component vector of float)
-0:110        direct index (temp lowp 4-component vector of float)
-0:110          'colors' (out 4-element array of lowp 4-component vector of float)
-0:110          Constant:
-0:110            2 (const int)
-0:110        'c4D' (smooth temp lowp 4-component vector of float)
-0:111      move second child to first child (temp lowp 4-component vector of float)
-0:111        indirect index (temp lowp 4-component vector of float)
-0:111          'colors' (out 4-element array of lowp 4-component vector of float)
-0:111          'ic1D' (flat in mediump int)
-0:111        'c4D' (smooth temp lowp 4-component vector of float)
-0:117  Function Definition: foo13(struct-s-i1-s211; (global void)
-0:117    Function Parameters: 
-0:117      'inSt2' (in structure{global mediump int i, global lowp sampler2D s})
-0:119    Sequence
-0:119      Test condition and select (temp void)
-0:119        Condition
-0:119        Compare Equal (temp bool)
-0:119          'st1' (uniform structure{global mediump int i, global lowp sampler2D s})
-0:119          'st2' (uniform structure{global mediump int i, global lowp sampler2D s})
-0:119        true case is null
-0:120      Test condition and select (temp void)
-0:120        Condition
-0:120        Compare Not Equal (temp bool)
-0:120          'st1' (uniform structure{global mediump int i, global lowp sampler2D s})
-0:120          'st2' (uniform structure{global mediump int i, global lowp sampler2D s})
-0:120        true case is null
-0:121      Constant:
-0:121        false (const bool)
-0:122      move second child to first child (temp structure{global mediump int i, global lowp sampler2D s})
-0:122        'inSt2' (in structure{global mediump int i, global lowp sampler2D s})
-0:122        'st1' (uniform structure{global mediump int i, global lowp sampler2D s})
-0:123      Compare Equal (temp bool)
-0:123        'inSt2' (in structure{global mediump int i, global lowp sampler2D s})
-0:123        'st1' (uniform structure{global mediump int i, global lowp sampler2D s})
-0:126  Function Definition: foo23( (global void)
-0:126    Function Parameters: 
-0:128    Sequence
-0:128      textureOffset (global lowp float)
-0:128        's2DShadow' (uniform lowp sampler2DShadow)
-0:128        'c3D' (smooth in lowp 3-component vector of float)
-0:128        Constant:
-0:128          -8 (const int)
-0:128          7 (const int)
-0:128        'c1D' (smooth in lowp float)
-0:129      textureOffset (global lowp float)
-0:129        's2DShadow' (uniform lowp sampler2DShadow)
-0:129        'c3D' (smooth in lowp 3-component vector of float)
-0:129        Constant:
-0:129          -9 (const int)
-0:129          8 (const int)
-0:129        'c1D' (smooth in lowp float)
-0:132  Function Definition: foo324( (global void)
-0:132    Function Parameters: 
-0:134    Sequence
-0:134      Sequence
-0:134        move second child to first child (temp lowp float)
-0:134          'p' (temp lowp float)
-0:134          Constant:
-0:134            210.712306
-0:135      add second child into first child (temp lowp float)
-0:135        'p' (temp lowp float)
-0:135        Constant:
-0:135          0.389418
-0:136      add second child into first child (temp lowp float)
-0:136        'p' (temp lowp float)
-0:136        Constant:
-0:136          5.000000
-0:137      add second child into first child (temp lowp float)
-0:137        'p' (temp lowp float)
-0:137        Constant:
-0:137          13.000000
-0:138      Sequence
-0:138        move second child to first child (temp lowp 3-component vector of float)
-0:138          'c3' (temp lowp 3-component vector of float)
-0:138          Constant:
-0:138            -15.000000
-0:138            -2.000000
-0:138            39.000000
-0:139      add second child into first child (temp lowp 3-component vector of float)
-0:139        'c3' (temp lowp 3-component vector of float)
-0:139        Constant:
-0:139          -1.000000
-0:139          -2.000000
-0:139          -3.000000
-0:140      add second child into first child (temp lowp 3-component vector of float)
-0:140        'c3' (temp lowp 3-component vector of float)
-0:140        Constant:
-0:140          1.000000
-0:140          2.000000
-0:140          3.000000
-0:141      Sequence
-0:141        move second child to first child (temp lowp 2-component vector of float)
-0:141          'c2' (temp lowp 2-component vector of float)
-0:141          Constant:
-0:141            1.000000
-0:141            -3.000000
-0:142      add second child into first child (temp lowp 2-component vector of float)
-0:142        'c2' (temp lowp 2-component vector of float)
-0:142        Constant:
-0:142          1.000000
-0:142          -3.000000
-0:143      add second child into first child (temp lowp 2-component vector of float)
-0:143        'c2' (temp lowp 2-component vector of float)
-0:143        Constant:
-0:143          3.000000
-0:143          -8.544004
-0:144      add second child into first child (temp lowp 2-component vector of float)
-0:144        'c2' (temp lowp 2-component vector of float)
-0:144        Constant:
-0:144          0.000000
-0:144          0.000000
-0:145      Sequence
-0:145        move second child to first child (temp lowp 3X2 matrix of float)
-0:145          'm32' (temp lowp 3X2 matrix of float)
-0:145          Constant:
-0:145            10.000000
-0:145            15.000000
-0:145            14.000000
-0:145            21.000000
-0:145            22.000000
-0:145            33.000000
 0:?   Linker Objects
 0:?     's2D' (uniform lowp sampler2D)
 0:?     's3D' (uniform lowp sampler3D)
diff --git a/Test/baseResults/300.vert.out b/Test/baseResults/300.vert.out
index d35929f..5f060cb 100644
--- a/Test/baseResults/300.vert.out
+++ b/Test/baseResults/300.vert.out
@@ -447,132 +447,6 @@
 0:68      Constant:
 0:68        3.000000
 0:68        4.000000
-0:71  Function Definition: newVFun( (global void)
-0:71    Function Parameters: 
-0:73    Sequence
-0:73      move second child to first child (temp highp 3-component vector of float)
-0:73        'newV' (smooth out highp 3-component vector of float)
-0:73        'v3' (in highp 3-component vector of float)
-0:118  Function Definition: foo23( (global void)
-0:118    Function Parameters: 
-0:120    Sequence
-0:120      Sequence
-0:120        move second child to first child (temp highp 2-component vector of int)
-0:120          'x1' (temp highp 2-component vector of int)
-0:120          textureSize (global highp 2-component vector of int, operation at lowp)
-0:120            's2D' (uniform lowp sampler2D)
-0:120            Constant:
-0:120              2 (const int)
-0:121      Constant:
-0:121        0.000000
-0:122      Sequence
-0:122        move second child to first child (temp highp 3-component vector of int)
-0:122          'x3' (temp highp 3-component vector of int)
-0:122          textureSize (global highp 3-component vector of int, operation at lowp)
-0:122            's2DAS' (uniform lowp sampler2DArrayShadow)
-0:122            Constant:
-0:122              -1 (const int)
-0:123      Constant:
-0:123        0.000000
-0:124      Sequence
-0:124        move second child to first child (temp highp 4-component vector of float)
-0:124          'x4' (temp highp 4-component vector of float)
-0:124          texture (global lowp 4-component vector of float, operation at highp)
-0:124            's2D' (uniform lowp sampler2D)
-0:124            'c2D' (in highp 2-component vector of float)
-0:125      Constant:
-0:125        0.000000
-0:126      Sequence
-0:126        move second child to first child (temp highp 4-component vector of float)
-0:126          'x5' (temp highp 4-component vector of float)
-0:126          textureProjOffset (global lowp 4-component vector of float)
-0:126            's3D' (uniform lowp sampler3D)
-0:126            Constant:
-0:126              0.200000
-0:126              0.200000
-0:126              0.200000
-0:126              0.200000
-0:126            Constant:
-0:126              1 (const int)
-0:126              1 (const int)
-0:126              1 (const int)
-0:127      Constant:
-0:127        0.000000
-0:128      Sequence
-0:128        move second child to first child (temp highp float)
-0:128          'x6' (temp highp float)
-0:128          textureProjGradOffset (global lowp float, operation at highp)
-0:128            's2DS' (uniform lowp sampler2DShadow)
-0:128            'invIn' (invariant in highp 4-component vector of float)
-0:128            Constant:
-0:128              4.200000
-0:128              4.200000
-0:128            Constant:
-0:128              5.300000
-0:128              5.300000
-0:128            Constant:
-0:128              1 (const int)
-0:128              1 (const int)
-0:137  Function Definition: foo2349( (global void)
-0:137    Function Parameters: 
-0:139    Sequence
-0:139      Sequence
-0:139        move second child to first child (temp 3-element array of highp float)
-0:139          'x' (temp 3-element array of highp float)
-0:139          Constant:
-0:139            1.000000
-0:139            2.000000
-0:139            3.000000
-0:140      Sequence
-0:140        move second child to first child (temp 3-element array of highp float)
-0:140          'y' (temp 3-element array of highp float)
-0:140          'x' (temp 3-element array of highp float)
-0:141      Sequence
-0:141        move second child to first child (temp 3-element array of highp float)
-0:141          'z' (temp 3-element array of highp float)
-0:141          'x' (temp 3-element array of highp float)
-0:143      move second child to first child (temp 3-element array of highp float)
-0:143        'w' (temp 3-element array of highp float)
-0:143        'y' (temp 3-element array of highp float)
-0:155  Function Definition: gggf(f1; (global highp int)
-0:155    Function Parameters: 
-0:155      'f' (in highp float)
-0:155    Sequence
-0:155      Branch: Return with expression
-0:155        Constant:
-0:155          2 (const int)
-0:158  Function Definition: agggf(f1; (global highp int)
-0:158    Function Parameters: 
-0:158      'f' (in highp float)
-0:158    Sequence
-0:158      Branch: Return with expression
-0:158        Constant:
-0:158          2 (const int)
-0:178  Function Definition: fooDeeparray( (global void)
-0:178    Function Parameters: 
-0:181    Sequence
-0:181      Sequence
-0:180        move second child to first child (temp 3-element array of highp float)
-0:180          'x' (temp 3-element array of highp float)
-0:180          Constant:
-0:180            1.000000
-0:180            2.000000
-0:180            3.000000
-0:181        move second child to first child (temp 4-element array of highp float)
-0:181          'y' (temp 4-element array of highp float)
-0:181          Constant:
-0:181            1.000000
-0:181            2.000000
-0:181            3.000000
-0:181            4.000000
-0:183      move second child to first child (temp 3-element array of highp float)
-0:183        'xp' (temp 3-element array of highp float)
-0:183        'x' (temp 3-element array of highp float)
-0:184      move second child to first child (temp 4-element array of highp float)
-0:184        'yp' (temp 4-element array of highp float)
-0:184        'y' (temp 4-element array of highp float)
-0:185      'xp' (temp 3-element array of highp float)
-0:186      'yp' (temp 4-element array of highp float)
 0:?   Linker Objects
 0:?     'm43' (uniform highp 4X3 matrix of float)
 0:?     'm33' (uniform highp 3X3 matrix of float)
diff --git a/Test/baseResults/300scope.vert.out b/Test/baseResults/300scope.vert.out
index 2a9a945..e340cf6 100644
--- a/Test/baseResults/300scope.vert.out
+++ b/Test/baseResults/300scope.vert.out
@@ -131,6 +131,8 @@
 
 Linked vertex stage:
 
+ERROR: Linking vertex stage: No function definition (body) found: 
+    g(
 
 Shader version: 300
 ERROR: node is still EOpNull!
@@ -151,16 +153,6 @@
 0:8                1.000000
 0:11      Branch: Return with expression
 0:11        'a' (in highp int)
-0:25  Function Definition: cos(f1; (global highp float)
-0:25    Function Parameters: 
-0:25      'x' (in highp float)
-0:27    Sequence
-0:27      Branch: Return
-0:29  Function Definition: radians(b1; (global bool)
-0:29    Function Parameters: 
-0:29      'x' (in bool)
-0:31    Sequence
-0:31      Branch: Return
 0:36  Function Definition: main( (global void)
 0:36    Function Parameters: 
 0:?     Sequence
diff --git a/Test/baseResults/310.comp.out b/Test/baseResults/310.comp.out
index 9a5e4e8..a5be10e 100644
--- a/Test/baseResults/310.comp.out
+++ b/Test/baseResults/310.comp.out
@@ -536,340 +536,6 @@
 0:36              Constant:
 0:36                1 (const uint)
 0:36            'gl_LocalInvocationIndex' (in highp uint LocalInvocationIndex)
-0:59  Function Definition: foo( (global void)
-0:59    Function Parameters: 
-0:61    Sequence
-0:61      move second child to first child (temp highp float)
-0:61        direct index (layout(column_major shared ) temp highp float)
-0:61          values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp float)
-0:61            'ro' (layout(column_major shared ) readonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:61            Constant:
-0:61              1 (const int)
-0:61          Constant:
-0:61            2 (const int)
-0:61        Constant:
-0:61          4.700000
-0:62      array length (temp int)
-0:62        values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp float)
-0:62          'ro' (layout(column_major shared ) readonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:62          Constant:
-0:62            1 (const int)
-0:63      Pre-Increment (temp highp 4-component vector of float)
-0:63        's' (shared highp 4-component vector of float)
-0:84  Function Definition: qux( (global void)
-0:84    Function Parameters: 
-0:86    Sequence
-0:86      Sequence
-0:86        move second child to first child (temp highp int)
-0:86          'i' (temp highp int)
-0:86          Constant:
-0:86            4 (const int)
-0:87      imageAtomicCompSwap (global highp int)
-0:87        'iimg2D' (layout(r32i ) uniform highp iimage2D)
-0:87        Construct ivec2 (temp highp 2-component vector of int)
-0:87          'i' (temp highp int)
-0:87          'i' (temp highp int)
-0:87        'i' (temp highp int)
-0:87        'i' (temp highp int)
-0:88      imageAtomicAdd (global highp uint)
-0:88        'uimg2D' (layout(r32ui ) uniform mediump uimage2D)
-0:88        Construct ivec2 (temp highp 2-component vector of int)
-0:88          'i' (temp highp int)
-0:88          'i' (temp highp int)
-0:88        Convert int to uint (temp highp uint)
-0:88          'i' (temp highp int)
-0:89      imageAtomicMin (global highp int)
-0:89        'iimg2Drgba' (layout(rgba32i ) readonly uniform highp iimage2D)
-0:89        Construct ivec2 (temp highp 2-component vector of int)
-0:89          'i' (temp highp int)
-0:89          'i' (temp highp int)
-0:89        'i' (temp highp int)
-0:90      Constant:
-0:90        0.000000
-0:91      Sequence
-0:91        move second child to first child (temp highp 4-component vector of int)
-0:91          'pos' (temp highp 4-component vector of int)
-0:91          imageLoad (global highp 4-component vector of int)
-0:91            'iimg2D' (layout(r32i ) uniform highp iimage2D)
-0:91            Construct ivec2 (temp highp 2-component vector of int)
-0:91              'i' (temp highp int)
-0:91              'i' (temp highp int)
-0:92      imageStore (global highp void)
-0:92        'ii2da' (writeonly uniform highp iimage2DArray)
-0:92        Construct ivec3 (temp 3-component vector of int)
-0:92          'i' (temp highp int)
-0:92          'i' (temp highp int)
-0:92          'i' (temp highp int)
-0:92        Constant:
-0:92          0 (const int)
-0:92          0 (const int)
-0:92          0 (const int)
-0:92          0 (const int)
-0:93      imageLoad (global mediump 4-component vector of float)
-0:93        'img2Drgba' (layout(rgba32f ) readonly uniform mediump image2D)
-0:93        Construct ivec2 (temp mediump 2-component vector of int)
-0:93          'i' (temp highp int)
-0:93          'i' (temp highp int)
-0:94      imageLoad (global highp 4-component vector of int)
-0:94        'ii2da' (writeonly uniform highp iimage2DArray)
-0:94        Construct ivec3 (temp highp 3-component vector of int)
-0:94          'i' (temp highp int)
-0:94          'i' (temp highp int)
-0:94          'i' (temp highp int)
-0:100  Function Definition: passr(iI21; (global void)
-0:100    Function Parameters: 
-0:100      'image' (coherent readonly in highp iimage2D)
-0:107  Function Definition: passrc( (global void)
-0:107    Function Parameters: 
-0:109    Sequence
-0:109      Function Call: passr(iI21; (global void)
-0:109        'qualim1' (layout(r32i ) coherent readonly uniform highp iimage2D)
-0:110      Function Call: passr(iI21; (global void)
-0:110        'qualim2' (layout(r32i ) coherent restrict readonly uniform highp iimage2D)
-0:111      Function Call: passr(iI21; (global void)
-0:111        'iimg2D' (layout(r32i ) uniform highp iimage2D)
-0:123  Function Definition: func(au1; (global highp uint)
-0:123    Function Parameters: 
-0:123      'c' (in highp atomic_uint)
-0:125    Sequence
-0:125      Branch: Return with expression
-0:125        AtomicCounterIncrement (global highp uint)
-0:125          'c' (in highp atomic_uint)
-0:128  Function Definition: func2(au1; (global highp uint)
-0:128    Function Parameters: 
-0:128      'c' (out highp atomic_uint)
-0:130    Sequence
-0:130      Branch: Return with expression
-0:130        'counter' (layout(binding=0 offset=0 ) uniform highp atomic_uint)
-0:131      Branch: Return with expression
-0:131        AtomicCounter (global highp uint)
-0:131          'counter' (layout(binding=0 offset=0 ) uniform highp atomic_uint)
-0:134  Function Definition: mainAC( (global void)
-0:134    Function Parameters: 
-0:?     Sequence
-0:137      Sequence
-0:137        move second child to first child (temp highp uint)
-0:137          'val' (temp highp uint)
-0:137          AtomicCounter (global highp uint)
-0:137            'counter' (layout(binding=0 offset=0 ) uniform highp atomic_uint)
-0:138      AtomicCounterDecrement (global highp uint)
-0:138        'counter' (layout(binding=0 offset=0 ) uniform highp atomic_uint)
-0:146  Function Definition: opac( (global void)
-0:146    Function Parameters: 
-0:?     Sequence
-0:149      indirect index (temp highp int)
-0:149        'a' (temp 3-element array of highp int)
-0:149        'counter' (layout(binding=0 offset=0 ) uniform highp atomic_uint)
-0:150      direct index (layout(binding=2 offset=4 ) temp highp atomic_uint)
-0:150        'countArr' (layout(binding=2 offset=4 ) uniform 4-element array of highp atomic_uint)
-0:150        Constant:
-0:150          2 (const int)
-0:151      indirect index (layout(binding=2 offset=4 ) temp highp atomic_uint)
-0:151        'countArr' (layout(binding=2 offset=4 ) uniform 4-element array of highp atomic_uint)
-0:151        'i' (uniform highp int)
-0:157  Function Definition: atoms( (global void)
-0:157    Function Parameters: 
-0:159    Sequence
-0:159      Sequence
-0:159        move second child to first child (temp highp int)
-0:159          'origi' (temp highp int)
-0:159          AtomicAdd (global highp int)
-0:159            'atomi' (shared highp int)
-0:159            Constant:
-0:159              3 (const int)
-0:160      Sequence
-0:160        move second child to first child (temp highp uint)
-0:160          'origu' (temp highp uint)
-0:160          AtomicAnd (global highp uint)
-0:160            'atomu' (shared highp uint)
-0:160            Constant:
-0:160              7 (const uint)
-0:161      move second child to first child (temp highp int)
-0:161        'origi' (temp highp int)
-0:161        AtomicExchange (global highp int)
-0:161          'atomi' (shared highp int)
-0:161          Constant:
-0:161            4 (const int)
-0:162      move second child to first child (temp highp uint)
-0:162        'origu' (temp highp uint)
-0:162        AtomicCompSwap (global highp uint)
-0:162          'atomu' (shared highp uint)
-0:162          Constant:
-0:162            10 (const uint)
-0:162          Constant:
-0:162            8 (const uint)
-0:191  Function Definition: foowo( (global void)
-0:191    Function Parameters: 
-0:?     Sequence
-0:194      move second child to first child (temp highp float)
-0:194        'g' (temp highp float)
-0:194        direct index (layout(column_major shared ) temp highp float)
-0:194          values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp float)
-0:194            'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:194            Constant:
-0:194              1 (const int)
-0:194          Constant:
-0:194            2 (const int)
-0:195      Sequence
-0:195        move second child to first child (temp highp float)
-0:195          'f' (temp highp float)
-0:195          direct index (layout(column_major shared ) temp highp float)
-0:195            values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp float)
-0:195              'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:195              Constant:
-0:195                1 (const int)
-0:195            Constant:
-0:195              2 (const int)
-0:196      Pre-Increment (temp highp float)
-0:196        direct index (layout(column_major shared ) temp highp float)
-0:196          values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp float)
-0:196            'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:196            Constant:
-0:196              1 (const int)
-0:196          Constant:
-0:196            2 (const int)
-0:197      Post-Decrement (temp highp float)
-0:197        direct index (layout(column_major shared ) temp highp float)
-0:197          values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp float)
-0:197            'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:197            Constant:
-0:197              1 (const int)
-0:197          Constant:
-0:197            2 (const int)
-0:198      add (temp highp float)
-0:198        'f' (temp highp float)
-0:198        direct index (layout(column_major shared ) temp highp float)
-0:198          values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp float)
-0:198            'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:198            Constant:
-0:198              1 (const int)
-0:198          Constant:
-0:198            2 (const int)
-0:199      subtract (temp highp float)
-0:199        direct index (layout(column_major shared ) temp highp float)
-0:199          values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp float)
-0:199            'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:199            Constant:
-0:199              1 (const int)
-0:199          Constant:
-0:199            2 (const int)
-0:199        'f' (temp highp float)
-0:201      Test condition and select (temp highp float)
-0:201        Condition
-0:201        'b' (temp bool)
-0:201        true case
-0:201        'f' (temp highp float)
-0:201        false case
-0:201        direct index (layout(column_major shared ) temp highp float)
-0:201          values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp float)
-0:201            'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:201            Constant:
-0:201              1 (const int)
-0:201          Constant:
-0:201            2 (const int)
-0:202      Test condition and select (temp highp float)
-0:202        Condition
-0:202        'b' (temp bool)
-0:202        true case
-0:202        direct index (layout(column_major shared ) temp highp float)
-0:202          values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp float)
-0:202            'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:202            Constant:
-0:202              1 (const int)
-0:202          Constant:
-0:202            2 (const int)
-0:202        false case
-0:202        'f' (temp highp float)
-0:203      Test condition and select (temp void)
-0:203        Condition
-0:203        Compare Equal (temp bool)
-0:203          'f' (temp highp float)
-0:203          direct index (layout(column_major shared ) temp highp float)
-0:203            values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp float)
-0:203              'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:203              Constant:
-0:203                1 (const int)
-0:203            Constant:
-0:203              2 (const int)
-0:203        true case
-0:204        Pre-Increment (temp highp float)
-0:204          'f' (temp highp float)
-0:205      Test condition and select (temp void)
-0:205        Condition
-0:205        Compare Greater Than or Equal (temp bool)
-0:205          'f' (temp highp float)
-0:205          direct index (layout(column_major shared ) temp highp float)
-0:205            values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp float)
-0:205              'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:205              Constant:
-0:205                1 (const int)
-0:205            Constant:
-0:205              2 (const int)
-0:205        true case
-0:206        Pre-Increment (temp highp float)
-0:206          'f' (temp highp float)
-0:207      move second child to first child (temp highp float)
-0:207        'f' (temp highp float)
-0:207        direct index (temp highp float)
-0:207          Construct vec3 (temp highp 3-component vector of float)
-0:207            direct index (layout(column_major shared ) temp highp float)
-0:207              values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp float)
-0:207                'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:207                Constant:
-0:207                  1 (const int)
-0:207              Constant:
-0:207                2 (const int)
-0:207          Constant:
-0:207            0 (const int)
-0:208      Bitwise not (temp highp int)
-0:208        value: direct index for structure (layout(column_major shared ) buffer highp int)
-0:208          'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:208          Constant:
-0:208            0 (const int)
-0:209      move second child to first child (temp highp float)
-0:209        direct index (layout(column_major shared ) temp highp float)
-0:209          values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp float)
-0:209            'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:209            Constant:
-0:209              1 (const int)
-0:209          Constant:
-0:209            2 (const int)
-0:209        Constant:
-0:209          3.400000
-0:218  Function Definition: foomultio( (global void)
-0:218    Function Parameters: 
-0:?     Sequence
-0:221      move second child to first child (temp highp float)
-0:221        'g' (temp highp float)
-0:221        direct index (layout(column_major shared ) temp highp float)
-0:221          values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp float)
-0:221            'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:221            Constant:
-0:221              1 (const int)
-0:221          Constant:
-0:221            2 (const int)
-0:222      Bitwise not (temp highp int)
-0:222        value: direct index for structure (layout(column_major shared ) buffer highp int)
-0:222          'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:222          Constant:
-0:222            0 (const int)
-0:223      move second child to first child (temp highp float)
-0:223        direct index (layout(column_major shared ) temp highp float)
-0:223          values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp float)
-0:223            'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:223            Constant:
-0:223              1 (const int)
-0:223          Constant:
-0:223            2 (const int)
-0:223        Constant:
-0:223          3.400000
-0:224      move second child to first child (temp highp int)
-0:224        value: direct index for structure (layout(column_major shared ) buffer highp int)
-0:224          'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:224          Constant:
-0:224            0 (const int)
-0:224        Constant:
-0:224          2 (const int)
 0:?   Linker Objects
 0:?     'gl_WorkGroupSize' (const highp 3-component vector of uint WorkGroupSize)
 0:?       2 (const uint)
diff --git a/Test/baseResults/310.frag.out b/Test/baseResults/310.frag.out
index 66d6ae0..34cae95 100644
--- a/Test/baseResults/310.frag.out
+++ b/Test/baseResults/310.frag.out
@@ -1125,677 +1125,6 @@
 0:34            0.100000
 0:34          Construct ivec2 (temp highp 2-component vector of int)
 0:34            'i' (uniform mediump int)
-0:38  Function Definition: foo23( (global void)
-0:38    Function Parameters: 
-0:?     Sequence
-0:42      textureProjGradOffset (global highp 4-component vector of uint)
-0:42        'usamp2d' (uniform highp usampler2D)
-0:42        'outp' (out mediump 4-component vector of float)
-0:42        Constant:
-0:42          0.000000
-0:42          0.000000
-0:42        Constant:
-0:42          0.000000
-0:42          0.000000
-0:42        Convert float to int (temp highp 2-component vector of int)
-0:42          'c2D' (smooth in mediump 2-component vector of float)
-0:43      textureProjGradOffset (global highp 4-component vector of uint)
-0:43        'usamp2d' (uniform highp usampler2D)
-0:43        'outp' (out mediump 4-component vector of float)
-0:43        Constant:
-0:43          0.000000
-0:43          0.000000
-0:43        Constant:
-0:43          0.000000
-0:43          0.000000
-0:43        Constant:
-0:43          3 (const int)
-0:43          4 (const int)
-0:44      textureProjGradOffset (global highp 4-component vector of uint)
-0:44        'usamp2d' (uniform highp usampler2D)
-0:44        'outp' (out mediump 4-component vector of float)
-0:44        Constant:
-0:44          0.000000
-0:44          0.000000
-0:44        Constant:
-0:44          0.000000
-0:44          0.000000
-0:44        Constant:
-0:44          15 (const int)
-0:44          16 (const int)
-0:45      textureProjGradOffset (global highp 4-component vector of uint)
-0:45        'usamp2d' (uniform highp usampler2D)
-0:45        'outp' (out mediump 4-component vector of float)
-0:45        Constant:
-0:45          0.000000
-0:45          0.000000
-0:45        Constant:
-0:45          0.000000
-0:45          0.000000
-0:45        Constant:
-0:45          -10 (const int)
-0:45          20 (const int)
-0:47      Test condition and select (temp void)
-0:47        Condition
-0:47        'gl_HelperInvocation' (in bool HelperInvocation)
-0:47        true case
-0:48        Pre-Increment (temp mediump 4-component vector of float)
-0:48          'outp' (out mediump 4-component vector of float)
-0:50      Sequence
-0:50        move second child to first child (temp mediump int)
-0:50          'sum' (temp mediump int)
-0:50          Constant:
-0:50            32 (const int)
-0:58      move second child to first child (temp bool)
-0:58        'b1' (temp bool)
-0:58        mix (global bool)
-0:58          'b2' (temp bool)
-0:58          'b3' (temp bool)
-0:58          'b' (temp bool)
-0:59      Sequence
-0:59        move second child to first child (temp mediump 3-component vector of uint)
-0:59          'um3' (temp mediump 3-component vector of uint)
-0:59          mix (global mediump 3-component vector of uint)
-0:59            Construct uvec3 (temp mediump 3-component vector of uint)
-0:59              Convert int to uint (temp mediump uint)
-0:59                'i' (uniform mediump int)
-0:59            Construct uvec3 (temp mediump 3-component vector of uint)
-0:59              Convert int to uint (temp mediump uint)
-0:59                'i' (uniform mediump int)
-0:59            Construct bvec3 (temp 3-component vector of bool)
-0:59              'b' (temp bool)
-0:60      Sequence
-0:60        move second child to first child (temp mediump 4-component vector of int)
-0:60          'im4' (temp mediump 4-component vector of int)
-0:60          mix (global mediump 4-component vector of int)
-0:60            Construct ivec4 (temp mediump 4-component vector of int)
-0:60              'i' (uniform mediump int)
-0:60            Construct ivec4 (temp mediump 4-component vector of int)
-0:60              'i' (uniform mediump int)
-0:60            Construct bvec4 (temp 4-component vector of bool)
-0:60              'b' (temp bool)
-0:98  Function Definition: foots( (global void)
-0:98    Function Parameters: 
-0:100    Sequence
-0:100      Sequence
-0:100        move second child to first child (temp highp 2-component vector of int)
-0:100          'v2' (temp highp 2-component vector of int)
-0:100          textureSize (global highp 2-component vector of int)
-0:100            's1' (layout(binding=3 ) uniform highp sampler2D)
-0:100            Constant:
-0:100              2 (const int)
-0:101      Sequence
-0:101        move second child to first child (temp highp 3-component vector of int)
-0:101          'v3' (temp highp 3-component vector of int)
-0:101          textureSize (global highp 3-component vector of int)
-0:101            'isamp2DA' (uniform highp isampler2DArray)
-0:101            Constant:
-0:101              3 (const int)
-0:102      move second child to first child (temp highp 2-component vector of int)
-0:102        'v2' (temp highp 2-component vector of int)
-0:102        textureSize (global highp 2-component vector of int, operation at mediump)
-0:102          's2dms' (uniform mediump sampler2DMS)
-0:103      move second child to first child (temp highp 2-component vector of int)
-0:103        'v2' (temp highp 2-component vector of int)
-0:103        imageQuerySize (global highp 2-component vector of int)
-0:103          'i2D' (layout(binding=2 ) writeonly uniform highp image2D)
-0:104      move second child to first child (temp highp 3-component vector of int)
-0:104        'v3' (temp highp 3-component vector of int)
-0:104        imageQuerySize (global highp 3-component vector of int, operation at mediump)
-0:104          'i3D' (layout(binding=4 ) readonly uniform mediump image3D)
-0:105      move second child to first child (temp highp 2-component vector of int)
-0:105        'v2' (temp highp 2-component vector of int)
-0:105        imageQuerySize (global highp 2-component vector of int, operation at mediump)
-0:105          'iCube' (layout(binding=5 ) uniform mediump imageCube)
-0:106      move second child to first child (temp highp 3-component vector of int)
-0:106        'v3' (temp highp 3-component vector of int)
-0:106        imageQuerySize (global highp 3-component vector of int, operation at mediump)
-0:106          'i2DA' (layout(binding=6 ) uniform mediump image2DArray)
-0:107      move second child to first child (temp highp 2-component vector of int)
-0:107        'v2' (temp highp 2-component vector of int)
-0:107        imageQuerySize (global highp 2-component vector of int, operation at mediump)
-0:107          'i2Dqualified' (layout(binding=6 ) coherent volatile restrict uniform mediump image2D)
-0:165  Function Definition: fooIO( (global void)
-0:165    Function Parameters: 
-0:167    Sequence
-0:167      Sequence
-0:167        move second child to first child (temp mediump 4-component vector of float)
-0:167          'v' (temp mediump 4-component vector of float)
-0:167          add (temp mediump 4-component vector of float)
-0:167            v: direct index for structure (in mediump 4-component vector of float)
-0:167              'inbinst' (in block{in mediump int a, in mediump 4-component vector of float v, in structure{global mediump int b} s})
-0:167              Constant:
-0:167                1 (const int)
-0:167            vAnon: direct index for structure (layout(location=13 ) centroid in mediump 4-component vector of float)
-0:167              'anon@0' (in block{layout(location=12 ) in mediump int aAnon, layout(location=13 ) centroid in mediump 4-component vector of float vAnon})
-0:167              Constant:
-0:167                1 (const uint)
-0:168      vector scale second child into first child (temp mediump 4-component vector of float)
-0:168        'v' (temp mediump 4-component vector of float)
-0:168        f: direct index for structure (in mediump float)
-0:168          direct index (temp block{in mediump float f})
-0:168            'arrayedInst' (in 4-element array of block{in mediump float f})
-0:168            Constant:
-0:168              2 (const int)
-0:168          Constant:
-0:168            0 (const int)
-0:169      vector scale second child into first child (temp mediump 4-component vector of float)
-0:169        'v' (temp mediump 4-component vector of float)
-0:169        f: direct index for structure (in mediump float)
-0:169          indirect index (temp block{in mediump float f})
-0:169            'arrayedInst' (in 4-element array of block{in mediump float f})
-0:169            'i' (uniform mediump int)
-0:169          Constant:
-0:169            0 (const int)
-0:179  Function Definition: foo_IO( (global void)
-0:179    Function Parameters: 
-0:181    Sequence
-0:181      move second child to first child (temp highp float)
-0:181        'gl_FragDepth' (gl_FragDepth highp float FragDepth)
-0:181        Constant:
-0:181          0.200000
-0:182      'gl_Layer' (flat in highp int Layer)
-0:183      'gl_PrimitiveID' (flat in highp int PrimitiveID)
-0:184      Sequence
-0:184        move second child to first child (temp bool)
-0:184          'f' (temp bool)
-0:184          'gl_FrontFacing' (gl_FrontFacing bool Face)
-0:191  Function Definition: foo_GS( (global void)
-0:191    Function Parameters: 
-0:193    Sequence
-0:193      Sequence
-0:193        move second child to first child (temp highp int)
-0:193          'l' (temp highp int)
-0:193          'gl_Layer' (flat in highp int Layer)
-0:194      Sequence
-0:194        move second child to first child (temp highp int)
-0:194          'p' (temp highp int)
-0:194          'gl_PrimitiveID' (flat in highp int PrimitiveID)
-0:207  Function Definition: pfooBad( (global void)
-0:207    Function Parameters: 
-0:?     Sequence
-0:210      move second child to first child (temp mediump 2-component vector of float)
-0:210        'h' (noContraction temp mediump 2-component vector of float)
-0:210        fma (global mediump 2-component vector of float)
-0:210          'inf' (smooth in mediump 2-component vector of float)
-0:210          'ing' (smooth in mediump 2-component vector of float)
-0:210          'h' (noContraction temp mediump 2-component vector of float)
-0:211      textureGatherOffset (global highp 4-component vector of float)
-0:211        direct index (temp highp sampler2D)
-0:211          'sArray' (uniform 4-element array of highp sampler2D)
-0:211          Constant:
-0:211            0 (const int)
-0:211        Constant:
-0:211          0.100000
-0:211          0.100000
-0:211        Convert float to int (temp highp 2-component vector of int)
-0:211          'inf' (smooth in mediump 2-component vector of float)
-0:212      textureGatherOffsets (global highp 4-component vector of float)
-0:212        direct index (temp highp sampler2D)
-0:212          'sArray' (uniform 4-element array of highp sampler2D)
-0:212          Constant:
-0:212            0 (const int)
-0:212        Constant:
-0:212          0.100000
-0:212          0.100000
-0:212        Constant:
-0:212          0 (const int)
-0:212          0 (const int)
-0:212          0 (const int)
-0:212          0 (const int)
-0:212          0 (const int)
-0:212          0 (const int)
-0:212          0 (const int)
-0:212          0 (const int)
-0:217  Function Definition: pfoo( (global void)
-0:217    Function Parameters: 
-0:?     Sequence
-0:220      move second child to first child (temp mediump 2-component vector of float)
-0:220        'h' (noContraction temp mediump 2-component vector of float)
-0:220        fma (global mediump 2-component vector of float)
-0:220          'inf' (smooth in mediump 2-component vector of float)
-0:220          'ing' (smooth in mediump 2-component vector of float)
-0:220          'h' (noContraction temp mediump 2-component vector of float)
-0:221      textureGatherOffset (global highp 4-component vector of float)
-0:221        direct index (temp highp sampler2D)
-0:221          'sArray' (uniform 4-element array of highp sampler2D)
-0:221          Constant:
-0:221            0 (const int)
-0:221        Constant:
-0:221          0.100000
-0:221          0.100000
-0:221        Convert float to int (temp highp 2-component vector of int)
-0:221          'inf' (smooth in mediump 2-component vector of float)
-0:222      textureGatherOffsets (global highp 4-component vector of float)
-0:222        direct index (temp highp sampler2D)
-0:222          'sArray' (uniform 4-element array of highp sampler2D)
-0:222          Constant:
-0:222            0 (const int)
-0:222        Constant:
-0:222          0.100000
-0:222          0.100000
-0:222        Constant:
-0:222          0 (const int)
-0:222          0 (const int)
-0:222          0 (const int)
-0:222          0 (const int)
-0:222          0 (const int)
-0:222          0 (const int)
-0:222          0 (const int)
-0:222          0 (const int)
-0:223      textureGatherOffsets (global highp 4-component vector of float)
-0:223        direct index (temp highp sampler2D)
-0:223          'sArray' (uniform 4-element array of highp sampler2D)
-0:223          Constant:
-0:223            0 (const int)
-0:223        Constant:
-0:223          0.100000
-0:223          0.100000
-0:223        'offsets' (uniform 4-element array of mediump 2-component vector of int)
-0:248  Function Definition: CAT( (global void)
-0:248    Function Parameters: 
-0:250    Sequence
-0:250      Sequence
-0:250        move second child to first child (temp highp 4-component vector of float)
-0:250          'b4' (temp highp 4-component vector of float)
-0:250          texture (global highp 4-component vector of float)
-0:250            'CA4' (uniform highp samplerCubeArray)
-0:250            Constant:
-0:250              0.500000
-0:250              0.500000
-0:250              0.500000
-0:250              0.500000
-0:250            Constant:
-0:250              0.240000
-0:251      Sequence
-0:251        move second child to first child (temp highp 4-component vector of int)
-0:251          'b6' (temp highp 4-component vector of int)
-0:251          texture (global highp 4-component vector of int)
-0:251            'CA6' (uniform highp isamplerCubeArray)
-0:251            Constant:
-0:251              0.500000
-0:251              0.500000
-0:251              0.500000
-0:251              0.500000
-0:251            Constant:
-0:251              0.260000
-0:252      Sequence
-0:252        move second child to first child (temp highp 4-component vector of uint)
-0:252          'b7' (temp highp 4-component vector of uint)
-0:252          texture (global highp 4-component vector of uint)
-0:252            'CA7' (uniform highp usamplerCubeArray)
-0:252            Constant:
-0:252              0.500000
-0:252              0.500000
-0:252              0.500000
-0:252              0.500000
-0:252            Constant:
-0:252              0.270000
-0:255  Function Definition: badSample( (global void)
-0:255    Function Parameters: 
-0:257    Sequence
-0:257      Sequence
-0:257        move second child to first child (temp lowp int)
-0:257          'a1' (temp lowp int)
-0:257          'gl_SampleID' (flat in lowp int SampleId)
-0:258      Sequence
-0:258        move second child to first child (temp mediump 2-component vector of float)
-0:258          'a2' (temp mediump 2-component vector of float)
-0:258          'gl_SamplePosition' (smooth in mediump 2-component vector of float SamplePosition)
-0:259      Sequence
-0:259        move second child to first child (temp highp int)
-0:259          'a3' (temp highp int)
-0:259          direct index (flat temp highp int SampleMaskIn)
-0:259            'gl_SampleMaskIn' (flat in 1-element array of highp int SampleMaskIn)
-0:259            Constant:
-0:259              0 (const int)
-0:260      move second child to first child (temp highp int)
-0:260        direct index (temp highp int SampleMaskIn)
-0:260          'gl_SampleMask' (out 1-element array of highp int SampleMaskIn)
-0:260          Constant:
-0:260            0 (const int)
-0:260        'a3' (temp highp int)
-0:261      Sequence
-0:261        move second child to first child (temp mediump int)
-0:261          'n' (temp mediump int)
-0:261          'gl_NumSamples' (uniform lowp int)
-0:268  Function Definition: goodSample( (global void)
-0:268    Function Parameters: 
-0:270    Sequence
-0:270      Sequence
-0:270        move second child to first child (temp lowp int)
-0:270          'a1' (temp lowp int)
-0:270          'gl_SampleID' (flat in lowp int SampleId)
-0:271      Sequence
-0:271        move second child to first child (temp mediump 2-component vector of float)
-0:271          'a2' (temp mediump 2-component vector of float)
-0:271          'gl_SamplePosition' (smooth in mediump 2-component vector of float SamplePosition)
-0:272      Sequence
-0:272        move second child to first child (temp highp int)
-0:272          'a3' (temp highp int)
-0:272          direct index (flat temp highp int SampleMaskIn)
-0:272            'gl_SampleMaskIn' (flat in 1-element array of highp int SampleMaskIn)
-0:272            Constant:
-0:272              0 (const int)
-0:273      move second child to first child (temp highp int)
-0:273        direct index (temp highp int SampleMaskIn)
-0:273          'gl_SampleMask' (out 1-element array of highp int SampleMaskIn)
-0:273          Constant:
-0:273            0 (const int)
-0:273        'a3' (temp highp int)
-0:274      Sequence
-0:274        move second child to first child (temp mediump int)
-0:274          'n1' (temp mediump int)
-0:274          Constant:
-0:274            4 (const int)
-0:275      Sequence
-0:275        move second child to first child (temp mediump int)
-0:275          'n2' (temp mediump int)
-0:275          'gl_NumSamples' (uniform lowp int)
-0:283  Function Definition: badImageAtom( (global void)
-0:283    Function Parameters: 
-0:?     Sequence
-0:289      imageAtomicAdd (global highp int)
-0:289        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:289        'P' (uniform mediump 2-component vector of int)
-0:289        'dati' (temp mediump int)
-0:290      imageAtomicAdd (global highp uint)
-0:290        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:290        'P' (uniform mediump 2-component vector of int)
-0:290        'datu' (temp mediump uint)
-0:291      imageAtomicMin (global highp int)
-0:291        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:291        'P' (uniform mediump 2-component vector of int)
-0:291        'dati' (temp mediump int)
-0:292      imageAtomicMin (global highp uint)
-0:292        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:292        'P' (uniform mediump 2-component vector of int)
-0:292        'datu' (temp mediump uint)
-0:293      imageAtomicMax (global highp int)
-0:293        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:293        'P' (uniform mediump 2-component vector of int)
-0:293        'dati' (temp mediump int)
-0:294      imageAtomicMax (global highp uint)
-0:294        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:294        'P' (uniform mediump 2-component vector of int)
-0:294        'datu' (temp mediump uint)
-0:295      imageAtomicAnd (global highp int)
-0:295        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:295        'P' (uniform mediump 2-component vector of int)
-0:295        'dati' (temp mediump int)
-0:296      imageAtomicAnd (global highp uint)
-0:296        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:296        'P' (uniform mediump 2-component vector of int)
-0:296        'datu' (temp mediump uint)
-0:297      imageAtomicOr (global highp int)
-0:297        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:297        'P' (uniform mediump 2-component vector of int)
-0:297        'dati' (temp mediump int)
-0:298      imageAtomicOr (global highp uint)
-0:298        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:298        'P' (uniform mediump 2-component vector of int)
-0:298        'datu' (temp mediump uint)
-0:299      imageAtomicXor (global highp int)
-0:299        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:299        'P' (uniform mediump 2-component vector of int)
-0:299        'dati' (temp mediump int)
-0:300      imageAtomicXor (global highp uint)
-0:300        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:300        'P' (uniform mediump 2-component vector of int)
-0:300        'datu' (temp mediump uint)
-0:301      imageAtomicExchange (global highp int)
-0:301        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:301        'P' (uniform mediump 2-component vector of int)
-0:301        'dati' (temp mediump int)
-0:302      imageAtomicExchange (global highp uint)
-0:302        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:302        'P' (uniform mediump 2-component vector of int)
-0:302        'datu' (temp mediump uint)
-0:303      imageAtomicExchange (global highp float)
-0:303        'im2Df' (layout(r32f ) uniform highp image2D)
-0:303        'P' (uniform mediump 2-component vector of int)
-0:303        'datf' (temp mediump float)
-0:304      imageAtomicCompSwap (global highp int)
-0:304        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:304        'P' (uniform mediump 2-component vector of int)
-0:304        Constant:
-0:304          3 (const int)
-0:304        'dati' (temp mediump int)
-0:305      imageAtomicCompSwap (global highp uint)
-0:305        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:305        'P' (uniform mediump 2-component vector of int)
-0:305        Constant:
-0:305          5 (const uint)
-0:305        'datu' (temp mediump uint)
-0:316  Function Definition: goodImageAtom( (global void)
-0:316    Function Parameters: 
-0:?     Sequence
-0:322      imageAtomicAdd (global highp int)
-0:322        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:322        'P' (uniform mediump 2-component vector of int)
-0:322        'dati' (temp mediump int)
-0:323      imageAtomicAdd (global highp uint)
-0:323        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:323        'P' (uniform mediump 2-component vector of int)
-0:323        'datu' (temp mediump uint)
-0:324      imageAtomicMin (global highp int)
-0:324        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:324        'P' (uniform mediump 2-component vector of int)
-0:324        'dati' (temp mediump int)
-0:325      imageAtomicMin (global highp uint)
-0:325        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:325        'P' (uniform mediump 2-component vector of int)
-0:325        'datu' (temp mediump uint)
-0:326      imageAtomicMax (global highp int)
-0:326        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:326        'P' (uniform mediump 2-component vector of int)
-0:326        'dati' (temp mediump int)
-0:327      imageAtomicMax (global highp uint)
-0:327        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:327        'P' (uniform mediump 2-component vector of int)
-0:327        'datu' (temp mediump uint)
-0:328      imageAtomicAnd (global highp int)
-0:328        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:328        'P' (uniform mediump 2-component vector of int)
-0:328        'dati' (temp mediump int)
-0:329      imageAtomicAnd (global highp uint)
-0:329        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:329        'P' (uniform mediump 2-component vector of int)
-0:329        'datu' (temp mediump uint)
-0:330      imageAtomicOr (global highp int)
-0:330        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:330        'P' (uniform mediump 2-component vector of int)
-0:330        'dati' (temp mediump int)
-0:331      imageAtomicOr (global highp uint)
-0:331        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:331        'P' (uniform mediump 2-component vector of int)
-0:331        'datu' (temp mediump uint)
-0:332      imageAtomicXor (global highp int)
-0:332        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:332        'P' (uniform mediump 2-component vector of int)
-0:332        'dati' (temp mediump int)
-0:333      imageAtomicXor (global highp uint)
-0:333        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:333        'P' (uniform mediump 2-component vector of int)
-0:333        'datu' (temp mediump uint)
-0:334      imageAtomicExchange (global highp int)
-0:334        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:334        'P' (uniform mediump 2-component vector of int)
-0:334        'dati' (temp mediump int)
-0:335      imageAtomicExchange (global highp uint)
-0:335        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:335        'P' (uniform mediump 2-component vector of int)
-0:335        'datu' (temp mediump uint)
-0:336      imageAtomicExchange (global highp float)
-0:336        'im2Df' (layout(r32f ) uniform highp image2D)
-0:336        'P' (uniform mediump 2-component vector of int)
-0:336        'datf' (temp mediump float)
-0:337      imageAtomicCompSwap (global highp int)
-0:337        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:337        'P' (uniform mediump 2-component vector of int)
-0:337        Constant:
-0:337          3 (const int)
-0:337        'dati' (temp mediump int)
-0:338      imageAtomicCompSwap (global highp uint)
-0:338        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:338        'P' (uniform mediump 2-component vector of int)
-0:338        Constant:
-0:338          5 (const uint)
-0:338        'datu' (temp mediump uint)
-0:340      imageAtomicMax (global highp int)
-0:340        'badIm2Di' (layout(rgba16i ) uniform highp iimage2D)
-0:340        'P' (uniform mediump 2-component vector of int)
-0:340        'dati' (temp mediump int)
-0:341      imageAtomicMax (global highp uint)
-0:341        'badIm2Du' (layout(rgba8ui ) uniform highp uimage2D)
-0:341        'P' (uniform mediump 2-component vector of int)
-0:341        'datu' (temp mediump uint)
-0:342      imageAtomicExchange (global highp float)
-0:342        'badIm2Df' (layout(rgba32f ) uniform highp image2D)
-0:342        'P' (uniform mediump 2-component vector of int)
-0:342        'datf' (temp mediump float)
-0:353  Function Definition: badInterp( (global void)
-0:353    Function Parameters: 
-0:355    Sequence
-0:355      interpolateAtCentroid (global mediump 2-component vector of float)
-0:355        'colorfc' (centroid flat in mediump 2-component vector of float)
-0:356      interpolateAtSample (global mediump 2-component vector of float)
-0:356        'colorfc' (centroid flat in mediump 2-component vector of float)
-0:356        Constant:
-0:356          1 (const int)
-0:357      interpolateAtOffset (global mediump 2-component vector of float)
-0:357        'colorfc' (centroid flat in mediump 2-component vector of float)
-0:357        Constant:
-0:357          0.200000
-0:357          0.200000
-0:369  Function Definition: interp( (global void)
-0:369    Function Parameters: 
-0:?     Sequence
-0:376      move second child to first child (temp mediump 2-component vector of float)
-0:376        'res2' (temp mediump 2-component vector of float)
-0:376        interpolateAtCentroid (global mediump 2-component vector of float)
-0:376          'colorfc' (centroid flat in mediump 2-component vector of float)
-0:377      move second child to first child (temp mediump 4-component vector of float)
-0:377        'res4' (temp mediump 4-component vector of float)
-0:377        interpolateAtCentroid (global mediump 4-component vector of float)
-0:377          'colorSampIn' (smooth sample in mediump 4-component vector of float)
-0:378      move second child to first child (temp mediump 4-component vector of float)
-0:378        'res4' (temp mediump 4-component vector of float)
-0:378        interpolateAtCentroid (global mediump 4-component vector of float)
-0:378          'colorfsi' (flat sample in mediump 4-component vector of float)
-0:379      move second child to first child (temp mediump float)
-0:379        'res' (temp mediump float)
-0:379        interpolateAtCentroid (global mediump float)
-0:379          'scalarIn' (smooth in mediump float)
-0:380      'res3' (temp mediump 3-component vector of float)
-0:381      move second child to first child (temp mediump 3-component vector of float)
-0:381        'res3' (temp mediump 3-component vector of float)
-0:381        interpolateAtCentroid (global mediump 3-component vector of float)
-0:381          direct index (smooth sample temp mediump 3-component vector of float)
-0:381            'sampInArray' (smooth sample in 4-element array of mediump 3-component vector of float)
-0:381            Constant:
-0:381              2 (const int)
-0:382      move second child to first child (temp mediump 2-component vector of float)
-0:382        'res2' (temp mediump 2-component vector of float)
-0:382        interpolateAtCentroid (global mediump 2-component vector of float)
-0:382          vector swizzle (temp mediump 2-component vector of float)
-0:382            direct index (smooth sample temp mediump 3-component vector of float)
-0:382              'sampInArray' (smooth sample in 4-element array of mediump 3-component vector of float)
-0:382              Constant:
-0:382                2 (const int)
-0:382            Sequence
-0:382              Constant:
-0:382                0 (const int)
-0:382              Constant:
-0:382                1 (const int)
-0:384      'res3' (temp mediump 3-component vector of float)
-0:385      move second child to first child (temp mediump 3-component vector of float)
-0:385        'res3' (temp mediump 3-component vector of float)
-0:385        interpolateAtSample (global mediump 3-component vector of float)
-0:385          indirect index (smooth sample temp mediump 3-component vector of float)
-0:385            'sampInArray' (smooth sample in 4-element array of mediump 3-component vector of float)
-0:385            'i' (uniform mediump int)
-0:385          Constant:
-0:385            0 (const int)
-0:386      move second child to first child (temp mediump 2-component vector of float)
-0:386        'res2' (temp mediump 2-component vector of float)
-0:386        interpolateAtSample (global mediump 2-component vector of float)
-0:386          vector swizzle (temp mediump 2-component vector of float)
-0:386            direct index (smooth sample temp mediump 3-component vector of float)
-0:386              'sampInArray' (smooth sample in 4-element array of mediump 3-component vector of float)
-0:386              Constant:
-0:386                2 (const int)
-0:386            Sequence
-0:386              Constant:
-0:386                0 (const int)
-0:386              Constant:
-0:386                1 (const int)
-0:386          Constant:
-0:386            2 (const int)
-0:387      move second child to first child (temp mediump float)
-0:387        'res' (temp mediump float)
-0:387        interpolateAtSample (global mediump float)
-0:387          'scalarIn' (smooth in mediump float)
-0:387          Constant:
-0:387            1 (const int)
-0:389      'res3' (temp mediump 3-component vector of float)
-0:390      move second child to first child (temp mediump 3-component vector of float)
-0:390        'res3' (temp mediump 3-component vector of float)
-0:390        interpolateAtOffset (global mediump 3-component vector of float)
-0:390          direct index (smooth sample temp mediump 3-component vector of float)
-0:390            'sampInArray' (smooth sample in 4-element array of mediump 3-component vector of float)
-0:390            Constant:
-0:390              2 (const int)
-0:390          Constant:
-0:390            0.200000
-0:390            0.200000
-0:391      move second child to first child (temp mediump 2-component vector of float)
-0:391        'res2' (temp mediump 2-component vector of float)
-0:391        interpolateAtOffset (global mediump 2-component vector of float)
-0:391          vector swizzle (temp mediump 2-component vector of float)
-0:391            direct index (smooth sample temp mediump 3-component vector of float)
-0:391              'sampInArray' (smooth sample in 4-element array of mediump 3-component vector of float)
-0:391              Constant:
-0:391                2 (const int)
-0:391            Sequence
-0:391              Constant:
-0:391                0 (const int)
-0:391              Constant:
-0:391                1 (const int)
-0:391          Constant:
-0:391            0.200000
-0:391            0.200000
-0:392      move second child to first child (temp mediump float)
-0:392        'res' (temp mediump float)
-0:392        interpolateAtOffset (global mediump float)
-0:392          add (temp mediump float)
-0:392            'scalarIn' (smooth in mediump float)
-0:392            'scalarIn' (smooth in mediump float)
-0:392          Constant:
-0:392            0.200000
-0:392            0.200000
-0:393      move second child to first child (temp mediump float)
-0:393        'res' (temp mediump float)
-0:393        interpolateAtOffset (global mediump float)
-0:393          'scalarIn' (smooth in mediump float)
-0:393          Constant:
-0:393            0.200000
-0:393            0.200000
-0:396      move second child to first child (temp mediump float)
-0:396        'res' (temp mediump float)
-0:396        interpolateAtCentroid (global mediump float)
-0:396          'f' (temp mediump float)
-0:397      move second child to first child (temp mediump 4-component vector of float)
-0:397        'res4' (temp mediump 4-component vector of float)
-0:397        interpolateAtSample (global mediump 4-component vector of float)
-0:397          'outp' (out mediump 4-component vector of float)
-0:397          Constant:
-0:397            0 (const int)
-0:427  Function Definition: blendFoo( (temp void)
-0:427    Function Parameters: 
-0:428  Function Definition: blendFoo(vf3; (global void)
-0:428    Function Parameters: 
-0:428      'v' (in mediump 3-component vector of float)
 0:?   Linker Objects
 0:?     'gl_FragCoord' (smooth in mediump 4-component vector of float)
 0:?     'v3' (layout(location=2 ) smooth in mediump 3-component vector of float)
diff --git a/Test/baseResults/310.geom.out b/Test/baseResults/310.geom.out
index 888c142..def6b7a 100644
--- a/Test/baseResults/310.geom.out
+++ b/Test/baseResults/310.geom.out
@@ -250,74 +250,6 @@
 0:52        'gl_Layer' (layout(stream=0 ) out highp int Layer)
 0:52        Constant:
 0:52          2 (const int)
-0:63  Function Definition: foo(i1; (global void)
-0:63    Function Parameters: 
-0:63      'a' (in highp int)
-0:65    Sequence
-0:65      move second child to first child (temp mediump 4-component vector of float)
-0:65        a: direct index for structure (layout(stream=0 ) out mediump 4-component vector of float)
-0:65          'ouuaa6' (layout(stream=0 ) out block{layout(stream=0 ) out mediump 4-component vector of float a})
-0:65          Constant:
-0:65            0 (const int)
-0:65        Constant:
-0:65          1.000000
-0:65          1.000000
-0:65          1.000000
-0:65          1.000000
-0:114  Function Definition: fooe1( (global void)
-0:114    Function Parameters: 
-0:116    Sequence
-0:116      'gl_ViewportIndex' (temp float)
-0:117      'gl_MaxViewports' (temp float)
-0:118      Constant:
-0:118        4 (const int)
-0:119      Sequence
-0:119        move second child to first child (temp highp int)
-0:119          'inv' (temp highp int)
-0:119          'gl_InvocationID' (in highp int InvocationID)
-0:134  Function Definition: notHere( (global void)
-0:134    Function Parameters: 
-0:136    Sequence
-0:136      'gl_MaxGeometryVaryingComponents' (temp float)
-0:137      'gl_VerticesIn' (temp float)
-0:140  Function Definition: pointSize1( (global void)
-0:140    Function Parameters: 
-0:142    Sequence
-0:142      Sequence
-0:142        move second child to first child (temp highp float)
-0:142          'ps' (temp highp float)
-0:142          gl_PointSize: direct index for structure (in highp float PointSize)
-0:142            direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
-0:142              'gl_in' (in 4-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
-0:142              Constant:
-0:142                3 (const int)
-0:142            Constant:
-0:142              1 (const int)
-0:143      move second child to first child (temp highp float)
-0:143        gl_PointSize: direct index for structure (layout(stream=0 ) gl_PointSize highp float PointSize)
-0:143          'anon@1' (layout(stream=0 ) out block{layout(stream=0 ) gl_Position highp 4-component vector of float Position gl_Position, layout(stream=0 ) gl_PointSize highp float PointSize gl_PointSize})
-0:143          Constant:
-0:143            1 (const uint)
-0:143        'ps' (temp highp float)
-0:148  Function Definition: pointSize2( (global void)
-0:148    Function Parameters: 
-0:150    Sequence
-0:150      Sequence
-0:150        move second child to first child (temp highp float)
-0:150          'ps' (temp highp float)
-0:150          gl_PointSize: direct index for structure (in highp float PointSize)
-0:150            direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
-0:150              'gl_in' (in 4-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
-0:150              Constant:
-0:150                3 (const int)
-0:150            Constant:
-0:150              1 (const int)
-0:151      move second child to first child (temp highp float)
-0:151        gl_PointSize: direct index for structure (layout(stream=0 ) gl_PointSize highp float PointSize)
-0:151          'anon@1' (layout(stream=0 ) out block{layout(stream=0 ) gl_Position highp 4-component vector of float Position gl_Position, layout(stream=0 ) gl_PointSize highp float PointSize gl_PointSize})
-0:151          Constant:
-0:151            1 (const uint)
-0:151        'ps' (temp highp float)
 0:?   Linker Objects
 0:?     'fromV' (in 4-element array of block{in mediump 3-component vector of float color})
 0:?     'nonBlockUnsized' (in 4-element array of mediump 4-component vector of float)
diff --git a/Test/baseResults/310.tesc.out b/Test/baseResults/310.tesc.out
index 24e3d20..ab27198 100644
--- a/Test/baseResults/310.tesc.out
+++ b/Test/baseResults/310.tesc.out
@@ -514,172 +514,6 @@
 0:58        Barrier (global void)
 0:61      Branch: Return
 0:63      Barrier (global void)
-0:69  Function Definition: foo( (global void)
-0:69    Function Parameters: 
-0:71    Sequence
-0:71      gl_Position: direct index for structure (out highp 4-component vector of float Position)
-0:71        direct index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
-0:71          'gl_out' (out 4-element array of block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
-0:71          Constant:
-0:71            4 (const int)
-0:71        Constant:
-0:71          0 (const int)
-0:73      Barrier (global void)
-0:92  Function Definition: foop( (global void)
-0:92    Function Parameters: 
-0:?     Sequence
-0:95      move second child to first child (temp highp float)
-0:95        'd' (noContraction temp highp float)
-0:95        fma (global highp float)
-0:95          'd' (noContraction temp highp float)
-0:95          'd' (noContraction temp highp float)
-0:95          'd' (noContraction temp highp float)
-0:112  Function Definition: pointSize2( (global void)
-0:112    Function Parameters: 
-0:114    Sequence
-0:114      Sequence
-0:114        move second child to first child (temp highp float)
-0:114          'ps' (temp highp float)
-0:114          gl_PointSize: direct index for structure (in highp float PointSize)
-0:114            direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
-0:114              'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
-0:114              Constant:
-0:114                1 (const int)
-0:114            Constant:
-0:114              1 (const int)
-0:115      move second child to first child (temp highp float)
-0:115        gl_PointSize: direct index for structure (out highp float PointSize)
-0:115          indirect index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
-0:115            'gl_out' (out 4-element array of block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
-0:115            'gl_InvocationID' (in highp int InvocationID)
-0:115          Constant:
-0:115            1 (const int)
-0:115        'ps' (temp highp float)
-0:122  Function Definition: goodfoop( (global void)
-0:122    Function Parameters: 
-0:?     Sequence
-0:126      multiply second child into first child (temp highp 3-component vector of float)
-0:126        'pv3' (noContraction temp highp 3-component vector of float)
-0:126        'pv3' (noContraction temp highp 3-component vector of float)
-0:127      move second child to first child (temp highp 3-component vector of float)
-0:127        'pv3' (noContraction temp highp 3-component vector of float)
-0:127        fma (global highp 3-component vector of float)
-0:127          'pv3' (noContraction temp highp 3-component vector of float)
-0:127          'pv3' (noContraction temp highp 3-component vector of float)
-0:127          'pv3' (noContraction temp highp 3-component vector of float)
-0:128      move second child to first child (temp highp float)
-0:128        'd' (noContraction temp highp float)
-0:128        fma (global highp float)
-0:128          'd' (noContraction temp highp float)
-0:128          'd' (noContraction temp highp float)
-0:128          'd' (noContraction temp highp float)
-0:131  Function Definition: bbBad( (global void)
-0:131    Function Parameters: 
-0:133    Sequence
-0:133      'gl_BoundingBoxOES' (patch out 2-element array of highp 4-component vector of float BoundingBox)
-0:138  Function Definition: bb( (global void)
-0:138    Function Parameters: 
-0:140    Sequence
-0:140      move second child to first child (temp highp 4-component vector of float)
-0:140        direct index (patch temp highp 4-component vector of float BoundingBox)
-0:140          'gl_BoundingBoxOES' (patch out 2-element array of highp 4-component vector of float BoundingBox)
-0:140          Constant:
-0:140            0 (const int)
-0:140        Constant:
-0:140          0.000000
-0:140          0.000000
-0:140          0.000000
-0:140          0.000000
-0:141      move second child to first child (temp highp 4-component vector of float)
-0:141        direct index (patch temp highp 4-component vector of float BoundingBox)
-0:141          'gl_BoundingBoxOES' (patch out 2-element array of highp 4-component vector of float BoundingBox)
-0:141          Constant:
-0:141            1 (const int)
-0:141        Constant:
-0:141          1.000000
-0:141          1.000000
-0:141          1.000000
-0:141          1.000000
-0:142      move second child to first child (temp highp 4-component vector of float)
-0:142        direct index (patch temp highp 4-component vector of float BoundingBox)
-0:142          'gl_BoundingBoxOES' (patch out 2-element array of highp 4-component vector of float BoundingBox)
-0:142          Constant:
-0:142            2 (const int)
-0:142        Constant:
-0:142          2.000000
-0:142          2.000000
-0:142          2.000000
-0:142          2.000000
-0:153  Function Definition: outputtingOutparam(i1; (global void)
-0:153    Function Parameters: 
-0:153      'a' (out highp int)
-0:155    Sequence
-0:155      move second child to first child (temp highp int)
-0:155        'a' (out highp int)
-0:155        Constant:
-0:155          2 (const int)
-0:158  Function Definition: outputting( (global void)
-0:158    Function Parameters: 
-0:160    Sequence
-0:160      move second child to first child (temp highp int)
-0:160        indirect index (temp highp int)
-0:160          'outa' (out 4-element array of highp int)
-0:160          'gl_InvocationID' (in highp int InvocationID)
-0:160        Constant:
-0:160          2 (const int)
-0:161      move second child to first child (temp highp int)
-0:161        direct index (temp highp int)
-0:161          'outa' (out 4-element array of highp int)
-0:161          Constant:
-0:161            1 (const int)
-0:161        Constant:
-0:161          2 (const int)
-0:162      move second child to first child (temp highp 4-component vector of float)
-0:162        gl_Position: direct index for structure (out highp 4-component vector of float Position)
-0:162          direct index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
-0:162            'gl_out' (out 4-element array of block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
-0:162            Constant:
-0:162              0 (const int)
-0:162          Constant:
-0:162            0 (const int)
-0:162        Constant:
-0:162          1.000000
-0:162          1.000000
-0:162          1.000000
-0:162          1.000000
-0:163      direct index (temp highp int)
-0:163        'outa' (out 4-element array of highp int)
-0:163        Constant:
-0:163          1 (const int)
-0:164      direct index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
-0:164        'gl_out' (out 4-element array of block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
-0:164        Constant:
-0:164          0 (const int)
-0:165      Function Call: outputtingOutparam(i1; (global void)
-0:165        direct index (temp highp int)
-0:165          'outa' (out 4-element array of highp int)
-0:165          Constant:
-0:165            0 (const int)
-0:166      Function Call: outputtingOutparam(i1; (global void)
-0:166        indirect index (temp highp int)
-0:166          'outa' (out 4-element array of highp int)
-0:166          'gl_InvocationID' (in highp int InvocationID)
-0:167      move second child to first child (temp highp float)
-0:167        f: direct index for structure (out highp float)
-0:167          direct index (patch temp block{out highp float f})
-0:167            'patchIName' (patch out 4-element array of block{out highp float f})
-0:167            Constant:
-0:167              1 (const int)
-0:167          Constant:
-0:167            0 (const int)
-0:167        Constant:
-0:167          3.140000
-0:168      move second child to first child (temp highp int)
-0:168        indirect index (temp highp int)
-0:168          'outa' (out 4-element array of highp int)
-0:168          'gl_InvocationID' (in highp int InvocationID)
-0:168        Constant:
-0:168          2 (const int)
 0:?   Linker Objects
 0:?     'gl_out' (out 4-element array of block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
 0:?     'outa' (out 4-element array of highp int)
diff --git a/Test/baseResults/310.tese.out b/Test/baseResults/310.tese.out
index aacfedb..62894ec 100644
--- a/Test/baseResults/310.tese.out
+++ b/Test/baseResults/310.tese.out
@@ -274,19 +274,6 @@
 0:48        Constant:
 0:48          0.000000
 0:48        'cd' (temp highp float)
-0:117  Function Definition: pointSize2( (global void)
-0:117    Function Parameters: 
-0:?     Sequence
-0:120      move second child to first child (temp highp float)
-0:120        gl_PointSize: direct index for structure (gl_PointSize highp float PointSize)
-0:120          'anon@1' (out block{gl_Position highp 4-component vector of float Position gl_Position, gl_PointSize highp float PointSize gl_PointSize})
-0:120          Constant:
-0:120            1 (const uint)
-0:120        'ps' (temp highp float)
-0:125  Function Definition: bbbad( (global void)
-0:125    Function Parameters: 
-0:127    Sequence
-0:127      'gl_BoundingBoxOES' (temp float)
 0:?   Linker Objects
 0:?     'patchIn' (patch in highp 4-component vector of float)
 0:?     'patchOut' (patch out highp 4-component vector of float)
diff --git a/Test/baseResults/310.vert.out b/Test/baseResults/310.vert.out
index 84a50e8..d0dfedf 100644
--- a/Test/baseResults/310.vert.out
+++ b/Test/baseResults/310.vert.out
@@ -1158,693 +1158,6 @@
 0:48        'v4' (temp mediump 4-component vector of float)
 0:48        UnpackSnorm4x8 (global mediump 4-component vector of float, operation at highp)
 0:48          'u1' (temp highp uint)
-0:60  Function Definition: foo( (global void)
-0:60    Function Parameters: 
-0:?     Sequence
-0:63      move second child to first child (temp highp 2-component vector of int)
-0:63        'v2' (temp highp 2-component vector of int)
-0:63        textureSize (global highp 2-component vector of int)
-0:63          's2dms' (uniform highp sampler2DMS)
-0:64      move second child to first child (temp highp 2-component vector of int)
-0:64        'v2' (temp highp 2-component vector of int)
-0:64        textureSize (global highp 2-component vector of int)
-0:64          'us2dms' (uniform highp usampler2DMS)
-0:65      Sequence
-0:65        move second child to first child (temp highp 4-component vector of float)
-0:65          'v4' (temp highp 4-component vector of float)
-0:65          textureFetch (global highp 4-component vector of float)
-0:65            's2dms' (uniform highp sampler2DMS)
-0:65            'v2' (temp highp 2-component vector of int)
-0:65            Constant:
-0:65              2 (const int)
-0:66      Sequence
-0:66        move second child to first child (temp highp 4-component vector of int)
-0:66          'iv4' (temp highp 4-component vector of int)
-0:66          textureFetch (global highp 4-component vector of int)
-0:66            'is2dms' (uniform highp isampler2DMS)
-0:66            'v2' (temp highp 2-component vector of int)
-0:66            Constant:
-0:66              2 (const int)
-0:67      Constant:
-0:67        0.000000
-0:69      frexp (global highp float)
-0:69        'f' (temp highp float)
-0:69        'ini' (in highp int)
-0:114  Function Definition: foo_IO( (global void)
-0:114    Function Parameters: 
-0:116    Sequence
-0:116      Sequence
-0:116        move second child to first child (temp highp int)
-0:116          'sum' (temp highp int)
-0:116          add (temp highp int)
-0:116            'gl_VertexID' (gl_VertexId highp int VertexId)
-0:117            'gl_InstanceID' (gl_InstanceId highp int InstanceId)
-0:118      move second child to first child (temp highp 4-component vector of float)
-0:118        gl_Position: direct index for structure (gl_Position highp 4-component vector of float Position)
-0:118          'anon@1' (out block{gl_Position highp 4-component vector of float Position gl_Position, })
-0:118          Constant:
-0:118            0 (const uint)
-0:118        Constant:
-0:118          1.000000
-0:118          1.000000
-0:118          1.000000
-0:118          1.000000
-0:119      gl_PointSize: direct index for structure (gl_PointSize highp void PointSize)
-0:119        'anon@1' (out block{gl_Position highp 4-component vector of float Position gl_Position, })
-0:119        Constant:
-0:119          1 (const uint)
-0:153  Function Definition: pfooBad( (global void)
-0:153    Function Parameters: 
-0:?     Sequence
-0:156      move second child to first child (temp highp 2-component vector of float)
-0:156        'h' (noContraction temp highp 2-component vector of float)
-0:156        fma (global highp 2-component vector of float)
-0:156          'inf' (in highp 2-component vector of float)
-0:156          'ing' (in highp 2-component vector of float)
-0:156          'h' (noContraction temp highp 2-component vector of float)
-0:157      indirect index (temp lowp sampler2D)
-0:157        'sArray' (uniform 4-element array of lowp sampler2D)
-0:157        add (temp highp int)
-0:157          'sIndex' (uniform highp int)
-0:157          Constant:
-0:157            1 (const int)
-0:158      indirect index (layout(binding=0 offset=0 ) temp highp atomic_uint)
-0:158        'auArray' (layout(binding=0 offset=0 ) uniform 2-element array of highp atomic_uint)
-0:158        add (temp highp int)
-0:158          'sIndex' (uniform highp int)
-0:158          Constant:
-0:158            1 (const int)
-0:159      direct index (layout(column_major shared ) temp block{layout(column_major shared ) uniform highp int i})
-0:159        'ubInst' (layout(column_major shared ) uniform 4-element array of block{layout(column_major shared ) uniform highp int i})
-0:159        Constant:
-0:159          1 (const int)
-0:160      direct index (layout(column_major shared ) temp block{layout(column_major shared ) buffer highp int i})
-0:160        'bbInst' (layout(column_major shared ) buffer 4-element array of block{layout(column_major shared ) buffer highp int i})
-0:160        Constant:
-0:160          2 (const int)
-0:161      indirect index (layout(column_major shared ) temp block{layout(column_major shared ) uniform highp int i})
-0:161        'ubInst' (layout(column_major shared ) uniform 4-element array of block{layout(column_major shared ) uniform highp int i})
-0:161        add (temp highp int)
-0:161          'sIndex' (uniform highp int)
-0:161          Constant:
-0:161            1 (const int)
-0:162      indirect index (layout(column_major shared ) temp block{layout(column_major shared ) buffer highp int i})
-0:162        'bbInst' (layout(column_major shared ) buffer 4-element array of block{layout(column_major shared ) buffer highp int i})
-0:162        'sIndex' (uniform highp int)
-0:163      direct index (writeonly temp highp image2D)
-0:163        'iArray' (writeonly uniform 5-element array of highp image2D)
-0:163        Constant:
-0:163          2 (const int)
-0:164      indirect index (writeonly temp highp image2D)
-0:164        'iArray' (writeonly uniform 5-element array of highp image2D)
-0:164        component-wise multiply (temp highp int)
-0:164          'sIndex' (uniform highp int)
-0:164          Constant:
-0:164            2 (const int)
-0:165      textureGatherOffset (global lowp 4-component vector of float)
-0:165        direct index (temp lowp sampler2D)
-0:165          'sArray' (uniform 4-element array of lowp sampler2D)
-0:165          Constant:
-0:165            0 (const int)
-0:165        Constant:
-0:165          0.100000
-0:165          0.100000
-0:165        Convert float to int (temp lowp 2-component vector of int)
-0:165          'inf' (in highp 2-component vector of float)
-0:166      textureGatherOffsets (global lowp 4-component vector of float, operation at highp)
-0:166        direct index (temp lowp sampler2D)
-0:166          'sArray' (uniform 4-element array of lowp sampler2D)
-0:166          Constant:
-0:166            0 (const int)
-0:166        Constant:
-0:166          0.100000
-0:166          0.100000
-0:166        Constant:
-0:166          0 (const int)
-0:166          0 (const int)
-0:166          0 (const int)
-0:166          0 (const int)
-0:166          0 (const int)
-0:166          0 (const int)
-0:166          0 (const int)
-0:166          0 (const int)
-0:171  Function Definition: pfoo( (global void)
-0:171    Function Parameters: 
-0:?     Sequence
-0:174      move second child to first child (temp highp 2-component vector of float)
-0:174        'h' (noContraction temp highp 2-component vector of float)
-0:174        fma (global highp 2-component vector of float)
-0:174          'inf' (in highp 2-component vector of float)
-0:174          'ing' (in highp 2-component vector of float)
-0:174          'h' (noContraction temp highp 2-component vector of float)
-0:175      indirect index (temp lowp sampler2D)
-0:175        'sArray' (uniform 4-element array of lowp sampler2D)
-0:175        add (temp highp int)
-0:175          'sIndex' (uniform highp int)
-0:175          Constant:
-0:175            1 (const int)
-0:176      indirect index (layout(column_major shared ) temp block{layout(column_major shared ) uniform highp int i})
-0:176        'ubInst' (layout(column_major shared ) uniform 4-element array of block{layout(column_major shared ) uniform highp int i})
-0:176        add (temp highp int)
-0:176          'sIndex' (uniform highp int)
-0:176          Constant:
-0:176            1 (const int)
-0:177      indirect index (layout(column_major shared ) temp block{layout(column_major shared ) buffer highp int i})
-0:177        'bbInst' (layout(column_major shared ) buffer 4-element array of block{layout(column_major shared ) buffer highp int i})
-0:177        subtract (temp highp int)
-0:177          'sIndex' (uniform highp int)
-0:177          Constant:
-0:177            2 (const int)
-0:178      direct index (writeonly temp highp image2D)
-0:178        'iArray' (writeonly uniform 5-element array of highp image2D)
-0:178        Constant:
-0:178          2 (const int)
-0:179      indirect index (writeonly temp highp image2D)
-0:179        'iArray' (writeonly uniform 5-element array of highp image2D)
-0:179        subtract (temp highp int)
-0:179          'sIndex' (uniform highp int)
-0:179          Constant:
-0:179            2 (const int)
-0:180      textureGatherOffset (global lowp 4-component vector of float)
-0:180        direct index (temp lowp sampler2D)
-0:180          'sArray' (uniform 4-element array of lowp sampler2D)
-0:180          Constant:
-0:180            0 (const int)
-0:180        Constant:
-0:180          0.100000
-0:180          0.100000
-0:180        Convert float to int (temp lowp 2-component vector of int)
-0:180          'inf' (in highp 2-component vector of float)
-0:181      textureGatherOffsets (global lowp 4-component vector of float, operation at highp)
-0:181        direct index (temp lowp sampler2D)
-0:181          'sArray' (uniform 4-element array of lowp sampler2D)
-0:181          Constant:
-0:181            0 (const int)
-0:181        Constant:
-0:181          0.100000
-0:181          0.100000
-0:181        Constant:
-0:181          0 (const int)
-0:181          0 (const int)
-0:181          0 (const int)
-0:181          0 (const int)
-0:181          0 (const int)
-0:181          0 (const int)
-0:181          0 (const int)
-0:181          0 (const int)
-0:182      textureGatherOffsets (global lowp 4-component vector of float, operation at highp)
-0:182        direct index (temp lowp sampler2D)
-0:182          'sArray' (uniform 4-element array of lowp sampler2D)
-0:182          Constant:
-0:182            0 (const int)
-0:182        Constant:
-0:182          0.100000
-0:182          0.100000
-0:182        'offsets' (uniform 4-element array of highp 2-component vector of int)
-0:220  Function Definition: bufferT( (global void)
-0:220    Function Parameters: 
-0:222    Sequence
-0:222      Sequence
-0:222        move second child to first child (temp highp int)
-0:222          's1' (temp highp int)
-0:222          textureSize (global highp int)
-0:222            'bufSamp1' (uniform highp samplerBuffer)
-0:223      Sequence
-0:223        move second child to first child (temp highp int)
-0:223          's2' (temp highp int)
-0:223          textureSize (global highp int)
-0:223            'bufSamp2' (uniform highp isamplerBuffer)
-0:224      Sequence
-0:224        move second child to first child (temp highp int)
-0:224          's3' (temp highp int)
-0:224          textureSize (global highp int)
-0:224            'bufSamp3' (uniform highp usamplerBuffer)
-0:226      Sequence
-0:226        move second child to first child (temp highp int)
-0:226          's4' (temp highp int)
-0:226          imageQuerySize (global highp int)
-0:226            'bufSamp4' (writeonly uniform highp imageBuffer)
-0:227      Sequence
-0:227        move second child to first child (temp highp int)
-0:227          's5' (temp highp int)
-0:227          imageQuerySize (global highp int)
-0:227            'bufSamp5' (writeonly uniform highp iimageBuffer)
-0:228      Sequence
-0:228        move second child to first child (temp highp int)
-0:228          's6' (temp highp int)
-0:228          imageQuerySize (global highp int)
-0:228            'bufSamp6' (writeonly uniform highp uimageBuffer)
-0:230      Sequence
-0:230        move second child to first child (temp highp 4-component vector of float)
-0:230          'f1' (temp highp 4-component vector of float)
-0:230          textureFetch (global highp 4-component vector of float)
-0:230            'bufSamp1' (uniform highp samplerBuffer)
-0:230            's1' (temp highp int)
-0:231      Sequence
-0:231        move second child to first child (temp highp 4-component vector of int)
-0:231          'f2' (temp highp 4-component vector of int)
-0:231          textureFetch (global highp 4-component vector of int)
-0:231            'bufSamp2' (uniform highp isamplerBuffer)
-0:231            's2' (temp highp int)
-0:232      Sequence
-0:232        move second child to first child (temp highp 4-component vector of uint)
-0:232          'f3' (temp highp 4-component vector of uint)
-0:232          textureFetch (global highp 4-component vector of uint)
-0:232            'bufSamp3' (uniform highp usamplerBuffer)
-0:232            's3' (temp highp int)
-0:279  Function Definition: CAT( (global void)
-0:279    Function Parameters: 
-0:281    Sequence
-0:281      Sequence
-0:281        move second child to first child (temp highp 3-component vector of int)
-0:281          's4' (temp highp 3-component vector of int)
-0:281          textureSize (global highp 3-component vector of int)
-0:281            'CA4' (uniform highp samplerCubeArray)
-0:281            Constant:
-0:281              1 (const int)
-0:282      Sequence
-0:282        move second child to first child (temp highp 3-component vector of int)
-0:282          's5' (temp highp 3-component vector of int)
-0:282          textureSize (global highp 3-component vector of int)
-0:282            'CA5' (uniform highp samplerCubeArrayShadow)
-0:282            Constant:
-0:282              1 (const int)
-0:283      Sequence
-0:283        move second child to first child (temp highp 3-component vector of int)
-0:283          's6' (temp highp 3-component vector of int)
-0:283          textureSize (global highp 3-component vector of int)
-0:283            'CA6' (uniform highp isamplerCubeArray)
-0:283            Constant:
-0:283              1 (const int)
-0:284      Sequence
-0:284        move second child to first child (temp highp 3-component vector of int)
-0:284          's7' (temp highp 3-component vector of int)
-0:284          textureSize (global highp 3-component vector of int)
-0:284            'CA7' (uniform highp usamplerCubeArray)
-0:284            Constant:
-0:284              1 (const int)
-0:286      Sequence
-0:286        move second child to first child (temp highp 4-component vector of float)
-0:286          't4' (temp highp 4-component vector of float)
-0:286          texture (global highp 4-component vector of float)
-0:286            'CA4' (uniform highp samplerCubeArray)
-0:286            Constant:
-0:286              0.500000
-0:286              0.500000
-0:286              0.500000
-0:286              0.500000
-0:287      Sequence
-0:287        move second child to first child (temp highp float)
-0:287          't5' (temp highp float)
-0:287          texture (global highp float)
-0:287            'CA5' (uniform highp samplerCubeArrayShadow)
-0:287            Constant:
-0:287              0.500000
-0:287              0.500000
-0:287              0.500000
-0:287              0.500000
-0:287            Constant:
-0:287              3.000000
-0:288      Sequence
-0:288        move second child to first child (temp highp 4-component vector of int)
-0:288          't6' (temp highp 4-component vector of int)
-0:288          texture (global highp 4-component vector of int)
-0:288            'CA6' (uniform highp isamplerCubeArray)
-0:288            Constant:
-0:288              0.500000
-0:288              0.500000
-0:288              0.500000
-0:288              0.500000
-0:289      Sequence
-0:289        move second child to first child (temp highp 4-component vector of uint)
-0:289          't7' (temp highp 4-component vector of uint)
-0:289          texture (global highp 4-component vector of uint)
-0:289            'CA7' (uniform highp usamplerCubeArray)
-0:289            Constant:
-0:289              0.500000
-0:289              0.500000
-0:289              0.500000
-0:289              0.500000
-0:291      Sequence
-0:291        move second child to first child (temp highp 4-component vector of float)
-0:291          'L4' (temp highp 4-component vector of float)
-0:291          textureLod (global highp 4-component vector of float)
-0:291            'CA4' (uniform highp samplerCubeArray)
-0:291            Constant:
-0:291              0.500000
-0:291              0.500000
-0:291              0.500000
-0:291              0.500000
-0:291            Constant:
-0:291              0.240000
-0:292      Sequence
-0:292        move second child to first child (temp highp 4-component vector of int)
-0:292          'L6' (temp highp 4-component vector of int)
-0:292          textureLod (global highp 4-component vector of int)
-0:292            'CA6' (uniform highp isamplerCubeArray)
-0:292            Constant:
-0:292              0.500000
-0:292              0.500000
-0:292              0.500000
-0:292              0.500000
-0:292            Constant:
-0:292              0.260000
-0:293      Sequence
-0:293        move second child to first child (temp highp 4-component vector of uint)
-0:293          'L7' (temp highp 4-component vector of uint)
-0:293          textureLod (global highp 4-component vector of uint)
-0:293            'CA7' (uniform highp usamplerCubeArray)
-0:293            Constant:
-0:293              0.500000
-0:293              0.500000
-0:293              0.500000
-0:293              0.500000
-0:293            Constant:
-0:293              0.270000
-0:295      Sequence
-0:295        move second child to first child (temp highp 4-component vector of float)
-0:295          'g4' (temp highp 4-component vector of float)
-0:295          textureGrad (global highp 4-component vector of float)
-0:295            'CA4' (uniform highp samplerCubeArray)
-0:295            Constant:
-0:295              0.500000
-0:295              0.500000
-0:295              0.500000
-0:295              0.500000
-0:295            Constant:
-0:295              0.100000
-0:295              0.100000
-0:295              0.100000
-0:295            Constant:
-0:295              0.200000
-0:295              0.200000
-0:295              0.200000
-0:296      Sequence
-0:296        move second child to first child (temp highp 4-component vector of int)
-0:296          'g6' (temp highp 4-component vector of int)
-0:296          textureGrad (global highp 4-component vector of int)
-0:296            'CA6' (uniform highp isamplerCubeArray)
-0:296            Constant:
-0:296              0.500000
-0:296              0.500000
-0:296              0.500000
-0:296              0.500000
-0:296            Constant:
-0:296              0.100000
-0:296              0.100000
-0:296              0.100000
-0:296            Constant:
-0:296              0.200000
-0:296              0.200000
-0:296              0.200000
-0:297      Sequence
-0:297        move second child to first child (temp highp 4-component vector of uint)
-0:297          'g7' (temp highp 4-component vector of uint)
-0:297          textureGrad (global highp 4-component vector of uint)
-0:297            'CA7' (uniform highp usamplerCubeArray)
-0:297            Constant:
-0:297              0.500000
-0:297              0.500000
-0:297              0.500000
-0:297              0.500000
-0:297            Constant:
-0:297              0.100000
-0:297              0.100000
-0:297              0.100000
-0:297            Constant:
-0:297              0.200000
-0:297              0.200000
-0:297              0.200000
-0:299      Sequence
-0:299        move second child to first child (temp highp 4-component vector of float)
-0:299          'gath4' (temp highp 4-component vector of float)
-0:299          textureGather (global highp 4-component vector of float)
-0:299            'CA4' (uniform highp samplerCubeArray)
-0:299            Constant:
-0:299              0.500000
-0:299              0.500000
-0:299              0.500000
-0:299              0.500000
-0:300      Sequence
-0:300        move second child to first child (temp highp 4-component vector of float)
-0:300          'gathC4' (temp highp 4-component vector of float)
-0:300          textureGather (global highp 4-component vector of float)
-0:300            'CA4' (uniform highp samplerCubeArray)
-0:300            Constant:
-0:300              0.500000
-0:300              0.500000
-0:300              0.500000
-0:300              0.500000
-0:300            Constant:
-0:300              2 (const int)
-0:301      Sequence
-0:301        move second child to first child (temp highp 4-component vector of int)
-0:301          'gath6' (temp highp 4-component vector of int)
-0:301          textureGather (global highp 4-component vector of int)
-0:301            'CA6' (uniform highp isamplerCubeArray)
-0:301            Constant:
-0:301              0.500000
-0:301              0.500000
-0:301              0.500000
-0:301              0.500000
-0:302      Sequence
-0:302        move second child to first child (temp highp 4-component vector of int)
-0:302          'gathC6' (temp highp 4-component vector of int)
-0:302          textureGather (global highp 4-component vector of int)
-0:302            'CA6' (uniform highp isamplerCubeArray)
-0:302            Constant:
-0:302              0.500000
-0:302              0.500000
-0:302              0.500000
-0:302              0.500000
-0:302            Constant:
-0:302              1 (const int)
-0:303      Sequence
-0:303        move second child to first child (temp highp 4-component vector of uint)
-0:303          'gath7' (temp highp 4-component vector of uint)
-0:303          textureGather (global highp 4-component vector of uint)
-0:303            'CA7' (uniform highp usamplerCubeArray)
-0:303            Constant:
-0:303              0.500000
-0:303              0.500000
-0:303              0.500000
-0:303              0.500000
-0:304      Sequence
-0:304        move second child to first child (temp highp 4-component vector of uint)
-0:304          'gathC7' (temp highp 4-component vector of uint)
-0:304          textureGather (global highp 4-component vector of uint)
-0:304            'CA7' (uniform highp usamplerCubeArray)
-0:304            Constant:
-0:304              0.500000
-0:304              0.500000
-0:304              0.500000
-0:304              0.500000
-0:304            Constant:
-0:304              0 (const int)
-0:306      Sequence
-0:306        move second child to first child (temp highp 4-component vector of float)
-0:306          'gath5' (temp highp 4-component vector of float)
-0:306          textureGather (global highp 4-component vector of float)
-0:306            'CA5' (uniform highp samplerCubeArrayShadow)
-0:306            Constant:
-0:306              0.500000
-0:306              0.500000
-0:306              0.500000
-0:306              0.500000
-0:306            Constant:
-0:306              2.500000
-0:308      Sequence
-0:308        move second child to first child (temp highp 3-component vector of int)
-0:308          's1' (temp highp 3-component vector of int)
-0:308          imageQuerySize (global highp 3-component vector of int)
-0:308            'CA1' (writeonly uniform highp imageCubeArray)
-0:309      Sequence
-0:309        move second child to first child (temp highp 3-component vector of int)
-0:309          's2' (temp highp 3-component vector of int)
-0:309          imageQuerySize (global highp 3-component vector of int)
-0:309            'CA2' (writeonly uniform highp iimageCubeArray)
-0:310      Sequence
-0:310        move second child to first child (temp highp 3-component vector of int)
-0:310          's3' (temp highp 3-component vector of int)
-0:310          imageQuerySize (global highp 3-component vector of int)
-0:310            'CA3' (writeonly uniform highp uimageCubeArray)
-0:312      imageStore (global highp void)
-0:312        'CA1' (writeonly uniform highp imageCubeArray)
-0:312        's3' (temp highp 3-component vector of int)
-0:312        Constant:
-0:312          1.000000
-0:312          1.000000
-0:312          1.000000
-0:312          1.000000
-0:313      imageStore (global highp void)
-0:313        'CA2' (writeonly uniform highp iimageCubeArray)
-0:313        's3' (temp highp 3-component vector of int)
-0:313        Constant:
-0:313          1 (const int)
-0:313          1 (const int)
-0:313          1 (const int)
-0:313          1 (const int)
-0:314      imageStore (global highp void)
-0:314        'CA3' (writeonly uniform highp uimageCubeArray)
-0:314        's3' (temp highp 3-component vector of int)
-0:314        Constant:
-0:314          1 (const uint)
-0:314          1 (const uint)
-0:314          1 (const uint)
-0:314          1 (const uint)
-0:316      Sequence
-0:316        move second child to first child (temp highp 4-component vector of float)
-0:316          'cl1' (temp highp 4-component vector of float)
-0:316          imageLoad (global highp 4-component vector of float)
-0:316            'rCA1' (layout(rgba16f ) readonly uniform highp imageCubeArray)
-0:316            's3' (temp highp 3-component vector of int)
-0:317      Sequence
-0:317        move second child to first child (temp highp 4-component vector of int)
-0:317          'cl2' (temp highp 4-component vector of int)
-0:317          imageLoad (global highp 4-component vector of int)
-0:317            'rCA2' (layout(rgba32i ) readonly uniform highp iimageCubeArray)
-0:317            's3' (temp highp 3-component vector of int)
-0:318      Sequence
-0:318        move second child to first child (temp highp 4-component vector of uint)
-0:318          'cl3' (temp highp 4-component vector of uint)
-0:318          imageLoad (global highp 4-component vector of uint)
-0:318            'rCA3' (layout(r32ui ) readonly uniform highp uimageCubeArray)
-0:318            's3' (temp highp 3-component vector of int)
-0:343  Function Definition: MSA( (global void)
-0:343    Function Parameters: 
-0:345    Sequence
-0:345      Sequence
-0:345        move second child to first child (temp highp 4-component vector of float)
-0:345          'tf' (temp highp 4-component vector of float)
-0:345          textureFetch (global highp 4-component vector of float)
-0:345            'samp2DMSA' (uniform highp sampler2DMSArray)
-0:345            Constant:
-0:345              5 (const int)
-0:345              5 (const int)
-0:345              5 (const int)
-0:345            Constant:
-0:345              2 (const int)
-0:346      Sequence
-0:346        move second child to first child (temp highp 4-component vector of int)
-0:346          'tfi' (temp highp 4-component vector of int)
-0:346          textureFetch (global highp 4-component vector of int)
-0:346            'samp2DMSAi' (uniform highp isampler2DMSArray)
-0:346            Constant:
-0:346              5 (const int)
-0:346              5 (const int)
-0:346              5 (const int)
-0:346            Constant:
-0:346              2 (const int)
-0:347      Sequence
-0:347        move second child to first child (temp highp 4-component vector of uint)
-0:347          'tfu' (temp highp 4-component vector of uint)
-0:347          textureFetch (global highp 4-component vector of uint)
-0:347            'samp2DMSAu' (uniform highp usampler2DMSArray)
-0:347            Constant:
-0:347              5 (const int)
-0:347              5 (const int)
-0:347              5 (const int)
-0:347            Constant:
-0:347              2 (const int)
-0:349      Sequence
-0:349        move second child to first child (temp highp 3-component vector of int)
-0:349          'tfs' (temp highp 3-component vector of int)
-0:349          textureSize (global highp 3-component vector of int)
-0:349            'samp2DMSA' (uniform highp sampler2DMSArray)
-0:350      Sequence
-0:350        move second child to first child (temp highp 3-component vector of int)
-0:350          'tfsi' (temp highp 3-component vector of int)
-0:350          textureSize (global highp 3-component vector of int)
-0:350            'samp2DMSAi' (uniform highp isampler2DMSArray)
-0:352      Sequence
-0:352        move second child to first child (temp highp 3-component vector of int)
-0:352          'tfsu' (temp highp 3-component vector of int)
-0:352          textureSize (global highp 3-component vector of int)
-0:352            'samp2DMSAu' (uniform highp usampler2DMSArray)
-0:364  Function Definition: goodImageAtom( (global void)
-0:364    Function Parameters: 
-0:?     Sequence
-0:370      imageAtomicAdd (global highp int)
-0:370        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:370        'P' (uniform highp 2-component vector of int)
-0:370        'dati' (temp highp int)
-0:371      imageAtomicAdd (global highp uint)
-0:371        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:371        'P' (uniform highp 2-component vector of int)
-0:371        'datu' (temp highp uint)
-0:372      imageAtomicMin (global highp int)
-0:372        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:372        'P' (uniform highp 2-component vector of int)
-0:372        'dati' (temp highp int)
-0:373      imageAtomicMin (global highp uint)
-0:373        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:373        'P' (uniform highp 2-component vector of int)
-0:373        'datu' (temp highp uint)
-0:374      imageAtomicMax (global highp int)
-0:374        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:374        'P' (uniform highp 2-component vector of int)
-0:374        'dati' (temp highp int)
-0:375      imageAtomicMax (global highp uint)
-0:375        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:375        'P' (uniform highp 2-component vector of int)
-0:375        'datu' (temp highp uint)
-0:376      imageAtomicAnd (global highp int)
-0:376        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:376        'P' (uniform highp 2-component vector of int)
-0:376        'dati' (temp highp int)
-0:377      imageAtomicAnd (global highp uint)
-0:377        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:377        'P' (uniform highp 2-component vector of int)
-0:377        'datu' (temp highp uint)
-0:378      imageAtomicOr (global highp int)
-0:378        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:378        'P' (uniform highp 2-component vector of int)
-0:378        'dati' (temp highp int)
-0:379      imageAtomicOr (global highp uint)
-0:379        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:379        'P' (uniform highp 2-component vector of int)
-0:379        'datu' (temp highp uint)
-0:380      imageAtomicXor (global highp int)
-0:380        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:380        'P' (uniform highp 2-component vector of int)
-0:380        'dati' (temp highp int)
-0:381      imageAtomicXor (global highp uint)
-0:381        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:381        'P' (uniform highp 2-component vector of int)
-0:381        'datu' (temp highp uint)
-0:382      imageAtomicExchange (global highp int)
-0:382        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:382        'P' (uniform highp 2-component vector of int)
-0:382        'dati' (temp highp int)
-0:383      imageAtomicExchange (global highp uint)
-0:383        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:383        'P' (uniform highp 2-component vector of int)
-0:383        'datu' (temp highp uint)
-0:384      imageAtomicExchange (global highp float)
-0:384        'im2Df' (layout(r32f ) uniform highp image2D)
-0:384        'P' (uniform highp 2-component vector of int)
-0:384        'datf' (temp highp float)
-0:385      imageAtomicCompSwap (global highp int)
-0:385        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:385        'P' (uniform highp 2-component vector of int)
-0:385        Constant:
-0:385          3 (const int)
-0:385        'dati' (temp highp int)
-0:386      imageAtomicCompSwap (global highp uint)
-0:386        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:386        'P' (uniform highp 2-component vector of int)
-0:386        Constant:
-0:386          5 (const uint)
-0:386        'datu' (temp highp uint)
-0:398  Function Definition: badInterp( (global void)
-0:398    Function Parameters: 
-0:400    Sequence
-0:400      Constant:
-0:400        0.000000
-0:401      Constant:
-0:401        0.000000
-0:402      Constant:
-0:402        0.000000
 0:?   Linker Objects
 0:?     's' (shared highp 4-component vector of float)
 0:?     'v' (buffer highp 4-component vector of float)
diff --git a/Test/baseResults/310AofA.vert.out b/Test/baseResults/310AofA.vert.out
index 28592d5..6b69e71 100644
--- a/Test/baseResults/310AofA.vert.out
+++ b/Test/baseResults/310AofA.vert.out
@@ -359,277 +359,6 @@
 0:13          1 (const uint)
 0:13          2 (const uint)
 0:13        'd' (temp 3-element array of 2-element array of highp int)
-0:44  Function Definition: foo(f1[5][7]; (global 4-element array of 7-element array of highp float)
-0:44    Function Parameters: 
-0:44      'a' (in 5-element array of 7-element array of highp float)
-0:?     Sequence
-0:47      move second child to first child (temp 7-element array of highp float)
-0:47        'r' (temp 7-element array of highp float)
-0:47        direct index (temp 7-element array of highp float)
-0:47          'a' (in 5-element array of 7-element array of highp float)
-0:47          Constant:
-0:47            2 (const int)
-0:48      Constant:
-0:48        0.000000
-0:49      Constant:
-0:49        0.000000
-0:50      Branch: Return with expression
-0:50        Construct float (temp 4-element array of 7-element array of float)
-0:50          direct index (temp 7-element array of highp float)
-0:50            'a' (in 5-element array of 7-element array of highp float)
-0:50            Constant:
-0:50              0 (const int)
-0:50          direct index (temp 7-element array of highp float)
-0:50            'a' (in 5-element array of 7-element array of highp float)
-0:50            Constant:
-0:50              1 (const int)
-0:50          'r' (temp 7-element array of highp float)
-0:50          direct index (temp 7-element array of highp float)
-0:50            'a' (in 5-element array of 7-element array of highp float)
-0:50            Constant:
-0:50              3 (const int)
-0:51      Branch: Return with expression
-0:51        Construct float (temp 4-element array of 7-element array of float)
-0:51          direct index (temp 7-element array of highp float)
-0:51            'a' (in 5-element array of 7-element array of highp float)
-0:51            Constant:
-0:51              0 (const int)
-0:51          direct index (temp 7-element array of highp float)
-0:51            'a' (in 5-element array of 7-element array of highp float)
-0:51            Constant:
-0:51              1 (const int)
-0:51          'r' (temp 7-element array of highp float)
-0:51          direct index (temp 7-element array of highp float)
-0:51            'a' (in 5-element array of 7-element array of highp float)
-0:51            Constant:
-0:51              3 (const int)
-0:52      Branch: Return with expression
-0:52        Construct float (temp 4-element array of 7-element array of float)
-0:52          direct index (temp 7-element array of highp float)
-0:52            'a' (in 5-element array of 7-element array of highp float)
-0:52            Constant:
-0:52              0 (const int)
-0:52          direct index (temp 7-element array of highp float)
-0:52            'a' (in 5-element array of 7-element array of highp float)
-0:52            Constant:
-0:52              1 (const int)
-0:52          direct index (temp 7-element array of highp float)
-0:52            'a' (in 5-element array of 7-element array of highp float)
-0:52            Constant:
-0:52              2 (const int)
-0:52          direct index (temp 7-element array of highp float)
-0:52            'a' (in 5-element array of 7-element array of highp float)
-0:52            Constant:
-0:52              3 (const int)
-0:55  Function Definition: bar(f1[5][7]; (global void)
-0:55    Function Parameters: 
-0:55      '' (in 5-element array of 7-element array of highp float)
-0:57  Function Definition: foo2( (global void)
-0:57    Function Parameters: 
-0:?     Sequence
-0:?       Sequence
-0:62        move second child to first child (temp highp float)
-0:62          direct index (temp highp float)
-0:62            direct index (temp 2-element array of highp float)
-0:62              direct index (temp 4-element array of 2-element array of highp float)
-0:62                'gu' (temp 3-element array of 4-element array of 2-element array of highp float)
-0:62                Constant:
-0:62                  2 (const int)
-0:62              Constant:
-0:62                4 (const int)
-0:62            Constant:
-0:62              1 (const int)
-0:62          Constant:
-0:62            4.000000
-0:64      Sequence
-0:64        move second child to first child (temp 3-element array of 2-element array of highp 4-component vector of float)
-0:64          'ca4' (temp 3-element array of 2-element array of highp 4-component vector of float)
-0:66          Constant:
-0:66            0.000000
-0:66            0.000000
-0:66            0.000000
-0:66            0.000000
-0:66            1.000000
-0:66            1.000000
-0:66            1.000000
-0:66            1.000000
-0:66            0.000000
-0:66            0.000000
-0:66            0.000000
-0:66            0.000000
-0:66            1.000000
-0:66            1.000000
-0:66            1.000000
-0:66            1.000000
-0:66            0.000000
-0:66            0.000000
-0:66            0.000000
-0:66            0.000000
-0:66            1.000000
-0:66            1.000000
-0:66            1.000000
-0:66            1.000000
-0:67      Sequence
-0:67        move second child to first child (temp 3-element array of 2-element array of highp 4-component vector of float)
-0:67          'caim' (temp 3-element array of 2-element array of highp 4-component vector of float)
-0:69          Constant:
-0:69            4.000000
-0:69            4.000000
-0:69            4.000000
-0:69            4.000000
-0:69            2.000000
-0:69            2.000000
-0:69            2.000000
-0:69            2.000000
-0:69            4.000000
-0:69            4.000000
-0:69            4.000000
-0:69            4.000000
-0:69            2.000000
-0:69            2.000000
-0:69            2.000000
-0:69            2.000000
-0:69            4.000000
-0:69            4.000000
-0:69            4.000000
-0:69            4.000000
-0:69            2.000000
-0:69            2.000000
-0:69            2.000000
-0:69            2.000000
-0:70      Sequence
-0:70        move second child to first child (temp 3-element array of 2-element array of highp 4-component vector of float)
-0:70          'caim2' (temp 3-element array of 2-element array of highp 4-component vector of float)
-0:72          Constant:
-0:72            4.000000
-0:72            4.000000
-0:72            4.000000
-0:72            4.000000
-0:72            2.000000
-0:72            2.000000
-0:72            2.000000
-0:72            2.000000
-0:72            4.000000
-0:72            4.000000
-0:72            4.000000
-0:72            4.000000
-0:72            2.000000
-0:72            2.000000
-0:72            2.000000
-0:72            2.000000
-0:72            4.000000
-0:72            4.000000
-0:72            4.000000
-0:72            4.000000
-0:72            2.000000
-0:72            2.000000
-0:72            2.000000
-0:72            2.000000
-0:73      Sequence
-0:73        move second child to first child (temp 3-element array of 2-element array of highp 4-component vector of float)
-0:73          'caim3' (temp 3-element array of 2-element array of highp 4-component vector of float)
-0:75          Constant:
-0:75            4.000000
-0:75            4.000000
-0:75            4.000000
-0:75            4.000000
-0:75            2.000000
-0:75            2.000000
-0:75            2.000000
-0:75            2.000000
-0:75            4.000000
-0:75            4.000000
-0:75            4.000000
-0:75            4.000000
-0:75            2.000000
-0:75            2.000000
-0:75            2.000000
-0:75            2.000000
-0:75            4.000000
-0:75            4.000000
-0:75            4.000000
-0:75            4.000000
-0:75            2.000000
-0:75            2.000000
-0:75            2.000000
-0:75            2.000000
-0:77      move second child to first child (temp 4-element array of 7-element array of highp float)
-0:77        'g4' (global 4-element array of 7-element array of highp float)
-0:77        Function Call: foo(f1[5][7]; (global 4-element array of 7-element array of highp float)
-0:77          'g5' (global 5-element array of 7-element array of highp float)
-0:78      'g5' (global 5-element array of 7-element array of highp float)
-0:79      'gu' (global 1-element array of 7-element array of highp float)
-0:81      Constant:
-0:81        0.000000
-0:82      Function Call: bar(f1[5][7]; (global void)
-0:82        'g5' (global 5-element array of 7-element array of highp float)
-0:84      Test condition and select (temp void)
-0:84        Condition
-0:84        Compare Equal (temp bool)
-0:84          Function Call: foo(f1[5][7]; (global 4-element array of 7-element array of highp float)
-0:84            'g5' (global 5-element array of 7-element array of highp float)
-0:84          'g4' (global 4-element array of 7-element array of highp float)
-0:84        true case is null
-0:86      Test condition and select (temp void)
-0:86        Condition
-0:86        Constant:
-0:86          false (const bool)
-0:86        true case is null
-0:90      move second child to first child (temp highp float)
-0:90        direct index (temp highp float)
-0:90          direct index (temp 7-element array of highp float)
-0:90            'u' (temp 5-element array of 7-element array of highp float)
-0:90            Constant:
-0:90              5 (const int)
-0:90          Constant:
-0:90            2 (const int)
-0:90        Constant:
-0:90          5.000000
-0:91      Function Call: foo(f1[5][7]; (global 4-element array of 7-element array of highp float)
-0:91        'u' (temp 5-element array of 7-element array of highp float)
-0:94      direct index (layout(column_major shared ) temp highp 4-component vector of float)
-0:94        v: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp 4-component vector of float)
-0:94          direct index (layout(column_major shared ) temp block{layout(column_major shared ) buffer implicitly-sized array of highp float u, layout(column_major shared ) buffer implicitly-sized array of highp 4-component vector of float v})
-0:94            'name' (layout(column_major shared ) buffer 3-element array of block{layout(column_major shared ) buffer implicitly-sized array of highp float u, layout(column_major shared ) buffer implicitly-sized array of highp 4-component vector of float v})
-0:94            Constant:
-0:94              1 (const int)
-0:94          Constant:
-0:94            1 (const int)
-0:94        Constant:
-0:94          -1 (const int)
-0:95      move second child to first child (temp highp 4-component vector of float)
-0:95        direct index (layout(column_major shared ) temp highp 4-component vector of float)
-0:95          v: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp 4-component vector of float)
-0:95            direct index (layout(column_major shared ) temp block{layout(column_major shared ) buffer implicitly-sized array of highp float u, layout(column_major shared ) buffer implicitly-sized array of highp 4-component vector of float v})
-0:95              'name' (layout(column_major shared ) buffer 3-element array of block{layout(column_major shared ) buffer implicitly-sized array of highp float u, layout(column_major shared ) buffer implicitly-sized array of highp 4-component vector of float v})
-0:95              Constant:
-0:95                1 (const int)
-0:95            Constant:
-0:95              1 (const int)
-0:95          Constant:
-0:95            1 (const int)
-0:95        Constant:
-0:95          4.300000
-0:95          4.300000
-0:95          4.300000
-0:95          4.300000
-0:96      v: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp 4-component vector of float)
-0:96        direct index (layout(column_major shared ) temp block{layout(column_major shared ) buffer implicitly-sized array of highp float u, layout(column_major shared ) buffer implicitly-sized array of highp 4-component vector of float v})
-0:96          'name' (layout(column_major shared ) buffer 3-element array of block{layout(column_major shared ) buffer implicitly-sized array of highp float u, layout(column_major shared ) buffer implicitly-sized array of highp 4-component vector of float v})
-0:96          Constant:
-0:96            1 (const int)
-0:96        Constant:
-0:96          1 (const int)
-0:98      Constant:
-0:98        7 (const int)
-0:99      array length (temp int)
-0:99        v: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of 7-element array of highp 4-component vector of float)
-0:99          direct index (layout(column_major shared ) temp block{layout(column_major shared ) buffer highp float u, layout(column_major shared ) buffer implicitly-sized array of 7-element array of highp 4-component vector of float v})
-0:99            'name3' (layout(column_major shared ) buffer 3-element array of block{layout(column_major shared ) buffer highp float u, layout(column_major shared ) buffer implicitly-sized array of 7-element array of highp 4-component vector of float v})
-0:99            Constant:
-0:99              0 (const int)
-0:99          Constant:
-0:99            1 (const int)
 0:?   Linker Objects
 0:?     'name' (layout(column_major shared ) buffer 3-element array of block{layout(column_major shared ) buffer implicitly-sized array of highp float u, layout(column_major shared ) buffer implicitly-sized array of highp 4-component vector of float v})
 0:?     'uname' (layout(column_major shared ) uniform 3-element array of block{layout(column_major shared ) uniform highp float u, layout(column_major shared ) uniform 1-element array of highp 4-component vector of float v})
diff --git a/Test/baseResults/330.frag.out b/Test/baseResults/330.frag.out
index 904ad3e..d3c54fc 100644
--- a/Test/baseResults/330.frag.out
+++ b/Test/baseResults/330.frag.out
@@ -152,31 +152,6 @@
 0:12          'buffer' (temp int)
 0:12          Constant:
 0:12            4 (const int)
-0:21  Function Definition: foo( (global void)
-0:21    Function Parameters: 
-0:23    Sequence
-0:23      Sequence
-0:23        move second child to first child (temp 4-component vector of float)
-0:23          'c' (temp 4-component vector of float)
-0:23          gl_Color: direct index for structure (in 4-component vector of float Color)
-0:23            'anon@0' (in block{in 4-component vector of float Color gl_Color, })
-0:23            Constant:
-0:23              2 (const uint)
-0:24      move second child to first child (temp 4-component vector of float)
-0:24        'outVar' (layout(location=0 index=0 ) out 4-component vector of float)
-0:24        'inVar' (smooth in 4-component vector of float)
-0:133  Function Definition: qlod( (global void)
-0:133    Function Parameters: 
-0:?     Sequence
-0:140      'lod' (temp 2-component vector of float)
-0:141      'lod' (temp 2-component vector of float)
-0:147  Function Definition: fooKeyMem( (global void)
-0:147    Function Parameters: 
-0:149    Sequence
-0:149      precise: direct index for structure (global int)
-0:149        'KeyMem' (global structure{global int precise})
-0:149        Constant:
-0:149          0 (const int)
 0:?   Linker Objects
 0:?     'inVar' (smooth in 4-component vector of float)
 0:?     'outVar' (layout(location=0 index=0 ) out 4-component vector of float)
diff --git a/Test/baseResults/400.frag.out b/Test/baseResults/400.frag.out
index 9090414..aea4e49 100644
--- a/Test/baseResults/400.frag.out
+++ b/Test/baseResults/400.frag.out
@@ -642,312 +642,6 @@
 0:27        move second child to first child (temp 4-component vector of float)
 0:27          'c' (temp 4-component vector of float)
 0:27          'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord)
-0:47  Function Definition: foo23( (global void)
-0:47    Function Parameters: 
-0:?     Sequence
-0:51      textureProjGradOffset (global float)
-0:51        'u2drs' (uniform sampler2DRectShadow)
-0:51        'outp' (out 4-component vector of float)
-0:51        Constant:
-0:51          0.000000
-0:51          0.000000
-0:51        Constant:
-0:51          0.000000
-0:51          0.000000
-0:51        Convert float to int (temp 2-component vector of int)
-0:51          'c2D' (smooth in 2-component vector of float)
-0:52      textureProjGradOffset (global float)
-0:52        'u2drs' (uniform sampler2DRectShadow)
-0:52        'outp' (out 4-component vector of float)
-0:52        Constant:
-0:52          0.000000
-0:52          0.000000
-0:52        Constant:
-0:52          0.000000
-0:52          0.000000
-0:52        Constant:
-0:52          3 (const int)
-0:52          4 (const int)
-0:53      textureProjGradOffset (global float)
-0:53        'u2drs' (uniform sampler2DRectShadow)
-0:53        'outp' (out 4-component vector of float)
-0:53        Constant:
-0:53          0.000000
-0:53          0.000000
-0:53        Constant:
-0:53          0.000000
-0:53          0.000000
-0:53        Constant:
-0:53          15 (const int)
-0:53          16 (const int)
-0:54      textureProjGradOffset (global float)
-0:54        'u2drs' (uniform sampler2DRectShadow)
-0:54        'outp' (out 4-component vector of float)
-0:54        Constant:
-0:54          0.000000
-0:54          0.000000
-0:54        Constant:
-0:54          0.000000
-0:54          0.000000
-0:54        Constant:
-0:54          -10 (const int)
-0:54          20 (const int)
-0:60  Function Definition: foo24( (global void)
-0:60    Function Parameters: 
-0:?     Sequence
-0:63      move second child to first child (temp 3-component vector of double)
-0:63        'df' (temp 3-component vector of double)
-0:63        modf (global 3-component vector of double)
-0:63          Convert float to double (temp 3-component vector of double)
-0:63            vector swizzle (temp 3-component vector of float)
-0:63              'outp' (out 4-component vector of float)
-0:63              Sequence
-0:63                Constant:
-0:63                  0 (const int)
-0:63                Constant:
-0:63                  1 (const int)
-0:63                Constant:
-0:63                  2 (const int)
-0:63          'di' (temp 3-component vector of double)
-0:71  Function Definition: foodc1( (global void)
-0:71    Function Parameters: 
-0:73    Sequence
-0:73      Sequence
-0:73        move second child to first child (temp 2-component vector of float)
-0:73          'v2' (temp 2-component vector of float)
-0:73          dPdxFine (global 2-component vector of float)
-0:73            'in2' (smooth in 2-component vector of float)
-0:74      Sequence
-0:74        move second child to first child (temp 3-component vector of float)
-0:74          'v3' (temp 3-component vector of float)
-0:74          dPdyCoarse (global 3-component vector of float)
-0:74            'in3' (smooth in 3-component vector of float)
-0:75      Sequence
-0:75        move second child to first child (temp 4-component vector of float)
-0:75          'v4' (temp 4-component vector of float)
-0:75          add (temp 4-component vector of float)
-0:75            fwidthCoarse (global 4-component vector of float)
-0:75              'in4' (smooth in 4-component vector of float)
-0:75            fwidthFine (global 4-component vector of float)
-0:75              'in4' (smooth in 4-component vector of float)
-0:80  Function Definition: foodc2( (global void)
-0:80    Function Parameters: 
-0:82    Sequence
-0:82      Sequence
-0:82        move second child to first child (temp 2-component vector of float)
-0:82          'v2' (temp 2-component vector of float)
-0:82          dPdxFine (global 2-component vector of float)
-0:82            'in2' (smooth in 2-component vector of float)
-0:83      Sequence
-0:83        move second child to first child (temp 3-component vector of float)
-0:83          'v3' (temp 3-component vector of float)
-0:83          dPdyCoarse (global 3-component vector of float)
-0:83            'in3' (smooth in 3-component vector of float)
-0:84      Sequence
-0:84        move second child to first child (temp 4-component vector of float)
-0:84          'v4' (temp 4-component vector of float)
-0:84          add (temp 4-component vector of float)
-0:84            fwidthCoarse (global 4-component vector of float)
-0:84              'in4' (smooth in 4-component vector of float)
-0:84            fwidthFine (global 4-component vector of float)
-0:84              'in4' (smooth in 4-component vector of float)
-0:89      move second child to first child (temp 2-component vector of float)
-0:89        'v2' (temp 2-component vector of float)
-0:89        frexp (global 2-component vector of float)
-0:89          'v2' (temp 2-component vector of float)
-0:89          'i2' (temp 2-component vector of int)
-0:90      move second child to first child (temp 3-component vector of float)
-0:90        'v3' (temp 3-component vector of float)
-0:90        ldexp (global 3-component vector of float)
-0:90          'v3' (temp 3-component vector of float)
-0:90          'i3' (temp 3-component vector of int)
-0:92      move second child to first child (temp uint)
-0:92        'u1' (temp uint)
-0:92        PackUnorm4x8 (global uint)
-0:92          'v4' (temp 4-component vector of float)
-0:93      move second child to first child (temp uint)
-0:93        'u1' (temp uint)
-0:93        PackSnorm4x8 (global uint)
-0:93          'v4' (temp 4-component vector of float)
-0:94      move second child to first child (temp 4-component vector of float)
-0:94        'v4' (temp 4-component vector of float)
-0:94        UnpackUnorm4x8 (global 4-component vector of float)
-0:94          'u1' (temp uint)
-0:95      move second child to first child (temp 4-component vector of float)
-0:95        'v4' (temp 4-component vector of float)
-0:95        UnpackSnorm4x8 (global 4-component vector of float)
-0:95          'u1' (temp uint)
-0:99      move second child to first child (temp double)
-0:99        'd' (temp double)
-0:99        PackDouble2x32 (global double)
-0:99          'u2' (temp 2-component vector of uint)
-0:100      move second child to first child (temp 2-component vector of uint)
-0:100        'u2' (temp 2-component vector of uint)
-0:100        UnpackDouble2x32 (global 2-component vector of uint)
-0:100          'd' (temp double)
-0:117  Function Definition: interp( (global void)
-0:117    Function Parameters: 
-0:119    Sequence
-0:119      interpolateAtCentroid (global 2-component vector of float)
-0:119        'colorfc' (centroid flat in 2-component vector of float)
-0:120      interpolateAtCentroid (global 4-component vector of float)
-0:120        'colorSampIn' (smooth sample in 4-component vector of float)
-0:121      interpolateAtCentroid (global 4-component vector of float)
-0:121        'colorfsi' (noperspective in 4-component vector of float)
-0:122      interpolateAtCentroid (global float)
-0:122        'scalarIn' (smooth in float)
-0:123      Constant:
-0:123        0.000000
-0:124      interpolateAtCentroid (global 3-component vector of float)
-0:124        direct index (smooth sample temp 3-component vector of float)
-0:124          'sampInArray' (smooth sample in 4-element array of 3-component vector of float)
-0:124          Constant:
-0:124            2 (const int)
-0:125      interpolateAtCentroid (global 2-component vector of float)
-0:125        vector swizzle (temp 2-component vector of float)
-0:125          direct index (smooth sample temp 3-component vector of float)
-0:125            'sampInArray' (smooth sample in 4-element array of 3-component vector of float)
-0:125            Constant:
-0:125              2 (const int)
-0:125          Sequence
-0:125            Constant:
-0:125              0 (const int)
-0:125            Constant:
-0:125              1 (const int)
-0:127      Constant:
-0:127        0.000000
-0:128      interpolateAtSample (global 3-component vector of float)
-0:128        indirect index (smooth sample temp 3-component vector of float)
-0:128          'sampInArray' (smooth sample in 4-element array of 3-component vector of float)
-0:128          'i' (flat in int)
-0:128        Constant:
-0:128          0 (const int)
-0:129      interpolateAtSample (global float)
-0:129        x: direct index for structure (global float)
-0:129          's1' (smooth in structure{global float x})
-0:129          Constant:
-0:129            0 (const int)
-0:129        Constant:
-0:129          2 (const int)
-0:130      interpolateAtSample (global float)
-0:130        'scalarIn' (smooth in float)
-0:130        Constant:
-0:130          1 (const int)
-0:132      Constant:
-0:132        0.000000
-0:133      interpolateAtOffset (global 3-component vector of float)
-0:133        direct index (smooth sample temp 3-component vector of float)
-0:133          'sampInArray' (smooth sample in 4-element array of 3-component vector of float)
-0:133          Constant:
-0:133            2 (const int)
-0:133        Constant:
-0:133          0.200000
-0:133          0.200000
-0:134      interpolateAtOffset (global 2-component vector of float)
-0:134        vector swizzle (temp 2-component vector of float)
-0:134          direct index (smooth sample temp 3-component vector of float)
-0:134            'sampInArray' (smooth sample in 4-element array of 3-component vector of float)
-0:134            Constant:
-0:134              2 (const int)
-0:134          Sequence
-0:134            Constant:
-0:134              0 (const int)
-0:134            Constant:
-0:134              1 (const int)
-0:134        Constant:
-0:134          0.200000
-0:134          0.200000
-0:135      interpolateAtOffset (global float)
-0:135        add (temp float)
-0:135          'scalarIn' (smooth in float)
-0:135          'scalarIn' (smooth in float)
-0:135        Constant:
-0:135          0.200000
-0:135          0.200000
-0:136      interpolateAtOffset (global float)
-0:136        x: direct index for structure (global float)
-0:136          's2' (sample temp structure{global float x})
-0:136          Constant:
-0:136            0 (const int)
-0:136        Constant:
-0:136          0.200000
-0:136          0.200000
-0:139      interpolateAtCentroid (global float)
-0:139        'f' (temp float)
-0:140      interpolateAtSample (global 4-component vector of float)
-0:140        'outp' (out 4-component vector of float)
-0:140        Constant:
-0:140          0 (const int)
-0:161  Function Definition: qlod( (global void)
-0:161    Function Parameters: 
-0:?     Sequence
-0:168      move second child to first child (temp 2-component vector of float)
-0:168        'lod' (temp 2-component vector of float)
-0:168        textureQueryLod (global 2-component vector of float)
-0:168          'samp1D' (uniform sampler1D)
-0:168          'pf' (temp float)
-0:169      move second child to first child (temp 2-component vector of float)
-0:169        'lod' (temp 2-component vector of float)
-0:169        textureQueryLod (global 2-component vector of float)
-0:169          'isamp2D' (uniform isampler2D)
-0:169          'pf2' (temp 2-component vector of float)
-0:170      move second child to first child (temp 2-component vector of float)
-0:170        'lod' (temp 2-component vector of float)
-0:170        textureQueryLod (global 2-component vector of float)
-0:170          'usamp3D' (uniform usampler3D)
-0:170          'pf3' (temp 3-component vector of float)
-0:171      move second child to first child (temp 2-component vector of float)
-0:171        'lod' (temp 2-component vector of float)
-0:171        textureQueryLod (global 2-component vector of float)
-0:171          'sampCube' (uniform samplerCube)
-0:171          'pf3' (temp 3-component vector of float)
-0:172      move second child to first child (temp 2-component vector of float)
-0:172        'lod' (temp 2-component vector of float)
-0:172        textureQueryLod (global 2-component vector of float)
-0:172          'isamp1DA' (uniform isampler1DArray)
-0:172          'pf' (temp float)
-0:173      move second child to first child (temp 2-component vector of float)
-0:173        'lod' (temp 2-component vector of float)
-0:173        textureQueryLod (global 2-component vector of float)
-0:173          'usamp2DA' (uniform usampler2DArray)
-0:173          'pf2' (temp 2-component vector of float)
-0:174      move second child to first child (temp 2-component vector of float)
-0:174        'lod' (temp 2-component vector of float)
-0:174        textureQueryLod (global 2-component vector of float)
-0:174          'isampCubeA' (uniform isamplerCubeArray)
-0:174          'pf3' (temp 3-component vector of float)
-0:176      move second child to first child (temp 2-component vector of float)
-0:176        'lod' (temp 2-component vector of float)
-0:176        textureQueryLod (global 2-component vector of float)
-0:176          'samp1Ds' (uniform sampler1DShadow)
-0:176          'pf' (temp float)
-0:177      move second child to first child (temp 2-component vector of float)
-0:177        'lod' (temp 2-component vector of float)
-0:177        textureQueryLod (global 2-component vector of float)
-0:177          'samp2Ds' (uniform sampler2DShadow)
-0:177          'pf2' (temp 2-component vector of float)
-0:178      move second child to first child (temp 2-component vector of float)
-0:178        'lod' (temp 2-component vector of float)
-0:178        textureQueryLod (global 2-component vector of float)
-0:178          'sampCubes' (uniform samplerCubeShadow)
-0:178          'pf3' (temp 3-component vector of float)
-0:179      move second child to first child (temp 2-component vector of float)
-0:179        'lod' (temp 2-component vector of float)
-0:179        textureQueryLod (global 2-component vector of float)
-0:179          'samp1DAs' (uniform sampler1DArrayShadow)
-0:179          'pf' (temp float)
-0:180      move second child to first child (temp 2-component vector of float)
-0:180        'lod' (temp 2-component vector of float)
-0:180        textureQueryLod (global 2-component vector of float)
-0:180          'samp2DAs' (uniform sampler2DArrayShadow)
-0:180          'pf2' (temp 2-component vector of float)
-0:181      move second child to first child (temp 2-component vector of float)
-0:181        'lod' (temp 2-component vector of float)
-0:181        textureQueryLod (global 2-component vector of float)
-0:181          'sampCubeAs' (uniform samplerCubeArrayShadow)
-0:181          'pf3' (temp 3-component vector of float)
-0:183      'lod' (temp 2-component vector of float)
-0:184      'lod' (temp 2-component vector of float)
 0:?   Linker Objects
 0:?     'c2D' (smooth in 2-component vector of float)
 0:?     'i' (flat in int)
diff --git a/Test/baseResults/400.geom.out b/Test/baseResults/400.geom.out
index 16117e6..86e2b8f 100644
--- a/Test/baseResults/400.geom.out
+++ b/Test/baseResults/400.geom.out
@@ -1070,981 +1070,6 @@
 0:9        move second child to first child (temp int)
 0:9          'id' (temp int)
 0:9          'gl_InvocationID' (in int InvocationID)
-0:23  Function Definition: foo( (global void)
-0:23    Function Parameters: 
-0:25    Sequence
-0:25      Constant:
-0:25        1 (const int)
-0:26      gl_Position: direct index for structure (in 4-component vector of float Position)
-0:26        direct index (temp block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize})
-0:26          'gl_in' (in 3-element array of block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize})
-0:26          Constant:
-0:26            1 (const int)
-0:26        Constant:
-0:26          0 (const int)
-0:34  Function Definition: foo2( (global void)
-0:34    Function Parameters: 
-0:36    Sequence
-0:36      Constant:
-0:36        1 (const int)
-0:37      Constant:
-0:37        3 (const int)
-0:46  Function Definition: foo3( (global void)
-0:46    Function Parameters: 
-0:48    Sequence
-0:48      Constant:
-0:48        3 (const int)
-0:49      Constant:
-0:49        3 (const int)
-0:50      Constant:
-0:50        3 (const int)
-0:51      Constant:
-0:51        3 (const int)
-0:75  Function Definition: bits( (global void)
-0:75    Function Parameters: 
-0:?     Sequence
-0:78      move second child to first child (temp 2-component vector of uint)
-0:78        'u2' (temp 2-component vector of uint)
-0:78        addCarry (global 2-component vector of uint)
-0:78          'u2' (temp 2-component vector of uint)
-0:78          'u2' (temp 2-component vector of uint)
-0:78          'u2' (temp 2-component vector of uint)
-0:80      move second child to first child (temp uint)
-0:80        'u1' (temp uint)
-0:80        subBorrow (global uint)
-0:80          'u1' (temp uint)
-0:80          'u1' (temp uint)
-0:80          'u1' (temp uint)
-0:82      uMulExtended (global void)
-0:82        'u4' (temp 4-component vector of uint)
-0:82        'u4' (temp 4-component vector of uint)
-0:82        'u4' (temp 4-component vector of uint)
-0:82        'u4' (temp 4-component vector of uint)
-0:84      iMulExtended (global void)
-0:84        'i4' (temp 4-component vector of int)
-0:84        'i4' (temp 4-component vector of int)
-0:84        'i4' (temp 4-component vector of int)
-0:84        'i4' (temp 4-component vector of int)
-0:86      move second child to first child (temp int)
-0:86        'i1' (temp int)
-0:86        bitfieldExtract (global int)
-0:86          'i1' (temp int)
-0:86          Constant:
-0:86            4 (const int)
-0:86          Constant:
-0:86            5 (const int)
-0:88      move second child to first child (temp 3-component vector of uint)
-0:88        'u3' (temp 3-component vector of uint)
-0:88        bitfieldExtract (global 3-component vector of uint)
-0:88          'u3' (temp 3-component vector of uint)
-0:88          Constant:
-0:88            4 (const int)
-0:88          Constant:
-0:88            5 (const int)
-0:90      move second child to first child (temp 3-component vector of int)
-0:90        'i3' (temp 3-component vector of int)
-0:90        bitfieldInsert (global 3-component vector of int)
-0:90          'i3' (temp 3-component vector of int)
-0:90          'i3' (temp 3-component vector of int)
-0:90          Constant:
-0:90            4 (const int)
-0:90          Constant:
-0:90            5 (const int)
-0:91      move second child to first child (temp uint)
-0:91        'u1' (temp uint)
-0:91        bitfieldInsert (global uint)
-0:91          'u1' (temp uint)
-0:91          'u1' (temp uint)
-0:91          Constant:
-0:91            4 (const int)
-0:91          Constant:
-0:91            5 (const int)
-0:93      move second child to first child (temp 2-component vector of int)
-0:93        'i2' (temp 2-component vector of int)
-0:93        bitFieldReverse (global 2-component vector of int)
-0:93          'i2' (temp 2-component vector of int)
-0:94      move second child to first child (temp 4-component vector of uint)
-0:94        'u4' (temp 4-component vector of uint)
-0:94        bitFieldReverse (global 4-component vector of uint)
-0:94          'u4' (temp 4-component vector of uint)
-0:95      move second child to first child (temp int)
-0:95        'i1' (temp int)
-0:95        bitCount (global int)
-0:95          'i1' (temp int)
-0:96      move second child to first child (temp 3-component vector of int)
-0:96        'i3' (temp 3-component vector of int)
-0:96        bitCount (global 3-component vector of int)
-0:96          'u3' (temp 3-component vector of uint)
-0:97      move second child to first child (temp 2-component vector of int)
-0:97        'i2' (temp 2-component vector of int)
-0:97        findLSB (global 2-component vector of int)
-0:97          'i2' (temp 2-component vector of int)
-0:98      move second child to first child (temp 4-component vector of int)
-0:98        'i4' (temp 4-component vector of int)
-0:98        findLSB (global 4-component vector of int)
-0:98          'u4' (temp 4-component vector of uint)
-0:99      move second child to first child (temp int)
-0:99        'i1' (temp int)
-0:99        findMSB (global int)
-0:99          'i1' (temp int)
-0:100      move second child to first child (temp 2-component vector of int)
-0:100        'i2' (temp 2-component vector of int)
-0:100        findMSB (global 2-component vector of int)
-0:100          'u2' (temp 2-component vector of uint)
-0:108  Function Definition: qlod( (global void)
-0:108    Function Parameters: 
-0:?     Sequence
-0:115      'lod' (temp 2-component vector of float)
-0:116      'lod' (temp 2-component vector of float)
-0:119  Function Definition: doubles( (global void)
-0:119    Function Parameters: 
-0:?     Sequence
-0:131      move second child to first child (temp double)
-0:131        'doublev' (temp double)
-0:131        Constant:
-0:131          1.702939
-0:132      move second child to first child (temp 2-component vector of double)
-0:132        'dvec2v' (temp 2-component vector of double)
-0:132        Constant:
-0:132          1.643168
-0:132          1.643168
-0:133      move second child to first child (temp 3-component vector of double)
-0:133        'dvec3v' (temp 3-component vector of double)
-0:133        Constant:
-0:133          1.414214
-0:133          1.414214
-0:133          1.414214
-0:134      move second child to first child (temp 4-component vector of double)
-0:134        'dvec4v' (temp 4-component vector of double)
-0:134        Constant:
-0:134          1.449138
-0:134          1.449138
-0:134          1.449138
-0:134          1.449138
-0:136      add second child into first child (temp double)
-0:136        'doublev' (temp double)
-0:136        inverse sqrt (global double)
-0:136          'doublev' (temp double)
-0:137      add second child into first child (temp 2-component vector of double)
-0:137        'dvec2v' (temp 2-component vector of double)
-0:137        inverse sqrt (global 2-component vector of double)
-0:137          'dvec2v' (temp 2-component vector of double)
-0:138      add second child into first child (temp 3-component vector of double)
-0:138        'dvec3v' (temp 3-component vector of double)
-0:138        inverse sqrt (global 3-component vector of double)
-0:138          'dvec3v' (temp 3-component vector of double)
-0:139      add second child into first child (temp 4-component vector of double)
-0:139        'dvec4v' (temp 4-component vector of double)
-0:139        inverse sqrt (global 4-component vector of double)
-0:139          'dvec4v' (temp 4-component vector of double)
-0:141      add second child into first child (temp double)
-0:141        'doublev' (temp double)
-0:141        Absolute value (global double)
-0:141          'doublev' (temp double)
-0:142      add second child into first child (temp 2-component vector of double)
-0:142        'dvec2v' (temp 2-component vector of double)
-0:142        Absolute value (global 2-component vector of double)
-0:142          'dvec2v' (temp 2-component vector of double)
-0:143      add second child into first child (temp 3-component vector of double)
-0:143        'dvec3v' (temp 3-component vector of double)
-0:143        Absolute value (global 3-component vector of double)
-0:143          'dvec3v' (temp 3-component vector of double)
-0:144      add second child into first child (temp 4-component vector of double)
-0:144        'dvec4v' (temp 4-component vector of double)
-0:144        Absolute value (global 4-component vector of double)
-0:144          'dvec4v' (temp 4-component vector of double)
-0:146      add second child into first child (temp double)
-0:146        'doublev' (temp double)
-0:146        Sign (global double)
-0:146          'doublev' (temp double)
-0:147      add second child into first child (temp 2-component vector of double)
-0:147        'dvec2v' (temp 2-component vector of double)
-0:147        Sign (global 2-component vector of double)
-0:147          'dvec2v' (temp 2-component vector of double)
-0:148      add second child into first child (temp 3-component vector of double)
-0:148        'dvec3v' (temp 3-component vector of double)
-0:148        Sign (global 3-component vector of double)
-0:148          'dvec3v' (temp 3-component vector of double)
-0:149      add second child into first child (temp 4-component vector of double)
-0:149        'dvec4v' (temp 4-component vector of double)
-0:149        Sign (global 4-component vector of double)
-0:149          'dvec4v' (temp 4-component vector of double)
-0:151      add second child into first child (temp double)
-0:151        'doublev' (temp double)
-0:151        Floor (global double)
-0:151          'doublev' (temp double)
-0:152      add second child into first child (temp 2-component vector of double)
-0:152        'dvec2v' (temp 2-component vector of double)
-0:152        Floor (global 2-component vector of double)
-0:152          'dvec2v' (temp 2-component vector of double)
-0:153      add second child into first child (temp 3-component vector of double)
-0:153        'dvec3v' (temp 3-component vector of double)
-0:153        Floor (global 3-component vector of double)
-0:153          'dvec3v' (temp 3-component vector of double)
-0:154      add second child into first child (temp 4-component vector of double)
-0:154        'dvec4v' (temp 4-component vector of double)
-0:154        Floor (global 4-component vector of double)
-0:154          'dvec4v' (temp 4-component vector of double)
-0:156      add second child into first child (temp double)
-0:156        'doublev' (temp double)
-0:156        trunc (global double)
-0:156          'doublev' (temp double)
-0:157      add second child into first child (temp 2-component vector of double)
-0:157        'dvec2v' (temp 2-component vector of double)
-0:157        trunc (global 2-component vector of double)
-0:157          'dvec2v' (temp 2-component vector of double)
-0:158      add second child into first child (temp 3-component vector of double)
-0:158        'dvec3v' (temp 3-component vector of double)
-0:158        trunc (global 3-component vector of double)
-0:158          'dvec3v' (temp 3-component vector of double)
-0:159      add second child into first child (temp 4-component vector of double)
-0:159        'dvec4v' (temp 4-component vector of double)
-0:159        trunc (global 4-component vector of double)
-0:159          'dvec4v' (temp 4-component vector of double)
-0:161      add second child into first child (temp double)
-0:161        'doublev' (temp double)
-0:161        round (global double)
-0:161          'doublev' (temp double)
-0:162      add second child into first child (temp 2-component vector of double)
-0:162        'dvec2v' (temp 2-component vector of double)
-0:162        round (global 2-component vector of double)
-0:162          'dvec2v' (temp 2-component vector of double)
-0:163      add second child into first child (temp 3-component vector of double)
-0:163        'dvec3v' (temp 3-component vector of double)
-0:163        round (global 3-component vector of double)
-0:163          'dvec3v' (temp 3-component vector of double)
-0:164      add second child into first child (temp 4-component vector of double)
-0:164        'dvec4v' (temp 4-component vector of double)
-0:164        round (global 4-component vector of double)
-0:164          'dvec4v' (temp 4-component vector of double)
-0:166      add second child into first child (temp double)
-0:166        'doublev' (temp double)
-0:166        roundEven (global double)
-0:166          'doublev' (temp double)
-0:167      add second child into first child (temp 2-component vector of double)
-0:167        'dvec2v' (temp 2-component vector of double)
-0:167        roundEven (global 2-component vector of double)
-0:167          'dvec2v' (temp 2-component vector of double)
-0:168      add second child into first child (temp 3-component vector of double)
-0:168        'dvec3v' (temp 3-component vector of double)
-0:168        roundEven (global 3-component vector of double)
-0:168          'dvec3v' (temp 3-component vector of double)
-0:169      add second child into first child (temp 4-component vector of double)
-0:169        'dvec4v' (temp 4-component vector of double)
-0:169        roundEven (global 4-component vector of double)
-0:169          'dvec4v' (temp 4-component vector of double)
-0:171      add second child into first child (temp double)
-0:171        'doublev' (temp double)
-0:171        Ceiling (global double)
-0:171          'doublev' (temp double)
-0:172      add second child into first child (temp 2-component vector of double)
-0:172        'dvec2v' (temp 2-component vector of double)
-0:172        Ceiling (global 2-component vector of double)
-0:172          'dvec2v' (temp 2-component vector of double)
-0:173      add second child into first child (temp 3-component vector of double)
-0:173        'dvec3v' (temp 3-component vector of double)
-0:173        Ceiling (global 3-component vector of double)
-0:173          'dvec3v' (temp 3-component vector of double)
-0:174      add second child into first child (temp 4-component vector of double)
-0:174        'dvec4v' (temp 4-component vector of double)
-0:174        Ceiling (global 4-component vector of double)
-0:174          'dvec4v' (temp 4-component vector of double)
-0:176      add second child into first child (temp double)
-0:176        'doublev' (temp double)
-0:176        Fraction (global double)
-0:176          'doublev' (temp double)
-0:177      add second child into first child (temp 2-component vector of double)
-0:177        'dvec2v' (temp 2-component vector of double)
-0:177        Fraction (global 2-component vector of double)
-0:177          'dvec2v' (temp 2-component vector of double)
-0:178      add second child into first child (temp 3-component vector of double)
-0:178        'dvec3v' (temp 3-component vector of double)
-0:178        Fraction (global 3-component vector of double)
-0:178          'dvec3v' (temp 3-component vector of double)
-0:179      add second child into first child (temp 4-component vector of double)
-0:179        'dvec4v' (temp 4-component vector of double)
-0:179        Fraction (global 4-component vector of double)
-0:179          'dvec4v' (temp 4-component vector of double)
-0:181      add second child into first child (temp double)
-0:181        'doublev' (temp double)
-0:181        mod (global double)
-0:181          'doublev' (temp double)
-0:181          'doublev' (temp double)
-0:182      add second child into first child (temp 2-component vector of double)
-0:182        'dvec2v' (temp 2-component vector of double)
-0:182        mod (global 2-component vector of double)
-0:182          'dvec2v' (temp 2-component vector of double)
-0:182          'doublev' (temp double)
-0:183      add second child into first child (temp 3-component vector of double)
-0:183        'dvec3v' (temp 3-component vector of double)
-0:183        mod (global 3-component vector of double)
-0:183          'dvec3v' (temp 3-component vector of double)
-0:183          'doublev' (temp double)
-0:184      add second child into first child (temp 4-component vector of double)
-0:184        'dvec4v' (temp 4-component vector of double)
-0:184        mod (global 4-component vector of double)
-0:184          'dvec4v' (temp 4-component vector of double)
-0:184          'doublev' (temp double)
-0:185      add second child into first child (temp 2-component vector of double)
-0:185        'dvec2v' (temp 2-component vector of double)
-0:185        mod (global 2-component vector of double)
-0:185          'dvec2v' (temp 2-component vector of double)
-0:185          'dvec2v' (temp 2-component vector of double)
-0:186      add second child into first child (temp 3-component vector of double)
-0:186        'dvec3v' (temp 3-component vector of double)
-0:186        mod (global 3-component vector of double)
-0:186          'dvec3v' (temp 3-component vector of double)
-0:186          'dvec3v' (temp 3-component vector of double)
-0:187      add second child into first child (temp 4-component vector of double)
-0:187        'dvec4v' (temp 4-component vector of double)
-0:187        mod (global 4-component vector of double)
-0:187          'dvec4v' (temp 4-component vector of double)
-0:187          'dvec4v' (temp 4-component vector of double)
-0:189      add second child into first child (temp double)
-0:189        'doublev' (temp double)
-0:189        modf (global double)
-0:189          'doublev' (temp double)
-0:189          'doublev' (temp double)
-0:190      add second child into first child (temp 2-component vector of double)
-0:190        'dvec2v' (temp 2-component vector of double)
-0:190        modf (global 2-component vector of double)
-0:190          'dvec2v' (temp 2-component vector of double)
-0:190          'dvec2v' (temp 2-component vector of double)
-0:191      add second child into first child (temp 3-component vector of double)
-0:191        'dvec3v' (temp 3-component vector of double)
-0:191        modf (global 3-component vector of double)
-0:191          'dvec3v' (temp 3-component vector of double)
-0:191          'dvec3v' (temp 3-component vector of double)
-0:192      add second child into first child (temp 4-component vector of double)
-0:192        'dvec4v' (temp 4-component vector of double)
-0:192        modf (global 4-component vector of double)
-0:192          'dvec4v' (temp 4-component vector of double)
-0:192          'dvec4v' (temp 4-component vector of double)
-0:194      add second child into first child (temp double)
-0:194        'doublev' (temp double)
-0:194        min (global double)
-0:194          'doublev' (temp double)
-0:194          'doublev' (temp double)
-0:195      add second child into first child (temp 2-component vector of double)
-0:195        'dvec2v' (temp 2-component vector of double)
-0:195        min (global 2-component vector of double)
-0:195          'dvec2v' (temp 2-component vector of double)
-0:195          'doublev' (temp double)
-0:196      add second child into first child (temp 3-component vector of double)
-0:196        'dvec3v' (temp 3-component vector of double)
-0:196        min (global 3-component vector of double)
-0:196          'dvec3v' (temp 3-component vector of double)
-0:196          'doublev' (temp double)
-0:197      add second child into first child (temp 4-component vector of double)
-0:197        'dvec4v' (temp 4-component vector of double)
-0:197        min (global 4-component vector of double)
-0:197          'dvec4v' (temp 4-component vector of double)
-0:197          'doublev' (temp double)
-0:198      add second child into first child (temp 2-component vector of double)
-0:198        'dvec2v' (temp 2-component vector of double)
-0:198        min (global 2-component vector of double)
-0:198          'dvec2v' (temp 2-component vector of double)
-0:198          'dvec2v' (temp 2-component vector of double)
-0:199      add second child into first child (temp 3-component vector of double)
-0:199        'dvec3v' (temp 3-component vector of double)
-0:199        min (global 3-component vector of double)
-0:199          'dvec3v' (temp 3-component vector of double)
-0:199          'dvec3v' (temp 3-component vector of double)
-0:200      add second child into first child (temp 4-component vector of double)
-0:200        'dvec4v' (temp 4-component vector of double)
-0:200        min (global 4-component vector of double)
-0:200          'dvec4v' (temp 4-component vector of double)
-0:200          'dvec4v' (temp 4-component vector of double)
-0:202      add second child into first child (temp double)
-0:202        'doublev' (temp double)
-0:202        max (global double)
-0:202          'doublev' (temp double)
-0:202          'doublev' (temp double)
-0:203      add second child into first child (temp 2-component vector of double)
-0:203        'dvec2v' (temp 2-component vector of double)
-0:203        max (global 2-component vector of double)
-0:203          'dvec2v' (temp 2-component vector of double)
-0:203          'doublev' (temp double)
-0:204      add second child into first child (temp 3-component vector of double)
-0:204        'dvec3v' (temp 3-component vector of double)
-0:204        max (global 3-component vector of double)
-0:204          'dvec3v' (temp 3-component vector of double)
-0:204          'doublev' (temp double)
-0:205      add second child into first child (temp 4-component vector of double)
-0:205        'dvec4v' (temp 4-component vector of double)
-0:205        max (global 4-component vector of double)
-0:205          'dvec4v' (temp 4-component vector of double)
-0:205          'doublev' (temp double)
-0:206      add second child into first child (temp 2-component vector of double)
-0:206        'dvec2v' (temp 2-component vector of double)
-0:206        max (global 2-component vector of double)
-0:206          'dvec2v' (temp 2-component vector of double)
-0:206          'dvec2v' (temp 2-component vector of double)
-0:207      add second child into first child (temp 3-component vector of double)
-0:207        'dvec3v' (temp 3-component vector of double)
-0:207        max (global 3-component vector of double)
-0:207          'dvec3v' (temp 3-component vector of double)
-0:207          'dvec3v' (temp 3-component vector of double)
-0:208      add second child into first child (temp 4-component vector of double)
-0:208        'dvec4v' (temp 4-component vector of double)
-0:208        max (global 4-component vector of double)
-0:208          'dvec4v' (temp 4-component vector of double)
-0:208          'dvec4v' (temp 4-component vector of double)
-0:210      add second child into first child (temp double)
-0:210        'doublev' (temp double)
-0:210        clamp (global double)
-0:210          'doublev' (temp double)
-0:210          'doublev' (temp double)
-0:210          'doublev' (temp double)
-0:211      add second child into first child (temp 2-component vector of double)
-0:211        'dvec2v' (temp 2-component vector of double)
-0:211        clamp (global 2-component vector of double)
-0:211          'dvec2v' (temp 2-component vector of double)
-0:211          'doublev' (temp double)
-0:211          'doublev' (temp double)
-0:212      add second child into first child (temp 3-component vector of double)
-0:212        'dvec3v' (temp 3-component vector of double)
-0:212        clamp (global 3-component vector of double)
-0:212          'dvec3v' (temp 3-component vector of double)
-0:212          'doublev' (temp double)
-0:212          'doublev' (temp double)
-0:213      add second child into first child (temp 4-component vector of double)
-0:213        'dvec4v' (temp 4-component vector of double)
-0:213        clamp (global 4-component vector of double)
-0:213          'dvec4v' (temp 4-component vector of double)
-0:213          'doublev' (temp double)
-0:213          'doublev' (temp double)
-0:214      add second child into first child (temp 2-component vector of double)
-0:214        'dvec2v' (temp 2-component vector of double)
-0:214        clamp (global 2-component vector of double)
-0:214          'dvec2v' (temp 2-component vector of double)
-0:214          'dvec2v' (temp 2-component vector of double)
-0:214          'dvec2v' (temp 2-component vector of double)
-0:215      add second child into first child (temp 3-component vector of double)
-0:215        'dvec3v' (temp 3-component vector of double)
-0:215        clamp (global 3-component vector of double)
-0:215          'dvec3v' (temp 3-component vector of double)
-0:215          'dvec3v' (temp 3-component vector of double)
-0:215          'dvec3v' (temp 3-component vector of double)
-0:216      add second child into first child (temp 4-component vector of double)
-0:216        'dvec4v' (temp 4-component vector of double)
-0:216        clamp (global 4-component vector of double)
-0:216          'dvec4v' (temp 4-component vector of double)
-0:216          'dvec4v' (temp 4-component vector of double)
-0:216          'dvec4v' (temp 4-component vector of double)
-0:218      add second child into first child (temp double)
-0:218        'doublev' (temp double)
-0:218        mix (global double)
-0:218          'doublev' (temp double)
-0:218          'doublev' (temp double)
-0:218          'doublev' (temp double)
-0:219      add second child into first child (temp 2-component vector of double)
-0:219        'dvec2v' (temp 2-component vector of double)
-0:219        mix (global 2-component vector of double)
-0:219          'dvec2v' (temp 2-component vector of double)
-0:219          'dvec2v' (temp 2-component vector of double)
-0:219          'doublev' (temp double)
-0:220      add second child into first child (temp 3-component vector of double)
-0:220        'dvec3v' (temp 3-component vector of double)
-0:220        mix (global 3-component vector of double)
-0:220          'dvec3v' (temp 3-component vector of double)
-0:220          'dvec3v' (temp 3-component vector of double)
-0:220          'doublev' (temp double)
-0:221      add second child into first child (temp 4-component vector of double)
-0:221        'dvec4v' (temp 4-component vector of double)
-0:221        mix (global 4-component vector of double)
-0:221          'dvec4v' (temp 4-component vector of double)
-0:221          'dvec4v' (temp 4-component vector of double)
-0:221          'doublev' (temp double)
-0:222      add second child into first child (temp 2-component vector of double)
-0:222        'dvec2v' (temp 2-component vector of double)
-0:222        mix (global 2-component vector of double)
-0:222          'dvec2v' (temp 2-component vector of double)
-0:222          'dvec2v' (temp 2-component vector of double)
-0:222          'dvec2v' (temp 2-component vector of double)
-0:223      add second child into first child (temp 3-component vector of double)
-0:223        'dvec3v' (temp 3-component vector of double)
-0:223        mix (global 3-component vector of double)
-0:223          'dvec3v' (temp 3-component vector of double)
-0:223          'dvec3v' (temp 3-component vector of double)
-0:223          'dvec3v' (temp 3-component vector of double)
-0:224      add second child into first child (temp 4-component vector of double)
-0:224        'dvec4v' (temp 4-component vector of double)
-0:224        mix (global 4-component vector of double)
-0:224          'dvec4v' (temp 4-component vector of double)
-0:224          'dvec4v' (temp 4-component vector of double)
-0:224          'dvec4v' (temp 4-component vector of double)
-0:225      add second child into first child (temp double)
-0:225        'doublev' (temp double)
-0:225        mix (global double)
-0:225          'doublev' (temp double)
-0:225          'doublev' (temp double)
-0:225          'boolv' (temp bool)
-0:226      add second child into first child (temp 2-component vector of double)
-0:226        'dvec2v' (temp 2-component vector of double)
-0:226        mix (global 2-component vector of double)
-0:226          'dvec2v' (temp 2-component vector of double)
-0:226          'dvec2v' (temp 2-component vector of double)
-0:226          'bvec2v' (temp 2-component vector of bool)
-0:227      add second child into first child (temp 3-component vector of double)
-0:227        'dvec3v' (temp 3-component vector of double)
-0:227        mix (global 3-component vector of double)
-0:227          'dvec3v' (temp 3-component vector of double)
-0:227          'dvec3v' (temp 3-component vector of double)
-0:227          'bvec3v' (temp 3-component vector of bool)
-0:228      add second child into first child (temp 4-component vector of double)
-0:228        'dvec4v' (temp 4-component vector of double)
-0:228        mix (global 4-component vector of double)
-0:228          'dvec4v' (temp 4-component vector of double)
-0:228          'dvec4v' (temp 4-component vector of double)
-0:228          'bvec4v' (temp 4-component vector of bool)
-0:230      add second child into first child (temp double)
-0:230        'doublev' (temp double)
-0:230        step (global double)
-0:230          'doublev' (temp double)
-0:230          'doublev' (temp double)
-0:231      add second child into first child (temp 2-component vector of double)
-0:231        'dvec2v' (temp 2-component vector of double)
-0:231        step (global 2-component vector of double)
-0:231          'dvec2v' (temp 2-component vector of double)
-0:231          'dvec2v' (temp 2-component vector of double)
-0:232      add second child into first child (temp 3-component vector of double)
-0:232        'dvec3v' (temp 3-component vector of double)
-0:232        step (global 3-component vector of double)
-0:232          'dvec3v' (temp 3-component vector of double)
-0:232          'dvec3v' (temp 3-component vector of double)
-0:233      add second child into first child (temp 4-component vector of double)
-0:233        'dvec4v' (temp 4-component vector of double)
-0:233        step (global 4-component vector of double)
-0:233          'dvec4v' (temp 4-component vector of double)
-0:233          'dvec4v' (temp 4-component vector of double)
-0:234      add second child into first child (temp 2-component vector of double)
-0:234        'dvec2v' (temp 2-component vector of double)
-0:234        step (global 2-component vector of double)
-0:234          'doublev' (temp double)
-0:234          'dvec2v' (temp 2-component vector of double)
-0:235      add second child into first child (temp 3-component vector of double)
-0:235        'dvec3v' (temp 3-component vector of double)
-0:235        step (global 3-component vector of double)
-0:235          'doublev' (temp double)
-0:235          'dvec3v' (temp 3-component vector of double)
-0:236      add second child into first child (temp 4-component vector of double)
-0:236        'dvec4v' (temp 4-component vector of double)
-0:236        step (global 4-component vector of double)
-0:236          'doublev' (temp double)
-0:236          'dvec4v' (temp 4-component vector of double)
-0:238      add second child into first child (temp double)
-0:238        'doublev' (temp double)
-0:238        smoothstep (global double)
-0:238          'doublev' (temp double)
-0:238          'doublev' (temp double)
-0:238          'doublev' (temp double)
-0:239      add second child into first child (temp 2-component vector of double)
-0:239        'dvec2v' (temp 2-component vector of double)
-0:239        smoothstep (global 2-component vector of double)
-0:239          'dvec2v' (temp 2-component vector of double)
-0:239          'dvec2v' (temp 2-component vector of double)
-0:239          'dvec2v' (temp 2-component vector of double)
-0:240      add second child into first child (temp 3-component vector of double)
-0:240        'dvec3v' (temp 3-component vector of double)
-0:240        smoothstep (global 3-component vector of double)
-0:240          'dvec3v' (temp 3-component vector of double)
-0:240          'dvec3v' (temp 3-component vector of double)
-0:240          'dvec3v' (temp 3-component vector of double)
-0:241      add second child into first child (temp 4-component vector of double)
-0:241        'dvec4v' (temp 4-component vector of double)
-0:241        smoothstep (global 4-component vector of double)
-0:241          'dvec4v' (temp 4-component vector of double)
-0:241          'dvec4v' (temp 4-component vector of double)
-0:241          'dvec4v' (temp 4-component vector of double)
-0:242      add second child into first child (temp 2-component vector of double)
-0:242        'dvec2v' (temp 2-component vector of double)
-0:242        smoothstep (global 2-component vector of double)
-0:242          'doublev' (temp double)
-0:242          'doublev' (temp double)
-0:242          'dvec2v' (temp 2-component vector of double)
-0:243      add second child into first child (temp 3-component vector of double)
-0:243        'dvec3v' (temp 3-component vector of double)
-0:243        smoothstep (global 3-component vector of double)
-0:243          'doublev' (temp double)
-0:243          'doublev' (temp double)
-0:243          'dvec3v' (temp 3-component vector of double)
-0:244      add second child into first child (temp 4-component vector of double)
-0:244        'dvec4v' (temp 4-component vector of double)
-0:244        smoothstep (global 4-component vector of double)
-0:244          'doublev' (temp double)
-0:244          'doublev' (temp double)
-0:244          'dvec4v' (temp 4-component vector of double)
-0:246      move second child to first child (temp bool)
-0:246        'boolv' (temp bool)
-0:246        isnan (global bool)
-0:246          'doublev' (temp double)
-0:247      move second child to first child (temp 2-component vector of bool)
-0:247        'bvec2v' (temp 2-component vector of bool)
-0:247        isnan (global 2-component vector of bool)
-0:247          'dvec2v' (temp 2-component vector of double)
-0:248      move second child to first child (temp 3-component vector of bool)
-0:248        'bvec3v' (temp 3-component vector of bool)
-0:248        isnan (global 3-component vector of bool)
-0:248          'dvec3v' (temp 3-component vector of double)
-0:249      move second child to first child (temp 4-component vector of bool)
-0:249        'bvec4v' (temp 4-component vector of bool)
-0:249        isnan (global 4-component vector of bool)
-0:249          'dvec4v' (temp 4-component vector of double)
-0:251      move second child to first child (temp bool)
-0:251        'boolv' (temp bool)
-0:251        Test condition and select (temp bool)
-0:251          Condition
-0:251          'boolv' (temp bool)
-0:251          true case
-0:251          isinf (global bool)
-0:251            'doublev' (temp double)
-0:251          false case
-0:251          Constant:
-0:251            false (const bool)
-0:252      move second child to first child (temp 2-component vector of bool)
-0:252        'bvec2v' (temp 2-component vector of bool)
-0:252        Test condition and select (temp 2-component vector of bool)
-0:252          Condition
-0:252          'boolv' (temp bool)
-0:252          true case
-0:252          isinf (global 2-component vector of bool)
-0:252            'dvec2v' (temp 2-component vector of double)
-0:252          false case
-0:252          Constant:
-0:252            false (const bool)
-0:252            false (const bool)
-0:253      move second child to first child (temp 3-component vector of bool)
-0:253        'bvec3v' (temp 3-component vector of bool)
-0:253        Test condition and select (temp 3-component vector of bool)
-0:253          Condition
-0:253          'boolv' (temp bool)
-0:253          true case
-0:253          isinf (global 3-component vector of bool)
-0:253            'dvec3v' (temp 3-component vector of double)
-0:253          false case
-0:253          Constant:
-0:253            false (const bool)
-0:253            false (const bool)
-0:253            false (const bool)
-0:254      move second child to first child (temp 4-component vector of bool)
-0:254        'bvec4v' (temp 4-component vector of bool)
-0:254        Test condition and select (temp 4-component vector of bool)
-0:254          Condition
-0:254          'boolv' (temp bool)
-0:254          true case
-0:254          isinf (global 4-component vector of bool)
-0:254            'dvec4v' (temp 4-component vector of double)
-0:254          false case
-0:254          Constant:
-0:254            false (const bool)
-0:254            false (const bool)
-0:254            false (const bool)
-0:254            false (const bool)
-0:256      add second child into first child (temp double)
-0:256        'doublev' (temp double)
-0:256        length (global double)
-0:256          'doublev' (temp double)
-0:257      add second child into first child (temp double)
-0:257        'doublev' (temp double)
-0:257        length (global double)
-0:257          'dvec2v' (temp 2-component vector of double)
-0:258      add second child into first child (temp double)
-0:258        'doublev' (temp double)
-0:258        length (global double)
-0:258          'dvec3v' (temp 3-component vector of double)
-0:259      add second child into first child (temp double)
-0:259        'doublev' (temp double)
-0:259        length (global double)
-0:259          'dvec4v' (temp 4-component vector of double)
-0:261      add second child into first child (temp double)
-0:261        'doublev' (temp double)
-0:261        distance (global double)
-0:261          'doublev' (temp double)
-0:261          'doublev' (temp double)
-0:262      add second child into first child (temp double)
-0:262        'doublev' (temp double)
-0:262        distance (global double)
-0:262          'dvec2v' (temp 2-component vector of double)
-0:262          'dvec2v' (temp 2-component vector of double)
-0:263      add second child into first child (temp double)
-0:263        'doublev' (temp double)
-0:263        distance (global double)
-0:263          'dvec3v' (temp 3-component vector of double)
-0:263          'dvec3v' (temp 3-component vector of double)
-0:264      add second child into first child (temp double)
-0:264        'doublev' (temp double)
-0:264        distance (global double)
-0:264          'dvec4v' (temp 4-component vector of double)
-0:264          'dvec4v' (temp 4-component vector of double)
-0:266      add second child into first child (temp double)
-0:266        'doublev' (temp double)
-0:266        dot-product (global double)
-0:266          'doublev' (temp double)
-0:266          'doublev' (temp double)
-0:267      add second child into first child (temp double)
-0:267        'doublev' (temp double)
-0:267        dot-product (global double)
-0:267          'dvec2v' (temp 2-component vector of double)
-0:267          'dvec2v' (temp 2-component vector of double)
-0:268      add second child into first child (temp double)
-0:268        'doublev' (temp double)
-0:268        dot-product (global double)
-0:268          'dvec3v' (temp 3-component vector of double)
-0:268          'dvec3v' (temp 3-component vector of double)
-0:269      add second child into first child (temp double)
-0:269        'doublev' (temp double)
-0:269        dot-product (global double)
-0:269          'dvec4v' (temp 4-component vector of double)
-0:269          'dvec4v' (temp 4-component vector of double)
-0:271      add second child into first child (temp 3-component vector of double)
-0:271        'dvec3v' (temp 3-component vector of double)
-0:271        cross-product (global 3-component vector of double)
-0:271          'dvec3v' (temp 3-component vector of double)
-0:271          'dvec3v' (temp 3-component vector of double)
-0:273      add second child into first child (temp double)
-0:273        'doublev' (temp double)
-0:273        normalize (global double)
-0:273          'doublev' (temp double)
-0:274      add second child into first child (temp 2-component vector of double)
-0:274        'dvec2v' (temp 2-component vector of double)
-0:274        normalize (global 2-component vector of double)
-0:274          'dvec2v' (temp 2-component vector of double)
-0:275      add second child into first child (temp 3-component vector of double)
-0:275        'dvec3v' (temp 3-component vector of double)
-0:275        normalize (global 3-component vector of double)
-0:275          'dvec3v' (temp 3-component vector of double)
-0:276      add second child into first child (temp 4-component vector of double)
-0:276        'dvec4v' (temp 4-component vector of double)
-0:276        normalize (global 4-component vector of double)
-0:276          'dvec4v' (temp 4-component vector of double)
-0:278      add second child into first child (temp double)
-0:278        'doublev' (temp double)
-0:278        face-forward (global double)
-0:278          'doublev' (temp double)
-0:278          'doublev' (temp double)
-0:278          'doublev' (temp double)
-0:279      add second child into first child (temp 2-component vector of double)
-0:279        'dvec2v' (temp 2-component vector of double)
-0:279        face-forward (global 2-component vector of double)
-0:279          'dvec2v' (temp 2-component vector of double)
-0:279          'dvec2v' (temp 2-component vector of double)
-0:279          'dvec2v' (temp 2-component vector of double)
-0:280      add second child into first child (temp 3-component vector of double)
-0:280        'dvec3v' (temp 3-component vector of double)
-0:280        face-forward (global 3-component vector of double)
-0:280          'dvec3v' (temp 3-component vector of double)
-0:280          'dvec3v' (temp 3-component vector of double)
-0:280          'dvec3v' (temp 3-component vector of double)
-0:281      add second child into first child (temp 4-component vector of double)
-0:281        'dvec4v' (temp 4-component vector of double)
-0:281        face-forward (global 4-component vector of double)
-0:281          'dvec4v' (temp 4-component vector of double)
-0:281          'dvec4v' (temp 4-component vector of double)
-0:281          'dvec4v' (temp 4-component vector of double)
-0:283      add second child into first child (temp double)
-0:283        'doublev' (temp double)
-0:283        reflect (global double)
-0:283          'doublev' (temp double)
-0:283          'doublev' (temp double)
-0:284      add second child into first child (temp 2-component vector of double)
-0:284        'dvec2v' (temp 2-component vector of double)
-0:284        reflect (global 2-component vector of double)
-0:284          'dvec2v' (temp 2-component vector of double)
-0:284          'dvec2v' (temp 2-component vector of double)
-0:285      add second child into first child (temp 3-component vector of double)
-0:285        'dvec3v' (temp 3-component vector of double)
-0:285        reflect (global 3-component vector of double)
-0:285          'dvec3v' (temp 3-component vector of double)
-0:285          'dvec3v' (temp 3-component vector of double)
-0:286      add second child into first child (temp 4-component vector of double)
-0:286        'dvec4v' (temp 4-component vector of double)
-0:286        reflect (global 4-component vector of double)
-0:286          'dvec4v' (temp 4-component vector of double)
-0:286          'dvec4v' (temp 4-component vector of double)
-0:288      add second child into first child (temp double)
-0:288        'doublev' (temp double)
-0:288        refract (global double)
-0:288          'doublev' (temp double)
-0:288          'doublev' (temp double)
-0:288          'doublev' (temp double)
-0:289      add second child into first child (temp 2-component vector of double)
-0:289        'dvec2v' (temp 2-component vector of double)
-0:289        refract (global 2-component vector of double)
-0:289          'dvec2v' (temp 2-component vector of double)
-0:289          'dvec2v' (temp 2-component vector of double)
-0:289          'doublev' (temp double)
-0:290      add second child into first child (temp 3-component vector of double)
-0:290        'dvec3v' (temp 3-component vector of double)
-0:290        refract (global 3-component vector of double)
-0:290          'dvec3v' (temp 3-component vector of double)
-0:290          'dvec3v' (temp 3-component vector of double)
-0:290          'doublev' (temp double)
-0:291      add second child into first child (temp 4-component vector of double)
-0:291        'dvec4v' (temp 4-component vector of double)
-0:291        refract (global 4-component vector of double)
-0:291          'dvec4v' (temp 4-component vector of double)
-0:291          'dvec4v' (temp 4-component vector of double)
-0:291          'doublev' (temp double)
-0:293      Sequence
-0:293        move second child to first child (temp 2X2 matrix of double)
-0:293          'dmat2v' (temp 2X2 matrix of double)
-0:293          outer product (global 2X2 matrix of double)
-0:293            'dvec2v' (temp 2-component vector of double)
-0:293            'dvec2v' (temp 2-component vector of double)
-0:294      Sequence
-0:294        move second child to first child (temp 3X3 matrix of double)
-0:294          'dmat3v' (temp 3X3 matrix of double)
-0:294          outer product (global 3X3 matrix of double)
-0:294            'dvec3v' (temp 3-component vector of double)
-0:294            'dvec3v' (temp 3-component vector of double)
-0:295      Sequence
-0:295        move second child to first child (temp 4X4 matrix of double)
-0:295          'dmat4v' (temp 4X4 matrix of double)
-0:295          outer product (global 4X4 matrix of double)
-0:295            'dvec4v' (temp 4-component vector of double)
-0:295            'dvec4v' (temp 4-component vector of double)
-0:296      Sequence
-0:296        move second child to first child (temp 2X3 matrix of double)
-0:296          'dmat2x3v' (temp 2X3 matrix of double)
-0:296          outer product (global 2X3 matrix of double)
-0:296            'dvec3v' (temp 3-component vector of double)
-0:296            'dvec2v' (temp 2-component vector of double)
-0:297      Sequence
-0:297        move second child to first child (temp 3X2 matrix of double)
-0:297          'dmat3x2v' (temp 3X2 matrix of double)
-0:297          outer product (global 3X2 matrix of double)
-0:297            'dvec2v' (temp 2-component vector of double)
-0:297            'dvec3v' (temp 3-component vector of double)
-0:298      Sequence
-0:298        move second child to first child (temp 2X4 matrix of double)
-0:298          'dmat2x4v' (temp 2X4 matrix of double)
-0:298          outer product (global 2X4 matrix of double)
-0:298            'dvec4v' (temp 4-component vector of double)
-0:298            'dvec2v' (temp 2-component vector of double)
-0:299      Sequence
-0:299        move second child to first child (temp 4X2 matrix of double)
-0:299          'dmat4x2v' (temp 4X2 matrix of double)
-0:299          outer product (global 4X2 matrix of double)
-0:299            'dvec2v' (temp 2-component vector of double)
-0:299            'dvec4v' (temp 4-component vector of double)
-0:300      Sequence
-0:300        move second child to first child (temp 3X4 matrix of double)
-0:300          'dmat3x4v' (temp 3X4 matrix of double)
-0:300          outer product (global 3X4 matrix of double)
-0:300            'dvec4v' (temp 4-component vector of double)
-0:300            'dvec3v' (temp 3-component vector of double)
-0:301      Sequence
-0:301        move second child to first child (temp 4X3 matrix of double)
-0:301          'dmat4x3v' (temp 4X3 matrix of double)
-0:301          outer product (global 4X3 matrix of double)
-0:301            'dvec3v' (temp 3-component vector of double)
-0:301            'dvec4v' (temp 4-component vector of double)
-0:303      matrix mult second child into first child (temp 2X2 matrix of double)
-0:303        'dmat2v' (temp 2X2 matrix of double)
-0:303        component-wise multiply (global 2X2 matrix of double)
-0:303          'dmat2v' (temp 2X2 matrix of double)
-0:303          'dmat2v' (temp 2X2 matrix of double)
-0:304      matrix mult second child into first child (temp 3X3 matrix of double)
-0:304        'dmat3v' (temp 3X3 matrix of double)
-0:304        component-wise multiply (global 3X3 matrix of double)
-0:304          'dmat3v' (temp 3X3 matrix of double)
-0:304          'dmat3v' (temp 3X3 matrix of double)
-0:305      matrix mult second child into first child (temp 4X4 matrix of double)
-0:305        'dmat4v' (temp 4X4 matrix of double)
-0:305        component-wise multiply (global 4X4 matrix of double)
-0:305          'dmat4v' (temp 4X4 matrix of double)
-0:305          'dmat4v' (temp 4X4 matrix of double)
-0:306      move second child to first child (temp 2X3 matrix of double)
-0:306        'dmat2x3v' (temp 2X3 matrix of double)
-0:306        component-wise multiply (global 2X3 matrix of double)
-0:306          'dmat2x3v' (temp 2X3 matrix of double)
-0:306          'dmat2x3v' (temp 2X3 matrix of double)
-0:307      move second child to first child (temp 2X4 matrix of double)
-0:307        'dmat2x4v' (temp 2X4 matrix of double)
-0:307        component-wise multiply (global 2X4 matrix of double)
-0:307          'dmat2x4v' (temp 2X4 matrix of double)
-0:307          'dmat2x4v' (temp 2X4 matrix of double)
-0:308      move second child to first child (temp 3X2 matrix of double)
-0:308        'dmat3x2v' (temp 3X2 matrix of double)
-0:308        component-wise multiply (global 3X2 matrix of double)
-0:308          'dmat3x2v' (temp 3X2 matrix of double)
-0:308          'dmat3x2v' (temp 3X2 matrix of double)
-0:309      move second child to first child (temp 3X4 matrix of double)
-0:309        'dmat3x4v' (temp 3X4 matrix of double)
-0:309        component-wise multiply (global 3X4 matrix of double)
-0:309          'dmat3x4v' (temp 3X4 matrix of double)
-0:309          'dmat3x4v' (temp 3X4 matrix of double)
-0:310      move second child to first child (temp 4X2 matrix of double)
-0:310        'dmat4x2v' (temp 4X2 matrix of double)
-0:310        component-wise multiply (global 4X2 matrix of double)
-0:310          'dmat4x2v' (temp 4X2 matrix of double)
-0:310          'dmat4x2v' (temp 4X2 matrix of double)
-0:311      move second child to first child (temp 4X3 matrix of double)
-0:311        'dmat4x3v' (temp 4X3 matrix of double)
-0:311        component-wise multiply (global 4X3 matrix of double)
-0:311          'dmat4x3v' (temp 4X3 matrix of double)
-0:311          'dmat4x3v' (temp 4X3 matrix of double)
-0:313      matrix mult second child into first child (temp 2X2 matrix of double)
-0:313        'dmat2v' (temp 2X2 matrix of double)
-0:313        transpose (global 2X2 matrix of double)
-0:313          'dmat2v' (temp 2X2 matrix of double)
-0:314      matrix mult second child into first child (temp 3X3 matrix of double)
-0:314        'dmat3v' (temp 3X3 matrix of double)
-0:314        transpose (global 3X3 matrix of double)
-0:314          'dmat3v' (temp 3X3 matrix of double)
-0:315      matrix mult second child into first child (temp 4X4 matrix of double)
-0:315        'dmat4v' (temp 4X4 matrix of double)
-0:315        transpose (global 4X4 matrix of double)
-0:315          'dmat4v' (temp 4X4 matrix of double)
-0:316      move second child to first child (temp 2X3 matrix of double)
-0:316        'dmat2x3v' (temp 2X3 matrix of double)
-0:316        transpose (global 2X3 matrix of double)
-0:316          'dmat3x2v' (temp 3X2 matrix of double)
-0:317      move second child to first child (temp 3X2 matrix of double)
-0:317        'dmat3x2v' (temp 3X2 matrix of double)
-0:317        transpose (global 3X2 matrix of double)
-0:317          'dmat2x3v' (temp 2X3 matrix of double)
-0:318      move second child to first child (temp 2X4 matrix of double)
-0:318        'dmat2x4v' (temp 2X4 matrix of double)
-0:318        transpose (global 2X4 matrix of double)
-0:318          'dmat4x2v' (temp 4X2 matrix of double)
-0:319      move second child to first child (temp 4X2 matrix of double)
-0:319        'dmat4x2v' (temp 4X2 matrix of double)
-0:319        transpose (global 4X2 matrix of double)
-0:319          'dmat2x4v' (temp 2X4 matrix of double)
-0:320      move second child to first child (temp 3X4 matrix of double)
-0:320        'dmat3x4v' (temp 3X4 matrix of double)
-0:320        transpose (global 3X4 matrix of double)
-0:320          'dmat4x3v' (temp 4X3 matrix of double)
-0:321      move second child to first child (temp 4X3 matrix of double)
-0:321        'dmat4x3v' (temp 4X3 matrix of double)
-0:321        transpose (global 4X3 matrix of double)
-0:321          'dmat3x4v' (temp 3X4 matrix of double)
-0:323      add second child into first child (temp double)
-0:323        'doublev' (temp double)
-0:323        determinant (global double)
-0:323          'dmat2v' (temp 2X2 matrix of double)
-0:324      add second child into first child (temp double)
-0:324        'doublev' (temp double)
-0:324        determinant (global double)
-0:324          'dmat3v' (temp 3X3 matrix of double)
-0:325      add second child into first child (temp double)
-0:325        'doublev' (temp double)
-0:325        determinant (global double)
-0:325          'dmat4v' (temp 4X4 matrix of double)
-0:327      matrix mult second child into first child (temp 2X2 matrix of double)
-0:327        'dmat2v' (temp 2X2 matrix of double)
-0:327        inverse (global 2X2 matrix of double)
-0:327          'dmat2v' (temp 2X2 matrix of double)
-0:328      matrix mult second child into first child (temp 3X3 matrix of double)
-0:328        'dmat3v' (temp 3X3 matrix of double)
-0:328        inverse (global 3X3 matrix of double)
-0:328          'dmat3v' (temp 3X3 matrix of double)
-0:329      matrix mult second child into first child (temp 4X4 matrix of double)
-0:329        'dmat4v' (temp 4X4 matrix of double)
-0:329        inverse (global 4X4 matrix of double)
-0:329          'dmat4v' (temp 4X4 matrix of double)
 0:?   Linker Objects
 0:?     'bn' (in 3-element array of block{in int a})
 0:?     'gl_in' (in 3-element array of block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize})
diff --git a/Test/baseResults/400.tesc.out b/Test/baseResults/400.tesc.out
index 58a8a32..f3e7b8b 100644
--- a/Test/baseResults/400.tesc.out
+++ b/Test/baseResults/400.tesc.out
@@ -364,35 +364,6 @@
 0:56        Barrier (global void)
 0:59      Branch: Return
 0:61      Barrier (global void)
-0:67  Function Definition: foo( (global void)
-0:67    Function Parameters: 
-0:69    Sequence
-0:69      gl_PointSize: direct index for structure (out float PointSize)
-0:69        direct index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 2-element array of float ClipDistance gl_ClipDistance})
-0:69          'gl_out' (out 4-element array of block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 2-element array of float ClipDistance gl_ClipDistance})
-0:69          Constant:
-0:69            4 (const int)
-0:69        Constant:
-0:69          1 (const int)
-0:71      Barrier (global void)
-0:91  Function Definition: foop( (global void)
-0:91    Function Parameters: 
-0:?     Sequence
-0:95      multiply second child into first child (temp 3-component vector of float)
-0:95        'pv3' (noContraction temp 3-component vector of float)
-0:95        'pv3' (noContraction temp 3-component vector of float)
-0:96      move second child to first child (temp 3-component vector of float)
-0:96        'pv3' (noContraction temp 3-component vector of float)
-0:96        fma (global 3-component vector of float)
-0:96          'pv3' (noContraction temp 3-component vector of float)
-0:96          'pv3' (noContraction temp 3-component vector of float)
-0:96          'pv3' (noContraction temp 3-component vector of float)
-0:97      move second child to first child (temp double)
-0:97        'd' (noContraction temp double)
-0:97        fma (global double)
-0:97          'd' (noContraction temp double)
-0:97          'd' (noContraction temp double)
-0:97          'd' (noContraction temp double)
 0:?   Linker Objects
 0:?     'gl_out' (out 4-element array of block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 2-element array of float ClipDistance gl_ClipDistance})
 0:?     'outa' (global 4-element array of int)
diff --git a/Test/baseResults/400.vert.out b/Test/baseResults/400.vert.out
index 2b0d63d..bf07887 100755
--- a/Test/baseResults/400.vert.out
+++ b/Test/baseResults/400.vert.out
@@ -340,11 +340,6 @@
 0:20      '' (in uint)
 0:20      '' (in float)
 0:20      '' (in double)
-0:21  Function Definition: ftd(f1;d1;d1; (global void)
-0:21    Function Parameters: 
-0:21      '' (in float)
-0:21      '' (in double)
-0:21      '' (in double)
 0:23  Function Definition: main( (global void)
 0:23    Function Parameters: 
 0:?     Sequence
@@ -552,19 +547,6 @@
 0:91        'f' (temp float)
 0:91        Convert float to double (temp double)
 0:91          'f' (temp float)
-0:97  Function Definition: tf( (global void)
-0:97    Function Parameters: 
-0:?     Sequence
-0:104      Function Call: itf(i1;f1;i1; (global void)
-0:104        'i' (temp int)
-0:104        Convert int to float (temp float)
-0:104          'i' (temp int)
-0:104        'i' (temp int)
-0:105      Function Call: itf(i1;f1;i1; (global void)
-0:105        'i' (temp int)
-0:105        Convert uint to float (temp float)
-0:105          'u' (temp uint)
-0:105        'i' (temp int)
 0:?   Linker Objects
 0:?     'd' (in double)
 0:?     'd3' (in 3-component vector of double)
diff --git a/Test/baseResults/410.geom.out b/Test/baseResults/410.geom.out
index 6f7252c..aa421db 100644
--- a/Test/baseResults/410.geom.out
+++ b/Test/baseResults/410.geom.out
@@ -77,35 +77,6 @@
 0:5        'gl_ViewportIndex' (layout(stream=0 ) out int ViewportIndex)
 0:5        Constant:
 0:5          7 (const int)
-0:28  Function Definition: foo( (global void)
-0:28    Function Parameters: 
-0:30    Sequence
-0:30      Sequence
-0:30        move second child to first child (temp float)
-0:30          'p' (temp float)
-0:30          gl_PointSize: direct index for structure (in float PointSize)
-0:30            direct index (temp block{in float PointSize gl_PointSize})
-0:30              'gl_in' (in 2-element array of block{in float PointSize gl_PointSize})
-0:30              Constant:
-0:30                1 (const int)
-0:30            Constant:
-0:30              0 (const int)
-0:31      move second child to first child (temp float)
-0:31        gl_PointSize: direct index for structure (layout(stream=0 ) gl_PointSize float PointSize)
-0:31          'anon@0' (layout(stream=0 ) out block{layout(stream=0 ) gl_PointSize float PointSize gl_PointSize, })
-0:31          Constant:
-0:31            1 (const uint)
-0:31        'p' (temp float)
-0:33      gl_Position: direct index for structure (layout(stream=0 ) gl_Position void Position)
-0:33        'anon@0' (layout(stream=0 ) out block{layout(stream=0 ) gl_PointSize float PointSize gl_PointSize, })
-0:33        Constant:
-0:33          0 (const uint)
-0:36  Function Definition: foo5( (global float)
-0:36    Function Parameters: 
-0:38    Sequence
-0:38      Branch: Return with expression
-0:38        Constant:
-0:38          4.000000
 0:?   Linker Objects
 0:?     'gl_in' (in 2-element array of block{in float PointSize gl_PointSize})
 0:?     'anon@0' (layout(stream=0 ) out block{layout(stream=0 ) gl_PointSize float PointSize gl_PointSize, })
diff --git a/Test/baseResults/420.geom.out b/Test/baseResults/420.geom.out
index 625feea..ca459a6 100644
--- a/Test/baseResults/420.geom.out
+++ b/Test/baseResults/420.geom.out
@@ -142,111 +142,6 @@
 input primitive = triangles
 output primitive = none
 ERROR: node is still EOpNull!
-0:7  Function Definition: foo( (global void)
-0:7    Function Parameters: 
-0:9    Sequence
-0:9      Constant:
-0:9        1 (const int)
-0:10      gl_Position: direct index for structure (in 4-component vector of float Position)
-0:10        direct index (temp block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance})
-0:10          'gl_in' (in 3-element array of block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance})
-0:10          Constant:
-0:10            1 (const int)
-0:10        Constant:
-0:10          0 (const int)
-0:11      gl_Position: direct index for structure (in 4-component vector of float Position)
-0:11        indirect index (temp block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance})
-0:11          'gl_in' (in 3-element array of block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance})
-0:11          'i' (global int)
-0:11        Constant:
-0:11          0 (const int)
-0:18  Function Definition: foo3( (global void)
-0:18    Function Parameters: 
-0:20    Sequence
-0:20      Constant:
-0:20        3 (const int)
-0:21      gl_Position: direct index for structure (in 4-component vector of float Position)
-0:21        indirect index (temp block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance})
-0:21          'gl_in' (in 3-element array of block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance})
-0:21          'i' (global int)
-0:21        Constant:
-0:21          0 (const int)
-0:22      Constant:
-0:22        3 (const int)
-0:29  Function Definition: foo4( (global void)
-0:29    Function Parameters: 
-0:?     Sequence
-0:40      Sequence
-0:40        move second child to first child (temp 4-component vector of float)
-0:40          'v' (temp 4-component vector of float)
-0:40          textureGatherOffset (global 4-component vector of float)
-0:40            's2D' (uniform sampler2D)
-0:40            direct index (temp 2-component vector of float)
-0:40              'coord' (in 3-element array of 2-component vector of float)
-0:40              Constant:
-0:40                0 (const int)
-0:40            vector swizzle (temp 2-component vector of int)
-0:40              indirect index (temp 2-component vector of int)
-0:40                Constant:
-0:40                  0 (const int)
-0:40                  1 (const int)
-0:40                  1 (const int)
-0:40                  -2 (const int)
-0:40                  0 (const int)
-0:40                  3 (const int)
-0:40                  -3 (const int)
-0:40                  0 (const int)
-0:40                  2 (const int)
-0:40                  1 (const int)
-0:40                'i' (global int)
-0:40              Sequence
-0:40                Constant:
-0:40                  0 (const int)
-0:40                Constant:
-0:40                  1 (const int)
-0:42      move second child to first child (temp 2-component vector of int)
-0:42        vector swizzle (temp 2-component vector of int)
-0:42          indirect index (temp 2-component vector of int)
-0:42            Constant:
-0:42              0 (const int)
-0:42              1 (const int)
-0:42              1 (const int)
-0:42              -2 (const int)
-0:42              0 (const int)
-0:42              3 (const int)
-0:42              -3 (const int)
-0:42              0 (const int)
-0:42              2 (const int)
-0:42              1 (const int)
-0:42            'i' (global 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          3 (const int)
-0:42          3 (const int)
-0:43      move second child to first child (temp float)
-0:43        direct index (temp float)
-0:43          'v4' (uniform 4-component vector of float)
-0:43          Constant:
-0:43            0 (const int)
-0:43        Constant:
-0:43          3.200000
-0:44      vector swizzle (temp 2-component vector of float)
-0:44        'v4' (uniform 4-component vector of float)
-0:44        Sequence
-0:44          Constant:
-0:44            0 (const int)
-0:44          Constant:
-0:44            1 (const int)
-0:52  Function Definition: foo5( (global float)
-0:52    Function Parameters: 
-0:54    Sequence
-0:54      Branch: Return with expression
-0:54        Convert int to float (temp float)
-0:54          'i' (global int)
 0:?   Linker Objects
 0:?     'i' (global int)
 0:?     'gl_in' (in 3-element array of block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance})
diff --git a/Test/baseResults/420.tesc.out b/Test/baseResults/420.tesc.out
index 594e130..30839ec 100644
--- a/Test/baseResults/420.tesc.out
+++ b/Test/baseResults/420.tesc.out
@@ -184,41 +184,6 @@
 0:26      indirect index (temp block{out 4-component vector of float Position gl_Position})
 0:26        'gl_out' (out 3-element array of block{out 4-component vector of float Position gl_Position})
 0:26        'gl_InvocationID' (in int InvocationID)
-0:34  Function Definition: foo( (global void)
-0:34    Function Parameters: 
-0:36    Sequence
-0:36      Test condition and select (temp void)
-0:36        Condition
-0:36        logical-or (temp bool)
-0:36          Compare Not Equal (temp bool)
-0:36            Constant:
-0:36              -0.625000
-0:36              -0.500000
-0:36              -0.375000
-0:36              -0.250000
-0:36              -0.375000
-0:36              -0.250000
-0:36              -0.125000
-0:36              0.000000
-0:36            direct index (layout(location=0 ) temp 2X4 matrix of double)
-0:36              'vs_tcs_first' (layout(location=0 ) in 32-element array of 2X4 matrix of double)
-0:36              Constant:
-0:36                0 (const int)
-0:37          Compare Not Equal (temp bool)
-0:37            Constant:
-0:37              0.375000
-0:37              0.500000
-0:37              0.625000
-0:37              0.750000
-0:37              0.625000
-0:37              0.750000
-0:37              0.875000
-0:37              -0.625000
-0:37            direct index (layout(location=12 ) temp 2X4 matrix of double)
-0:37              'vs_tcs_last' (layout(location=12 ) in 32-element array of 2X4 matrix of double)
-0:37              Constant:
-0:37                0 (const int)
-0:36        true case is null
 0:?   Linker Objects
 0:?     'gl_out' (out 3-element array of block{out 4-component vector of float Position gl_Position})
 0:?     'a' (out 3-element array of int)
diff --git a/Test/baseResults/420.vert.out b/Test/baseResults/420.vert.out
index 5636e7a..a70b44e 100644
--- a/Test/baseResults/420.vert.out
+++ b/Test/baseResults/420.vert.out
@@ -310,19 +310,6 @@
 
 Shader version: 420
 ERROR: node is still EOpNull!
-0:20  Function Definition: foo( (const int)
-0:20    Function Parameters: 
-0:?     Sequence
-0:23      Sequence
-0:23        move second child to first child (temp int)
-0:23          'b' (const (read only) int)
-0:23          'anonconst' (global int)
-0:25      Sequence
-0:25        move second child to first child (temp int)
-0:25          'd' (const (read only) int)
-0:25          'b' (const (read only) int)
-0:29      Branch: Return with expression
-0:29        'b' (const (read only) int)
 0:32  Function Definition: main( (global void)
 0:32    Function Parameters: 
 0:?     Sequence
@@ -342,164 +329,6 @@
 0:42        Constant:
 0:42          true (const bool)
 0:42        No loop body
-0:50  Function Definition: bar(vf4; (global void)
-0:50    Function Parameters: 
-0:50      'v' (volatile in 4-component vector of float)
-0:?     Sequence
-0:53      's' (temp int)
-0:54      's' (temp int)
-0:55      Test condition and select (temp void)
-0:55        Condition
-0:55        Compare Equal (temp bool)
-0:55          direct index (temp float)
-0:55            direct index (temp 4-component vector of float)
-0:55              'bad' (in 10-element array of 4-component vector of float)
-0:55              Constant:
-0:55                0 (const int)
-0:55            Constant:
-0:55              0 (const int)
-0:55          Constant:
-0:55            4.200000
-0:55        true case is null
-0:57      Test condition and select (temp void)
-0:57        Condition
-0:57        Constant:
-0:57          true (const bool)
-0:57        true case
-0:58        move second child to first child (temp 4-component vector of float)
-0:58          'badorder3' (flat out 4-component vector of float)
-0:58          direct index (temp 4-component vector of float)
-0:58            'bad' (in 10-element array of 4-component vector of float)
-0:58            Constant:
-0:58              0 (const int)
-0:61      Sequence
-0:61        move second child to first child (temp 3-component vector of float)
-0:61          'smeared' (temp 3-component vector of float)
-0:61          Construct vec3 (temp 3-component vector of float)
-0:61            'f' (temp float)
-0:62      'f' (temp float)
-0:63      'f' (temp float)
-0:88  Function Definition: bar23444( (global void)
-0:88    Function Parameters: 
-0:?     Sequence
-0:91      Sequence
-0:91        move second child to first child (temp float)
-0:91          'a1' (temp float)
-0:91          direct index (temp float)
-0:91            direct index (temp 3-component vector of float)
-0:91              'm43' (temp 4X3 matrix of float)
-0:91              Constant:
-0:91                3 (const int)
-0:91            Constant:
-0:91              1 (const int)
-0:93      Sequence
-0:93        move second child to first child (temp int)
-0:93          'a2' (temp int)
-0:93          Constant:
-0:93            4 (const int)
-0:94      add second child into first child (temp int)
-0:94        'a2' (temp int)
-0:94        Constant:
-0:94          3 (const int)
-0:95      add second child into first child (temp int)
-0:95        'a2' (temp int)
-0:95        Constant:
-0:95          3 (const int)
-0:96      Sequence
-0:96        move second child to first child (temp float)
-0:96          'b' (const (read only) float)
-0:96          component-wise multiply (temp float)
-0:96            Constant:
-0:96              2.000000
-0:96            'a1' (temp float)
-0:97      Sequence
-0:97        move second child to first child (temp int)
-0:97          'a' (temp int)
-0:97          Constant:
-0:97            -1 (const int)
-0:109  Function Definition: qux( (global void)
-0:109    Function Parameters: 
-0:111    Sequence
-0:111      Sequence
-0:111        move second child to first child (temp int)
-0:111          'i' (temp int)
-0:111          aoeu: direct index for structure (layout(column_major shared ) uniform int)
-0:111            'anon@0' (layout(binding=7 column_major shared ) uniform block{layout(column_major shared ) uniform int aoeu})
-0:111            Constant:
-0:111              0 (const uint)
-0:112      imageAtomicCompSwap (global int)
-0:112        'iimg2D' (layout(r32i ) uniform iimage2D)
-0:112        Construct ivec2 (temp 2-component vector of int)
-0:112          'i' (temp int)
-0:112          'i' (temp int)
-0:112        'i' (temp int)
-0:112        'i' (temp int)
-0:113      imageAtomicAdd (global uint)
-0:113        'uimg2D' (layout(r32ui ) uniform uimage2D)
-0:113        Construct ivec2 (temp 2-component vector of int)
-0:113          'i' (temp int)
-0:113          'i' (temp int)
-0:113        Convert int to uint (temp uint)
-0:113          'i' (temp int)
-0:114      imageAtomicMin (global int)
-0:114        'iimg2Drgba' (layout(rgba32i ) uniform iimage2D)
-0:114        Construct ivec2 (temp 2-component vector of int)
-0:114          'i' (temp int)
-0:114          'i' (temp int)
-0:114        'i' (temp int)
-0:115      Constant:
-0:115        0.000000
-0:116      Sequence
-0:116        move second child to first child (temp 4-component vector of int)
-0:116          'pos' (temp 4-component vector of int)
-0:116          imageLoad (global 4-component vector of int)
-0:116            'iimg2D' (layout(r32i ) uniform iimage2D)
-0:116            Construct ivec2 (temp 2-component vector of int)
-0:116              'i' (temp int)
-0:116              'i' (temp int)
-0:117      Sequence
-0:117        move second child to first child (temp 4-component vector of float)
-0:117          'col' (temp 4-component vector of float)
-0:117          imageLoad (global 4-component vector of float)
-0:117            'img2DMS' (uniform image2DMS)
-0:117            Construct ivec2 (temp 2-component vector of int)
-0:117              'i' (temp int)
-0:117              'i' (temp int)
-0:117            'i' (temp int)
-0:118      imageStore (global void)
-0:118        'img2DMSWO' (writeonly uniform image2DMS)
-0:118        Construct ivec2 (temp 2-component vector of int)
-0:118          'i' (temp int)
-0:118          'i' (temp int)
-0:118        'i' (temp int)
-0:118        Constant:
-0:118          0.000000
-0:118          0.000000
-0:118          0.000000
-0:118          0.000000
-0:119      imageLoad (global 4-component vector of float)
-0:119        'img2DMSWO' (writeonly uniform image2DMS)
-0:119        Construct ivec2 (temp 2-component vector of int)
-0:119          'i' (temp int)
-0:119          'i' (temp int)
-0:119        'i' (temp int)
-0:125  Function Definition: passr(iI21; (global void)
-0:125    Function Parameters: 
-0:125      'image' (coherent readonly in iimage2D)
-0:132  Function Definition: passrc( (global void)
-0:132    Function Parameters: 
-0:134    Sequence
-0:134      Function Call: passr(iI21; (global void)
-0:134        'qualim1' (layout(r32i ) coherent readonly uniform iimage2D)
-0:135      Function Call: passr(iI21; (global void)
-0:135        'qualim2' (layout(r32i ) coherent volatile readonly uniform iimage2D)
-0:136      Function Call: passr(iI21; (global void)
-0:136        'iimg2D' (layout(r32i ) uniform iimage2D)
-0:153  Function Definition: qlod( (global void)
-0:153    Function Parameters: 
-0:?     Sequence
-0:157      'levels' (temp int)
-0:158      'levels' (temp int)
 0:?   Linker Objects
 0:?     'v2' (smooth out 2-component vector of float)
 0:?     'bad' (in 10-element array of 4-component vector of float)
diff --git a/Test/baseResults/420_size_gl_in.geom.out b/Test/baseResults/420_size_gl_in.geom.out
index 28d09a6..54ec99e 100644
--- a/Test/baseResults/420_size_gl_in.geom.out
+++ b/Test/baseResults/420_size_gl_in.geom.out
@@ -49,26 +49,6 @@
 input primitive = triangles
 output primitive = none
 ERROR: node is still EOpNull!
-0:11  Function Definition: foo( (global void)
-0:11    Function Parameters: 
-0:13    Sequence
-0:13      Constant:
-0:13        3 (const int)
-0:14      gl_Position: direct index for structure (in 4-component vector of float Position)
-0:14        direct index (temp block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance})
-0:14          'gl_in' (in 3-element array of block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance})
-0:14          Constant:
-0:14            1 (const int)
-0:14        Constant:
-0:14          0 (const int)
-0:15      Constant:
-0:15        3 (const int)
-0:16      gl_Position: direct index for structure (in 4-component vector of float Position)
-0:16        indirect index (temp block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance})
-0:16          'gl_in' (in 3-element array of block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance})
-0:16          'i' (global int)
-0:16        Constant:
-0:16          0 (const int)
 0:?   Linker Objects
 0:?     'i' (global int)
 0:?     'colorun' (in 3-element array of 4-component vector of float)
diff --git a/Test/baseResults/430.comp.out b/Test/baseResults/430.comp.out
index aecf42f..ed61346 100644
--- a/Test/baseResults/430.comp.out
+++ b/Test/baseResults/430.comp.out
@@ -184,77 +184,6 @@
 0:39            10 (const int)
 0:39        true case
 0:40        Barrier (global void)
-0:63  Function Definition: foo( (global void)
-0:63    Function Parameters: 
-0:65    Sequence
-0:65      move second child to first child (temp float)
-0:65        direct index (layout(column_major shared ) temp float)
-0:65          values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of float)
-0:65            'ro' (layout(column_major shared ) readonly buffer block{layout(column_major shared ) buffer int value, layout(column_major shared ) buffer implicitly-sized array of float values})
-0:65            Constant:
-0:65              1 (const int)
-0:65          Constant:
-0:65            2 (const int)
-0:65        Constant:
-0:65          4.700000
-0:66      array length (temp int)
-0:66        values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of float)
-0:66          'ro' (layout(column_major shared ) readonly buffer block{layout(column_major shared ) buffer int value, layout(column_major shared ) buffer implicitly-sized array of float values})
-0:66          Constant:
-0:66            1 (const int)
-0:67      Barrier (global void)
-0:72  Function Definition: fooaoeu( (global void)
-0:72    Function Parameters: 
-0:73    Sequence
-0:73      Sequence
-0:73        move second child to first child (temp 2-component vector of int)
-0:73          'storePos' (temp 2-component vector of int)
-0:73          Convert uint to int (temp 2-component vector of int)
-0:73            vector swizzle (temp 2-component vector of uint)
-0:73              'gl_GlobalInvocationID' (in 3-component vector of uint GlobalInvocationID)
-0:73              Sequence
-0:73                Constant:
-0:73                  0 (const int)
-0:73                Constant:
-0:73                  1 (const int)
-0:74      Sequence
-0:74        move second child to first child (temp double)
-0:74          'localCoef' (temp double)
-0:74          Convert float to double (temp double)
-0:74            length (global float)
-0:74              divide (temp 2-component vector of float)
-0:74                Convert int to float (temp 2-component vector of float)
-0:74                  subtract (temp 2-component vector of int)
-0:74                    Convert uint to int (temp 2-component vector of int)
-0:74                      vector swizzle (temp 2-component vector of uint)
-0:74                        'gl_LocalInvocationID' (in 3-component vector of uint LocalInvocationID)
-0:74                        Sequence
-0:74                          Constant:
-0:74                            0 (const int)
-0:74                          Constant:
-0:74                            1 (const int)
-0:74                    Constant:
-0:74                      8 (const int)
-0:74                Constant:
-0:74                  8.000000
-0:75      Sequence
-0:75        move second child to first child (temp 4-component vector of double)
-0:75          'aa' (temp 4-component vector of double)
-0:75          Constant:
-0:75            0.400000
-0:75            0.200000
-0:75            0.300000
-0:75            0.400000
-0:76      Sequence
-0:76        move second child to first child (temp double)
-0:76          'globalCoef' (temp double)
-0:76          Constant:
-0:76            1.000000
-0:78      Sequence
-0:78        move second child to first child (temp double)
-0:78          'di' (temp double)
-0:78          Convert int to double (temp double)
-0:78            'i' (temp int)
 0:?   Linker Objects
 0:?     'gl_WorkGroupSize' (const 3-component vector of uint WorkGroupSize)
 0:?       2 (const uint)
diff --git a/Test/baseResults/430.vert.out b/Test/baseResults/430.vert.out
index 676fcd3..8cd1156 100644
--- a/Test/baseResults/430.vert.out
+++ b/Test/baseResults/430.vert.out
@@ -275,135 +275,6 @@
 Requested GL_ARB_shader_texture_image_samples
 in xfb mode
 ERROR: node is still EOpNull!
-0:14  Function Definition: foo( (global void)
-0:14    Function Parameters: 
-0:16    Sequence
-0:16      move second child to first child (temp float)
-0:16        direct index (temp float ClipDistance)
-0:16          gl_ClipDistance: direct index for structure (out 17-element array of float ClipDistance)
-0:16            'anon@0' (out block{out 17-element array of float ClipDistance gl_ClipDistance, })
-0:16            Constant:
-0:16              2 (const uint)
-0:16          Constant:
-0:16            2 (const int)
-0:16        Constant:
-0:16          3.700000
-0:31  Function Definition: foo3(vf4;vf3;vf2;vf3; (global void)
-0:31    Function Parameters: 
-0:31      'v4' (in 4-component vector of float)
-0:31      'v3' (volatile in 3-component vector of float)
-0:31      'v2' (in 2-component vector of float)
-0:31      'cv3' (in 3-component vector of float)
-0:148  Function Definition: fooBarrier( (global void)
-0:148    Function Parameters: 
-0:150    Sequence
-0:150      Constant:
-0:150        0.000000
-0:151      MemoryBarrier (global void)
-0:152      MemoryBarrierAtomicCounter (global void)
-0:153      MemoryBarrierBuffer (global void)
-0:154      Constant:
-0:154        0.000000
-0:155      MemoryBarrierImage (global void)
-0:156      Constant:
-0:156        0.000000
-0:166  Function Definition: fooq( (global void)
-0:166    Function Parameters: 
-0:168    Sequence
-0:168      Sequence
-0:168        move second child to first child (temp int)
-0:168          's' (temp int)
-0:168          textureSamples (global int)
-0:168            's2dms' (uniform sampler2DMS)
-0:169      add second child into first child (temp int)
-0:169        's' (temp int)
-0:169        textureSamples (global int)
-0:169          'us2dmsa' (uniform usampler2DMSArray)
-0:170      add second child into first child (temp int)
-0:170        's' (temp int)
-0:170        imageQuerySamples (global int)
-0:170          'ii2dms' (layout(rgba32i ) uniform iimage2DMS)
-0:171      add second child into first child (temp int)
-0:171        's' (temp int)
-0:171        imageQuerySamples (global int)
-0:171          'i2dmsa' (layout(rgba32f ) uniform image2DMSArray)
-0:176  Function Definition: fooq2( (global void)
-0:176    Function Parameters: 
-0:178    Sequence
-0:178      Sequence
-0:178        move second child to first child (temp int)
-0:178          's' (temp int)
-0:178          textureSamples (global int)
-0:178            's2dms' (uniform sampler2DMS)
-0:179      add second child into first child (temp int)
-0:179        's' (temp int)
-0:179        textureSamples (global int)
-0:179          'us2dmsa' (uniform usampler2DMSArray)
-0:180      add second child into first child (temp int)
-0:180        's' (temp int)
-0:180        imageQuerySamples (global int)
-0:180          'ii2dms' (layout(rgba32i ) uniform iimage2DMS)
-0:181      add second child into first child (temp int)
-0:181        's' (temp int)
-0:181        imageQuerySamples (global int)
-0:181          'i2dmsa' (layout(rgba32f ) uniform image2DMSArray)
-0:202  Function Definition: qlod( (global void)
-0:202    Function Parameters: 
-0:?     Sequence
-0:206      move second child to first child (temp int)
-0:206        'levels' (temp int)
-0:206        textureQueryLevels (global int)
-0:206          'samp1D' (uniform sampler1D)
-0:207      move second child to first child (temp int)
-0:207        'levels' (temp int)
-0:207        textureQueryLevels (global int)
-0:207          'usamp2D' (uniform usampler2D)
-0:208      move second child to first child (temp int)
-0:208        'levels' (temp int)
-0:208        textureQueryLevels (global int)
-0:208          'isamp3D' (uniform isampler3D)
-0:209      move second child to first child (temp int)
-0:209        'levels' (temp int)
-0:209        textureQueryLevels (global int)
-0:209          'isampCube' (uniform isamplerCube)
-0:210      move second child to first child (temp int)
-0:210        'levels' (temp int)
-0:210        textureQueryLevels (global int)
-0:210          'isamp1DA' (uniform isampler1DArray)
-0:211      move second child to first child (temp int)
-0:211        'levels' (temp int)
-0:211        textureQueryLevels (global int)
-0:211          'samp2DA' (uniform sampler2DArray)
-0:212      move second child to first child (temp int)
-0:212        'levels' (temp int)
-0:212        textureQueryLevels (global int)
-0:212          'usampCubeA' (uniform usamplerCubeArray)
-0:214      move second child to first child (temp int)
-0:214        'levels' (temp int)
-0:214        textureQueryLevels (global int)
-0:214          'samp1Ds' (uniform sampler1DShadow)
-0:215      move second child to first child (temp int)
-0:215        'levels' (temp int)
-0:215        textureQueryLevels (global int)
-0:215          'samp2Ds' (uniform sampler2DShadow)
-0:216      move second child to first child (temp int)
-0:216        'levels' (temp int)
-0:216        textureQueryLevels (global int)
-0:216          'sampCubes' (uniform samplerCubeShadow)
-0:217      move second child to first child (temp int)
-0:217        'levels' (temp int)
-0:217        textureQueryLevels (global int)
-0:217          'samp1DAs' (uniform sampler1DArrayShadow)
-0:218      move second child to first child (temp int)
-0:218        'levels' (temp int)
-0:218        textureQueryLevels (global int)
-0:218          'samp2DAs' (uniform sampler2DArrayShadow)
-0:219      move second child to first child (temp int)
-0:219        'levels' (temp int)
-0:219        textureQueryLevels (global int)
-0:219          'sampCubeAs' (uniform samplerCubeArrayShadow)
-0:221      'levels' (temp int)
-0:222      'levels' (temp int)
 0:?   Linker Objects
 0:?     'v4' (layout(location=3 ) temp 4-component vector of float)
 0:?     'uv4' (layout(location=4 ) uniform 4-component vector of float)
diff --git a/Test/baseResults/430AofA.frag.out b/Test/baseResults/430AofA.frag.out
index f3bbfb8..fd3892d 100644
--- a/Test/baseResults/430AofA.frag.out
+++ b/Test/baseResults/430AofA.frag.out
@@ -766,34 +766,6 @@
 0:84          5.000000
 0:85      Function Call: foo(f1[5][7]; (global 4-element array of 7-element array of float)
 0:85        'u' (temp 5-element array of 7-element array of float)
-0:88  Function Definition: foo3( (global void)
-0:88    Function Parameters: 
-0:?     Sequence
-0:91      Constant:
-0:91        1 (const int)
-0:92      move second child to first child (temp float)
-0:92        direct index (temp float)
-0:92          direct index (temp 7-element array of float)
-0:92            direct index (temp 5-element array of 7-element array of float)
-0:92              'resize1' (temp 3-element array of 5-element array of 7-element array of float)
-0:92              Constant:
-0:92                1 (const int)
-0:92            Constant:
-0:92              4 (const int)
-0:92          Constant:
-0:92            5 (const int)
-0:92        Constant:
-0:92          2.000000
-0:93      Constant:
-0:93        1 (const int)
-0:95      Constant:
-0:95        3 (const int)
-0:96      Constant:
-0:96        5 (const int)
-0:97      Constant:
-0:97        7 (const int)
-0:98      Constant:
-0:98        0.000000
 0:?   Linker Objects
 0:?     'many' (global 1-element array of 2-element array of 3-element array of 4-element array of 5-element array of 6-element array of float)
 0:?     'gu' (global 1-element array of 7-element array of float)
diff --git a/Test/baseResults/430scope.vert.out b/Test/baseResults/430scope.vert.out
index 0a097a2..c7d0503 100644
--- a/Test/baseResults/430scope.vert.out
+++ b/Test/baseResults/430scope.vert.out
@@ -127,6 +127,8 @@
 
 Linked vertex stage:
 
+ERROR: Linking vertex stage: No function definition (body) found: 
+    g(
 
 Shader version: 430
 ERROR: node is still EOpNull!
@@ -147,20 +149,6 @@
 0:8                1.000000
 0:11      Branch: Return with expression
 0:11        'a' (in int)
-0:25  Function Definition: cos(f1; (global float)
-0:25    Function Parameters: 
-0:25      'x' (in float)
-0:27    Sequence
-0:27      Branch: Return with expression
-0:27        Constant:
-0:27          1.000000
-0:29  Function Definition: radians(b1; (global bool)
-0:29    Function Parameters: 
-0:29      'x' (in bool)
-0:31    Sequence
-0:31      Branch: Return with expression
-0:31        Constant:
-0:31          true (const bool)
 0:36  Function Definition: main( (global void)
 0:36    Function Parameters: 
 0:?     Sequence
diff --git a/Test/baseResults/440.frag.out b/Test/baseResults/440.frag.out
index 064fe19..bdc1b09 100644
--- a/Test/baseResults/440.frag.out
+++ b/Test/baseResults/440.frag.out
@@ -126,35 +126,6 @@
 
 Shader version: 440
 ERROR: node is still EOpNull!
-0:144  Function Definition: interp( (global void)
-0:144    Function Parameters: 
-0:146    Sequence
-0:146      interpolateAtCentroid (global 2-component vector of float)
-0:146        vector swizzle (temp 2-component vector of float)
-0:146          direct index (smooth sample temp 3-component vector of float)
-0:146            'sampInArray' (smooth sample in 4-element array of 3-component vector of float)
-0:146            Constant:
-0:146              2 (const int)
-0:146          Sequence
-0:146            Constant:
-0:146              0 (const int)
-0:146            Constant:
-0:146              1 (const int)
-0:147      interpolateAtSample (global float)
-0:147        direct index (temp float)
-0:147          direct index (smooth sample temp 3-component vector of float)
-0:147            'sampInArray' (smooth sample in 4-element array of 3-component vector of float)
-0:147            Constant:
-0:147              2 (const int)
-0:147          Constant:
-0:147            0 (const int)
-0:147        Constant:
-0:147          2 (const int)
-0:150  Function Definition: layer( (global int)
-0:150    Function Parameters: 
-0:152    Sequence
-0:152      Branch: Return with expression
-0:152        'gl_Layer' (flat in int Layer)
 0:?   Linker Objects
 0:?     'a' (layout(location=4 component=2 ) smooth in 2-component vector of float)
 0:?     'b' (layout(location=4 component=1 ) smooth in float)
diff --git a/Test/baseResults/440.vert.out b/Test/baseResults/440.vert.out
index 022ddec..bf625c8 100644
--- a/Test/baseResults/440.vert.out
+++ b/Test/baseResults/440.vert.out
@@ -174,37 +174,6 @@
 Requested GL_ARB_shader_draw_parameters
 in xfb mode
 ERROR: node is still EOpNull!
-0:177  Function Definition: drawParamsBad( (global int)
-0:177    Function Parameters: 
-0:179    Sequence
-0:179      Branch: Return with expression
-0:179        add (temp int)
-0:179          add (temp int)
-0:179            'gl_BaseVertexARB' (in int BaseVertex)
-0:179            'gl_BaseInstanceARB' (in int BaseInstance)
-0:179          'gl_DrawIDARB' (in int DrawId)
-0:184  Function Definition: drawParams( (global int)
-0:184    Function Parameters: 
-0:186    Sequence
-0:186      Branch: Return with expression
-0:186        add (temp int)
-0:186          add (temp int)
-0:186            'gl_BaseVertexARB' (in int BaseVertex)
-0:186            'gl_BaseInstanceARB' (in int BaseInstance)
-0:186          'gl_DrawIDARB' (in int DrawId)
-0:187      move second child to first child (temp int)
-0:187        'gl_BaseVertexARB' (in int BaseVertex)
-0:187        Constant:
-0:187          3 (const int)
-0:188      move second child to first child (temp int)
-0:188        'gl_BaseInstanceARB' (in int BaseInstance)
-0:188        Constant:
-0:188          3 (const int)
-0:189      move second child to first child (temp int)
-0:189        'gl_DrawIDARB' (in int DrawId)
-0:189        Constant:
-0:189          3 (const int)
-0:190      'glBaseInstanceARB' (temp float)
 0:?   Linker Objects
 0:?     'a' (layout(location=2 component=2 ) in 2-component vector of float)
 0:?     'b' (layout(location=2 component=1 ) in float)
diff --git a/Test/baseResults/450.frag.out b/Test/baseResults/450.frag.out
index 23682e8..0382673 100644
--- a/Test/baseResults/450.frag.out
+++ b/Test/baseResults/450.frag.out
@@ -263,57 +263,6 @@
 0:34                'uin' (temp uint)
 0:34            Construct bvec3 (temp 3-component vector of bool)
 0:34              'b' (temp bool)
-0:42  Function Definition: foo( (global void)
-0:42    Function Parameters: 
-0:44    Sequence
-0:44      Sequence
-0:44        move second child to first child (temp int)
-0:44          's' (temp int)
-0:44          textureSamples (global int)
-0:44            's2dms' (uniform sampler2DMS)
-0:45      add second child into first child (temp int)
-0:45        's' (temp int)
-0:45        textureSamples (global int)
-0:45          'us2dmsa' (uniform usampler2DMSArray)
-0:46      add second child into first child (temp int)
-0:46        's' (temp int)
-0:46        imageQuerySamples (global int)
-0:46          'ii2dms' (layout(rgba32i ) uniform iimage2DMS)
-0:47      add second child into first child (temp int)
-0:47        's' (temp int)
-0:47        imageQuerySamples (global int)
-0:47          'i2dmsa' (layout(rgba32f ) uniform image2DMSArray)
-0:48      Sequence
-0:48        move second child to first child (temp float)
-0:48          'f' (temp float)
-0:48          imageAtomicExchange (global float)
-0:48            'i2dmsa' (layout(rgba32f ) uniform image2DMSArray)
-0:48            Convert float to int (temp 3-component vector of int)
-0:48              'in3' (smooth in 3-component vector of float)
-0:48            Constant:
-0:48              2 (const int)
-0:48            Constant:
-0:48              4.500000
-0:53  Function Definition: cull(i1; (global float)
-0:53    Function Parameters: 
-0:53      'i' (in int)
-0:55    Sequence
-0:55      Branch: Return with expression
-0:55        Test condition and select (temp float)
-0:55          Condition
-0:55          Compare Greater Than or Equal (temp bool)
-0:55            'i' (in int)
-0:55            Constant:
-0:55              6 (const int)
-0:55          true case
-0:55          direct index (smooth temp float CullDistance)
-0:55            'gl_CullDistance' (smooth in 6-element array of float CullDistance)
-0:55            Constant:
-0:55              5 (const int)
-0:55          false case
-0:55          indirect index (smooth temp float CullDistance)
-0:55            'gl_CullDistance' (smooth in 6-element array of float CullDistance)
-0:55            'i' (in int)
 0:?   Linker Objects
 0:?     'in1' (smooth in float)
 0:?     'in2' (smooth in 2-component vector of float)
diff --git a/Test/baseResults/array.frag.out b/Test/baseResults/array.frag.out
index 8b3cf80..e254bf1 100644
--- a/Test/baseResults/array.frag.out
+++ b/Test/baseResults/array.frag.out
@@ -446,71 +446,6 @@
 0:58              1 (const int)
 0:58        Constant:
 0:58          4 (const int)
-0:68  Function Definition: foo( (global void)
-0:68    Function Parameters: 
-0:?     Sequence
-0:71      move second child to first child (temp int)
-0:71        direct index (temp int)
-0:71          'uns' (temp 4-element array of int)
-0:71          Constant:
-0:71            3 (const int)
-0:71        Constant:
-0:71          40 (const int)
-0:72      move second child to first child (temp int)
-0:72        direct index (temp int)
-0:72          'uns' (temp 4-element array of int)
-0:72          Constant:
-0:72            1 (const int)
-0:72        Constant:
-0:72          30 (const int)
-0:73      move second child to first child (temp 3-component vector of float)
-0:73        direct index (temp 3-component vector of float)
-0:73          'guns' (global 8-element array of 3-component vector of float)
-0:73          Constant:
-0:73            2 (const int)
-0:73        Constant:
-0:73          2.400000
-0:73          2.400000
-0:73          2.400000
-0:76      Constant:
-0:76        0.000000
-0:79  Function Definition: foo2( (global implicitly-sized array of float)
-0:79    Function Parameters: 
-0:?     Sequence
-0:82      Branch: Return with expression
-0:82        'f' (temp 1-element array of float)
-0:84      Branch: Return with expression
-0:84        'g' (temp 9-element array of float)
-0:89  Function Definition: foo3( (global void)
-0:89    Function Parameters: 
-0:?     Sequence
-0:92      move second child to first child (temp float)
-0:92        direct index (temp float)
-0:92          'resize1' (temp 3-element array of float)
-0:92          Constant:
-0:92            2 (const int)
-0:92        Constant:
-0:92          4.000000
-0:93      Constant:
-0:93        1 (const int)
-0:95      Constant:
-0:95        3 (const int)
-0:98      move second child to first child (temp float)
-0:98        direct index (temp float)
-0:98          'resize2' (temp 5-element array of float)
-0:98          Constant:
-0:98            5 (const int)
-0:98        Constant:
-0:98          4.000000
-0:100      Constant:
-0:100        5 (const int)
-0:101      move second child to first child (temp float)
-0:101        direct index (temp float)
-0:101          'resize2' (temp 5-element array of float)
-0:101          Constant:
-0:101            5 (const int)
-0:101        Constant:
-0:101          4.000000
 0:106  Sequence
 0:106    move second child to first child (temp float)
 0:106      'b' (global float)
diff --git a/Test/baseResults/array100.frag.out b/Test/baseResults/array100.frag.out
index b44f6a0..cf54361 100644
--- a/Test/baseResults/array100.frag.out
+++ b/Test/baseResults/array100.frag.out
@@ -265,29 +265,6 @@
 0:40          1.000000
 0:40          1.000000
 0:40          1.000000
-0:53  Function Definition: bar9( (global structure{global mediump 4-component vector of float v4, global structure{global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa})
-0:53    Function Parameters: 
-0:?     Sequence
-0:56      Branch: Return with expression
-0:56        's' (temp structure{global mediump 4-component vector of float v4, global structure{global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa})
-0:59  Function Definition: bar10(struct-SB-vf4-struct-SA-vf3-vf2[4]11; (global void)
-0:59    Function Parameters: 
-0:59      's' (in structure{global mediump 4-component vector of float v4, global structure{global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa})
-0:63  Function Definition: bar11( (global void)
-0:63    Function Parameters: 
-0:?     Sequence
-0:66      move second child to first child (temp structure{global mediump 4-component vector of float v4, global structure{global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa})
-0:66        's1' (temp structure{global mediump 4-component vector of float v4, global structure{global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa})
-0:66        's2' (temp structure{global mediump 4-component vector of float v4, global structure{global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa})
-0:67      Function Call: bar10(struct-SB-vf4-struct-SA-vf3-vf2[4]11; (global void)
-0:67        's1' (temp structure{global mediump 4-component vector of float v4, global structure{global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa})
-0:68      move second child to first child (temp structure{global mediump 4-component vector of float v4, global structure{global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa})
-0:68        's2' (temp structure{global mediump 4-component vector of float v4, global structure{global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa})
-0:68        Function Call: bar9( (global structure{global mediump 4-component vector of float v4, global structure{global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa})
-0:69      Sequence
-0:69        move second child to first child (temp structure{global mediump 4-component vector of float v4, global structure{global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa})
-0:69          'initSb' (temp structure{global mediump 4-component vector of float v4, global structure{global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa})
-0:69          's1' (temp structure{global mediump 4-component vector of float v4, global structure{global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa})
 0:?   Linker Objects
 0:?     'gu' (global 1-element array of mediump float)
 0:?     'g4' (global 4-element array of mediump float)
diff --git a/Test/baseResults/atomic_uint.frag.out b/Test/baseResults/atomic_uint.frag.out
index 4d05756..e54b5dc 100644
--- a/Test/baseResults/atomic_uint.frag.out
+++ b/Test/baseResults/atomic_uint.frag.out
@@ -86,22 +86,6 @@
 
 Shader version: 420
 ERROR: node is still EOpNull!
-0:5  Function Definition: func(au1; (global uint)
-0:5    Function Parameters: 
-0:5      'c' (in atomic_uint)
-0:7    Sequence
-0:7      Branch: Return with expression
-0:7        AtomicCounterIncrement (global uint)
-0:7          'c' (in atomic_uint)
-0:10  Function Definition: func2(au1; (global uint)
-0:10    Function Parameters: 
-0:10      'c' (out atomic_uint)
-0:12    Sequence
-0:12      Branch: Return with expression
-0:12        'counter' (layout(binding=0 offset=0 ) uniform atomic_uint)
-0:13      Branch: Return with expression
-0:13        AtomicCounter (global uint)
-0:13          'counter' (layout(binding=0 offset=0 ) uniform atomic_uint)
 0:16  Function Definition: main( (global void)
 0:16    Function Parameters: 
 0:?     Sequence
@@ -112,22 +96,6 @@
 0:19            'counter' (layout(binding=0 offset=0 ) uniform atomic_uint)
 0:20      AtomicCounterDecrement (global uint)
 0:20        'counter' (layout(binding=0 offset=0 ) uniform atomic_uint)
-0:26  Function Definition: opac( (global void)
-0:26    Function Parameters: 
-0:28    Sequence
-0:28      'counter' (layout(binding=0 offset=0 ) uniform atomic_uint)
-0:29      'counter' (layout(binding=0 offset=0 ) uniform atomic_uint)
-0:31      indirect index (temp int)
-0:31        'a' (temp 3-element array of int)
-0:31        'counter' (layout(binding=0 offset=0 ) uniform atomic_uint)
-0:32      direct index (layout(binding=1 offset=3 ) temp atomic_uint)
-0:32        'countArr' (layout(binding=1 offset=3 ) uniform 4-element array of atomic_uint)
-0:32        Constant:
-0:32          2 (const int)
-0:33      indirect index (layout(binding=1 offset=3 ) temp atomic_uint)
-0:33        'countArr' (layout(binding=1 offset=3 ) uniform 4-element array of atomic_uint)
-0:33        'i' (uniform int)
-0:34      'counter' (layout(binding=0 offset=0 ) uniform atomic_uint)
 0:?   Linker Objects
 0:?     'counter' (layout(binding=0 offset=0 ) uniform atomic_uint)
 0:?     'countArr' (layout(binding=1 offset=3 ) uniform 4-element array of atomic_uint)
diff --git a/Test/baseResults/constFold.frag.out b/Test/baseResults/constFold.frag.out
index 2e78468..33bf513 100644
--- a/Test/baseResults/constFold.frag.out
+++ b/Test/baseResults/constFold.frag.out
@@ -546,120 +546,6 @@
 0:69          0.028000
 0:69          0.500000
 0:69          1.000000
-0:78  Function Definition: foo( (global void)
-0:78    Function Parameters: 
-0:?     Sequence
-0:81      move second child to first child (temp float)
-0:81        direct index (temp float)
-0:81          'a' (temp 3-element array of float)
-0:81          Constant:
-0:81            0 (const int)
-0:81        Constant:
-0:81          7.000000
-0:82      Constant:
-0:82        2 (const int)
-0:83      Constant:
-0:83        2147483647 (const int)
-0:84      Constant:
-0:84        inf
-0:88      Constant:
-0:88        2 (const uint)
-0:88        3 (const uint)
-0:89      Constant:
-0:89        0 (const uint)
-0:90      Constant:
-0:90        6 (const uint)
-0:90        7 (const uint)
-0:103  Function Definition: foo2( (global void)
-0:103    Function Parameters: 
-0:105    Sequence
-0:105      direct index (temp float)
-0:105        'a1' (global 1-element array of float)
-0:105        Constant:
-0:105          0 (const int)
-0:106      direct index (temp float)
-0:106        'a2' (global 2-element array of float)
-0:106        Constant:
-0:106          0 (const int)
-0:107      direct index (temp float)
-0:107        'a3' (global 4-element array of float)
-0:107        Constant:
-0:107          0 (const int)
-0:108      direct index (temp float)
-0:108        'a4' (global 2-element array of float)
-0:108        Constant:
-0:108          0 (const int)
-0:109      Constant:
-0:109        1.000000
-0:110      Constant:
-0:110        5.000000
-0:111      Constant:
-0:111        2.000000
-0:112      Constant:
-0:112        3.000000
-0:113      Constant:
-0:113        0.000000
-0:114      Constant:
-0:114        0.000000
-0:116      move second child to first child (temp int)
-0:116        'p' (temp int)
-0:116        Constant:
-0:116          2147483647 (const int)
-0:117      move second child to first child (temp int)
-0:117        'p' (temp int)
-0:117        Constant:
-0:117          -2147483648 (const int)
-0:118      move second child to first child (temp int)
-0:118        'p' (temp int)
-0:118        Constant:
-0:118          -2147483647 (const int)
-0:119      Sequence
-0:119        move second child to first child (temp float)
-0:119          'f' (temp float)
-0:119          Constant:
-0:119            1.444000
-0:120      move second child to first child (temp float)
-0:120        'f' (temp float)
-0:120        direct index (temp float)
-0:120          Construct vec4 (temp 4-component vector of float)
-0:120            Test condition and select (temp float)
-0:120              Condition
-0:120              Compare Less Than (temp bool)
-0:120                direct index (temp float)
-0:120                  'inv' (smooth in 4-component vector of float)
-0:120                  Constant:
-0:120                    0 (const int)
-0:120                Constant:
-0:120                  2.400000
-0:120              true case
-0:120              Constant:
-0:120                -1.000000
-0:120              false case
-0:120              Constant:
-0:120                1.000000
-0:120          Constant:
-0:120            3 (const int)
-0:126  Function Definition: foo3( (global void)
-0:126    Function Parameters: 
-0:128    Sequence
-0:128      Sequence
-0:128        move second child to first child (temp 3X2 matrix of float)
-0:128          'r32' (temp 3X2 matrix of float)
-0:128          Constant:
-0:128            43.000000
-0:128            64.000000
-0:128            51.000000
-0:128            76.000000
-0:128            59.000000
-0:128            88.000000
-0:138  Function Definition: foo4( (global void)
-0:138    Function Parameters: 
-0:140    Sequence
-0:140      Sequence
-0:140        move second child to first child (temp int)
-0:140          'a' (temp int)
-0:140          Constant:
-0:140            9 (const int)
 0:?   Linker Objects
 0:?     'a' (const int)
 0:?       1 (const int)
diff --git a/Test/baseResults/cppComplexExpr.vert.out b/Test/baseResults/cppComplexExpr.vert.out
index aa73a06..352dcac 100644
--- a/Test/baseResults/cppComplexExpr.vert.out
+++ b/Test/baseResults/cppComplexExpr.vert.out
@@ -152,41 +152,6 @@
 0:39        'gl_Position' (gl_Position highp 4-component vector of float Position)
 0:39        Construct vec4 (temp highp 4-component vector of float)
 0:39          'sum' (global highp float)
-0:44  Function Definition: foo( (global highp float)
-0:44    Function Parameters: 
-0:46    Sequence
-0:46      Branch: Return with expression
-0:46        add (temp highp float)
-0:46          add (temp highp float)
-0:46            direct index (temp highp float)
-0:46              'gl_Position' (gl_Position highp 4-component vector of float Position)
-0:46              Constant:
-0:46                0 (const int)
-0:46            Constant:
-0:46              3.000000
-0:46          add (temp highp float)
-0:46            direct index (temp highp float)
-0:46              'gl_Position' (gl_Position highp 4-component vector of float Position)
-0:46              Constant:
-0:46                0 (const int)
-0:46            Constant:
-0:46              3.000000
-0:47      Branch: Return with expression
-0:47        add (temp highp float)
-0:47          add (temp highp float)
-0:47            direct index (temp highp float)
-0:47              'gl_Position' (gl_Position highp 4-component vector of float Position)
-0:47              Constant:
-0:47                1 (const int)
-0:47            Constant:
-0:47              3.000000
-0:47          add (temp highp float)
-0:47            direct index (temp highp float)
-0:47              'gl_Position' (gl_Position highp 4-component vector of float Position)
-0:47              Constant:
-0:47                1 (const int)
-0:47            Constant:
-0:47              3.000000
 0:97  Sequence
 0:97    move second child to first child (temp highp float)
 0:97      'c' (global highp float)
diff --git a/Test/baseResults/cppNest.vert.out b/Test/baseResults/cppNest.vert.out
index df90557..2077ec3 100644
--- a/Test/baseResults/cppNest.vert.out
+++ b/Test/baseResults/cppNest.vert.out
@@ -135,17 +135,6 @@
 0:133      'selected3' (global int)
 0:133      Constant:
 0:133        3 (const int)
-0:175  Function Definition: foo985( (global void)
-0:175    Function Parameters: 
-0:175    Sequence
-0:175      add (temp int)
-0:175        Constant:
-0:175          2 (const int)
-0:175        Comma (temp int)
-0:175          Constant:
-0:175            3 (const int)
-0:175          Constant:
-0:175            4 (const int)
 0:?   Linker Objects
 0:?     'sum' (global float)
 0:?     'selected4' (global int)
diff --git a/Test/baseResults/cppSimple.vert.out b/Test/baseResults/cppSimple.vert.out
index 366770d..bf4b42a 100644
--- a/Test/baseResults/cppSimple.vert.out
+++ b/Test/baseResults/cppSimple.vert.out
@@ -282,19 +282,6 @@
 0:202      'f' (global double)
 0:202      Constant:
 0:202        0.000800
-12:20031  Function Definition: foo234( (global void)
-12:20031    Function Parameters: 
-12:20033    Sequence
-12:20033      move second child to first child (temp 4-component vector of float)
-12:20033        gl_Position: direct index for structure (gl_Position 4-component vector of float Position)
-12:20033          'anon@0' (out block{gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord})
-12:20033          Constant:
-12:20033            0 (const uint)
-12:20033        Constant:
-12:20033          6.000000
-12:20033          6.000000
-12:20033          6.000000
-12:20033          6.000000
 12:9011  Sequence
 12:9011    move second child to first child (temp int)
 12:9011      'R1' (global int)
diff --git a/Test/baseResults/dce.frag.out b/Test/baseResults/dce.frag.out
index 2846abd..6707ae7 100644
--- a/Test/baseResults/dce.frag.out
+++ b/Test/baseResults/dce.frag.out
@@ -147,128 +147,6 @@
 0:5      'c' (global int)
 0:5      Constant:
 0:5        0 (const int)
-0:7  Function Definition: bar( (global void)
-0:7    Function Parameters: 
-0:9    Sequence
-0:9      Test condition and select (temp void)
-0:9        Condition
-0:9        Constant:
-0:9          false (const bool)
-0:9        true case
-0:10        Pre-Increment (temp int)
-0:10          'c' (global int)
-0:9        false case
-0:12        Pre-Increment (temp int)
-0:12          'c' (global int)
-0:14      Test condition and select (temp int)
-0:14        Condition
-0:14        Constant:
-0:14          false (const bool)
-0:14        true case
-0:14        Pre-Increment (temp int)
-0:14          'c' (global int)
-0:14        false case
-0:14        Pre-Increment (temp int)
-0:14          'c' (global int)
-0:16      switch
-0:16      condition
-0:16        'c' (global int)
-0:16      body
-0:16        Sequence
-0:17          case:  with expression
-0:17            Constant:
-0:17              1 (const int)
-0:?           Sequence
-0:18            Pre-Increment (temp int)
-0:18              'c' (global int)
-0:19            Branch: Break
-0:20            Pre-Increment (temp int)
-0:20              'c' (global int)
-0:21          case:  with expression
-0:21            Constant:
-0:21              2 (const int)
-0:?           Sequence
-0:22            Branch: Break
-0:23            Pre-Increment (temp int)
-0:23              'c' (global int)
-0:24          default: 
-0:?           Sequence
-0:25            Branch: Break
-0:28      Sequence
-0:28        Sequence
-0:28          move second child to first child (temp int)
-0:28            'i' (temp int)
-0:28            Constant:
-0:28              0 (const int)
-0:28        Loop with condition tested first
-0:28          Loop Condition
-0:28          Compare Less Than (temp bool)
-0:28            'i' (temp int)
-0:28            Constant:
-0:28              0 (const int)
-0:28          Loop Body
-0:29          Pre-Increment (temp int)
-0:29            'c' (global int)
-0:28          Loop Terminal Expression
-0:28          Pre-Increment (temp int)
-0:28            'i' (temp int)
-0:31      Sequence
-0:31        Sequence
-0:31          move second child to first child (temp int)
-0:31            'i' (temp int)
-0:31            Constant:
-0:31              0 (const int)
-0:31        Loop with condition tested first
-0:31          Loop Condition
-0:31          Compare Less Than (temp bool)
-0:31            'i' (temp int)
-0:31            Constant:
-0:31              10 (const int)
-0:31          Loop Body
-0:32          Sequence
-0:32            Test condition and select (temp void)
-0:32              Condition
-0:32              Compare Less Than (temp bool)
-0:32                'c' (global int)
-0:32                Constant:
-0:32                  3 (const int)
-0:32              true case
-0:33              Sequence
-0:33                Branch: Break
-0:34                Pre-Increment (temp int)
-0:34                  'c' (global int)
-0:32              false case
-0:36              Sequence
-0:36                Branch: Continue
-0:37                Pre-Increment (temp int)
-0:37                  'c' (global int)
-0:31          Loop Terminal Expression
-0:31          Pre-Increment (temp int)
-0:31            'i' (temp int)
-0:41      Branch: Return
-0:43      Pre-Increment (temp int)
-0:43        'c' (global int)
-0:46  Function Definition: foo( (global int)
-0:46    Function Parameters: 
-0:48    Sequence
-0:48      Test condition and select (temp void)
-0:48        Condition
-0:48        Compare Greater Than (temp bool)
-0:48          'c' (global int)
-0:48          Constant:
-0:48            4 (const int)
-0:48        true case
-0:49        Sequence
-0:49          Branch: Return with expression
-0:49            Constant:
-0:49              4 (const int)
-0:50          Pre-Increment (temp int)
-0:50            'c' (global int)
-0:53      Branch: Return with expression
-0:53        Constant:
-0:53          5 (const int)
-0:55      Pre-Increment (temp int)
-0:55        'c' (global int)
 0:?   Linker Objects
 0:?     'flag' (const bool)
 0:?       false (const bool)
diff --git a/Test/baseResults/functionSemantics.frag.out b/Test/baseResults/functionSemantics.frag.out
index 1ea7dbd..e0fd076 100644
--- a/Test/baseResults/functionSemantics.frag.out
+++ b/Test/baseResults/functionSemantics.frag.out
@@ -397,19 +397,6 @@
 0:62        Construct vec4 (temp 4-component vector of float)
 0:62          Convert int to float (temp float)
 0:62            'color' (temp int)
-0:66  Function Definition: aggCall( (global void)
-0:66    Function Parameters: 
-0:?     Sequence
-0:69      Function Call: m(vf2; (global 3-component vector of float)
-0:69        Convert int to float (temp 2-component vector of float)
-0:69          Construct ivec2 (temp 2-component vector of int)
-0:69            Convert float to int (temp int)
-0:69              'F' (temp float)
-0:72  Function Definition: badConv( (global 4-component vector of float)
-0:72    Function Parameters: 
-0:74    Sequence
-0:74      Branch: Return with expression
-0:74        'u' (uniform float)
 0:?   Linker Objects
 0:?     'u' (uniform float)
 
diff --git a/Test/baseResults/glspv.esversion.vert.out b/Test/baseResults/glspv.esversion.vert.out
index ef406a1..8e4b3b8 100755
--- a/Test/baseResults/glspv.esversion.vert.out
+++ b/Test/baseResults/glspv.esversion.vert.out
@@ -4,8 +4,4 @@
 ERROR: 1 compilation errors.  No code generated.
 
 
-
-Linked vertex stage:
-
-
 SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/glspv.frag.out b/Test/baseResults/glspv.frag.out
index 5df46c5..daa1dc1 100755
--- a/Test/baseResults/glspv.frag.out
+++ b/Test/baseResults/glspv.frag.out
@@ -6,8 +6,4 @@
 ERROR: 4 compilation errors.  No code generated.
 
 
-
-Linked fragment stage:
-
-
 SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/glspv.version.frag.out b/Test/baseResults/glspv.version.frag.out
index 7f44889..3e8e8c4 100755
--- a/Test/baseResults/glspv.version.frag.out
+++ b/Test/baseResults/glspv.version.frag.out
@@ -1,10 +1,6 @@
 glspv.version.frag
 ERROR: #version: compilation for SPIR-V does not support the compatibility profile
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 6
diff --git a/Test/baseResults/glspv.version.vert.out b/Test/baseResults/glspv.version.vert.out
index eb003df..9683b3b 100755
--- a/Test/baseResults/glspv.version.vert.out
+++ b/Test/baseResults/glspv.version.vert.out
@@ -3,8 +3,4 @@
 ERROR: 1 compilation errors.  No code generated.
 
 
-
-Linked vertex stage:
-
-
 SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/glspv.vert.out b/Test/baseResults/glspv.vert.out
index b91ab50..5f6d9bb 100755
--- a/Test/baseResults/glspv.vert.out
+++ b/Test/baseResults/glspv.vert.out
@@ -11,8 +11,4 @@
 ERROR: 8 compilation errors.  No code generated.
 
 
-
-Linked vertex stage:
-
-
 SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out b/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out
new file mode 100644
index 0000000..71842af
--- /dev/null
+++ b/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out
@@ -0,0 +1,25 @@
+hlsl.deadFunctionMissingBody.vert
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 13
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 9
+                              Name 4  "main"
+                              Name 9  "@entryPointOutput"
+                              Decorate 9(@entryPointOutput) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Output 7(fvec4)
+9(@entryPointOutput):      8(ptr) Variable Output
+              10:    6(float) Constant 0
+              11:    7(fvec4) ConstantComposite 10 10 10 10
+         4(main):           2 Function None 3
+               5:             Label
+                              Store 9(@entryPointOutput) 11
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.entry.rename.frag.out b/Test/baseResults/hlsl.entry.rename.frag.out
new file mode 100644
index 0000000..b24cb7a
--- /dev/null
+++ b/Test/baseResults/hlsl.entry.rename.frag.out
@@ -0,0 +1,119 @@
+hlsl.entry.rename.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:7  Function Definition: not_the_entry_point( (temp void)
+0:7    Function Parameters: 
+0:11  Function Definition: main_in_spv( (temp structure{temp 4-component vector of float Color})
+0:11    Function Parameters: 
+0:?     Sequence
+0:13      move second child to first child (temp 4-component vector of float)
+0:13        Color: direct index for structure (temp 4-component vector of float)
+0:13          'psout' (temp structure{temp 4-component vector of float Color})
+0:13          Constant:
+0:13            0 (const int)
+0:13        Constant:
+0:13          0.000000
+0:13          0.000000
+0:13          0.000000
+0:13          0.000000
+0:14      Sequence
+0:14        Sequence
+0:14          move second child to first child (temp 4-component vector of float)
+0:?             'Color' (layout(location=0 ) out 4-component vector of float)
+0:14            Color: direct index for structure (temp 4-component vector of float)
+0:14              'psout' (temp structure{temp 4-component vector of float Color})
+0:14              Constant:
+0:14                0 (const int)
+0:14        Branch: Return
+0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int also_not_the_entry_point})
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:7  Function Definition: not_the_entry_point( (temp void)
+0:7    Function Parameters: 
+0:11  Function Definition: main_in_spv( (temp structure{temp 4-component vector of float Color})
+0:11    Function Parameters: 
+0:?     Sequence
+0:13      move second child to first child (temp 4-component vector of float)
+0:13        Color: direct index for structure (temp 4-component vector of float)
+0:13          'psout' (temp structure{temp 4-component vector of float Color})
+0:13          Constant:
+0:13            0 (const int)
+0:13        Constant:
+0:13          0.000000
+0:13          0.000000
+0:13          0.000000
+0:13          0.000000
+0:14      Sequence
+0:14        Sequence
+0:14          move second child to first child (temp 4-component vector of float)
+0:?             'Color' (layout(location=0 ) out 4-component vector of float)
+0:14            Color: direct index for structure (temp 4-component vector of float)
+0:14              'psout' (temp structure{temp 4-component vector of float Color})
+0:14              Constant:
+0:14                0 (const int)
+0:14        Branch: Return
+0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int also_not_the_entry_point})
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 27
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main_in_spv" 20
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main_in_spv"
+                              Name 6  "not_the_entry_point("
+                              Name 10  "PS_OUTPUT"
+                              MemberName 10(PS_OUTPUT) 0  "Color"
+                              Name 12  "psout"
+                              Name 20  "Color"
+                              Name 24  "$Global"
+                              MemberName 24($Global) 0  "also_not_the_entry_point"
+                              Name 26  ""
+                              Decorate 20(Color) Location 0
+                              MemberDecorate 24($Global) 0 Offset 0
+                              Decorate 24($Global) Block
+                              Decorate 26 DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               8:             TypeFloat 32
+               9:             TypeVector 8(float) 4
+   10(PS_OUTPUT):             TypeStruct 9(fvec4)
+              11:             TypePointer Function 10(PS_OUTPUT)
+              13:             TypeInt 32 1
+              14:     13(int) Constant 0
+              15:    8(float) Constant 0
+              16:    9(fvec4) ConstantComposite 15 15 15 15
+              17:             TypePointer Function 9(fvec4)
+              19:             TypePointer Output 9(fvec4)
+       20(Color):     19(ptr) Variable Output
+     24($Global):             TypeStruct 13(int)
+              25:             TypePointer Uniform 24($Global)
+              26:     25(ptr) Variable Uniform
+  4(main_in_spv):           2 Function None 3
+               5:             Label
+       12(psout):     11(ptr) Variable Function
+              18:     17(ptr) AccessChain 12(psout) 14
+                              Store 18 16
+              21:     17(ptr) AccessChain 12(psout) 14
+              22:    9(fvec4) Load 21
+                              Store 20(Color) 22
+                              Return
+                              FunctionEnd
+6(not_the_entry_point():           2 Function None 3
+               7:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.intrinsics.frag.out b/Test/baseResults/hlsl.intrinsics.frag.out
index 8a1935e..5def966 100644
--- a/Test/baseResults/hlsl.intrinsics.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.frag.out
@@ -92,11 +92,11 @@
 0:35          hyp. cosine (temp float)
 0:35            'inF0' (in float)
 0:36      Sequence
-0:36        move second child to first child (temp uint)
-0:36          'r016' (temp uint)
-0:36          bitCount (temp uint)
+0:36        move second child to first child (temp int)
+0:36          'r016' (temp int)
+0:36          bitCount (temp int)
 0:36            Constant:
-0:36              7 (const uint)
+0:36              7 (const int)
 0:37      Sequence
 0:37        move second child to first child (temp float)
 0:37          'r017' (temp float)
@@ -257,9 +257,10 @@
 0:69      Sequence
 0:69        move second child to first child (temp uint)
 0:69          'r048' (temp uint)
-0:69          bitFieldReverse (temp uint)
-0:69            Constant:
-0:69              2 (const uint)
+0:69          Convert int to uint (temp uint)
+0:69            bitFieldReverse (temp int)
+0:69              Constant:
+0:69                2 (const int)
 0:70      Sequence
 0:70        move second child to first child (temp float)
 0:70          'r049' (temp float)
@@ -440,12 +441,12 @@
 0:113          hyp. cosine (temp 2-component vector of float)
 0:113            'inF0' (in 2-component vector of float)
 0:114      Sequence
-0:114        move second child to first child (temp 2-component vector of uint)
-0:114          'r016' (temp 2-component vector of uint)
-0:?           bitCount (temp 2-component vector of uint)
+0:114        move second child to first child (temp 2-component vector of int)
+0:114          'r016' (temp 2-component vector of int)
+0:?           bitCount (temp 2-component vector of int)
 0:?             Constant:
-0:?               7 (const uint)
-0:?               3 (const uint)
+0:?               7 (const int)
+0:?               3 (const int)
 0:115      Sequence
 0:115        move second child to first child (temp 2-component vector of float)
 0:115          'r017' (temp 2-component vector of float)
@@ -2893,11 +2894,11 @@
 0:35          hyp. cosine (temp float)
 0:35            'inF0' (in float)
 0:36      Sequence
-0:36        move second child to first child (temp uint)
-0:36          'r016' (temp uint)
-0:36          bitCount (temp uint)
+0:36        move second child to first child (temp int)
+0:36          'r016' (temp int)
+0:36          bitCount (temp int)
 0:36            Constant:
-0:36              7 (const uint)
+0:36              7 (const int)
 0:37      Sequence
 0:37        move second child to first child (temp float)
 0:37          'r017' (temp float)
@@ -3058,9 +3059,10 @@
 0:69      Sequence
 0:69        move second child to first child (temp uint)
 0:69          'r048' (temp uint)
-0:69          bitFieldReverse (temp uint)
-0:69            Constant:
-0:69              2 (const uint)
+0:69          Convert int to uint (temp uint)
+0:69            bitFieldReverse (temp int)
+0:69              Constant:
+0:69                2 (const int)
 0:70      Sequence
 0:70        move second child to first child (temp float)
 0:70          'r049' (temp float)
@@ -3241,12 +3243,12 @@
 0:113          hyp. cosine (temp 2-component vector of float)
 0:113            'inF0' (in 2-component vector of float)
 0:114      Sequence
-0:114        move second child to first child (temp 2-component vector of uint)
-0:114          'r016' (temp 2-component vector of uint)
-0:?           bitCount (temp 2-component vector of uint)
+0:114        move second child to first child (temp 2-component vector of int)
+0:114          'r016' (temp 2-component vector of int)
+0:?           bitCount (temp 2-component vector of int)
 0:?             Constant:
-0:?               7 (const uint)
-0:?               3 (const uint)
+0:?               7 (const int)
+0:?               3 (const int)
 0:115      Sequence
 0:115        move second child to first child (temp 2-component vector of float)
 0:115          'r017' (temp 2-component vector of float)
@@ -5599,13 +5601,13 @@
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 1825
+// Id's are bound by 1828
 
                               Capability Shader
                               Capability DerivativeControl
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 1805
+                              EntryPoint Fragment 4  "main" 1808
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 16  "PixelShaderFunctionS(f1;f1;f1;u1;u1;"
@@ -5704,26 +5706,26 @@
                               Name 210  "r027"
                               Name 213  "r028"
                               Name 216  "r029"
-                              Name 220  "r030"
-                              Name 223  "r031"
-                              Name 226  "r033"
-                              Name 230  "r034"
-                              Name 233  "r035"
-                              Name 235  "ResType"
-                              Name 239  "r036"
-                              Name 242  "r037"
-                              Name 245  "r038"
-                              Name 248  "r039"
-                              Name 252  "r039a"
-                              Name 257  "r040"
-                              Name 260  "r041"
-                              Name 265  "r042"
-                              Name 268  "r043"
-                              Name 272  "r044"
-                              Name 276  "r045"
-                              Name 280  "r046"
-                              Name 283  "r047"
-                              Name 287  "r048"
+                              Name 219  "r030"
+                              Name 222  "r031"
+                              Name 225  "r033"
+                              Name 229  "r034"
+                              Name 232  "r035"
+                              Name 234  "ResType"
+                              Name 238  "r036"
+                              Name 241  "r037"
+                              Name 244  "r038"
+                              Name 247  "r039"
+                              Name 251  "r039a"
+                              Name 256  "r040"
+                              Name 259  "r041"
+                              Name 264  "r042"
+                              Name 267  "r043"
+                              Name 271  "r044"
+                              Name 275  "r045"
+                              Name 279  "r046"
+                              Name 282  "r047"
+                              Name 286  "r048"
                               Name 290  "r049"
                               Name 293  "r050"
                               Name 296  "r051"
@@ -5764,375 +5766,375 @@
                               Name 428  "r029"
                               Name 431  "r030"
                               Name 436  "r031"
-                              Name 440  "r032"
-                              Name 442  "r033"
-                              Name 445  "r035"
-                              Name 449  "r036"
-                              Name 452  "r037"
-                              Name 454  "ResType"
-                              Name 458  "r038"
-                              Name 462  "r039"
-                              Name 465  "r040"
-                              Name 468  "r041"
-                              Name 472  "r039a"
-                              Name 477  "r042"
-                              Name 480  "r043"
-                              Name 483  "r044"
-                              Name 487  "r045"
-                              Name 490  "r046"
-                              Name 494  "r047"
-                              Name 498  "r048"
-                              Name 501  "r049"
-                              Name 505  "r050"
-                              Name 508  "r051"
-                              Name 512  "r052"
-                              Name 516  "r053"
-                              Name 521  "r054"
-                              Name 525  "r055"
-                              Name 528  "r056"
-                              Name 531  "r057"
-                              Name 536  "r058"
-                              Name 539  "r059"
-                              Name 546  "r060"
-                              Name 549  "r061"
-                              Name 554  "r062"
-                              Name 557  "r063"
-                              Name 561  "r064"
-                              Name 564  "r065"
-                              Name 567  "r066"
-                              Name 573  "r000"
-                              Name 576  "r001"
-                              Name 579  "r002"
-                              Name 582  "r003"
-                              Name 585  "r004"
-                              Name 590  "r005"
-                              Name 593  "r006"
-                              Name 596  "r007"
-                              Name 599  "r009"
-                              Name 602  "r010"
-                              Name 606  "r011"
-                              Name 609  "r012"
-                              Name 622  "r013"
-                              Name 625  "r014"
-                              Name 628  "r015"
-                              Name 632  "r016"
-                              Name 636  "r017"
-                              Name 639  "r018"
-                              Name 642  "r019"
-                              Name 645  "r020"
-                              Name 648  "r021"
-                              Name 651  "r022"
-                              Name 654  "r023"
-                              Name 657  "r024"
-                              Name 661  "r025"
-                              Name 665  "r029"
-                              Name 668  "r030"
-                              Name 671  "r031"
-                              Name 676  "r032"
-                              Name 680  "r033"
-                              Name 682  "r034"
-                              Name 685  "r036"
-                              Name 689  "r037"
-                              Name 692  "r038"
-                              Name 694  "ResType"
-                              Name 698  "r039"
-                              Name 702  "r040"
-                              Name 705  "r041"
-                              Name 708  "r042"
-                              Name 712  "r039a"
-                              Name 717  "r039b"
-                              Name 723  "r043"
-                              Name 726  "r044"
-                              Name 729  "r045"
-                              Name 733  "r046"
-                              Name 736  "r047"
-                              Name 740  "r048"
-                              Name 744  "r049"
-                              Name 747  "r050"
-                              Name 751  "r051"
-                              Name 754  "r052"
-                              Name 758  "r053"
-                              Name 762  "r054"
-                              Name 766  "r055"
-                              Name 769  "r056"
-                              Name 772  "r057"
-                              Name 775  "r058"
-                              Name 780  "r059"
-                              Name 783  "r060"
-                              Name 790  "r061"
-                              Name 793  "r062"
-                              Name 798  "r063"
-                              Name 801  "r064"
-                              Name 805  "r065"
-                              Name 808  "r066"
-                              Name 811  "r067"
-                              Name 818  "r000"
-                              Name 821  "r001"
-                              Name 824  "r002"
-                              Name 827  "r003"
-                              Name 830  "r004"
-                              Name 835  "r005"
-                              Name 838  "r006"
-                              Name 841  "r007"
-                              Name 844  "r009"
-                              Name 847  "r010"
-                              Name 851  "r011"
-                              Name 854  "r012"
-                              Name 867  "r013"
-                              Name 870  "r014"
-                              Name 873  "r015"
-                              Name 876  "r016"
-                              Name 879  "r017"
-                              Name 882  "r018"
-                              Name 885  "r019"
-                              Name 888  "r020"
-                              Name 891  "r021"
-                              Name 894  "r022"
-                              Name 897  "r023"
-                              Name 901  "r024"
-                              Name 905  "r025"
-                              Name 916  "r029"
-                              Name 919  "r030"
-                              Name 922  "r031"
-                              Name 927  "r032"
-                              Name 932  "r033"
-                              Name 934  "r034"
-                              Name 937  "r036"
-                              Name 941  "r037"
-                              Name 944  "r038"
-                              Name 946  "ResType"
-                              Name 950  "r039"
-                              Name 954  "r040"
-                              Name 957  "r041"
-                              Name 960  "r042"
-                              Name 964  "r039a"
-                              Name 969  "r043"
-                              Name 972  "r044"
-                              Name 975  "r045"
-                              Name 979  "r046"
-                              Name 982  "r047"
-                              Name 986  "r048"
-                              Name 990  "r049"
-                              Name 993  "r050"
-                              Name 997  "r051"
-                              Name 1000  "r052"
-                              Name 1004  "r053"
-                              Name 1008  "r054"
-                              Name 1012  "r055"
-                              Name 1015  "r056"
-                              Name 1018  "r057"
-                              Name 1021  "r058"
-                              Name 1026  "r059"
-                              Name 1029  "r060"
-                              Name 1036  "r061"
-                              Name 1039  "r062"
-                              Name 1044  "r063"
-                              Name 1047  "r064"
-                              Name 1051  "r065"
-                              Name 1054  "r066"
-                              Name 1057  "r067"
-                              Name 1064  "r000"
-                              Name 1067  "r001"
-                              Name 1072  "r003"
-                              Name 1075  "r004"
-                              Name 1078  "r005"
-                              Name 1081  "r006"
-                              Name 1085  "r007"
-                              Name 1096  "r008"
-                              Name 1101  "r009"
-                              Name 1104  "r010"
-                              Name 1107  "r011"
-                              Name 1110  "r012"
-                              Name 1113  "r013"
-                              Name 1116  "r014"
-                              Name 1119  "r015"
-                              Name 1122  "r016"
-                              Name 1125  "r017"
-                              Name 1128  "r018"
-                              Name 1131  "r019"
-                              Name 1134  "R020"
-                              Name 1137  "r021"
-                              Name 1140  "r022"
-                              Name 1150  "r023"
-                              Name 1153  "r024"
-                              Name 1155  "ResType"
-                              Name 1159  "r025"
-                              Name 1162  "r026"
-                              Name 1166  "r026a"
-                              Name 1171  "r027"
-                              Name 1174  "r028"
-                              Name 1178  "r029"
-                              Name 1181  "r030"
-                              Name 1185  "r031"
-                              Name 1189  "r032"
-                              Name 1193  "r033"
-                              Name 1196  "r034"
-                              Name 1199  "r035"
-                              Name 1202  "r036"
-                              Name 1207  "r037"
-                              Name 1210  "r038"
-                              Name 1217  "r039"
-                              Name 1220  "r049"
-                              Name 1225  "r041"
-                              Name 1228  "r042"
-                              Name 1232  "r043"
-                              Name 1235  "r044"
-                              Name 1240  "r046"
-                              Name 1247  "r000"
-                              Name 1250  "r001"
-                              Name 1255  "r003"
-                              Name 1258  "r004"
-                              Name 1261  "r005"
-                              Name 1264  "r006"
-                              Name 1268  "r007"
-                              Name 1279  "r008"
-                              Name 1284  "r009"
-                              Name 1287  "r010"
-                              Name 1290  "r011"
-                              Name 1293  "r012"
-                              Name 1296  "r013"
-                              Name 1299  "r014"
-                              Name 1302  "r015"
-                              Name 1305  "r016"
-                              Name 1308  "r017"
-                              Name 1311  "r018"
-                              Name 1314  "r019"
-                              Name 1317  "R020"
-                              Name 1320  "r021"
-                              Name 1323  "r022"
-                              Name 1336  "r023"
-                              Name 1339  "r024"
-                              Name 1341  "ResType"
-                              Name 1345  "r025"
-                              Name 1348  "r026"
-                              Name 1352  "r026a"
-                              Name 1357  "r027"
-                              Name 1360  "r028"
-                              Name 1364  "r029"
-                              Name 1367  "r030"
-                              Name 1371  "r031"
-                              Name 1375  "r032"
-                              Name 1379  "r033"
-                              Name 1382  "r034"
-                              Name 1385  "r035"
-                              Name 1388  "r036"
-                              Name 1393  "r037"
-                              Name 1396  "r038"
-                              Name 1403  "r039"
-                              Name 1406  "r049"
-                              Name 1411  "r041"
-                              Name 1414  "r042"
-                              Name 1418  "r043"
-                              Name 1421  "r044"
-                              Name 1426  "r046"
-                              Name 1433  "r000"
-                              Name 1436  "r001"
-                              Name 1441  "r003"
-                              Name 1444  "r004"
-                              Name 1447  "r005"
-                              Name 1450  "r006"
-                              Name 1454  "r007"
-                              Name 1465  "r008"
-                              Name 1470  "r009"
-                              Name 1473  "r010"
-                              Name 1476  "r011"
-                              Name 1479  "r012"
-                              Name 1482  "r013"
-                              Name 1485  "r014"
-                              Name 1488  "r015"
-                              Name 1491  "r016"
-                              Name 1494  "r017"
-                              Name 1497  "r018"
-                              Name 1500  "r019"
-                              Name 1503  "R020"
-                              Name 1506  "r021"
-                              Name 1509  "r022"
-                              Name 1525  "r023"
-                              Name 1528  "r024"
-                              Name 1530  "ResType"
-                              Name 1534  "r025"
-                              Name 1537  "r026"
-                              Name 1541  "r026a"
-                              Name 1546  "r027"
-                              Name 1549  "r028"
-                              Name 1553  "r029"
-                              Name 1556  "r030"
-                              Name 1560  "r031"
-                              Name 1564  "r032"
-                              Name 1568  "r033"
-                              Name 1571  "r034"
-                              Name 1574  "r035"
-                              Name 1577  "r036"
-                              Name 1582  "r037"
-                              Name 1585  "r038"
-                              Name 1592  "r039"
-                              Name 1595  "r049"
-                              Name 1600  "r041"
-                              Name 1603  "r042"
-                              Name 1607  "r043"
-                              Name 1610  "r044"
-                              Name 1615  "r046"
-                              Name 1622  "r0"
-                              Name 1626  "r1"
-                              Name 1630  "r2"
-                              Name 1634  "r3"
-                              Name 1638  "r4"
-                              Name 1642  "r5"
-                              Name 1646  "r6"
-                              Name 1650  "r7"
-                              Name 1654  "r8"
-                              Name 1658  "r0"
-                              Name 1662  "r1"
-                              Name 1666  "r2"
-                              Name 1670  "r3"
-                              Name 1674  "r4"
-                              Name 1678  "r5"
-                              Name 1682  "r6"
-                              Name 1686  "r7"
-                              Name 1690  "r8"
-                              Name 1694  "r0"
-                              Name 1698  "r1"
-                              Name 1702  "r2"
-                              Name 1706  "r3"
-                              Name 1710  "r4"
-                              Name 1714  "r5"
-                              Name 1718  "r6"
-                              Name 1722  "r7"
-                              Name 1726  "r8"
-                              Name 1730  "r00"
-                              Name 1734  "r01"
-                              Name 1738  "r02"
-                              Name 1742  "r03"
-                              Name 1746  "r04"
-                              Name 1750  "r05"
-                              Name 1754  "r06"
-                              Name 1758  "r07"
-                              Name 1762  "r08"
-                              Name 1766  "r09"
-                              Name 1770  "r10"
-                              Name 1774  "r11"
-                              Name 1778  "r12"
-                              Name 1782  "r13"
-                              Name 1786  "r14"
-                              Name 1790  "r15"
-                              Name 1794  "r16"
-                              Name 1798  "PS_OUTPUT"
-                              MemberName 1798(PS_OUTPUT) 0  "color"
-                              Name 1800  "ps_output"
-                              Name 1805  "color"
-                              Name 1810  "gs_ua"
-                              Name 1811  "gs_ub"
-                              Name 1812  "gs_uc"
-                              Name 1814  "gs_ua2"
-                              Name 1815  "gs_ub2"
-                              Name 1816  "gs_uc2"
-                              Name 1818  "gs_ua3"
-                              Name 1819  "gs_ub3"
-                              Name 1820  "gs_uc3"
-                              Name 1822  "gs_ua4"
-                              Name 1823  "gs_ub4"
-                              Name 1824  "gs_uc4"
-                              Decorate 1805(color) Location 0
+                              Name 441  "r032"
+                              Name 443  "r033"
+                              Name 446  "r035"
+                              Name 450  "r036"
+                              Name 453  "r037"
+                              Name 455  "ResType"
+                              Name 459  "r038"
+                              Name 463  "r039"
+                              Name 466  "r040"
+                              Name 469  "r041"
+                              Name 473  "r039a"
+                              Name 478  "r042"
+                              Name 481  "r043"
+                              Name 484  "r044"
+                              Name 488  "r045"
+                              Name 491  "r046"
+                              Name 495  "r047"
+                              Name 499  "r048"
+                              Name 502  "r049"
+                              Name 506  "r050"
+                              Name 509  "r051"
+                              Name 513  "r052"
+                              Name 517  "r053"
+                              Name 522  "r054"
+                              Name 527  "r055"
+                              Name 530  "r056"
+                              Name 533  "r057"
+                              Name 538  "r058"
+                              Name 541  "r059"
+                              Name 548  "r060"
+                              Name 551  "r061"
+                              Name 556  "r062"
+                              Name 559  "r063"
+                              Name 563  "r064"
+                              Name 566  "r065"
+                              Name 569  "r066"
+                              Name 575  "r000"
+                              Name 578  "r001"
+                              Name 581  "r002"
+                              Name 584  "r003"
+                              Name 587  "r004"
+                              Name 592  "r005"
+                              Name 595  "r006"
+                              Name 598  "r007"
+                              Name 601  "r009"
+                              Name 604  "r010"
+                              Name 608  "r011"
+                              Name 611  "r012"
+                              Name 624  "r013"
+                              Name 627  "r014"
+                              Name 630  "r015"
+                              Name 635  "r016"
+                              Name 639  "r017"
+                              Name 642  "r018"
+                              Name 645  "r019"
+                              Name 648  "r020"
+                              Name 651  "r021"
+                              Name 654  "r022"
+                              Name 657  "r023"
+                              Name 660  "r024"
+                              Name 664  "r025"
+                              Name 668  "r029"
+                              Name 671  "r030"
+                              Name 674  "r031"
+                              Name 679  "r032"
+                              Name 683  "r033"
+                              Name 685  "r034"
+                              Name 688  "r036"
+                              Name 692  "r037"
+                              Name 695  "r038"
+                              Name 697  "ResType"
+                              Name 701  "r039"
+                              Name 705  "r040"
+                              Name 708  "r041"
+                              Name 711  "r042"
+                              Name 715  "r039a"
+                              Name 720  "r039b"
+                              Name 726  "r043"
+                              Name 729  "r044"
+                              Name 732  "r045"
+                              Name 736  "r046"
+                              Name 739  "r047"
+                              Name 743  "r048"
+                              Name 747  "r049"
+                              Name 750  "r050"
+                              Name 754  "r051"
+                              Name 757  "r052"
+                              Name 761  "r053"
+                              Name 765  "r054"
+                              Name 769  "r055"
+                              Name 772  "r056"
+                              Name 775  "r057"
+                              Name 778  "r058"
+                              Name 783  "r059"
+                              Name 786  "r060"
+                              Name 793  "r061"
+                              Name 796  "r062"
+                              Name 801  "r063"
+                              Name 804  "r064"
+                              Name 808  "r065"
+                              Name 811  "r066"
+                              Name 814  "r067"
+                              Name 821  "r000"
+                              Name 824  "r001"
+                              Name 827  "r002"
+                              Name 830  "r003"
+                              Name 833  "r004"
+                              Name 838  "r005"
+                              Name 841  "r006"
+                              Name 844  "r007"
+                              Name 847  "r009"
+                              Name 850  "r010"
+                              Name 854  "r011"
+                              Name 857  "r012"
+                              Name 870  "r013"
+                              Name 873  "r014"
+                              Name 876  "r015"
+                              Name 879  "r016"
+                              Name 882  "r017"
+                              Name 885  "r018"
+                              Name 888  "r019"
+                              Name 891  "r020"
+                              Name 894  "r021"
+                              Name 897  "r022"
+                              Name 900  "r023"
+                              Name 904  "r024"
+                              Name 908  "r025"
+                              Name 919  "r029"
+                              Name 922  "r030"
+                              Name 925  "r031"
+                              Name 930  "r032"
+                              Name 935  "r033"
+                              Name 937  "r034"
+                              Name 940  "r036"
+                              Name 944  "r037"
+                              Name 947  "r038"
+                              Name 949  "ResType"
+                              Name 953  "r039"
+                              Name 957  "r040"
+                              Name 960  "r041"
+                              Name 963  "r042"
+                              Name 967  "r039a"
+                              Name 972  "r043"
+                              Name 975  "r044"
+                              Name 978  "r045"
+                              Name 982  "r046"
+                              Name 985  "r047"
+                              Name 989  "r048"
+                              Name 993  "r049"
+                              Name 996  "r050"
+                              Name 1000  "r051"
+                              Name 1003  "r052"
+                              Name 1007  "r053"
+                              Name 1011  "r054"
+                              Name 1015  "r055"
+                              Name 1018  "r056"
+                              Name 1021  "r057"
+                              Name 1024  "r058"
+                              Name 1029  "r059"
+                              Name 1032  "r060"
+                              Name 1039  "r061"
+                              Name 1042  "r062"
+                              Name 1047  "r063"
+                              Name 1050  "r064"
+                              Name 1054  "r065"
+                              Name 1057  "r066"
+                              Name 1060  "r067"
+                              Name 1067  "r000"
+                              Name 1070  "r001"
+                              Name 1075  "r003"
+                              Name 1078  "r004"
+                              Name 1081  "r005"
+                              Name 1084  "r006"
+                              Name 1088  "r007"
+                              Name 1099  "r008"
+                              Name 1104  "r009"
+                              Name 1107  "r010"
+                              Name 1110  "r011"
+                              Name 1113  "r012"
+                              Name 1116  "r013"
+                              Name 1119  "r014"
+                              Name 1122  "r015"
+                              Name 1125  "r016"
+                              Name 1128  "r017"
+                              Name 1131  "r018"
+                              Name 1134  "r019"
+                              Name 1137  "R020"
+                              Name 1140  "r021"
+                              Name 1143  "r022"
+                              Name 1153  "r023"
+                              Name 1156  "r024"
+                              Name 1158  "ResType"
+                              Name 1162  "r025"
+                              Name 1165  "r026"
+                              Name 1169  "r026a"
+                              Name 1174  "r027"
+                              Name 1177  "r028"
+                              Name 1181  "r029"
+                              Name 1184  "r030"
+                              Name 1188  "r031"
+                              Name 1192  "r032"
+                              Name 1196  "r033"
+                              Name 1199  "r034"
+                              Name 1202  "r035"
+                              Name 1205  "r036"
+                              Name 1210  "r037"
+                              Name 1213  "r038"
+                              Name 1220  "r039"
+                              Name 1223  "r049"
+                              Name 1228  "r041"
+                              Name 1231  "r042"
+                              Name 1235  "r043"
+                              Name 1238  "r044"
+                              Name 1243  "r046"
+                              Name 1250  "r000"
+                              Name 1253  "r001"
+                              Name 1258  "r003"
+                              Name 1261  "r004"
+                              Name 1264  "r005"
+                              Name 1267  "r006"
+                              Name 1271  "r007"
+                              Name 1282  "r008"
+                              Name 1287  "r009"
+                              Name 1290  "r010"
+                              Name 1293  "r011"
+                              Name 1296  "r012"
+                              Name 1299  "r013"
+                              Name 1302  "r014"
+                              Name 1305  "r015"
+                              Name 1308  "r016"
+                              Name 1311  "r017"
+                              Name 1314  "r018"
+                              Name 1317  "r019"
+                              Name 1320  "R020"
+                              Name 1323  "r021"
+                              Name 1326  "r022"
+                              Name 1339  "r023"
+                              Name 1342  "r024"
+                              Name 1344  "ResType"
+                              Name 1348  "r025"
+                              Name 1351  "r026"
+                              Name 1355  "r026a"
+                              Name 1360  "r027"
+                              Name 1363  "r028"
+                              Name 1367  "r029"
+                              Name 1370  "r030"
+                              Name 1374  "r031"
+                              Name 1378  "r032"
+                              Name 1382  "r033"
+                              Name 1385  "r034"
+                              Name 1388  "r035"
+                              Name 1391  "r036"
+                              Name 1396  "r037"
+                              Name 1399  "r038"
+                              Name 1406  "r039"
+                              Name 1409  "r049"
+                              Name 1414  "r041"
+                              Name 1417  "r042"
+                              Name 1421  "r043"
+                              Name 1424  "r044"
+                              Name 1429  "r046"
+                              Name 1436  "r000"
+                              Name 1439  "r001"
+                              Name 1444  "r003"
+                              Name 1447  "r004"
+                              Name 1450  "r005"
+                              Name 1453  "r006"
+                              Name 1457  "r007"
+                              Name 1468  "r008"
+                              Name 1473  "r009"
+                              Name 1476  "r010"
+                              Name 1479  "r011"
+                              Name 1482  "r012"
+                              Name 1485  "r013"
+                              Name 1488  "r014"
+                              Name 1491  "r015"
+                              Name 1494  "r016"
+                              Name 1497  "r017"
+                              Name 1500  "r018"
+                              Name 1503  "r019"
+                              Name 1506  "R020"
+                              Name 1509  "r021"
+                              Name 1512  "r022"
+                              Name 1528  "r023"
+                              Name 1531  "r024"
+                              Name 1533  "ResType"
+                              Name 1537  "r025"
+                              Name 1540  "r026"
+                              Name 1544  "r026a"
+                              Name 1549  "r027"
+                              Name 1552  "r028"
+                              Name 1556  "r029"
+                              Name 1559  "r030"
+                              Name 1563  "r031"
+                              Name 1567  "r032"
+                              Name 1571  "r033"
+                              Name 1574  "r034"
+                              Name 1577  "r035"
+                              Name 1580  "r036"
+                              Name 1585  "r037"
+                              Name 1588  "r038"
+                              Name 1595  "r039"
+                              Name 1598  "r049"
+                              Name 1603  "r041"
+                              Name 1606  "r042"
+                              Name 1610  "r043"
+                              Name 1613  "r044"
+                              Name 1618  "r046"
+                              Name 1625  "r0"
+                              Name 1629  "r1"
+                              Name 1633  "r2"
+                              Name 1637  "r3"
+                              Name 1641  "r4"
+                              Name 1645  "r5"
+                              Name 1649  "r6"
+                              Name 1653  "r7"
+                              Name 1657  "r8"
+                              Name 1661  "r0"
+                              Name 1665  "r1"
+                              Name 1669  "r2"
+                              Name 1673  "r3"
+                              Name 1677  "r4"
+                              Name 1681  "r5"
+                              Name 1685  "r6"
+                              Name 1689  "r7"
+                              Name 1693  "r8"
+                              Name 1697  "r0"
+                              Name 1701  "r1"
+                              Name 1705  "r2"
+                              Name 1709  "r3"
+                              Name 1713  "r4"
+                              Name 1717  "r5"
+                              Name 1721  "r6"
+                              Name 1725  "r7"
+                              Name 1729  "r8"
+                              Name 1733  "r00"
+                              Name 1737  "r01"
+                              Name 1741  "r02"
+                              Name 1745  "r03"
+                              Name 1749  "r04"
+                              Name 1753  "r05"
+                              Name 1757  "r06"
+                              Name 1761  "r07"
+                              Name 1765  "r08"
+                              Name 1769  "r09"
+                              Name 1773  "r10"
+                              Name 1777  "r11"
+                              Name 1781  "r12"
+                              Name 1785  "r13"
+                              Name 1789  "r14"
+                              Name 1793  "r15"
+                              Name 1797  "r16"
+                              Name 1801  "PS_OUTPUT"
+                              MemberName 1801(PS_OUTPUT) 0  "color"
+                              Name 1803  "ps_output"
+                              Name 1808  "color"
+                              Name 1813  "gs_ua"
+                              Name 1814  "gs_ub"
+                              Name 1815  "gs_uc"
+                              Name 1817  "gs_ua2"
+                              Name 1818  "gs_ub2"
+                              Name 1819  "gs_uc2"
+                              Name 1821  "gs_ua3"
+                              Name 1822  "gs_ub3"
+                              Name 1823  "gs_uc3"
+                              Name 1825  "gs_ua4"
+                              Name 1826  "gs_ub4"
+                              Name 1827  "gs_uc4"
+                              Decorate 1808(color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -6182,98 +6184,100 @@
              148:             TypeInt 32 1
              149:             TypePointer Function 148(int)
              175:    6(float) Constant 0
-             187:      8(int) Constant 7
-             217:    148(int) Constant 7
-    235(ResType):             TypeStruct 6(float) 148(int)
-             263:    6(float) Constant 1050288283
-             284:    6(float) Constant 1065353216
-             288:      8(int) Constant 2
+             187:    148(int) Constant 7
+    234(ResType):             TypeStruct 6(float) 148(int)
+             262:    6(float) Constant 1050288283
+             283:    6(float) Constant 1065353216
+             287:    148(int) Constant 2
              352:             TypeVector 148(int) 2
              353:             TypePointer Function 352(ivec2)
              379:   24(fvec2) ConstantComposite 175 175
              380:             TypeVector 131(bool) 2
-             393:      8(int) Constant 3
-             394:   26(ivec2) ConstantComposite 187 393
-             437:      8(int) Constant 8
-             438:   26(ivec2) ConstantComposite 187 437
-    454(ResType):             TypeStruct 24(fvec2) 352(ivec2)
-             461:             TypePointer Function 380(bvec2)
-             519:    6(float) Constant 1073741824
-             522:      8(int) Constant 1
-             523:   26(ivec2) ConstantComposite 522 288
-             570:   24(fvec2) ConstantComposite 284 519
-             588:             TypeVector 148(int) 3
-             589:             TypePointer Function 588(ivec3)
-             615:   36(fvec3) ConstantComposite 175 175 175
-             616:             TypeVector 131(bool) 3
-             629:      8(int) Constant 5
-             630:   38(ivec3) ConstantComposite 187 393 629
-             677:      8(int) Constant 4
-             678:   38(ivec3) ConstantComposite 288 393 677
-    694(ResType):             TypeStruct 36(fvec3) 588(ivec3)
-             701:             TypePointer Function 616(bvec3)
-             720:    6(float) Constant 1050253722
-             767:   38(ivec3) ConstantComposite 522 288 393
-             814:    6(float) Constant 1077936128
-             815:   36(fvec3) ConstantComposite 284 519 814
-             833:             TypeVector 148(int) 4
-             834:             TypePointer Function 833(ivec4)
-             860:   48(fvec4) ConstantComposite 175 175 175 175
-             861:             TypeVector 131(bool) 4
-             874:   50(ivec4) ConstantComposite 187 393 629 288
-             928:      8(int) Constant 9
-             929:      8(int) Constant 10
-             930:   50(ivec4) ConstantComposite 187 437 928 929
-    946(ResType):             TypeStruct 48(fvec4) 833(ivec4)
-             953:             TypePointer Function 861(bvec4)
-            1013:   50(ivec4) ConstantComposite 522 288 393 677
-            1060:    6(float) Constant 1082130432
-            1061:   48(fvec4) ConstantComposite 284 519 814 1060
-            1089:          60 ConstantComposite 379 379
-            1090:             TypeMatrix 380(bvec2) 2
-   1155(ResType):             TypeStruct 60 352(ivec2)
-            1243:   24(fvec2) ConstantComposite 519 519
-            1244:          60 ConstantComposite 1243 1243
-            1272:          68 ConstantComposite 615 615 615
-            1273:             TypeMatrix 616(bvec3) 3
-   1341(ResType):             TypeStruct 68 588(ivec3)
-            1429:   36(fvec3) ConstantComposite 814 814 814
-            1430:          68 ConstantComposite 1429 1429 1429
-            1458:          76 ConstantComposite 860 860 860 860
-            1459:             TypeMatrix 861(bvec4) 4
-   1530(ResType):             TypeStruct 76 833(ivec4)
-            1618:   48(fvec4) ConstantComposite 1060 1060 1060 1060
-            1619:          76 ConstantComposite 1618 1618 1618 1618
- 1798(PS_OUTPUT):             TypeStruct 48(fvec4)
-            1799:             TypePointer Function 1798(PS_OUTPUT)
-            1801:    148(int) Constant 0
-            1802:   48(fvec4) ConstantComposite 284 284 284 284
-            1804:             TypePointer Output 48(fvec4)
-     1805(color):   1804(ptr) Variable Output
-            1809:             TypePointer Workgroup 8(int)
-     1810(gs_ua):   1809(ptr) Variable Workgroup
-     1811(gs_ub):   1809(ptr) Variable Workgroup
-     1812(gs_uc):   1809(ptr) Variable Workgroup
-            1813:             TypePointer Workgroup 26(ivec2)
-    1814(gs_ua2):   1813(ptr) Variable Workgroup
-    1815(gs_ub2):   1813(ptr) Variable Workgroup
-    1816(gs_uc2):   1813(ptr) Variable Workgroup
-            1817:             TypePointer Workgroup 38(ivec3)
-    1818(gs_ua3):   1817(ptr) Variable Workgroup
-    1819(gs_ub3):   1817(ptr) Variable Workgroup
-    1820(gs_uc3):   1817(ptr) Variable Workgroup
-            1821:             TypePointer Workgroup 50(ivec4)
-    1822(gs_ua4):   1821(ptr) Variable Workgroup
-    1823(gs_ub4):   1821(ptr) Variable Workgroup
-    1824(gs_uc4):   1821(ptr) Variable Workgroup
+             393:    148(int) Constant 3
+             394:  352(ivec2) ConstantComposite 187 393
+             437:      8(int) Constant 7
+             438:      8(int) Constant 8
+             439:   26(ivec2) ConstantComposite 437 438
+    455(ResType):             TypeStruct 24(fvec2) 352(ivec2)
+             462:             TypePointer Function 380(bvec2)
+             520:    6(float) Constant 1073741824
+             523:      8(int) Constant 1
+             524:      8(int) Constant 2
+             525:   26(ivec2) ConstantComposite 523 524
+             572:   24(fvec2) ConstantComposite 283 520
+             590:             TypeVector 148(int) 3
+             591:             TypePointer Function 590(ivec3)
+             617:   36(fvec3) ConstantComposite 175 175 175
+             618:             TypeVector 131(bool) 3
+             631:      8(int) Constant 3
+             632:      8(int) Constant 5
+             633:   38(ivec3) ConstantComposite 437 631 632
+             680:      8(int) Constant 4
+             681:   38(ivec3) ConstantComposite 524 631 680
+    697(ResType):             TypeStruct 36(fvec3) 590(ivec3)
+             704:             TypePointer Function 618(bvec3)
+             723:    6(float) Constant 1050253722
+             770:   38(ivec3) ConstantComposite 523 524 631
+             817:    6(float) Constant 1077936128
+             818:   36(fvec3) ConstantComposite 283 520 817
+             836:             TypeVector 148(int) 4
+             837:             TypePointer Function 836(ivec4)
+             863:   48(fvec4) ConstantComposite 175 175 175 175
+             864:             TypeVector 131(bool) 4
+             877:   50(ivec4) ConstantComposite 437 631 632 524
+             931:      8(int) Constant 9
+             932:      8(int) Constant 10
+             933:   50(ivec4) ConstantComposite 437 438 931 932
+    949(ResType):             TypeStruct 48(fvec4) 836(ivec4)
+             956:             TypePointer Function 864(bvec4)
+            1016:   50(ivec4) ConstantComposite 523 524 631 680
+            1063:    6(float) Constant 1082130432
+            1064:   48(fvec4) ConstantComposite 283 520 817 1063
+            1092:          60 ConstantComposite 379 379
+            1093:             TypeMatrix 380(bvec2) 2
+   1158(ResType):             TypeStruct 60 352(ivec2)
+            1246:   24(fvec2) ConstantComposite 520 520
+            1247:          60 ConstantComposite 1246 1246
+            1275:          68 ConstantComposite 617 617 617
+            1276:             TypeMatrix 618(bvec3) 3
+   1344(ResType):             TypeStruct 68 590(ivec3)
+            1432:   36(fvec3) ConstantComposite 817 817 817
+            1433:          68 ConstantComposite 1432 1432 1432
+            1461:          76 ConstantComposite 863 863 863 863
+            1462:             TypeMatrix 864(bvec4) 4
+   1533(ResType):             TypeStruct 76 836(ivec4)
+            1621:   48(fvec4) ConstantComposite 1063 1063 1063 1063
+            1622:          76 ConstantComposite 1621 1621 1621 1621
+ 1801(PS_OUTPUT):             TypeStruct 48(fvec4)
+            1802:             TypePointer Function 1801(PS_OUTPUT)
+            1804:    148(int) Constant 0
+            1805:   48(fvec4) ConstantComposite 283 283 283 283
+            1807:             TypePointer Output 48(fvec4)
+     1808(color):   1807(ptr) Variable Output
+            1812:             TypePointer Workgroup 8(int)
+     1813(gs_ua):   1812(ptr) Variable Workgroup
+     1814(gs_ub):   1812(ptr) Variable Workgroup
+     1815(gs_uc):   1812(ptr) Variable Workgroup
+            1816:             TypePointer Workgroup 26(ivec2)
+    1817(gs_ua2):   1816(ptr) Variable Workgroup
+    1818(gs_ub2):   1816(ptr) Variable Workgroup
+    1819(gs_uc2):   1816(ptr) Variable Workgroup
+            1820:             TypePointer Workgroup 38(ivec3)
+    1821(gs_ua3):   1820(ptr) Variable Workgroup
+    1822(gs_ub3):   1820(ptr) Variable Workgroup
+    1823(gs_uc3):   1820(ptr) Variable Workgroup
+            1824:             TypePointer Workgroup 50(ivec4)
+    1825(gs_ua4):   1824(ptr) Variable Workgroup
+    1826(gs_ub4):   1824(ptr) Variable Workgroup
+    1827(gs_uc4):   1824(ptr) Variable Workgroup
          4(main):           2 Function None 3
                5:             Label
- 1800(ps_output):   1799(ptr) Variable Function
-            1803:     49(ptr) AccessChain 1800(ps_output) 1801
-                              Store 1803 1802
-            1806:     49(ptr) AccessChain 1800(ps_output) 1801
-            1807:   48(fvec4) Load 1806
-                              Store 1805(color) 1807
+ 1803(ps_output):   1802(ptr) Variable Function
+            1806:     49(ptr) AccessChain 1803(ps_output) 1804
+                              Store 1806 1805
+            1809:     49(ptr) AccessChain 1803(ps_output) 1804
+            1810:   48(fvec4) Load 1809
+                              Store 1808(color) 1810
                               Return
                               FunctionEnd
 16(PixelShaderFunctionS(f1;f1;f1;u1;u1;):    6(float) Function None 10
@@ -6297,7 +6301,7 @@
        169(r012):      7(ptr) Variable Function
        180(r014):      7(ptr) Variable Function
        183(r015):      7(ptr) Variable Function
-       186(r016):      9(ptr) Variable Function
+       186(r016):    149(ptr) Variable Function
        189(r017):      7(ptr) Variable Function
        192(r018):      7(ptr) Variable Function
        195(r019):      7(ptr) Variable Function
@@ -6308,25 +6312,25 @@
        210(r027):      7(ptr) Variable Function
        213(r028):      7(ptr) Variable Function
        216(r029):      9(ptr) Variable Function
-       220(r030):      9(ptr) Variable Function
-       223(r031):      7(ptr) Variable Function
-       226(r033):      7(ptr) Variable Function
-       230(r034):      7(ptr) Variable Function
-       233(r035):      7(ptr) Variable Function
-       239(r036):      7(ptr) Variable Function
-       242(r037):    132(ptr) Variable Function
-       245(r038):    132(ptr) Variable Function
-       248(r039):      7(ptr) Variable Function
-      252(r039a):      7(ptr) Variable Function
-       257(r040):      7(ptr) Variable Function
-       260(r041):      7(ptr) Variable Function
-       265(r042):      7(ptr) Variable Function
-       268(r043):      7(ptr) Variable Function
-       272(r044):      7(ptr) Variable Function
-       276(r045):      7(ptr) Variable Function
-       280(r046):      7(ptr) Variable Function
-       283(r047):      7(ptr) Variable Function
-       287(r048):      9(ptr) Variable Function
+       219(r030):      9(ptr) Variable Function
+       222(r031):      7(ptr) Variable Function
+       225(r033):      7(ptr) Variable Function
+       229(r034):      7(ptr) Variable Function
+       232(r035):      7(ptr) Variable Function
+       238(r036):      7(ptr) Variable Function
+       241(r037):    132(ptr) Variable Function
+       244(r038):    132(ptr) Variable Function
+       247(r039):      7(ptr) Variable Function
+      251(r039a):      7(ptr) Variable Function
+       256(r040):      7(ptr) Variable Function
+       259(r041):      7(ptr) Variable Function
+       264(r042):      7(ptr) Variable Function
+       267(r043):      7(ptr) Variable Function
+       271(r044):      7(ptr) Variable Function
+       275(r045):      7(ptr) Variable Function
+       279(r046):      7(ptr) Variable Function
+       282(r047):      7(ptr) Variable Function
+       286(r048):      9(ptr) Variable Function
        290(r049):      7(ptr) Variable Function
        293(r050):      7(ptr) Variable Function
        296(r051):      7(ptr) Variable Function
@@ -6391,7 +6395,7 @@
              184:    6(float) Load 11(inF0)
              185:    6(float) ExtInst 1(GLSL.std.450) 20(Cosh) 184
                               Store 183(r015) 185
-             188:      8(int) BitCount 187
+             188:    148(int) BitCount 187
                               Store 186(r016) 188
              190:    6(float) Load 11(inF0)
              191:    6(float) DPdx 190
@@ -6420,76 +6424,77 @@
              214:    6(float) Load 11(inF0)
              215:    6(float) ExtInst 1(GLSL.std.450) 29(Exp2) 214
                               Store 213(r028) 215
-             218:    148(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 217
-             219:      8(int) Bitcast 218
-                              Store 216(r029) 219
-             221:    148(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 217
-             222:      8(int) Bitcast 221
-                              Store 220(r030) 222
-             224:    6(float) Load 11(inF0)
-             225:    6(float) ExtInst 1(GLSL.std.450) 8(Floor) 224
-                              Store 223(r031) 225
-             227:    6(float) Load 11(inF0)
-             228:    6(float) Load 12(inF1)
-             229:    6(float) FMod 227 228
-                              Store 226(r033) 229
-             231:    6(float) Load 11(inF0)
-             232:    6(float) ExtInst 1(GLSL.std.450) 10(Fract) 231
-                              Store 230(r034) 232
-             234:    6(float) Load 11(inF0)
-             236:235(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 234
-             237:    148(int) CompositeExtract 236 1
-                              Store 12(inF1) 237
-             238:    6(float) CompositeExtract 236 0
-                              Store 233(r035) 238
-             240:    6(float) Load 11(inF0)
-             241:    6(float) Fwidth 240
-                              Store 239(r036) 241
-             243:    6(float) Load 11(inF0)
-             244:   131(bool) IsInf 243
-                              Store 242(r037) 244
-             246:    6(float) Load 11(inF0)
-             247:   131(bool) IsNan 246
-                              Store 245(r038) 247
-             249:    6(float) Load 11(inF0)
-             250:    6(float) Load 12(inF1)
-             251:    6(float) ExtInst 1(GLSL.std.450) 53(Ldexp) 249 250
-                              Store 248(r039) 251
-             253:    6(float) Load 11(inF0)
-             254:    6(float) Load 12(inF1)
-             255:    6(float) Load 13(inF2)
-             256:    6(float) ExtInst 1(GLSL.std.450) 46(FMix) 253 254 255
-                              Store 252(r039a) 256
-             258:    6(float) Load 11(inF0)
-             259:    6(float) ExtInst 1(GLSL.std.450) 28(Log) 258
-                              Store 257(r040) 259
-             261:    6(float) Load 11(inF0)
-             262:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 261
-             264:    6(float) FMul 262 263
-                              Store 260(r041) 264
-             266:    6(float) Load 11(inF0)
-             267:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 266
-                              Store 265(r042) 267
-             269:    6(float) Load 11(inF0)
-             270:    6(float) Load 12(inF1)
-             271:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 269 270
-                              Store 268(r043) 271
-             273:    6(float) Load 11(inF0)
-             274:    6(float) Load 12(inF1)
-             275:    6(float) ExtInst 1(GLSL.std.450) 37(FMin) 273 274
-                              Store 272(r044) 275
-             277:    6(float) Load 11(inF0)
-             278:    6(float) Load 12(inF1)
-             279:    6(float) ExtInst 1(GLSL.std.450) 26(Pow) 277 278
-                              Store 276(r045) 279
-             281:    6(float) Load 11(inF0)
-             282:    6(float) ExtInst 1(GLSL.std.450) 11(Radians) 281
-                              Store 280(r046) 282
-             285:    6(float) Load 11(inF0)
-             286:    6(float) FDiv 284 285
-                              Store 283(r047) 286
-             289:      8(int) BitReverse 288
-                              Store 287(r048) 289
+             217:    148(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 187
+             218:      8(int) Bitcast 217
+                              Store 216(r029) 218
+             220:    148(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 187
+             221:      8(int) Bitcast 220
+                              Store 219(r030) 221
+             223:    6(float) Load 11(inF0)
+             224:    6(float) ExtInst 1(GLSL.std.450) 8(Floor) 223
+                              Store 222(r031) 224
+             226:    6(float) Load 11(inF0)
+             227:    6(float) Load 12(inF1)
+             228:    6(float) FMod 226 227
+                              Store 225(r033) 228
+             230:    6(float) Load 11(inF0)
+             231:    6(float) ExtInst 1(GLSL.std.450) 10(Fract) 230
+                              Store 229(r034) 231
+             233:    6(float) Load 11(inF0)
+             235:234(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 233
+             236:    148(int) CompositeExtract 235 1
+                              Store 12(inF1) 236
+             237:    6(float) CompositeExtract 235 0
+                              Store 232(r035) 237
+             239:    6(float) Load 11(inF0)
+             240:    6(float) Fwidth 239
+                              Store 238(r036) 240
+             242:    6(float) Load 11(inF0)
+             243:   131(bool) IsInf 242
+                              Store 241(r037) 243
+             245:    6(float) Load 11(inF0)
+             246:   131(bool) IsNan 245
+                              Store 244(r038) 246
+             248:    6(float) Load 11(inF0)
+             249:    6(float) Load 12(inF1)
+             250:    6(float) ExtInst 1(GLSL.std.450) 53(Ldexp) 248 249
+                              Store 247(r039) 250
+             252:    6(float) Load 11(inF0)
+             253:    6(float) Load 12(inF1)
+             254:    6(float) Load 13(inF2)
+             255:    6(float) ExtInst 1(GLSL.std.450) 46(FMix) 252 253 254
+                              Store 251(r039a) 255
+             257:    6(float) Load 11(inF0)
+             258:    6(float) ExtInst 1(GLSL.std.450) 28(Log) 257
+                              Store 256(r040) 258
+             260:    6(float) Load 11(inF0)
+             261:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 260
+             263:    6(float) FMul 261 262
+                              Store 259(r041) 263
+             265:    6(float) Load 11(inF0)
+             266:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 265
+                              Store 264(r042) 266
+             268:    6(float) Load 11(inF0)
+             269:    6(float) Load 12(inF1)
+             270:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 268 269
+                              Store 267(r043) 270
+             272:    6(float) Load 11(inF0)
+             273:    6(float) Load 12(inF1)
+             274:    6(float) ExtInst 1(GLSL.std.450) 37(FMin) 272 273
+                              Store 271(r044) 274
+             276:    6(float) Load 11(inF0)
+             277:    6(float) Load 12(inF1)
+             278:    6(float) ExtInst 1(GLSL.std.450) 26(Pow) 276 277
+                              Store 275(r045) 278
+             280:    6(float) Load 11(inF0)
+             281:    6(float) ExtInst 1(GLSL.std.450) 11(Radians) 280
+                              Store 279(r046) 281
+             284:    6(float) Load 11(inF0)
+             285:    6(float) FDiv 283 284
+                              Store 282(r047) 285
+             288:    148(int) BitReverse 287
+             289:      8(int) Bitcast 288
+                              Store 286(r048) 289
              291:    6(float) Load 11(inF0)
              292:    6(float) ExtInst 1(GLSL.std.450) 2(RoundEven) 291
                               Store 290(r049) 292
@@ -6497,7 +6502,7 @@
              295:    6(float) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 294
                               Store 293(r050) 295
              297:    6(float) Load 11(inF0)
-             298:    6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 297 175 284
+             298:    6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 297 175 283
                               Store 296(r051) 298
              300:    6(float) Load 11(inF0)
              301:    6(float) ExtInst 1(GLSL.std.450) 6(FSign) 300
@@ -6565,7 +6570,7 @@
        373(r012):     25(ptr) Variable Function
        386(r013):     25(ptr) Variable Function
        389(r015):     25(ptr) Variable Function
-       392(r016):     27(ptr) Variable Function
+       392(r016):    353(ptr) Variable Function
        396(r017):     25(ptr) Variable Function
        399(r018):     25(ptr) Variable Function
        402(r019):     25(ptr) Variable Function
@@ -6579,41 +6584,41 @@
        428(r029):     25(ptr) Variable Function
        431(r030):     25(ptr) Variable Function
        436(r031):     27(ptr) Variable Function
-       440(r032):     27(ptr) Variable Function
-       442(r033):     25(ptr) Variable Function
-       445(r035):     25(ptr) Variable Function
-       449(r036):     25(ptr) Variable Function
-       452(r037):     25(ptr) Variable Function
-       458(r038):     25(ptr) Variable Function
-       462(r039):    461(ptr) Variable Function
-       465(r040):    461(ptr) Variable Function
-       468(r041):     25(ptr) Variable Function
-      472(r039a):     25(ptr) Variable Function
-       477(r042):      7(ptr) Variable Function
-       480(r043):     25(ptr) Variable Function
-       483(r044):     25(ptr) Variable Function
-       487(r045):     25(ptr) Variable Function
-       490(r046):     25(ptr) Variable Function
-       494(r047):     25(ptr) Variable Function
-       498(r048):     25(ptr) Variable Function
-       501(r049):     25(ptr) Variable Function
-       505(r050):     25(ptr) Variable Function
-       508(r051):     25(ptr) Variable Function
-       512(r052):     25(ptr) Variable Function
-       516(r053):     25(ptr) Variable Function
-       521(r054):     27(ptr) Variable Function
-       525(r055):     25(ptr) Variable Function
-       528(r056):     25(ptr) Variable Function
-       531(r057):     25(ptr) Variable Function
-       536(r058):     25(ptr) Variable Function
-       539(r059):     25(ptr) Variable Function
-       546(r060):     25(ptr) Variable Function
-       549(r061):     25(ptr) Variable Function
-       554(r062):     25(ptr) Variable Function
-       557(r063):     25(ptr) Variable Function
-       561(r064):     25(ptr) Variable Function
-       564(r065):     25(ptr) Variable Function
-       567(r066):     25(ptr) Variable Function
+       441(r032):     27(ptr) Variable Function
+       443(r033):     25(ptr) Variable Function
+       446(r035):     25(ptr) Variable Function
+       450(r036):     25(ptr) Variable Function
+       453(r037):     25(ptr) Variable Function
+       459(r038):     25(ptr) Variable Function
+       463(r039):    462(ptr) Variable Function
+       466(r040):    462(ptr) Variable Function
+       469(r041):     25(ptr) Variable Function
+      473(r039a):     25(ptr) Variable Function
+       478(r042):      7(ptr) Variable Function
+       481(r043):     25(ptr) Variable Function
+       484(r044):     25(ptr) Variable Function
+       488(r045):     25(ptr) Variable Function
+       491(r046):     25(ptr) Variable Function
+       495(r047):     25(ptr) Variable Function
+       499(r048):     25(ptr) Variable Function
+       502(r049):     25(ptr) Variable Function
+       506(r050):     25(ptr) Variable Function
+       509(r051):     25(ptr) Variable Function
+       513(r052):     25(ptr) Variable Function
+       517(r053):     25(ptr) Variable Function
+       522(r054):     27(ptr) Variable Function
+       527(r055):     25(ptr) Variable Function
+       530(r056):     25(ptr) Variable Function
+       533(r057):     25(ptr) Variable Function
+       538(r058):     25(ptr) Variable Function
+       541(r059):     25(ptr) Variable Function
+       548(r060):     25(ptr) Variable Function
+       551(r061):     25(ptr) Variable Function
+       556(r062):     25(ptr) Variable Function
+       559(r063):     25(ptr) Variable Function
+       563(r064):     25(ptr) Variable Function
+       566(r065):     25(ptr) Variable Function
+       569(r066):     25(ptr) Variable Function
              338:   24(fvec2) Load 29(inF0)
              339:   131(bool) All 338
                               Store 337(r000) 339
@@ -6667,7 +6672,7 @@
              390:   24(fvec2) Load 29(inF0)
              391:   24(fvec2) ExtInst 1(GLSL.std.450) 20(Cosh) 390
                               Store 389(r015) 391
-             395:   26(ivec2) BitCount 394
+             395:  352(ivec2) BitCount 394
                               Store 392(r016) 395
              397:   24(fvec2) Load 29(inF0)
              398:   24(fvec2) DPdx 397
@@ -6709,137 +6714,137 @@
              434:   24(fvec2) Load 31(inF2)
              435:   24(fvec2) ExtInst 1(GLSL.std.450) 70(FaceForward) 432 433 434
                               Store 431(r030) 435
-             439:   26(ivec2) ExtInst 1(GLSL.std.450) 75(FindUMsb) 438
-                              Store 436(r031) 439
-             441:   26(ivec2) ExtInst 1(GLSL.std.450) 73(FindILsb) 438
-                              Store 440(r032) 441
-             443:   24(fvec2) Load 29(inF0)
-             444:   24(fvec2) ExtInst 1(GLSL.std.450) 8(Floor) 443
-                              Store 442(r033) 444
-             446:   24(fvec2) Load 29(inF0)
-             447:   24(fvec2) Load 30(inF1)
-             448:   24(fvec2) FMod 446 447
-                              Store 445(r035) 448
-             450:   24(fvec2) Load 29(inF0)
-             451:   24(fvec2) ExtInst 1(GLSL.std.450) 10(Fract) 450
-                              Store 449(r036) 451
-             453:   24(fvec2) Load 29(inF0)
-             455:454(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 453
-             456:  352(ivec2) CompositeExtract 455 1
-                              Store 30(inF1) 456
-             457:   24(fvec2) CompositeExtract 455 0
-                              Store 452(r037) 457
-             459:   24(fvec2) Load 29(inF0)
-             460:   24(fvec2) Fwidth 459
-                              Store 458(r038) 460
-             463:   24(fvec2) Load 29(inF0)
-             464:  380(bvec2) IsInf 463
-                              Store 462(r039) 464
-             466:   24(fvec2) Load 29(inF0)
-             467:  380(bvec2) IsNan 466
-                              Store 465(r040) 467
-             469:   24(fvec2) Load 29(inF0)
-             470:   24(fvec2) Load 30(inF1)
-             471:   24(fvec2) ExtInst 1(GLSL.std.450) 53(Ldexp) 469 470
-                              Store 468(r041) 471
-             473:   24(fvec2) Load 29(inF0)
-             474:   24(fvec2) Load 30(inF1)
-             475:   24(fvec2) Load 31(inF2)
-             476:   24(fvec2) ExtInst 1(GLSL.std.450) 46(FMix) 473 474 475
-                              Store 472(r039a) 476
-             478:   24(fvec2) Load 29(inF0)
-             479:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 478
-                              Store 477(r042) 479
-             481:   24(fvec2) Load 29(inF0)
-             482:   24(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 481
-                              Store 480(r043) 482
-             484:   24(fvec2) Load 29(inF0)
-             485:   24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 484
-             486:   24(fvec2) VectorTimesScalar 485 263
-                              Store 483(r044) 486
-             488:   24(fvec2) Load 29(inF0)
-             489:   24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 488
-                              Store 487(r045) 489
-             491:   24(fvec2) Load 29(inF0)
-             492:   24(fvec2) Load 30(inF1)
-             493:   24(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 491 492
-                              Store 490(r046) 493
-             495:   24(fvec2) Load 29(inF0)
-             496:   24(fvec2) Load 30(inF1)
-             497:   24(fvec2) ExtInst 1(GLSL.std.450) 37(FMin) 495 496
-                              Store 494(r047) 497
-             499:   24(fvec2) Load 29(inF0)
-             500:   24(fvec2) ExtInst 1(GLSL.std.450) 69(Normalize) 499
-                              Store 498(r048) 500
-             502:   24(fvec2) Load 29(inF0)
-             503:   24(fvec2) Load 30(inF1)
-             504:   24(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 502 503
-                              Store 501(r049) 504
-             506:   24(fvec2) Load 29(inF0)
-             507:   24(fvec2) ExtInst 1(GLSL.std.450) 11(Radians) 506
-                              Store 505(r050) 507
-             509:   24(fvec2) Load 29(inF0)
-             510:   24(fvec2) CompositeConstruct 284 284
-             511:   24(fvec2) FDiv 510 509
-                              Store 508(r051) 511
-             513:   24(fvec2) Load 29(inF0)
-             514:   24(fvec2) Load 30(inF1)
-             515:   24(fvec2) ExtInst 1(GLSL.std.450) 71(Reflect) 513 514
-                              Store 512(r052) 515
-             517:   24(fvec2) Load 29(inF0)
-             518:   24(fvec2) Load 30(inF1)
-             520:   24(fvec2) ExtInst 1(GLSL.std.450) 72(Refract) 517 518 519
-                              Store 516(r053) 520
-             524:   26(ivec2) BitReverse 523
-                              Store 521(r054) 524
-             526:   24(fvec2) Load 29(inF0)
-             527:   24(fvec2) ExtInst 1(GLSL.std.450) 2(RoundEven) 526
-                              Store 525(r055) 527
-             529:   24(fvec2) Load 29(inF0)
-             530:   24(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 529
-                              Store 528(r056) 530
-             532:   24(fvec2) Load 29(inF0)
-             533:   24(fvec2) CompositeConstruct 175 175
-             534:   24(fvec2) CompositeConstruct 284 284
-             535:   24(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 532 533 534
-                              Store 531(r057) 535
-             537:   24(fvec2) Load 29(inF0)
-             538:   24(fvec2) ExtInst 1(GLSL.std.450) 6(FSign) 537
-                              Store 536(r058) 538
-             540:   24(fvec2) Load 29(inF0)
-             541:   24(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 540
-                              Store 539(r059) 541
+             440:   26(ivec2) ExtInst 1(GLSL.std.450) 75(FindUMsb) 439
+                              Store 436(r031) 440
+             442:   26(ivec2) ExtInst 1(GLSL.std.450) 73(FindILsb) 439
+                              Store 441(r032) 442
+             444:   24(fvec2) Load 29(inF0)
+             445:   24(fvec2) ExtInst 1(GLSL.std.450) 8(Floor) 444
+                              Store 443(r033) 445
+             447:   24(fvec2) Load 29(inF0)
+             448:   24(fvec2) Load 30(inF1)
+             449:   24(fvec2) FMod 447 448
+                              Store 446(r035) 449
+             451:   24(fvec2) Load 29(inF0)
+             452:   24(fvec2) ExtInst 1(GLSL.std.450) 10(Fract) 451
+                              Store 450(r036) 452
+             454:   24(fvec2) Load 29(inF0)
+             456:455(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 454
+             457:  352(ivec2) CompositeExtract 456 1
+                              Store 30(inF1) 457
+             458:   24(fvec2) CompositeExtract 456 0
+                              Store 453(r037) 458
+             460:   24(fvec2) Load 29(inF0)
+             461:   24(fvec2) Fwidth 460
+                              Store 459(r038) 461
+             464:   24(fvec2) Load 29(inF0)
+             465:  380(bvec2) IsInf 464
+                              Store 463(r039) 465
+             467:   24(fvec2) Load 29(inF0)
+             468:  380(bvec2) IsNan 467
+                              Store 466(r040) 468
+             470:   24(fvec2) Load 29(inF0)
+             471:   24(fvec2) Load 30(inF1)
+             472:   24(fvec2) ExtInst 1(GLSL.std.450) 53(Ldexp) 470 471
+                              Store 469(r041) 472
+             474:   24(fvec2) Load 29(inF0)
+             475:   24(fvec2) Load 30(inF1)
+             476:   24(fvec2) Load 31(inF2)
+             477:   24(fvec2) ExtInst 1(GLSL.std.450) 46(FMix) 474 475 476
+                              Store 473(r039a) 477
+             479:   24(fvec2) Load 29(inF0)
+             480:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 479
+                              Store 478(r042) 480
+             482:   24(fvec2) Load 29(inF0)
+             483:   24(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 482
+                              Store 481(r043) 483
+             485:   24(fvec2) Load 29(inF0)
+             486:   24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 485
+             487:   24(fvec2) VectorTimesScalar 486 262
+                              Store 484(r044) 487
+             489:   24(fvec2) Load 29(inF0)
+             490:   24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 489
+                              Store 488(r045) 490
+             492:   24(fvec2) Load 29(inF0)
+             493:   24(fvec2) Load 30(inF1)
+             494:   24(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 492 493
+                              Store 491(r046) 494
+             496:   24(fvec2) Load 29(inF0)
+             497:   24(fvec2) Load 30(inF1)
+             498:   24(fvec2) ExtInst 1(GLSL.std.450) 37(FMin) 496 497
+                              Store 495(r047) 498
+             500:   24(fvec2) Load 29(inF0)
+             501:   24(fvec2) ExtInst 1(GLSL.std.450) 69(Normalize) 500
+                              Store 499(r048) 501
+             503:   24(fvec2) Load 29(inF0)
+             504:   24(fvec2) Load 30(inF1)
+             505:   24(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 503 504
+                              Store 502(r049) 505
+             507:   24(fvec2) Load 29(inF0)
+             508:   24(fvec2) ExtInst 1(GLSL.std.450) 11(Radians) 507
+                              Store 506(r050) 508
+             510:   24(fvec2) Load 29(inF0)
+             511:   24(fvec2) CompositeConstruct 283 283
+             512:   24(fvec2) FDiv 511 510
+                              Store 509(r051) 512
+             514:   24(fvec2) Load 29(inF0)
+             515:   24(fvec2) Load 30(inF1)
+             516:   24(fvec2) ExtInst 1(GLSL.std.450) 71(Reflect) 514 515
+                              Store 513(r052) 516
+             518:   24(fvec2) Load 29(inF0)
+             519:   24(fvec2) Load 30(inF1)
+             521:   24(fvec2) ExtInst 1(GLSL.std.450) 72(Refract) 518 519 520
+                              Store 517(r053) 521
+             526:   26(ivec2) BitReverse 525
+                              Store 522(r054) 526
+             528:   24(fvec2) Load 29(inF0)
+             529:   24(fvec2) ExtInst 1(GLSL.std.450) 2(RoundEven) 528
+                              Store 527(r055) 529
+             531:   24(fvec2) Load 29(inF0)
+             532:   24(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 531
+                              Store 530(r056) 532
+             534:   24(fvec2) Load 29(inF0)
+             535:   24(fvec2) CompositeConstruct 175 175
+             536:   24(fvec2) CompositeConstruct 283 283
+             537:   24(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 534 535 536
+                              Store 533(r057) 537
+             539:   24(fvec2) Load 29(inF0)
+             540:   24(fvec2) ExtInst 1(GLSL.std.450) 6(FSign) 539
+                              Store 538(r058) 540
              542:   24(fvec2) Load 29(inF0)
              543:   24(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 542
-                              Store 30(inF1) 543
+                              Store 541(r059) 543
              544:   24(fvec2) Load 29(inF0)
-             545:   24(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 544
-                              Store 31(inF2) 545
-             547:   24(fvec2) Load 29(inF0)
-             548:   24(fvec2) ExtInst 1(GLSL.std.450) 19(Sinh) 547
-                              Store 546(r060) 548
-             550:   24(fvec2) Load 29(inF0)
-             551:   24(fvec2) Load 30(inF1)
-             552:   24(fvec2) Load 31(inF2)
-             553:   24(fvec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 550 551 552
-                              Store 549(r061) 553
-             555:   24(fvec2) Load 29(inF0)
-             556:   24(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 555
-                              Store 554(r062) 556
-             558:   24(fvec2) Load 29(inF0)
-             559:   24(fvec2) Load 30(inF1)
-             560:   24(fvec2) ExtInst 1(GLSL.std.450) 48(Step) 558 559
-                              Store 557(r063) 560
-             562:   24(fvec2) Load 29(inF0)
-             563:   24(fvec2) ExtInst 1(GLSL.std.450) 15(Tan) 562
-                              Store 561(r064) 563
-             565:   24(fvec2) Load 29(inF0)
-             566:   24(fvec2) ExtInst 1(GLSL.std.450) 21(Tanh) 565
-                              Store 564(r065) 566
-             568:   24(fvec2) Load 29(inF0)
-             569:   24(fvec2) ExtInst 1(GLSL.std.450) 3(Trunc) 568
-                              Store 567(r066) 569
-                              ReturnValue 570
+             545:   24(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 544
+                              Store 30(inF1) 545
+             546:   24(fvec2) Load 29(inF0)
+             547:   24(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 546
+                              Store 31(inF2) 547
+             549:   24(fvec2) Load 29(inF0)
+             550:   24(fvec2) ExtInst 1(GLSL.std.450) 19(Sinh) 549
+                              Store 548(r060) 550
+             552:   24(fvec2) Load 29(inF0)
+             553:   24(fvec2) Load 30(inF1)
+             554:   24(fvec2) Load 31(inF2)
+             555:   24(fvec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 552 553 554
+                              Store 551(r061) 555
+             557:   24(fvec2) Load 29(inF0)
+             558:   24(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 557
+                              Store 556(r062) 558
+             560:   24(fvec2) Load 29(inF0)
+             561:   24(fvec2) Load 30(inF1)
+             562:   24(fvec2) ExtInst 1(GLSL.std.450) 48(Step) 560 561
+                              Store 559(r063) 562
+             564:   24(fvec2) Load 29(inF0)
+             565:   24(fvec2) ExtInst 1(GLSL.std.450) 15(Tan) 564
+                              Store 563(r064) 565
+             567:   24(fvec2) Load 29(inF0)
+             568:   24(fvec2) ExtInst 1(GLSL.std.450) 21(Tanh) 567
+                              Store 566(r065) 568
+             570:   24(fvec2) Load 29(inF0)
+             571:   24(fvec2) ExtInst 1(GLSL.std.450) 3(Trunc) 570
+                              Store 569(r066) 571
+                              ReturnValue 572
                               FunctionEnd
 46(PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3;):   36(fvec3) Function None 40
         41(inF0):     37(ptr) FunctionParameter
@@ -6848,306 +6853,306 @@
         44(inU0):     39(ptr) FunctionParameter
         45(inU1):     39(ptr) FunctionParameter
               47:             Label
-       573(r000):    132(ptr) Variable Function
-       576(r001):     37(ptr) Variable Function
-       579(r002):     37(ptr) Variable Function
-       582(r003):    132(ptr) Variable Function
-       585(r004):     37(ptr) Variable Function
-       590(r005):    589(ptr) Variable Function
-       593(r006):     39(ptr) Variable Function
-       596(r007):     37(ptr) Variable Function
-       599(r009):     37(ptr) Variable Function
-       602(r010):     37(ptr) Variable Function
-       606(r011):     37(ptr) Variable Function
-       609(r012):     37(ptr) Variable Function
-       622(r013):     37(ptr) Variable Function
-       625(r014):     37(ptr) Variable Function
-       628(r015):     39(ptr) Variable Function
-       632(r016):     37(ptr) Variable Function
-       636(r017):     37(ptr) Variable Function
-       639(r018):     37(ptr) Variable Function
-       642(r019):     37(ptr) Variable Function
-       645(r020):     37(ptr) Variable Function
-       648(r021):     37(ptr) Variable Function
-       651(r022):     37(ptr) Variable Function
-       654(r023):     37(ptr) Variable Function
-       657(r024):      7(ptr) Variable Function
-       661(r025):      7(ptr) Variable Function
-       665(r029):     37(ptr) Variable Function
-       668(r030):     37(ptr) Variable Function
-       671(r031):     37(ptr) Variable Function
-       676(r032):     39(ptr) Variable Function
-       680(r033):     39(ptr) Variable Function
-       682(r034):     37(ptr) Variable Function
-       685(r036):     37(ptr) Variable Function
-       689(r037):     37(ptr) Variable Function
-       692(r038):     37(ptr) Variable Function
-       698(r039):     37(ptr) Variable Function
-       702(r040):    701(ptr) Variable Function
-       705(r041):    701(ptr) Variable Function
-       708(r042):     37(ptr) Variable Function
-      712(r039a):     37(ptr) Variable Function
-      717(r039b):     37(ptr) Variable Function
-       723(r043):      7(ptr) Variable Function
-       726(r044):     37(ptr) Variable Function
-       729(r045):     37(ptr) Variable Function
-       733(r046):     37(ptr) Variable Function
-       736(r047):     37(ptr) Variable Function
-       740(r048):     37(ptr) Variable Function
-       744(r049):     37(ptr) Variable Function
-       747(r050):     37(ptr) Variable Function
-       751(r051):     37(ptr) Variable Function
-       754(r052):     37(ptr) Variable Function
-       758(r053):     37(ptr) Variable Function
-       762(r054):     37(ptr) Variable Function
-       766(r055):     39(ptr) Variable Function
-       769(r056):     37(ptr) Variable Function
-       772(r057):     37(ptr) Variable Function
-       775(r058):     37(ptr) Variable Function
-       780(r059):     37(ptr) Variable Function
-       783(r060):     37(ptr) Variable Function
-       790(r061):     37(ptr) Variable Function
-       793(r062):     37(ptr) Variable Function
-       798(r063):     37(ptr) Variable Function
-       801(r064):     37(ptr) Variable Function
-       805(r065):     37(ptr) Variable Function
-       808(r066):     37(ptr) Variable Function
-       811(r067):     37(ptr) Variable Function
-             574:   36(fvec3) Load 41(inF0)
-             575:   131(bool) All 574
-                              Store 573(r000) 575
-             577:   36(fvec3) Load 41(inF0)
-             578:   36(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 577
-                              Store 576(r001) 578
-             580:   36(fvec3) Load 41(inF0)
-             581:   36(fvec3) ExtInst 1(GLSL.std.450) 17(Acos) 580
-                              Store 579(r002) 581
-             583:   36(fvec3) Load 41(inF0)
-             584:   131(bool) Any 583
-                              Store 582(r003) 584
-             586:   36(fvec3) Load 41(inF0)
-             587:   36(fvec3) ExtInst 1(GLSL.std.450) 16(Asin) 586
-                              Store 585(r004) 587
-             591:   36(fvec3) Load 41(inF0)
-             592:  588(ivec3) Bitcast 591
-                              Store 590(r005) 592
-             594:   36(fvec3) Load 41(inF0)
-             595:   38(ivec3) Bitcast 594
-                              Store 593(r006) 595
-             597:   38(ivec3) Load 44(inU0)
-             598:   36(fvec3) Bitcast 597
-                              Store 596(r007) 598
-             600:   36(fvec3) Load 41(inF0)
-             601:   36(fvec3) ExtInst 1(GLSL.std.450) 18(Atan) 600
-                              Store 599(r009) 601
-             603:   36(fvec3) Load 41(inF0)
-             604:   36(fvec3) Load 42(inF1)
-             605:   36(fvec3) ExtInst 1(GLSL.std.450) 25(Atan2) 603 604
-                              Store 602(r010) 605
-             607:   36(fvec3) Load 41(inF0)
-             608:   36(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 607
-                              Store 606(r011) 608
-             610:   36(fvec3) Load 41(inF0)
-             611:   36(fvec3) Load 42(inF1)
-             612:   36(fvec3) Load 43(inF2)
-             613:   36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 610 611 612
-                              Store 609(r012) 613
-             614:   36(fvec3) Load 41(inF0)
-             617:  616(bvec3) FOrdLessThan 614 615
-             618:   131(bool) Any 617
-                              SelectionMerge 620 None
-                              BranchConditional 618 619 620
-             619:               Label
+       575(r000):    132(ptr) Variable Function
+       578(r001):     37(ptr) Variable Function
+       581(r002):     37(ptr) Variable Function
+       584(r003):    132(ptr) Variable Function
+       587(r004):     37(ptr) Variable Function
+       592(r005):    591(ptr) Variable Function
+       595(r006):     39(ptr) Variable Function
+       598(r007):     37(ptr) Variable Function
+       601(r009):     37(ptr) Variable Function
+       604(r010):     37(ptr) Variable Function
+       608(r011):     37(ptr) Variable Function
+       611(r012):     37(ptr) Variable Function
+       624(r013):     37(ptr) Variable Function
+       627(r014):     37(ptr) Variable Function
+       630(r015):     39(ptr) Variable Function
+       635(r016):     37(ptr) Variable Function
+       639(r017):     37(ptr) Variable Function
+       642(r018):     37(ptr) Variable Function
+       645(r019):     37(ptr) Variable Function
+       648(r020):     37(ptr) Variable Function
+       651(r021):     37(ptr) Variable Function
+       654(r022):     37(ptr) Variable Function
+       657(r023):     37(ptr) Variable Function
+       660(r024):      7(ptr) Variable Function
+       664(r025):      7(ptr) Variable Function
+       668(r029):     37(ptr) Variable Function
+       671(r030):     37(ptr) Variable Function
+       674(r031):     37(ptr) Variable Function
+       679(r032):     39(ptr) Variable Function
+       683(r033):     39(ptr) Variable Function
+       685(r034):     37(ptr) Variable Function
+       688(r036):     37(ptr) Variable Function
+       692(r037):     37(ptr) Variable Function
+       695(r038):     37(ptr) Variable Function
+       701(r039):     37(ptr) Variable Function
+       705(r040):    704(ptr) Variable Function
+       708(r041):    704(ptr) Variable Function
+       711(r042):     37(ptr) Variable Function
+      715(r039a):     37(ptr) Variable Function
+      720(r039b):     37(ptr) Variable Function
+       726(r043):      7(ptr) Variable Function
+       729(r044):     37(ptr) Variable Function
+       732(r045):     37(ptr) Variable Function
+       736(r046):     37(ptr) Variable Function
+       739(r047):     37(ptr) Variable Function
+       743(r048):     37(ptr) Variable Function
+       747(r049):     37(ptr) Variable Function
+       750(r050):     37(ptr) Variable Function
+       754(r051):     37(ptr) Variable Function
+       757(r052):     37(ptr) Variable Function
+       761(r053):     37(ptr) Variable Function
+       765(r054):     37(ptr) Variable Function
+       769(r055):     39(ptr) Variable Function
+       772(r056):     37(ptr) Variable Function
+       775(r057):     37(ptr) Variable Function
+       778(r058):     37(ptr) Variable Function
+       783(r059):     37(ptr) Variable Function
+       786(r060):     37(ptr) Variable Function
+       793(r061):     37(ptr) Variable Function
+       796(r062):     37(ptr) Variable Function
+       801(r063):     37(ptr) Variable Function
+       804(r064):     37(ptr) Variable Function
+       808(r065):     37(ptr) Variable Function
+       811(r066):     37(ptr) Variable Function
+       814(r067):     37(ptr) Variable Function
+             576:   36(fvec3) Load 41(inF0)
+             577:   131(bool) All 576
+                              Store 575(r000) 577
+             579:   36(fvec3) Load 41(inF0)
+             580:   36(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 579
+                              Store 578(r001) 580
+             582:   36(fvec3) Load 41(inF0)
+             583:   36(fvec3) ExtInst 1(GLSL.std.450) 17(Acos) 582
+                              Store 581(r002) 583
+             585:   36(fvec3) Load 41(inF0)
+             586:   131(bool) Any 585
+                              Store 584(r003) 586
+             588:   36(fvec3) Load 41(inF0)
+             589:   36(fvec3) ExtInst 1(GLSL.std.450) 16(Asin) 588
+                              Store 587(r004) 589
+             593:   36(fvec3) Load 41(inF0)
+             594:  590(ivec3) Bitcast 593
+                              Store 592(r005) 594
+             596:   36(fvec3) Load 41(inF0)
+             597:   38(ivec3) Bitcast 596
+                              Store 595(r006) 597
+             599:   38(ivec3) Load 44(inU0)
+             600:   36(fvec3) Bitcast 599
+                              Store 598(r007) 600
+             602:   36(fvec3) Load 41(inF0)
+             603:   36(fvec3) ExtInst 1(GLSL.std.450) 18(Atan) 602
+                              Store 601(r009) 603
+             605:   36(fvec3) Load 41(inF0)
+             606:   36(fvec3) Load 42(inF1)
+             607:   36(fvec3) ExtInst 1(GLSL.std.450) 25(Atan2) 605 606
+                              Store 604(r010) 607
+             609:   36(fvec3) Load 41(inF0)
+             610:   36(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 609
+                              Store 608(r011) 610
+             612:   36(fvec3) Load 41(inF0)
+             613:   36(fvec3) Load 42(inF1)
+             614:   36(fvec3) Load 43(inF2)
+             615:   36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 612 613 614
+                              Store 611(r012) 615
+             616:   36(fvec3) Load 41(inF0)
+             619:  618(bvec3) FOrdLessThan 616 617
+             620:   131(bool) Any 619
+                              SelectionMerge 622 None
+                              BranchConditional 620 621 622
+             621:               Label
                                 Kill
-             620:             Label
-             623:   36(fvec3) Load 41(inF0)
-             624:   36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 623
-                              Store 622(r013) 624
-             626:   36(fvec3) Load 41(inF0)
-             627:   36(fvec3) ExtInst 1(GLSL.std.450) 20(Cosh) 626
-                              Store 625(r014) 627
-             631:   38(ivec3) BitCount 630
-                              Store 628(r015) 631
-             633:   36(fvec3) Load 41(inF0)
-             634:   36(fvec3) Load 42(inF1)
-             635:   36(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 633 634
-                              Store 632(r016) 635
-             637:   36(fvec3) Load 41(inF0)
-             638:   36(fvec3) DPdx 637
-                              Store 636(r017) 638
+             622:             Label
+             625:   36(fvec3) Load 41(inF0)
+             626:   36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 625
+                              Store 624(r013) 626
+             628:   36(fvec3) Load 41(inF0)
+             629:   36(fvec3) ExtInst 1(GLSL.std.450) 20(Cosh) 628
+                              Store 627(r014) 629
+             634:   38(ivec3) BitCount 633
+                              Store 630(r015) 634
+             636:   36(fvec3) Load 41(inF0)
+             637:   36(fvec3) Load 42(inF1)
+             638:   36(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 636 637
+                              Store 635(r016) 638
              640:   36(fvec3) Load 41(inF0)
-             641:   36(fvec3) DPdxCoarse 640
-                              Store 639(r018) 641
+             641:   36(fvec3) DPdx 640
+                              Store 639(r017) 641
              643:   36(fvec3) Load 41(inF0)
-             644:   36(fvec3) DPdxFine 643
-                              Store 642(r019) 644
+             644:   36(fvec3) DPdxCoarse 643
+                              Store 642(r018) 644
              646:   36(fvec3) Load 41(inF0)
-             647:   36(fvec3) DPdy 646
-                              Store 645(r020) 647
+             647:   36(fvec3) DPdxFine 646
+                              Store 645(r019) 647
              649:   36(fvec3) Load 41(inF0)
-             650:   36(fvec3) DPdyCoarse 649
-                              Store 648(r021) 650
+             650:   36(fvec3) DPdy 649
+                              Store 648(r020) 650
              652:   36(fvec3) Load 41(inF0)
-             653:   36(fvec3) DPdyFine 652
-                              Store 651(r022) 653
+             653:   36(fvec3) DPdyCoarse 652
+                              Store 651(r021) 653
              655:   36(fvec3) Load 41(inF0)
-             656:   36(fvec3) ExtInst 1(GLSL.std.450) 12(Degrees) 655
-                              Store 654(r023) 656
+             656:   36(fvec3) DPdyFine 655
+                              Store 654(r022) 656
              658:   36(fvec3) Load 41(inF0)
-             659:   36(fvec3) Load 42(inF1)
-             660:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 658 659
-                              Store 657(r024) 660
-             662:   36(fvec3) Load 41(inF0)
-             663:   36(fvec3) Load 42(inF1)
-             664:    6(float) Dot 662 663
-                              Store 661(r025) 664
-             666:   36(fvec3) Load 41(inF0)
-             667:   36(fvec3) ExtInst 1(GLSL.std.450) 27(Exp) 666
-                              Store 665(r029) 667
+             659:   36(fvec3) ExtInst 1(GLSL.std.450) 12(Degrees) 658
+                              Store 657(r023) 659
+             661:   36(fvec3) Load 41(inF0)
+             662:   36(fvec3) Load 42(inF1)
+             663:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 661 662
+                              Store 660(r024) 663
+             665:   36(fvec3) Load 41(inF0)
+             666:   36(fvec3) Load 42(inF1)
+             667:    6(float) Dot 665 666
+                              Store 664(r025) 667
              669:   36(fvec3) Load 41(inF0)
-             670:   36(fvec3) ExtInst 1(GLSL.std.450) 29(Exp2) 669
-                              Store 668(r030) 670
+             670:   36(fvec3) ExtInst 1(GLSL.std.450) 27(Exp) 669
+                              Store 668(r029) 670
              672:   36(fvec3) Load 41(inF0)
-             673:   36(fvec3) Load 42(inF1)
-             674:   36(fvec3) Load 43(inF2)
-             675:   36(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 672 673 674
-                              Store 671(r031) 675
-             679:   38(ivec3) ExtInst 1(GLSL.std.450) 75(FindUMsb) 678
-                              Store 676(r032) 679
-             681:   38(ivec3) ExtInst 1(GLSL.std.450) 73(FindILsb) 678
-                              Store 680(r033) 681
-             683:   36(fvec3) Load 41(inF0)
-             684:   36(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 683
-                              Store 682(r034) 684
+             673:   36(fvec3) ExtInst 1(GLSL.std.450) 29(Exp2) 672
+                              Store 671(r030) 673
+             675:   36(fvec3) Load 41(inF0)
+             676:   36(fvec3) Load 42(inF1)
+             677:   36(fvec3) Load 43(inF2)
+             678:   36(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 675 676 677
+                              Store 674(r031) 678
+             682:   38(ivec3) ExtInst 1(GLSL.std.450) 75(FindUMsb) 681
+                              Store 679(r032) 682
+             684:   38(ivec3) ExtInst 1(GLSL.std.450) 73(FindILsb) 681
+                              Store 683(r033) 684
              686:   36(fvec3) Load 41(inF0)
-             687:   36(fvec3) Load 42(inF1)
-             688:   36(fvec3) FMod 686 687
-                              Store 685(r036) 688
-             690:   36(fvec3) Load 41(inF0)
-             691:   36(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 690
-                              Store 689(r037) 691
+             687:   36(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 686
+                              Store 685(r034) 687
+             689:   36(fvec3) Load 41(inF0)
+             690:   36(fvec3) Load 42(inF1)
+             691:   36(fvec3) FMod 689 690
+                              Store 688(r036) 691
              693:   36(fvec3) Load 41(inF0)
-             695:694(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 693
-             696:  588(ivec3) CompositeExtract 695 1
-                              Store 42(inF1) 696
-             697:   36(fvec3) CompositeExtract 695 0
-                              Store 692(r038) 697
-             699:   36(fvec3) Load 41(inF0)
-             700:   36(fvec3) Fwidth 699
-                              Store 698(r039) 700
-             703:   36(fvec3) Load 41(inF0)
-             704:  616(bvec3) IsInf 703
-                              Store 702(r040) 704
+             694:   36(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 693
+                              Store 692(r037) 694
+             696:   36(fvec3) Load 41(inF0)
+             698:697(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 696
+             699:  590(ivec3) CompositeExtract 698 1
+                              Store 42(inF1) 699
+             700:   36(fvec3) CompositeExtract 698 0
+                              Store 695(r038) 700
+             702:   36(fvec3) Load 41(inF0)
+             703:   36(fvec3) Fwidth 702
+                              Store 701(r039) 703
              706:   36(fvec3) Load 41(inF0)
-             707:  616(bvec3) IsNan 706
-                              Store 705(r041) 707
+             707:  618(bvec3) IsInf 706
+                              Store 705(r040) 707
              709:   36(fvec3) Load 41(inF0)
-             710:   36(fvec3) Load 42(inF1)
-             711:   36(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 709 710
-                              Store 708(r042) 711
-             713:   36(fvec3) Load 41(inF0)
-             714:   36(fvec3) Load 42(inF1)
-             715:   36(fvec3) Load 43(inF2)
-             716:   36(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 713 714 715
-                              Store 712(r039a) 716
-             718:   36(fvec3) Load 41(inF0)
-             719:   36(fvec3) Load 42(inF1)
-             721:   36(fvec3) CompositeConstruct 720 720 720
-             722:   36(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 718 719 721
-                              Store 717(r039b) 722
-             724:   36(fvec3) Load 41(inF0)
-             725:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 724
-                              Store 723(r043) 725
+             710:  618(bvec3) IsNan 709
+                              Store 708(r041) 710
+             712:   36(fvec3) Load 41(inF0)
+             713:   36(fvec3) Load 42(inF1)
+             714:   36(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 712 713
+                              Store 711(r042) 714
+             716:   36(fvec3) Load 41(inF0)
+             717:   36(fvec3) Load 42(inF1)
+             718:   36(fvec3) Load 43(inF2)
+             719:   36(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 716 717 718
+                              Store 715(r039a) 719
+             721:   36(fvec3) Load 41(inF0)
+             722:   36(fvec3) Load 42(inF1)
+             724:   36(fvec3) CompositeConstruct 723 723 723
+             725:   36(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 721 722 724
+                              Store 720(r039b) 725
              727:   36(fvec3) Load 41(inF0)
-             728:   36(fvec3) ExtInst 1(GLSL.std.450) 28(Log) 727
-                              Store 726(r044) 728
+             728:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 727
+                              Store 726(r043) 728
              730:   36(fvec3) Load 41(inF0)
-             731:   36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 730
-             732:   36(fvec3) VectorTimesScalar 731 263
-                              Store 729(r045) 732
-             734:   36(fvec3) Load 41(inF0)
-             735:   36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 734
-                              Store 733(r046) 735
+             731:   36(fvec3) ExtInst 1(GLSL.std.450) 28(Log) 730
+                              Store 729(r044) 731
+             733:   36(fvec3) Load 41(inF0)
+             734:   36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 733
+             735:   36(fvec3) VectorTimesScalar 734 262
+                              Store 732(r045) 735
              737:   36(fvec3) Load 41(inF0)
-             738:   36(fvec3) Load 42(inF1)
-             739:   36(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 737 738
-                              Store 736(r047) 739
-             741:   36(fvec3) Load 41(inF0)
-             742:   36(fvec3) Load 42(inF1)
-             743:   36(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 741 742
-                              Store 740(r048) 743
-             745:   36(fvec3) Load 41(inF0)
-             746:   36(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 745
-                              Store 744(r049) 746
+             738:   36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 737
+                              Store 736(r046) 738
+             740:   36(fvec3) Load 41(inF0)
+             741:   36(fvec3) Load 42(inF1)
+             742:   36(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 740 741
+                              Store 739(r047) 742
+             744:   36(fvec3) Load 41(inF0)
+             745:   36(fvec3) Load 42(inF1)
+             746:   36(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 744 745
+                              Store 743(r048) 746
              748:   36(fvec3) Load 41(inF0)
-             749:   36(fvec3) Load 42(inF1)
-             750:   36(fvec3) ExtInst 1(GLSL.std.450) 26(Pow) 748 749
-                              Store 747(r050) 750
-             752:   36(fvec3) Load 41(inF0)
-             753:   36(fvec3) ExtInst 1(GLSL.std.450) 11(Radians) 752
-                              Store 751(r051) 753
+             749:   36(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 748
+                              Store 747(r049) 749
+             751:   36(fvec3) Load 41(inF0)
+             752:   36(fvec3) Load 42(inF1)
+             753:   36(fvec3) ExtInst 1(GLSL.std.450) 26(Pow) 751 752
+                              Store 750(r050) 753
              755:   36(fvec3) Load 41(inF0)
-             756:   36(fvec3) CompositeConstruct 284 284 284
-             757:   36(fvec3) FDiv 756 755
-                              Store 754(r052) 757
-             759:   36(fvec3) Load 41(inF0)
-             760:   36(fvec3) Load 42(inF1)
-             761:   36(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 759 760
-                              Store 758(r053) 761
-             763:   36(fvec3) Load 41(inF0)
-             764:   36(fvec3) Load 42(inF1)
-             765:   36(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 763 764 519
-                              Store 762(r054) 765
-             768:   38(ivec3) BitReverse 767
-                              Store 766(r055) 768
-             770:   36(fvec3) Load 41(inF0)
-             771:   36(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 770
-                              Store 769(r056) 771
+             756:   36(fvec3) ExtInst 1(GLSL.std.450) 11(Radians) 755
+                              Store 754(r051) 756
+             758:   36(fvec3) Load 41(inF0)
+             759:   36(fvec3) CompositeConstruct 283 283 283
+             760:   36(fvec3) FDiv 759 758
+                              Store 757(r052) 760
+             762:   36(fvec3) Load 41(inF0)
+             763:   36(fvec3) Load 42(inF1)
+             764:   36(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 762 763
+                              Store 761(r053) 764
+             766:   36(fvec3) Load 41(inF0)
+             767:   36(fvec3) Load 42(inF1)
+             768:   36(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 766 767 520
+                              Store 765(r054) 768
+             771:   38(ivec3) BitReverse 770
+                              Store 769(r055) 771
              773:   36(fvec3) Load 41(inF0)
-             774:   36(fvec3) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 773
-                              Store 772(r057) 774
+             774:   36(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 773
+                              Store 772(r056) 774
              776:   36(fvec3) Load 41(inF0)
-             777:   36(fvec3) CompositeConstruct 175 175 175
-             778:   36(fvec3) CompositeConstruct 284 284 284
-             779:   36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 776 777 778
-                              Store 775(r058) 779
-             781:   36(fvec3) Load 41(inF0)
-             782:   36(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 781
-                              Store 780(r059) 782
+             777:   36(fvec3) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 776
+                              Store 775(r057) 777
+             779:   36(fvec3) Load 41(inF0)
+             780:   36(fvec3) CompositeConstruct 175 175 175
+             781:   36(fvec3) CompositeConstruct 283 283 283
+             782:   36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 779 780 781
+                              Store 778(r058) 782
              784:   36(fvec3) Load 41(inF0)
-             785:   36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 784
-                              Store 783(r060) 785
-             786:   36(fvec3) Load 41(inF0)
-             787:   36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 786
-                              Store 42(inF1) 787
-             788:   36(fvec3) Load 41(inF0)
-             789:   36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 788
-                              Store 43(inF2) 789
+             785:   36(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 784
+                              Store 783(r059) 785
+             787:   36(fvec3) Load 41(inF0)
+             788:   36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 787
+                              Store 786(r060) 788
+             789:   36(fvec3) Load 41(inF0)
+             790:   36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 789
+                              Store 42(inF1) 790
              791:   36(fvec3) Load 41(inF0)
-             792:   36(fvec3) ExtInst 1(GLSL.std.450) 19(Sinh) 791
-                              Store 790(r061) 792
+             792:   36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 791
+                              Store 43(inF2) 792
              794:   36(fvec3) Load 41(inF0)
-             795:   36(fvec3) Load 42(inF1)
-             796:   36(fvec3) Load 43(inF2)
-             797:   36(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 794 795 796
-                              Store 793(r062) 797
-             799:   36(fvec3) Load 41(inF0)
-             800:   36(fvec3) ExtInst 1(GLSL.std.450) 31(Sqrt) 799
-                              Store 798(r063) 800
+             795:   36(fvec3) ExtInst 1(GLSL.std.450) 19(Sinh) 794
+                              Store 793(r061) 795
+             797:   36(fvec3) Load 41(inF0)
+             798:   36(fvec3) Load 42(inF1)
+             799:   36(fvec3) Load 43(inF2)
+             800:   36(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 797 798 799
+                              Store 796(r062) 800
              802:   36(fvec3) Load 41(inF0)
-             803:   36(fvec3) Load 42(inF1)
-             804:   36(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 802 803
-                              Store 801(r064) 804
-             806:   36(fvec3) Load 41(inF0)
-             807:   36(fvec3) ExtInst 1(GLSL.std.450) 15(Tan) 806
-                              Store 805(r065) 807
+             803:   36(fvec3) ExtInst 1(GLSL.std.450) 31(Sqrt) 802
+                              Store 801(r063) 803
+             805:   36(fvec3) Load 41(inF0)
+             806:   36(fvec3) Load 42(inF1)
+             807:   36(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 805 806
+                              Store 804(r064) 807
              809:   36(fvec3) Load 41(inF0)
-             810:   36(fvec3) ExtInst 1(GLSL.std.450) 21(Tanh) 809
-                              Store 808(r066) 810
+             810:   36(fvec3) ExtInst 1(GLSL.std.450) 15(Tan) 809
+                              Store 808(r065) 810
              812:   36(fvec3) Load 41(inF0)
-             813:   36(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 812
-                              Store 811(r067) 813
-                              ReturnValue 815
+             813:   36(fvec3) ExtInst 1(GLSL.std.450) 21(Tanh) 812
+                              Store 811(r066) 813
+             815:   36(fvec3) Load 41(inF0)
+             816:   36(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 815
+                              Store 814(r067) 816
+                              ReturnValue 818
                               FunctionEnd
 58(PixelShaderFunction(vf4;vf4;vf4;vu4;vu4;):   48(fvec4) Function None 52
         53(inF0):     49(ptr) FunctionParameter
@@ -7156,1018 +7161,1018 @@
         56(inU0):     51(ptr) FunctionParameter
         57(inU1):     51(ptr) FunctionParameter
               59:             Label
-       818(r000):    132(ptr) Variable Function
-       821(r001):     49(ptr) Variable Function
-       824(r002):     49(ptr) Variable Function
-       827(r003):    132(ptr) Variable Function
-       830(r004):     49(ptr) Variable Function
-       835(r005):    834(ptr) Variable Function
-       838(r006):     51(ptr) Variable Function
-       841(r007):     49(ptr) Variable Function
-       844(r009):     49(ptr) Variable Function
-       847(r010):     49(ptr) Variable Function
-       851(r011):     49(ptr) Variable Function
-       854(r012):     49(ptr) Variable Function
-       867(r013):     49(ptr) Variable Function
-       870(r014):     49(ptr) Variable Function
-       873(r015):     51(ptr) Variable Function
-       876(r016):     49(ptr) Variable Function
-       879(r017):     49(ptr) Variable Function
-       882(r018):     49(ptr) Variable Function
-       885(r019):     49(ptr) Variable Function
-       888(r020):     49(ptr) Variable Function
-       891(r021):     49(ptr) Variable Function
-       894(r022):     49(ptr) Variable Function
-       897(r023):      7(ptr) Variable Function
-       901(r024):      7(ptr) Variable Function
-       905(r025):     49(ptr) Variable Function
-       916(r029):     49(ptr) Variable Function
-       919(r030):     49(ptr) Variable Function
-       922(r031):     49(ptr) Variable Function
-       927(r032):     51(ptr) Variable Function
-       932(r033):     51(ptr) Variable Function
-       934(r034):     49(ptr) Variable Function
-       937(r036):     49(ptr) Variable Function
-       941(r037):     49(ptr) Variable Function
-       944(r038):     49(ptr) Variable Function
-       950(r039):     49(ptr) Variable Function
-       954(r040):    953(ptr) Variable Function
-       957(r041):    953(ptr) Variable Function
-       960(r042):     49(ptr) Variable Function
-      964(r039a):     49(ptr) Variable Function
-       969(r043):      7(ptr) Variable Function
-       972(r044):     49(ptr) Variable Function
-       975(r045):     49(ptr) Variable Function
-       979(r046):     49(ptr) Variable Function
-       982(r047):     49(ptr) Variable Function
-       986(r048):     49(ptr) Variable Function
-       990(r049):     49(ptr) Variable Function
-       993(r050):     49(ptr) Variable Function
-       997(r051):     49(ptr) Variable Function
-      1000(r052):     49(ptr) Variable Function
-      1004(r053):     49(ptr) Variable Function
-      1008(r054):     49(ptr) Variable Function
-      1012(r055):     51(ptr) Variable Function
-      1015(r056):     49(ptr) Variable Function
-      1018(r057):     49(ptr) Variable Function
-      1021(r058):     49(ptr) Variable Function
-      1026(r059):     49(ptr) Variable Function
-      1029(r060):     49(ptr) Variable Function
-      1036(r061):     49(ptr) Variable Function
-      1039(r062):     49(ptr) Variable Function
-      1044(r063):     49(ptr) Variable Function
-      1047(r064):     49(ptr) Variable Function
-      1051(r065):     49(ptr) Variable Function
-      1054(r066):     49(ptr) Variable Function
-      1057(r067):     49(ptr) Variable Function
-             819:   48(fvec4) Load 53(inF0)
-             820:   131(bool) All 819
-                              Store 818(r000) 820
+       821(r000):    132(ptr) Variable Function
+       824(r001):     49(ptr) Variable Function
+       827(r002):     49(ptr) Variable Function
+       830(r003):    132(ptr) Variable Function
+       833(r004):     49(ptr) Variable Function
+       838(r005):    837(ptr) Variable Function
+       841(r006):     51(ptr) Variable Function
+       844(r007):     49(ptr) Variable Function
+       847(r009):     49(ptr) Variable Function
+       850(r010):     49(ptr) Variable Function
+       854(r011):     49(ptr) Variable Function
+       857(r012):     49(ptr) Variable Function
+       870(r013):     49(ptr) Variable Function
+       873(r014):     49(ptr) Variable Function
+       876(r015):     51(ptr) Variable Function
+       879(r016):     49(ptr) Variable Function
+       882(r017):     49(ptr) Variable Function
+       885(r018):     49(ptr) Variable Function
+       888(r019):     49(ptr) Variable Function
+       891(r020):     49(ptr) Variable Function
+       894(r021):     49(ptr) Variable Function
+       897(r022):     49(ptr) Variable Function
+       900(r023):      7(ptr) Variable Function
+       904(r024):      7(ptr) Variable Function
+       908(r025):     49(ptr) Variable Function
+       919(r029):     49(ptr) Variable Function
+       922(r030):     49(ptr) Variable Function
+       925(r031):     49(ptr) Variable Function
+       930(r032):     51(ptr) Variable Function
+       935(r033):     51(ptr) Variable Function
+       937(r034):     49(ptr) Variable Function
+       940(r036):     49(ptr) Variable Function
+       944(r037):     49(ptr) Variable Function
+       947(r038):     49(ptr) Variable Function
+       953(r039):     49(ptr) Variable Function
+       957(r040):    956(ptr) Variable Function
+       960(r041):    956(ptr) Variable Function
+       963(r042):     49(ptr) Variable Function
+      967(r039a):     49(ptr) Variable Function
+       972(r043):      7(ptr) Variable Function
+       975(r044):     49(ptr) Variable Function
+       978(r045):     49(ptr) Variable Function
+       982(r046):     49(ptr) Variable Function
+       985(r047):     49(ptr) Variable Function
+       989(r048):     49(ptr) Variable Function
+       993(r049):     49(ptr) Variable Function
+       996(r050):     49(ptr) Variable Function
+      1000(r051):     49(ptr) Variable Function
+      1003(r052):     49(ptr) Variable Function
+      1007(r053):     49(ptr) Variable Function
+      1011(r054):     49(ptr) Variable Function
+      1015(r055):     51(ptr) Variable Function
+      1018(r056):     49(ptr) Variable Function
+      1021(r057):     49(ptr) Variable Function
+      1024(r058):     49(ptr) Variable Function
+      1029(r059):     49(ptr) Variable Function
+      1032(r060):     49(ptr) Variable Function
+      1039(r061):     49(ptr) Variable Function
+      1042(r062):     49(ptr) Variable Function
+      1047(r063):     49(ptr) Variable Function
+      1050(r064):     49(ptr) Variable Function
+      1054(r065):     49(ptr) Variable Function
+      1057(r066):     49(ptr) Variable Function
+      1060(r067):     49(ptr) Variable Function
              822:   48(fvec4) Load 53(inF0)
-             823:   48(fvec4) ExtInst 1(GLSL.std.450) 4(FAbs) 822
-                              Store 821(r001) 823
+             823:   131(bool) All 822
+                              Store 821(r000) 823
              825:   48(fvec4) Load 53(inF0)
-             826:   48(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 825
-                              Store 824(r002) 826
+             826:   48(fvec4) ExtInst 1(GLSL.std.450) 4(FAbs) 825
+                              Store 824(r001) 826
              828:   48(fvec4) Load 53(inF0)
-             829:   131(bool) Any 828
-                              Store 827(r003) 829
+             829:   48(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 828
+                              Store 827(r002) 829
              831:   48(fvec4) Load 53(inF0)
-             832:   48(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 831
-                              Store 830(r004) 832
-             836:   48(fvec4) Load 53(inF0)
-             837:  833(ivec4) Bitcast 836
-                              Store 835(r005) 837
+             832:   131(bool) Any 831
+                              Store 830(r003) 832
+             834:   48(fvec4) Load 53(inF0)
+             835:   48(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 834
+                              Store 833(r004) 835
              839:   48(fvec4) Load 53(inF0)
-             840:   50(ivec4) Bitcast 839
-                              Store 838(r006) 840
-             842:   50(ivec4) Load 56(inU0)
-             843:   48(fvec4) Bitcast 842
-                              Store 841(r007) 843
-             845:   48(fvec4) Load 53(inF0)
-             846:   48(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 845
-                              Store 844(r009) 846
+             840:  836(ivec4) Bitcast 839
+                              Store 838(r005) 840
+             842:   48(fvec4) Load 53(inF0)
+             843:   50(ivec4) Bitcast 842
+                              Store 841(r006) 843
+             845:   50(ivec4) Load 56(inU0)
+             846:   48(fvec4) Bitcast 845
+                              Store 844(r007) 846
              848:   48(fvec4) Load 53(inF0)
-             849:   48(fvec4) Load 54(inF1)
-             850:   48(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 848 849
-                              Store 847(r010) 850
-             852:   48(fvec4) Load 53(inF0)
-             853:   48(fvec4) ExtInst 1(GLSL.std.450) 9(Ceil) 852
-                              Store 851(r011) 853
+             849:   48(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 848
+                              Store 847(r009) 849
+             851:   48(fvec4) Load 53(inF0)
+             852:   48(fvec4) Load 54(inF1)
+             853:   48(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 851 852
+                              Store 850(r010) 853
              855:   48(fvec4) Load 53(inF0)
-             856:   48(fvec4) Load 54(inF1)
-             857:   48(fvec4) Load 55(inF2)
-             858:   48(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 855 856 857
-                              Store 854(r012) 858
-             859:   48(fvec4) Load 53(inF0)
-             862:  861(bvec4) FOrdLessThan 859 860
-             863:   131(bool) Any 862
-                              SelectionMerge 865 None
-                              BranchConditional 863 864 865
-             864:               Label
+             856:   48(fvec4) ExtInst 1(GLSL.std.450) 9(Ceil) 855
+                              Store 854(r011) 856
+             858:   48(fvec4) Load 53(inF0)
+             859:   48(fvec4) Load 54(inF1)
+             860:   48(fvec4) Load 55(inF2)
+             861:   48(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 858 859 860
+                              Store 857(r012) 861
+             862:   48(fvec4) Load 53(inF0)
+             865:  864(bvec4) FOrdLessThan 862 863
+             866:   131(bool) Any 865
+                              SelectionMerge 868 None
+                              BranchConditional 866 867 868
+             867:               Label
                                 Kill
-             865:             Label
-             868:   48(fvec4) Load 53(inF0)
-             869:   48(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 868
-                              Store 867(r013) 869
+             868:             Label
              871:   48(fvec4) Load 53(inF0)
-             872:   48(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 871
-                              Store 870(r014) 872
-             875:   50(ivec4) BitCount 874
-                              Store 873(r015) 875
-             877:   48(fvec4) Load 53(inF0)
-             878:   48(fvec4) DPdx 877
-                              Store 876(r016) 878
+             872:   48(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 871
+                              Store 870(r013) 872
+             874:   48(fvec4) Load 53(inF0)
+             875:   48(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 874
+                              Store 873(r014) 875
+             878:   50(ivec4) BitCount 877
+                              Store 876(r015) 878
              880:   48(fvec4) Load 53(inF0)
-             881:   48(fvec4) DPdxCoarse 880
-                              Store 879(r017) 881
+             881:   48(fvec4) DPdx 880
+                              Store 879(r016) 881
              883:   48(fvec4) Load 53(inF0)
-             884:   48(fvec4) DPdxFine 883
-                              Store 882(r018) 884
+             884:   48(fvec4) DPdxCoarse 883
+                              Store 882(r017) 884
              886:   48(fvec4) Load 53(inF0)
-             887:   48(fvec4) DPdy 886
-                              Store 885(r019) 887
+             887:   48(fvec4) DPdxFine 886
+                              Store 885(r018) 887
              889:   48(fvec4) Load 53(inF0)
-             890:   48(fvec4) DPdyCoarse 889
-                              Store 888(r020) 890
+             890:   48(fvec4) DPdy 889
+                              Store 888(r019) 890
              892:   48(fvec4) Load 53(inF0)
-             893:   48(fvec4) DPdyFine 892
-                              Store 891(r021) 893
+             893:   48(fvec4) DPdyCoarse 892
+                              Store 891(r020) 893
              895:   48(fvec4) Load 53(inF0)
-             896:   48(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 895
-                              Store 894(r022) 896
+             896:   48(fvec4) DPdyFine 895
+                              Store 894(r021) 896
              898:   48(fvec4) Load 53(inF0)
-             899:   48(fvec4) Load 54(inF1)
-             900:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 898 899
-                              Store 897(r023) 900
-             902:   48(fvec4) Load 53(inF0)
-             903:   48(fvec4) Load 54(inF1)
-             904:    6(float) Dot 902 903
-                              Store 901(r024) 904
-             906:      7(ptr) AccessChain 53(inF0) 522
-             907:    6(float) Load 906
-             908:      7(ptr) AccessChain 54(inF1) 522
-             909:    6(float) Load 908
-             910:    6(float) FMul 907 909
-             911:      7(ptr) AccessChain 53(inF0) 288
+             899:   48(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 898
+                              Store 897(r022) 899
+             901:   48(fvec4) Load 53(inF0)
+             902:   48(fvec4) Load 54(inF1)
+             903:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 901 902
+                              Store 900(r023) 903
+             905:   48(fvec4) Load 53(inF0)
+             906:   48(fvec4) Load 54(inF1)
+             907:    6(float) Dot 905 906
+                              Store 904(r024) 907
+             909:      7(ptr) AccessChain 53(inF0) 523
+             910:    6(float) Load 909
+             911:      7(ptr) AccessChain 54(inF1) 523
              912:    6(float) Load 911
-             913:      7(ptr) AccessChain 54(inF1) 393
-             914:    6(float) Load 913
-             915:   48(fvec4) CompositeConstruct 284 910 912 914
-                              Store 905(r025) 915
-             917:   48(fvec4) Load 53(inF0)
-             918:   48(fvec4) ExtInst 1(GLSL.std.450) 27(Exp) 917
-                              Store 916(r029) 918
+             913:    6(float) FMul 910 912
+             914:      7(ptr) AccessChain 53(inF0) 524
+             915:    6(float) Load 914
+             916:      7(ptr) AccessChain 54(inF1) 631
+             917:    6(float) Load 916
+             918:   48(fvec4) CompositeConstruct 283 913 915 917
+                              Store 908(r025) 918
              920:   48(fvec4) Load 53(inF0)
-             921:   48(fvec4) ExtInst 1(GLSL.std.450) 29(Exp2) 920
-                              Store 919(r030) 921
+             921:   48(fvec4) ExtInst 1(GLSL.std.450) 27(Exp) 920
+                              Store 919(r029) 921
              923:   48(fvec4) Load 53(inF0)
-             924:   48(fvec4) Load 54(inF1)
-             925:   48(fvec4) Load 55(inF2)
-             926:   48(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 923 924 925
-                              Store 922(r031) 926
-             931:   50(ivec4) ExtInst 1(GLSL.std.450) 75(FindUMsb) 930
-                              Store 927(r032) 931
-             933:   50(ivec4) ExtInst 1(GLSL.std.450) 73(FindILsb) 930
-                              Store 932(r033) 933
-             935:   48(fvec4) Load 53(inF0)
-             936:   48(fvec4) ExtInst 1(GLSL.std.450) 8(Floor) 935
-                              Store 934(r034) 936
+             924:   48(fvec4) ExtInst 1(GLSL.std.450) 29(Exp2) 923
+                              Store 922(r030) 924
+             926:   48(fvec4) Load 53(inF0)
+             927:   48(fvec4) Load 54(inF1)
+             928:   48(fvec4) Load 55(inF2)
+             929:   48(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 926 927 928
+                              Store 925(r031) 929
+             934:   50(ivec4) ExtInst 1(GLSL.std.450) 75(FindUMsb) 933
+                              Store 930(r032) 934
+             936:   50(ivec4) ExtInst 1(GLSL.std.450) 73(FindILsb) 933
+                              Store 935(r033) 936
              938:   48(fvec4) Load 53(inF0)
-             939:   48(fvec4) Load 54(inF1)
-             940:   48(fvec4) FMod 938 939
-                              Store 937(r036) 940
-             942:   48(fvec4) Load 53(inF0)
-             943:   48(fvec4) ExtInst 1(GLSL.std.450) 10(Fract) 942
-                              Store 941(r037) 943
+             939:   48(fvec4) ExtInst 1(GLSL.std.450) 8(Floor) 938
+                              Store 937(r034) 939
+             941:   48(fvec4) Load 53(inF0)
+             942:   48(fvec4) Load 54(inF1)
+             943:   48(fvec4) FMod 941 942
+                              Store 940(r036) 943
              945:   48(fvec4) Load 53(inF0)
-             947:946(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 945
-             948:  833(ivec4) CompositeExtract 947 1
-                              Store 54(inF1) 948
-             949:   48(fvec4) CompositeExtract 947 0
-                              Store 944(r038) 949
-             951:   48(fvec4) Load 53(inF0)
-             952:   48(fvec4) Fwidth 951
-                              Store 950(r039) 952
-             955:   48(fvec4) Load 53(inF0)
-             956:  861(bvec4) IsInf 955
-                              Store 954(r040) 956
+             946:   48(fvec4) ExtInst 1(GLSL.std.450) 10(Fract) 945
+                              Store 944(r037) 946
+             948:   48(fvec4) Load 53(inF0)
+             950:949(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 948
+             951:  836(ivec4) CompositeExtract 950 1
+                              Store 54(inF1) 951
+             952:   48(fvec4) CompositeExtract 950 0
+                              Store 947(r038) 952
+             954:   48(fvec4) Load 53(inF0)
+             955:   48(fvec4) Fwidth 954
+                              Store 953(r039) 955
              958:   48(fvec4) Load 53(inF0)
-             959:  861(bvec4) IsNan 958
-                              Store 957(r041) 959
+             959:  864(bvec4) IsInf 958
+                              Store 957(r040) 959
              961:   48(fvec4) Load 53(inF0)
-             962:   48(fvec4) Load 54(inF1)
-             963:   48(fvec4) ExtInst 1(GLSL.std.450) 53(Ldexp) 961 962
-                              Store 960(r042) 963
-             965:   48(fvec4) Load 53(inF0)
-             966:   48(fvec4) Load 54(inF1)
-             967:   48(fvec4) Load 55(inF2)
-             968:   48(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 965 966 967
-                              Store 964(r039a) 968
-             970:   48(fvec4) Load 53(inF0)
-             971:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 970
-                              Store 969(r043) 971
+             962:  864(bvec4) IsNan 961
+                              Store 960(r041) 962
+             964:   48(fvec4) Load 53(inF0)
+             965:   48(fvec4) Load 54(inF1)
+             966:   48(fvec4) ExtInst 1(GLSL.std.450) 53(Ldexp) 964 965
+                              Store 963(r042) 966
+             968:   48(fvec4) Load 53(inF0)
+             969:   48(fvec4) Load 54(inF1)
+             970:   48(fvec4) Load 55(inF2)
+             971:   48(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 968 969 970
+                              Store 967(r039a) 971
              973:   48(fvec4) Load 53(inF0)
-             974:   48(fvec4) ExtInst 1(GLSL.std.450) 28(Log) 973
-                              Store 972(r044) 974
+             974:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 973
+                              Store 972(r043) 974
              976:   48(fvec4) Load 53(inF0)
-             977:   48(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 976
-             978:   48(fvec4) VectorTimesScalar 977 263
-                              Store 975(r045) 978
-             980:   48(fvec4) Load 53(inF0)
-             981:   48(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 980
-                              Store 979(r046) 981
+             977:   48(fvec4) ExtInst 1(GLSL.std.450) 28(Log) 976
+                              Store 975(r044) 977
+             979:   48(fvec4) Load 53(inF0)
+             980:   48(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 979
+             981:   48(fvec4) VectorTimesScalar 980 262
+                              Store 978(r045) 981
              983:   48(fvec4) Load 53(inF0)
-             984:   48(fvec4) Load 54(inF1)
-             985:   48(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 983 984
-                              Store 982(r047) 985
-             987:   48(fvec4) Load 53(inF0)
-             988:   48(fvec4) Load 54(inF1)
-             989:   48(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 987 988
-                              Store 986(r048) 989
-             991:   48(fvec4) Load 53(inF0)
-             992:   48(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 991
-                              Store 990(r049) 992
+             984:   48(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 983
+                              Store 982(r046) 984
+             986:   48(fvec4) Load 53(inF0)
+             987:   48(fvec4) Load 54(inF1)
+             988:   48(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 986 987
+                              Store 985(r047) 988
+             990:   48(fvec4) Load 53(inF0)
+             991:   48(fvec4) Load 54(inF1)
+             992:   48(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 990 991
+                              Store 989(r048) 992
              994:   48(fvec4) Load 53(inF0)
-             995:   48(fvec4) Load 54(inF1)
-             996:   48(fvec4) ExtInst 1(GLSL.std.450) 26(Pow) 994 995
-                              Store 993(r050) 996
-             998:   48(fvec4) Load 53(inF0)
-             999:   48(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 998
-                              Store 997(r051) 999
+             995:   48(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 994
+                              Store 993(r049) 995
+             997:   48(fvec4) Load 53(inF0)
+             998:   48(fvec4) Load 54(inF1)
+             999:   48(fvec4) ExtInst 1(GLSL.std.450) 26(Pow) 997 998
+                              Store 996(r050) 999
             1001:   48(fvec4) Load 53(inF0)
-            1002:   48(fvec4) CompositeConstruct 284 284 284 284
-            1003:   48(fvec4) FDiv 1002 1001
-                              Store 1000(r052) 1003
-            1005:   48(fvec4) Load 53(inF0)
-            1006:   48(fvec4) Load 54(inF1)
-            1007:   48(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 1005 1006
-                              Store 1004(r053) 1007
-            1009:   48(fvec4) Load 53(inF0)
-            1010:   48(fvec4) Load 54(inF1)
-            1011:   48(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 1009 1010 519
-                              Store 1008(r054) 1011
-            1014:   50(ivec4) BitReverse 1013
-                              Store 1012(r055) 1014
-            1016:   48(fvec4) Load 53(inF0)
-            1017:   48(fvec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 1016
-                              Store 1015(r056) 1017
+            1002:   48(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 1001
+                              Store 1000(r051) 1002
+            1004:   48(fvec4) Load 53(inF0)
+            1005:   48(fvec4) CompositeConstruct 283 283 283 283
+            1006:   48(fvec4) FDiv 1005 1004
+                              Store 1003(r052) 1006
+            1008:   48(fvec4) Load 53(inF0)
+            1009:   48(fvec4) Load 54(inF1)
+            1010:   48(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 1008 1009
+                              Store 1007(r053) 1010
+            1012:   48(fvec4) Load 53(inF0)
+            1013:   48(fvec4) Load 54(inF1)
+            1014:   48(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 1012 1013 520
+                              Store 1011(r054) 1014
+            1017:   50(ivec4) BitReverse 1016
+                              Store 1015(r055) 1017
             1019:   48(fvec4) Load 53(inF0)
-            1020:   48(fvec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1019
-                              Store 1018(r057) 1020
+            1020:   48(fvec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 1019
+                              Store 1018(r056) 1020
             1022:   48(fvec4) Load 53(inF0)
-            1023:   48(fvec4) CompositeConstruct 175 175 175 175
-            1024:   48(fvec4) CompositeConstruct 284 284 284 284
-            1025:   48(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 1022 1023 1024
-                              Store 1021(r058) 1025
-            1027:   48(fvec4) Load 53(inF0)
-            1028:   48(fvec4) ExtInst 1(GLSL.std.450) 6(FSign) 1027
-                              Store 1026(r059) 1028
+            1023:   48(fvec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1022
+                              Store 1021(r057) 1023
+            1025:   48(fvec4) Load 53(inF0)
+            1026:   48(fvec4) CompositeConstruct 175 175 175 175
+            1027:   48(fvec4) CompositeConstruct 283 283 283 283
+            1028:   48(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 1025 1026 1027
+                              Store 1024(r058) 1028
             1030:   48(fvec4) Load 53(inF0)
-            1031:   48(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1030
-                              Store 1029(r060) 1031
-            1032:   48(fvec4) Load 53(inF0)
-            1033:   48(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1032
-                              Store 54(inF1) 1033
-            1034:   48(fvec4) Load 53(inF0)
-            1035:   48(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 1034
-                              Store 55(inF2) 1035
+            1031:   48(fvec4) ExtInst 1(GLSL.std.450) 6(FSign) 1030
+                              Store 1029(r059) 1031
+            1033:   48(fvec4) Load 53(inF0)
+            1034:   48(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1033
+                              Store 1032(r060) 1034
+            1035:   48(fvec4) Load 53(inF0)
+            1036:   48(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1035
+                              Store 54(inF1) 1036
             1037:   48(fvec4) Load 53(inF0)
-            1038:   48(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 1037
-                              Store 1036(r061) 1038
+            1038:   48(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 1037
+                              Store 55(inF2) 1038
             1040:   48(fvec4) Load 53(inF0)
-            1041:   48(fvec4) Load 54(inF1)
-            1042:   48(fvec4) Load 55(inF2)
-            1043:   48(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 1040 1041 1042
-                              Store 1039(r062) 1043
-            1045:   48(fvec4) Load 53(inF0)
-            1046:   48(fvec4) ExtInst 1(GLSL.std.450) 31(Sqrt) 1045
-                              Store 1044(r063) 1046
+            1041:   48(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 1040
+                              Store 1039(r061) 1041
+            1043:   48(fvec4) Load 53(inF0)
+            1044:   48(fvec4) Load 54(inF1)
+            1045:   48(fvec4) Load 55(inF2)
+            1046:   48(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 1043 1044 1045
+                              Store 1042(r062) 1046
             1048:   48(fvec4) Load 53(inF0)
-            1049:   48(fvec4) Load 54(inF1)
-            1050:   48(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 1048 1049
-                              Store 1047(r064) 1050
-            1052:   48(fvec4) Load 53(inF0)
-            1053:   48(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 1052
-                              Store 1051(r065) 1053
+            1049:   48(fvec4) ExtInst 1(GLSL.std.450) 31(Sqrt) 1048
+                              Store 1047(r063) 1049
+            1051:   48(fvec4) Load 53(inF0)
+            1052:   48(fvec4) Load 54(inF1)
+            1053:   48(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 1051 1052
+                              Store 1050(r064) 1053
             1055:   48(fvec4) Load 53(inF0)
-            1056:   48(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 1055
-                              Store 1054(r066) 1056
+            1056:   48(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 1055
+                              Store 1054(r065) 1056
             1058:   48(fvec4) Load 53(inF0)
-            1059:   48(fvec4) ExtInst 1(GLSL.std.450) 3(Trunc) 1058
-                              Store 1057(r067) 1059
-                              ReturnValue 1061
+            1059:   48(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 1058
+                              Store 1057(r066) 1059
+            1061:   48(fvec4) Load 53(inF0)
+            1062:   48(fvec4) ExtInst 1(GLSL.std.450) 3(Trunc) 1061
+                              Store 1060(r067) 1062
+                              ReturnValue 1064
                               FunctionEnd
 66(PixelShaderFunction2x2(mf22;mf22;mf22;):          60 Function None 62
         63(inF0):     61(ptr) FunctionParameter
         64(inF1):     61(ptr) FunctionParameter
         65(inF2):     61(ptr) FunctionParameter
               67:             Label
-      1064(r000):    132(ptr) Variable Function
-      1067(r001):     61(ptr) Variable Function
-      1072(r003):    132(ptr) Variable Function
-      1075(r004):     61(ptr) Variable Function
-      1078(r005):     61(ptr) Variable Function
-      1081(r006):     61(ptr) Variable Function
-      1085(r007):     61(ptr) Variable Function
-      1096(r008):     61(ptr) Variable Function
-      1101(r009):     61(ptr) Variable Function
-      1104(r010):     61(ptr) Variable Function
-      1107(r011):     61(ptr) Variable Function
-      1110(r012):     61(ptr) Variable Function
-      1113(r013):     61(ptr) Variable Function
-      1116(r014):     61(ptr) Variable Function
-      1119(r015):     61(ptr) Variable Function
-      1122(r016):     61(ptr) Variable Function
-      1125(r017):     61(ptr) Variable Function
-      1128(r018):      7(ptr) Variable Function
-      1131(r019):     61(ptr) Variable Function
-      1134(R020):     61(ptr) Variable Function
-      1137(r021):     61(ptr) Variable Function
-      1140(r022):     61(ptr) Variable Function
-      1150(r023):     61(ptr) Variable Function
-      1153(r024):     61(ptr) Variable Function
-      1159(r025):     61(ptr) Variable Function
-      1162(r026):     61(ptr) Variable Function
-     1166(r026a):     61(ptr) Variable Function
-      1171(r027):     61(ptr) Variable Function
-      1174(r028):     61(ptr) Variable Function
-      1178(r029):     61(ptr) Variable Function
-      1181(r030):     61(ptr) Variable Function
-      1185(r031):     61(ptr) Variable Function
-      1189(r032):     61(ptr) Variable Function
-      1193(r033):     61(ptr) Variable Function
-      1196(r034):     61(ptr) Variable Function
-      1199(r035):     61(ptr) Variable Function
-      1202(r036):     61(ptr) Variable Function
-      1207(r037):     61(ptr) Variable Function
-      1210(r038):     61(ptr) Variable Function
-      1217(r039):     61(ptr) Variable Function
-      1220(r049):     61(ptr) Variable Function
-      1225(r041):     61(ptr) Variable Function
-      1228(r042):     61(ptr) Variable Function
-      1232(r043):     61(ptr) Variable Function
-      1235(r044):     61(ptr) Variable Function
-      1240(r046):     61(ptr) Variable Function
-            1065:          60 Load 63(inF0)
-            1066:   131(bool) All 1065
-                              Store 1064(r000) 1066
+      1067(r000):    132(ptr) Variable Function
+      1070(r001):     61(ptr) Variable Function
+      1075(r003):    132(ptr) Variable Function
+      1078(r004):     61(ptr) Variable Function
+      1081(r005):     61(ptr) Variable Function
+      1084(r006):     61(ptr) Variable Function
+      1088(r007):     61(ptr) Variable Function
+      1099(r008):     61(ptr) Variable Function
+      1104(r009):     61(ptr) Variable Function
+      1107(r010):     61(ptr) Variable Function
+      1110(r011):     61(ptr) Variable Function
+      1113(r012):     61(ptr) Variable Function
+      1116(r013):     61(ptr) Variable Function
+      1119(r014):     61(ptr) Variable Function
+      1122(r015):     61(ptr) Variable Function
+      1125(r016):     61(ptr) Variable Function
+      1128(r017):     61(ptr) Variable Function
+      1131(r018):      7(ptr) Variable Function
+      1134(r019):     61(ptr) Variable Function
+      1137(R020):     61(ptr) Variable Function
+      1140(r021):     61(ptr) Variable Function
+      1143(r022):     61(ptr) Variable Function
+      1153(r023):     61(ptr) Variable Function
+      1156(r024):     61(ptr) Variable Function
+      1162(r025):     61(ptr) Variable Function
+      1165(r026):     61(ptr) Variable Function
+     1169(r026a):     61(ptr) Variable Function
+      1174(r027):     61(ptr) Variable Function
+      1177(r028):     61(ptr) Variable Function
+      1181(r029):     61(ptr) Variable Function
+      1184(r030):     61(ptr) Variable Function
+      1188(r031):     61(ptr) Variable Function
+      1192(r032):     61(ptr) Variable Function
+      1196(r033):     61(ptr) Variable Function
+      1199(r034):     61(ptr) Variable Function
+      1202(r035):     61(ptr) Variable Function
+      1205(r036):     61(ptr) Variable Function
+      1210(r037):     61(ptr) Variable Function
+      1213(r038):     61(ptr) Variable Function
+      1220(r039):     61(ptr) Variable Function
+      1223(r049):     61(ptr) Variable Function
+      1228(r041):     61(ptr) Variable Function
+      1231(r042):     61(ptr) Variable Function
+      1235(r043):     61(ptr) Variable Function
+      1238(r044):     61(ptr) Variable Function
+      1243(r046):     61(ptr) Variable Function
             1068:          60 Load 63(inF0)
-            1069:          60 ExtInst 1(GLSL.std.450) 4(FAbs) 1068
-                              Store 1067(r001) 1069
-            1070:          60 Load 63(inF0)
-            1071:          60 ExtInst 1(GLSL.std.450) 17(Acos) 1070
+            1069:   131(bool) All 1068
+                              Store 1067(r000) 1069
+            1071:          60 Load 63(inF0)
+            1072:          60 ExtInst 1(GLSL.std.450) 4(FAbs) 1071
+                              Store 1070(r001) 1072
             1073:          60 Load 63(inF0)
-            1074:   131(bool) Any 1073
-                              Store 1072(r003) 1074
+            1074:          60 ExtInst 1(GLSL.std.450) 17(Acos) 1073
             1076:          60 Load 63(inF0)
-            1077:          60 ExtInst 1(GLSL.std.450) 16(Asin) 1076
-                              Store 1075(r004) 1077
+            1077:   131(bool) Any 1076
+                              Store 1075(r003) 1077
             1079:          60 Load 63(inF0)
-            1080:          60 ExtInst 1(GLSL.std.450) 18(Atan) 1079
-                              Store 1078(r005) 1080
+            1080:          60 ExtInst 1(GLSL.std.450) 16(Asin) 1079
+                              Store 1078(r004) 1080
             1082:          60 Load 63(inF0)
-            1083:          60 Load 64(inF1)
-            1084:          60 ExtInst 1(GLSL.std.450) 25(Atan2) 1082 1083
-                              Store 1081(r006) 1084
-            1086:          60 Load 63(inF0)
-            1087:          60 ExtInst 1(GLSL.std.450) 9(Ceil) 1086
-                              Store 1085(r007) 1087
-            1088:          60 Load 63(inF0)
-            1091:        1090 FOrdLessThan 1088 1089
-            1092:   131(bool) Any 1091
-                              SelectionMerge 1094 None
-                              BranchConditional 1092 1093 1094
-            1093:               Label
+            1083:          60 ExtInst 1(GLSL.std.450) 18(Atan) 1082
+                              Store 1081(r005) 1083
+            1085:          60 Load 63(inF0)
+            1086:          60 Load 64(inF1)
+            1087:          60 ExtInst 1(GLSL.std.450) 25(Atan2) 1085 1086
+                              Store 1084(r006) 1087
+            1089:          60 Load 63(inF0)
+            1090:          60 ExtInst 1(GLSL.std.450) 9(Ceil) 1089
+                              Store 1088(r007) 1090
+            1091:          60 Load 63(inF0)
+            1094:        1093 FOrdLessThan 1091 1092
+            1095:   131(bool) Any 1094
+                              SelectionMerge 1097 None
+                              BranchConditional 1095 1096 1097
+            1096:               Label
                                 Kill
-            1094:             Label
-            1097:          60 Load 63(inF0)
-            1098:          60 Load 64(inF1)
-            1099:          60 Load 65(inF2)
-            1100:          60 ExtInst 1(GLSL.std.450) 43(FClamp) 1097 1098 1099
-                              Store 1096(r008) 1100
-            1102:          60 Load 63(inF0)
-            1103:          60 ExtInst 1(GLSL.std.450) 14(Cos) 1102
-                              Store 1101(r009) 1103
+            1097:             Label
+            1100:          60 Load 63(inF0)
+            1101:          60 Load 64(inF1)
+            1102:          60 Load 65(inF2)
+            1103:          60 ExtInst 1(GLSL.std.450) 43(FClamp) 1100 1101 1102
+                              Store 1099(r008) 1103
             1105:          60 Load 63(inF0)
-            1106:          60 ExtInst 1(GLSL.std.450) 20(Cosh) 1105
-                              Store 1104(r010) 1106
+            1106:          60 ExtInst 1(GLSL.std.450) 14(Cos) 1105
+                              Store 1104(r009) 1106
             1108:          60 Load 63(inF0)
-            1109:          60 DPdx 1108
-                              Store 1107(r011) 1109
+            1109:          60 ExtInst 1(GLSL.std.450) 20(Cosh) 1108
+                              Store 1107(r010) 1109
             1111:          60 Load 63(inF0)
-            1112:          60 DPdxCoarse 1111
-                              Store 1110(r012) 1112
+            1112:          60 DPdx 1111
+                              Store 1110(r011) 1112
             1114:          60 Load 63(inF0)
-            1115:          60 DPdxFine 1114
-                              Store 1113(r013) 1115
+            1115:          60 DPdxCoarse 1114
+                              Store 1113(r012) 1115
             1117:          60 Load 63(inF0)
-            1118:          60 DPdy 1117
-                              Store 1116(r014) 1118
+            1118:          60 DPdxFine 1117
+                              Store 1116(r013) 1118
             1120:          60 Load 63(inF0)
-            1121:          60 DPdyCoarse 1120
-                              Store 1119(r015) 1121
+            1121:          60 DPdy 1120
+                              Store 1119(r014) 1121
             1123:          60 Load 63(inF0)
-            1124:          60 DPdyFine 1123
-                              Store 1122(r016) 1124
+            1124:          60 DPdyCoarse 1123
+                              Store 1122(r015) 1124
             1126:          60 Load 63(inF0)
-            1127:          60 ExtInst 1(GLSL.std.450) 12(Degrees) 1126
-                              Store 1125(r017) 1127
+            1127:          60 DPdyFine 1126
+                              Store 1125(r016) 1127
             1129:          60 Load 63(inF0)
-            1130:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1129
-                              Store 1128(r018) 1130
+            1130:          60 ExtInst 1(GLSL.std.450) 12(Degrees) 1129
+                              Store 1128(r017) 1130
             1132:          60 Load 63(inF0)
-            1133:          60 ExtInst 1(GLSL.std.450) 27(Exp) 1132
-                              Store 1131(r019) 1133
+            1133:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1132
+                              Store 1131(r018) 1133
             1135:          60 Load 63(inF0)
-            1136:          60 ExtInst 1(GLSL.std.450) 29(Exp2) 1135
-                              Store 1134(R020) 1136
+            1136:          60 ExtInst 1(GLSL.std.450) 27(Exp) 1135
+                              Store 1134(r019) 1136
             1138:          60 Load 63(inF0)
-            1139:          60 ExtInst 1(GLSL.std.450) 8(Floor) 1138
-                              Store 1137(r021) 1139
+            1139:          60 ExtInst 1(GLSL.std.450) 29(Exp2) 1138
+                              Store 1137(R020) 1139
             1141:          60 Load 63(inF0)
-            1142:          60 Load 64(inF1)
-            1143:   24(fvec2) CompositeExtract 1141 0
-            1144:   24(fvec2) CompositeExtract 1142 0
-            1145:   24(fvec2) FMod 1143 1144
-            1146:   24(fvec2) CompositeExtract 1141 1
-            1147:   24(fvec2) CompositeExtract 1142 1
+            1142:          60 ExtInst 1(GLSL.std.450) 8(Floor) 1141
+                              Store 1140(r021) 1142
+            1144:          60 Load 63(inF0)
+            1145:          60 Load 64(inF1)
+            1146:   24(fvec2) CompositeExtract 1144 0
+            1147:   24(fvec2) CompositeExtract 1145 0
             1148:   24(fvec2) FMod 1146 1147
-            1149:          60 CompositeConstruct 1145 1148
-                              Store 1140(r022) 1149
-            1151:          60 Load 63(inF0)
-            1152:          60 ExtInst 1(GLSL.std.450) 10(Fract) 1151
-                              Store 1150(r023) 1152
+            1149:   24(fvec2) CompositeExtract 1144 1
+            1150:   24(fvec2) CompositeExtract 1145 1
+            1151:   24(fvec2) FMod 1149 1150
+            1152:          60 CompositeConstruct 1148 1151
+                              Store 1143(r022) 1152
             1154:          60 Load 63(inF0)
-            1156:1155(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 1154
-            1157:  352(ivec2) CompositeExtract 1156 1
-                              Store 64(inF1) 1157
-            1158:          60 CompositeExtract 1156 0
-                              Store 1153(r024) 1158
-            1160:          60 Load 63(inF0)
-            1161:          60 Fwidth 1160
-                              Store 1159(r025) 1161
+            1155:          60 ExtInst 1(GLSL.std.450) 10(Fract) 1154
+                              Store 1153(r023) 1155
+            1157:          60 Load 63(inF0)
+            1159:1158(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 1157
+            1160:  352(ivec2) CompositeExtract 1159 1
+                              Store 64(inF1) 1160
+            1161:          60 CompositeExtract 1159 0
+                              Store 1156(r024) 1161
             1163:          60 Load 63(inF0)
-            1164:          60 Load 64(inF1)
-            1165:          60 ExtInst 1(GLSL.std.450) 53(Ldexp) 1163 1164
-                              Store 1162(r026) 1165
-            1167:          60 Load 63(inF0)
-            1168:          60 Load 64(inF1)
-            1169:          60 Load 65(inF2)
-            1170:          60 ExtInst 1(GLSL.std.450) 46(FMix) 1167 1168 1169
-                              Store 1166(r026a) 1170
-            1172:          60 Load 63(inF0)
-            1173:          60 ExtInst 1(GLSL.std.450) 28(Log) 1172
-                              Store 1171(r027) 1173
+            1164:          60 Fwidth 1163
+                              Store 1162(r025) 1164
+            1166:          60 Load 63(inF0)
+            1167:          60 Load 64(inF1)
+            1168:          60 ExtInst 1(GLSL.std.450) 53(Ldexp) 1166 1167
+                              Store 1165(r026) 1168
+            1170:          60 Load 63(inF0)
+            1171:          60 Load 64(inF1)
+            1172:          60 Load 65(inF2)
+            1173:          60 ExtInst 1(GLSL.std.450) 46(FMix) 1170 1171 1172
+                              Store 1169(r026a) 1173
             1175:          60 Load 63(inF0)
-            1176:          60 ExtInst 1(GLSL.std.450) 30(Log2) 1175
-            1177:          60 MatrixTimesScalar 1176 263
-                              Store 1174(r028) 1177
-            1179:          60 Load 63(inF0)
-            1180:          60 ExtInst 1(GLSL.std.450) 30(Log2) 1179
-                              Store 1178(r029) 1180
+            1176:          60 ExtInst 1(GLSL.std.450) 28(Log) 1175
+                              Store 1174(r027) 1176
+            1178:          60 Load 63(inF0)
+            1179:          60 ExtInst 1(GLSL.std.450) 30(Log2) 1178
+            1180:          60 MatrixTimesScalar 1179 262
+                              Store 1177(r028) 1180
             1182:          60 Load 63(inF0)
-            1183:          60 Load 64(inF1)
-            1184:          60 ExtInst 1(GLSL.std.450) 40(FMax) 1182 1183
-                              Store 1181(r030) 1184
-            1186:          60 Load 63(inF0)
-            1187:          60 Load 64(inF1)
-            1188:          60 ExtInst 1(GLSL.std.450) 37(FMin) 1186 1187
-                              Store 1185(r031) 1188
-            1190:          60 Load 63(inF0)
-            1191:          60 Load 64(inF1)
-            1192:          60 ExtInst 1(GLSL.std.450) 26(Pow) 1190 1191
-                              Store 1189(r032) 1192
-            1194:          60 Load 63(inF0)
-            1195:          60 ExtInst 1(GLSL.std.450) 11(Radians) 1194
-                              Store 1193(r033) 1195
+            1183:          60 ExtInst 1(GLSL.std.450) 30(Log2) 1182
+                              Store 1181(r029) 1183
+            1185:          60 Load 63(inF0)
+            1186:          60 Load 64(inF1)
+            1187:          60 ExtInst 1(GLSL.std.450) 40(FMax) 1185 1186
+                              Store 1184(r030) 1187
+            1189:          60 Load 63(inF0)
+            1190:          60 Load 64(inF1)
+            1191:          60 ExtInst 1(GLSL.std.450) 37(FMin) 1189 1190
+                              Store 1188(r031) 1191
+            1193:          60 Load 63(inF0)
+            1194:          60 Load 64(inF1)
+            1195:          60 ExtInst 1(GLSL.std.450) 26(Pow) 1193 1194
+                              Store 1192(r032) 1195
             1197:          60 Load 63(inF0)
-            1198:          60 ExtInst 1(GLSL.std.450) 2(RoundEven) 1197
-                              Store 1196(r034) 1198
+            1198:          60 ExtInst 1(GLSL.std.450) 11(Radians) 1197
+                              Store 1196(r033) 1198
             1200:          60 Load 63(inF0)
-            1201:          60 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1200
-                              Store 1199(r035) 1201
+            1201:          60 ExtInst 1(GLSL.std.450) 2(RoundEven) 1200
+                              Store 1199(r034) 1201
             1203:          60 Load 63(inF0)
-            1204:   24(fvec2) CompositeConstruct 175 175
-            1205:   24(fvec2) CompositeConstruct 284 284
-            1206:          60 ExtInst 1(GLSL.std.450) 43(FClamp) 1203 1204 1205
-                              Store 1202(r036) 1206
-            1208:          60 Load 63(inF0)
-            1209:          60 ExtInst 1(GLSL.std.450) 6(FSign) 1208
-                              Store 1207(r037) 1209
+            1204:          60 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1203
+                              Store 1202(r035) 1204
+            1206:          60 Load 63(inF0)
+            1207:   24(fvec2) CompositeConstruct 175 175
+            1208:   24(fvec2) CompositeConstruct 283 283
+            1209:          60 ExtInst 1(GLSL.std.450) 43(FClamp) 1206 1207 1208
+                              Store 1205(r036) 1209
             1211:          60 Load 63(inF0)
-            1212:          60 ExtInst 1(GLSL.std.450) 13(Sin) 1211
-                              Store 1210(r038) 1212
-            1213:          60 Load 63(inF0)
-            1214:          60 ExtInst 1(GLSL.std.450) 13(Sin) 1213
-                              Store 64(inF1) 1214
-            1215:          60 Load 63(inF0)
-            1216:          60 ExtInst 1(GLSL.std.450) 14(Cos) 1215
-                              Store 65(inF2) 1216
+            1212:          60 ExtInst 1(GLSL.std.450) 6(FSign) 1211
+                              Store 1210(r037) 1212
+            1214:          60 Load 63(inF0)
+            1215:          60 ExtInst 1(GLSL.std.450) 13(Sin) 1214
+                              Store 1213(r038) 1215
+            1216:          60 Load 63(inF0)
+            1217:          60 ExtInst 1(GLSL.std.450) 13(Sin) 1216
+                              Store 64(inF1) 1217
             1218:          60 Load 63(inF0)
-            1219:          60 ExtInst 1(GLSL.std.450) 19(Sinh) 1218
-                              Store 1217(r039) 1219
+            1219:          60 ExtInst 1(GLSL.std.450) 14(Cos) 1218
+                              Store 65(inF2) 1219
             1221:          60 Load 63(inF0)
-            1222:          60 Load 64(inF1)
-            1223:          60 Load 65(inF2)
-            1224:          60 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1221 1222 1223
-                              Store 1220(r049) 1224
-            1226:          60 Load 63(inF0)
-            1227:          60 ExtInst 1(GLSL.std.450) 31(Sqrt) 1226
-                              Store 1225(r041) 1227
+            1222:          60 ExtInst 1(GLSL.std.450) 19(Sinh) 1221
+                              Store 1220(r039) 1222
+            1224:          60 Load 63(inF0)
+            1225:          60 Load 64(inF1)
+            1226:          60 Load 65(inF2)
+            1227:          60 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1224 1225 1226
+                              Store 1223(r049) 1227
             1229:          60 Load 63(inF0)
-            1230:          60 Load 64(inF1)
-            1231:          60 ExtInst 1(GLSL.std.450) 48(Step) 1229 1230
-                              Store 1228(r042) 1231
-            1233:          60 Load 63(inF0)
-            1234:          60 ExtInst 1(GLSL.std.450) 15(Tan) 1233
-                              Store 1232(r043) 1234
+            1230:          60 ExtInst 1(GLSL.std.450) 31(Sqrt) 1229
+                              Store 1228(r041) 1230
+            1232:          60 Load 63(inF0)
+            1233:          60 Load 64(inF1)
+            1234:          60 ExtInst 1(GLSL.std.450) 48(Step) 1232 1233
+                              Store 1231(r042) 1234
             1236:          60 Load 63(inF0)
-            1237:          60 ExtInst 1(GLSL.std.450) 21(Tanh) 1236
-                              Store 1235(r044) 1237
-            1238:          60 Load 63(inF0)
-            1239:          60 Transpose 1238
+            1237:          60 ExtInst 1(GLSL.std.450) 15(Tan) 1236
+                              Store 1235(r043) 1237
+            1239:          60 Load 63(inF0)
+            1240:          60 ExtInst 1(GLSL.std.450) 21(Tanh) 1239
+                              Store 1238(r044) 1240
             1241:          60 Load 63(inF0)
-            1242:          60 ExtInst 1(GLSL.std.450) 3(Trunc) 1241
-                              Store 1240(r046) 1242
-                              ReturnValue 1244
+            1242:          60 Transpose 1241
+            1244:          60 Load 63(inF0)
+            1245:          60 ExtInst 1(GLSL.std.450) 3(Trunc) 1244
+                              Store 1243(r046) 1245
+                              ReturnValue 1247
                               FunctionEnd
 74(PixelShaderFunction3x3(mf33;mf33;mf33;):          68 Function None 70
         71(inF0):     69(ptr) FunctionParameter
         72(inF1):     69(ptr) FunctionParameter
         73(inF2):     69(ptr) FunctionParameter
               75:             Label
-      1247(r000):    132(ptr) Variable Function
-      1250(r001):     69(ptr) Variable Function
-      1255(r003):    132(ptr) Variable Function
-      1258(r004):     69(ptr) Variable Function
-      1261(r005):     69(ptr) Variable Function
-      1264(r006):     69(ptr) Variable Function
-      1268(r007):     69(ptr) Variable Function
-      1279(r008):     69(ptr) Variable Function
-      1284(r009):     69(ptr) Variable Function
-      1287(r010):     69(ptr) Variable Function
-      1290(r011):     69(ptr) Variable Function
-      1293(r012):     69(ptr) Variable Function
-      1296(r013):     69(ptr) Variable Function
-      1299(r014):     69(ptr) Variable Function
-      1302(r015):     69(ptr) Variable Function
-      1305(r016):     69(ptr) Variable Function
-      1308(r017):     69(ptr) Variable Function
-      1311(r018):      7(ptr) Variable Function
-      1314(r019):     69(ptr) Variable Function
-      1317(R020):     69(ptr) Variable Function
-      1320(r021):     69(ptr) Variable Function
-      1323(r022):     69(ptr) Variable Function
-      1336(r023):     69(ptr) Variable Function
-      1339(r024):     69(ptr) Variable Function
-      1345(r025):     69(ptr) Variable Function
-      1348(r026):     69(ptr) Variable Function
-     1352(r026a):     69(ptr) Variable Function
-      1357(r027):     69(ptr) Variable Function
-      1360(r028):     69(ptr) Variable Function
-      1364(r029):     69(ptr) Variable Function
-      1367(r030):     69(ptr) Variable Function
-      1371(r031):     69(ptr) Variable Function
-      1375(r032):     69(ptr) Variable Function
-      1379(r033):     69(ptr) Variable Function
-      1382(r034):     69(ptr) Variable Function
-      1385(r035):     69(ptr) Variable Function
-      1388(r036):     69(ptr) Variable Function
-      1393(r037):     69(ptr) Variable Function
-      1396(r038):     69(ptr) Variable Function
-      1403(r039):     69(ptr) Variable Function
-      1406(r049):     69(ptr) Variable Function
-      1411(r041):     69(ptr) Variable Function
-      1414(r042):     69(ptr) Variable Function
-      1418(r043):     69(ptr) Variable Function
-      1421(r044):     69(ptr) Variable Function
-      1426(r046):     69(ptr) Variable Function
-            1248:          68 Load 71(inF0)
-            1249:   131(bool) All 1248
-                              Store 1247(r000) 1249
+      1250(r000):    132(ptr) Variable Function
+      1253(r001):     69(ptr) Variable Function
+      1258(r003):    132(ptr) Variable Function
+      1261(r004):     69(ptr) Variable Function
+      1264(r005):     69(ptr) Variable Function
+      1267(r006):     69(ptr) Variable Function
+      1271(r007):     69(ptr) Variable Function
+      1282(r008):     69(ptr) Variable Function
+      1287(r009):     69(ptr) Variable Function
+      1290(r010):     69(ptr) Variable Function
+      1293(r011):     69(ptr) Variable Function
+      1296(r012):     69(ptr) Variable Function
+      1299(r013):     69(ptr) Variable Function
+      1302(r014):     69(ptr) Variable Function
+      1305(r015):     69(ptr) Variable Function
+      1308(r016):     69(ptr) Variable Function
+      1311(r017):     69(ptr) Variable Function
+      1314(r018):      7(ptr) Variable Function
+      1317(r019):     69(ptr) Variable Function
+      1320(R020):     69(ptr) Variable Function
+      1323(r021):     69(ptr) Variable Function
+      1326(r022):     69(ptr) Variable Function
+      1339(r023):     69(ptr) Variable Function
+      1342(r024):     69(ptr) Variable Function
+      1348(r025):     69(ptr) Variable Function
+      1351(r026):     69(ptr) Variable Function
+     1355(r026a):     69(ptr) Variable Function
+      1360(r027):     69(ptr) Variable Function
+      1363(r028):     69(ptr) Variable Function
+      1367(r029):     69(ptr) Variable Function
+      1370(r030):     69(ptr) Variable Function
+      1374(r031):     69(ptr) Variable Function
+      1378(r032):     69(ptr) Variable Function
+      1382(r033):     69(ptr) Variable Function
+      1385(r034):     69(ptr) Variable Function
+      1388(r035):     69(ptr) Variable Function
+      1391(r036):     69(ptr) Variable Function
+      1396(r037):     69(ptr) Variable Function
+      1399(r038):     69(ptr) Variable Function
+      1406(r039):     69(ptr) Variable Function
+      1409(r049):     69(ptr) Variable Function
+      1414(r041):     69(ptr) Variable Function
+      1417(r042):     69(ptr) Variable Function
+      1421(r043):     69(ptr) Variable Function
+      1424(r044):     69(ptr) Variable Function
+      1429(r046):     69(ptr) Variable Function
             1251:          68 Load 71(inF0)
-            1252:          68 ExtInst 1(GLSL.std.450) 4(FAbs) 1251
-                              Store 1250(r001) 1252
-            1253:          68 Load 71(inF0)
-            1254:          68 ExtInst 1(GLSL.std.450) 17(Acos) 1253
+            1252:   131(bool) All 1251
+                              Store 1250(r000) 1252
+            1254:          68 Load 71(inF0)
+            1255:          68 ExtInst 1(GLSL.std.450) 4(FAbs) 1254
+                              Store 1253(r001) 1255
             1256:          68 Load 71(inF0)
-            1257:   131(bool) Any 1256
-                              Store 1255(r003) 1257
+            1257:          68 ExtInst 1(GLSL.std.450) 17(Acos) 1256
             1259:          68 Load 71(inF0)
-            1260:          68 ExtInst 1(GLSL.std.450) 16(Asin) 1259
-                              Store 1258(r004) 1260
+            1260:   131(bool) Any 1259
+                              Store 1258(r003) 1260
             1262:          68 Load 71(inF0)
-            1263:          68 ExtInst 1(GLSL.std.450) 18(Atan) 1262
-                              Store 1261(r005) 1263
+            1263:          68 ExtInst 1(GLSL.std.450) 16(Asin) 1262
+                              Store 1261(r004) 1263
             1265:          68 Load 71(inF0)
-            1266:          68 Load 72(inF1)
-            1267:          68 ExtInst 1(GLSL.std.450) 25(Atan2) 1265 1266
-                              Store 1264(r006) 1267
-            1269:          68 Load 71(inF0)
-            1270:          68 ExtInst 1(GLSL.std.450) 9(Ceil) 1269
-                              Store 1268(r007) 1270
-            1271:          68 Load 71(inF0)
-            1274:        1273 FOrdLessThan 1271 1272
-            1275:   131(bool) Any 1274
-                              SelectionMerge 1277 None
-                              BranchConditional 1275 1276 1277
-            1276:               Label
+            1266:          68 ExtInst 1(GLSL.std.450) 18(Atan) 1265
+                              Store 1264(r005) 1266
+            1268:          68 Load 71(inF0)
+            1269:          68 Load 72(inF1)
+            1270:          68 ExtInst 1(GLSL.std.450) 25(Atan2) 1268 1269
+                              Store 1267(r006) 1270
+            1272:          68 Load 71(inF0)
+            1273:          68 ExtInst 1(GLSL.std.450) 9(Ceil) 1272
+                              Store 1271(r007) 1273
+            1274:          68 Load 71(inF0)
+            1277:        1276 FOrdLessThan 1274 1275
+            1278:   131(bool) Any 1277
+                              SelectionMerge 1280 None
+                              BranchConditional 1278 1279 1280
+            1279:               Label
                                 Kill
-            1277:             Label
-            1280:          68 Load 71(inF0)
-            1281:          68 Load 72(inF1)
-            1282:          68 Load 73(inF2)
-            1283:          68 ExtInst 1(GLSL.std.450) 43(FClamp) 1280 1281 1282
-                              Store 1279(r008) 1283
-            1285:          68 Load 71(inF0)
-            1286:          68 ExtInst 1(GLSL.std.450) 14(Cos) 1285
-                              Store 1284(r009) 1286
+            1280:             Label
+            1283:          68 Load 71(inF0)
+            1284:          68 Load 72(inF1)
+            1285:          68 Load 73(inF2)
+            1286:          68 ExtInst 1(GLSL.std.450) 43(FClamp) 1283 1284 1285
+                              Store 1282(r008) 1286
             1288:          68 Load 71(inF0)
-            1289:          68 ExtInst 1(GLSL.std.450) 20(Cosh) 1288
-                              Store 1287(r010) 1289
+            1289:          68 ExtInst 1(GLSL.std.450) 14(Cos) 1288
+                              Store 1287(r009) 1289
             1291:          68 Load 71(inF0)
-            1292:          68 DPdx 1291
-                              Store 1290(r011) 1292
+            1292:          68 ExtInst 1(GLSL.std.450) 20(Cosh) 1291
+                              Store 1290(r010) 1292
             1294:          68 Load 71(inF0)
-            1295:          68 DPdxCoarse 1294
-                              Store 1293(r012) 1295
+            1295:          68 DPdx 1294
+                              Store 1293(r011) 1295
             1297:          68 Load 71(inF0)
-            1298:          68 DPdxFine 1297
-                              Store 1296(r013) 1298
+            1298:          68 DPdxCoarse 1297
+                              Store 1296(r012) 1298
             1300:          68 Load 71(inF0)
-            1301:          68 DPdy 1300
-                              Store 1299(r014) 1301
+            1301:          68 DPdxFine 1300
+                              Store 1299(r013) 1301
             1303:          68 Load 71(inF0)
-            1304:          68 DPdyCoarse 1303
-                              Store 1302(r015) 1304
+            1304:          68 DPdy 1303
+                              Store 1302(r014) 1304
             1306:          68 Load 71(inF0)
-            1307:          68 DPdyFine 1306
-                              Store 1305(r016) 1307
+            1307:          68 DPdyCoarse 1306
+                              Store 1305(r015) 1307
             1309:          68 Load 71(inF0)
-            1310:          68 ExtInst 1(GLSL.std.450) 12(Degrees) 1309
-                              Store 1308(r017) 1310
+            1310:          68 DPdyFine 1309
+                              Store 1308(r016) 1310
             1312:          68 Load 71(inF0)
-            1313:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1312
-                              Store 1311(r018) 1313
+            1313:          68 ExtInst 1(GLSL.std.450) 12(Degrees) 1312
+                              Store 1311(r017) 1313
             1315:          68 Load 71(inF0)
-            1316:          68 ExtInst 1(GLSL.std.450) 27(Exp) 1315
-                              Store 1314(r019) 1316
+            1316:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1315
+                              Store 1314(r018) 1316
             1318:          68 Load 71(inF0)
-            1319:          68 ExtInst 1(GLSL.std.450) 29(Exp2) 1318
-                              Store 1317(R020) 1319
+            1319:          68 ExtInst 1(GLSL.std.450) 27(Exp) 1318
+                              Store 1317(r019) 1319
             1321:          68 Load 71(inF0)
-            1322:          68 ExtInst 1(GLSL.std.450) 8(Floor) 1321
-                              Store 1320(r021) 1322
+            1322:          68 ExtInst 1(GLSL.std.450) 29(Exp2) 1321
+                              Store 1320(R020) 1322
             1324:          68 Load 71(inF0)
-            1325:          68 Load 72(inF1)
-            1326:   36(fvec3) CompositeExtract 1324 0
-            1327:   36(fvec3) CompositeExtract 1325 0
-            1328:   36(fvec3) FMod 1326 1327
-            1329:   36(fvec3) CompositeExtract 1324 1
-            1330:   36(fvec3) CompositeExtract 1325 1
+            1325:          68 ExtInst 1(GLSL.std.450) 8(Floor) 1324
+                              Store 1323(r021) 1325
+            1327:          68 Load 71(inF0)
+            1328:          68 Load 72(inF1)
+            1329:   36(fvec3) CompositeExtract 1327 0
+            1330:   36(fvec3) CompositeExtract 1328 0
             1331:   36(fvec3) FMod 1329 1330
-            1332:   36(fvec3) CompositeExtract 1324 2
-            1333:   36(fvec3) CompositeExtract 1325 2
+            1332:   36(fvec3) CompositeExtract 1327 1
+            1333:   36(fvec3) CompositeExtract 1328 1
             1334:   36(fvec3) FMod 1332 1333
-            1335:          68 CompositeConstruct 1328 1331 1334
-                              Store 1323(r022) 1335
-            1337:          68 Load 71(inF0)
-            1338:          68 ExtInst 1(GLSL.std.450) 10(Fract) 1337
-                              Store 1336(r023) 1338
+            1335:   36(fvec3) CompositeExtract 1327 2
+            1336:   36(fvec3) CompositeExtract 1328 2
+            1337:   36(fvec3) FMod 1335 1336
+            1338:          68 CompositeConstruct 1331 1334 1337
+                              Store 1326(r022) 1338
             1340:          68 Load 71(inF0)
-            1342:1341(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 1340
-            1343:  588(ivec3) CompositeExtract 1342 1
-                              Store 72(inF1) 1343
-            1344:          68 CompositeExtract 1342 0
-                              Store 1339(r024) 1344
-            1346:          68 Load 71(inF0)
-            1347:          68 Fwidth 1346
-                              Store 1345(r025) 1347
+            1341:          68 ExtInst 1(GLSL.std.450) 10(Fract) 1340
+                              Store 1339(r023) 1341
+            1343:          68 Load 71(inF0)
+            1345:1344(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 1343
+            1346:  590(ivec3) CompositeExtract 1345 1
+                              Store 72(inF1) 1346
+            1347:          68 CompositeExtract 1345 0
+                              Store 1342(r024) 1347
             1349:          68 Load 71(inF0)
-            1350:          68 Load 72(inF1)
-            1351:          68 ExtInst 1(GLSL.std.450) 53(Ldexp) 1349 1350
-                              Store 1348(r026) 1351
-            1353:          68 Load 71(inF0)
-            1354:          68 Load 72(inF1)
-            1355:          68 Load 73(inF2)
-            1356:          68 ExtInst 1(GLSL.std.450) 46(FMix) 1353 1354 1355
-                              Store 1352(r026a) 1356
-            1358:          68 Load 71(inF0)
-            1359:          68 ExtInst 1(GLSL.std.450) 28(Log) 1358
-                              Store 1357(r027) 1359
+            1350:          68 Fwidth 1349
+                              Store 1348(r025) 1350
+            1352:          68 Load 71(inF0)
+            1353:          68 Load 72(inF1)
+            1354:          68 ExtInst 1(GLSL.std.450) 53(Ldexp) 1352 1353
+                              Store 1351(r026) 1354
+            1356:          68 Load 71(inF0)
+            1357:          68 Load 72(inF1)
+            1358:          68 Load 73(inF2)
+            1359:          68 ExtInst 1(GLSL.std.450) 46(FMix) 1356 1357 1358
+                              Store 1355(r026a) 1359
             1361:          68 Load 71(inF0)
-            1362:          68 ExtInst 1(GLSL.std.450) 30(Log2) 1361
-            1363:          68 MatrixTimesScalar 1362 263
-                              Store 1360(r028) 1363
-            1365:          68 Load 71(inF0)
-            1366:          68 ExtInst 1(GLSL.std.450) 30(Log2) 1365
-                              Store 1364(r029) 1366
+            1362:          68 ExtInst 1(GLSL.std.450) 28(Log) 1361
+                              Store 1360(r027) 1362
+            1364:          68 Load 71(inF0)
+            1365:          68 ExtInst 1(GLSL.std.450) 30(Log2) 1364
+            1366:          68 MatrixTimesScalar 1365 262
+                              Store 1363(r028) 1366
             1368:          68 Load 71(inF0)
-            1369:          68 Load 72(inF1)
-            1370:          68 ExtInst 1(GLSL.std.450) 40(FMax) 1368 1369
-                              Store 1367(r030) 1370
-            1372:          68 Load 71(inF0)
-            1373:          68 Load 72(inF1)
-            1374:          68 ExtInst 1(GLSL.std.450) 37(FMin) 1372 1373
-                              Store 1371(r031) 1374
-            1376:          68 Load 71(inF0)
-            1377:          68 Load 72(inF1)
-            1378:          68 ExtInst 1(GLSL.std.450) 26(Pow) 1376 1377
-                              Store 1375(r032) 1378
-            1380:          68 Load 71(inF0)
-            1381:          68 ExtInst 1(GLSL.std.450) 11(Radians) 1380
-                              Store 1379(r033) 1381
+            1369:          68 ExtInst 1(GLSL.std.450) 30(Log2) 1368
+                              Store 1367(r029) 1369
+            1371:          68 Load 71(inF0)
+            1372:          68 Load 72(inF1)
+            1373:          68 ExtInst 1(GLSL.std.450) 40(FMax) 1371 1372
+                              Store 1370(r030) 1373
+            1375:          68 Load 71(inF0)
+            1376:          68 Load 72(inF1)
+            1377:          68 ExtInst 1(GLSL.std.450) 37(FMin) 1375 1376
+                              Store 1374(r031) 1377
+            1379:          68 Load 71(inF0)
+            1380:          68 Load 72(inF1)
+            1381:          68 ExtInst 1(GLSL.std.450) 26(Pow) 1379 1380
+                              Store 1378(r032) 1381
             1383:          68 Load 71(inF0)
-            1384:          68 ExtInst 1(GLSL.std.450) 2(RoundEven) 1383
-                              Store 1382(r034) 1384
+            1384:          68 ExtInst 1(GLSL.std.450) 11(Radians) 1383
+                              Store 1382(r033) 1384
             1386:          68 Load 71(inF0)
-            1387:          68 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1386
-                              Store 1385(r035) 1387
+            1387:          68 ExtInst 1(GLSL.std.450) 2(RoundEven) 1386
+                              Store 1385(r034) 1387
             1389:          68 Load 71(inF0)
-            1390:   36(fvec3) CompositeConstruct 175 175 175
-            1391:   36(fvec3) CompositeConstruct 284 284 284
-            1392:          68 ExtInst 1(GLSL.std.450) 43(FClamp) 1389 1390 1391
-                              Store 1388(r036) 1392
-            1394:          68 Load 71(inF0)
-            1395:          68 ExtInst 1(GLSL.std.450) 6(FSign) 1394
-                              Store 1393(r037) 1395
+            1390:          68 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1389
+                              Store 1388(r035) 1390
+            1392:          68 Load 71(inF0)
+            1393:   36(fvec3) CompositeConstruct 175 175 175
+            1394:   36(fvec3) CompositeConstruct 283 283 283
+            1395:          68 ExtInst 1(GLSL.std.450) 43(FClamp) 1392 1393 1394
+                              Store 1391(r036) 1395
             1397:          68 Load 71(inF0)
-            1398:          68 ExtInst 1(GLSL.std.450) 13(Sin) 1397
-                              Store 1396(r038) 1398
-            1399:          68 Load 71(inF0)
-            1400:          68 ExtInst 1(GLSL.std.450) 13(Sin) 1399
-                              Store 72(inF1) 1400
-            1401:          68 Load 71(inF0)
-            1402:          68 ExtInst 1(GLSL.std.450) 14(Cos) 1401
-                              Store 73(inF2) 1402
+            1398:          68 ExtInst 1(GLSL.std.450) 6(FSign) 1397
+                              Store 1396(r037) 1398
+            1400:          68 Load 71(inF0)
+            1401:          68 ExtInst 1(GLSL.std.450) 13(Sin) 1400
+                              Store 1399(r038) 1401
+            1402:          68 Load 71(inF0)
+            1403:          68 ExtInst 1(GLSL.std.450) 13(Sin) 1402
+                              Store 72(inF1) 1403
             1404:          68 Load 71(inF0)
-            1405:          68 ExtInst 1(GLSL.std.450) 19(Sinh) 1404
-                              Store 1403(r039) 1405
+            1405:          68 ExtInst 1(GLSL.std.450) 14(Cos) 1404
+                              Store 73(inF2) 1405
             1407:          68 Load 71(inF0)
-            1408:          68 Load 72(inF1)
-            1409:          68 Load 73(inF2)
-            1410:          68 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1407 1408 1409
-                              Store 1406(r049) 1410
-            1412:          68 Load 71(inF0)
-            1413:          68 ExtInst 1(GLSL.std.450) 31(Sqrt) 1412
-                              Store 1411(r041) 1413
+            1408:          68 ExtInst 1(GLSL.std.450) 19(Sinh) 1407
+                              Store 1406(r039) 1408
+            1410:          68 Load 71(inF0)
+            1411:          68 Load 72(inF1)
+            1412:          68 Load 73(inF2)
+            1413:          68 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1410 1411 1412
+                              Store 1409(r049) 1413
             1415:          68 Load 71(inF0)
-            1416:          68 Load 72(inF1)
-            1417:          68 ExtInst 1(GLSL.std.450) 48(Step) 1415 1416
-                              Store 1414(r042) 1417
-            1419:          68 Load 71(inF0)
-            1420:          68 ExtInst 1(GLSL.std.450) 15(Tan) 1419
-                              Store 1418(r043) 1420
+            1416:          68 ExtInst 1(GLSL.std.450) 31(Sqrt) 1415
+                              Store 1414(r041) 1416
+            1418:          68 Load 71(inF0)
+            1419:          68 Load 72(inF1)
+            1420:          68 ExtInst 1(GLSL.std.450) 48(Step) 1418 1419
+                              Store 1417(r042) 1420
             1422:          68 Load 71(inF0)
-            1423:          68 ExtInst 1(GLSL.std.450) 21(Tanh) 1422
-                              Store 1421(r044) 1423
-            1424:          68 Load 71(inF0)
-            1425:          68 Transpose 1424
+            1423:          68 ExtInst 1(GLSL.std.450) 15(Tan) 1422
+                              Store 1421(r043) 1423
+            1425:          68 Load 71(inF0)
+            1426:          68 ExtInst 1(GLSL.std.450) 21(Tanh) 1425
+                              Store 1424(r044) 1426
             1427:          68 Load 71(inF0)
-            1428:          68 ExtInst 1(GLSL.std.450) 3(Trunc) 1427
-                              Store 1426(r046) 1428
-                              ReturnValue 1430
+            1428:          68 Transpose 1427
+            1430:          68 Load 71(inF0)
+            1431:          68 ExtInst 1(GLSL.std.450) 3(Trunc) 1430
+                              Store 1429(r046) 1431
+                              ReturnValue 1433
                               FunctionEnd
 82(PixelShaderFunction4x4(mf44;mf44;mf44;):          76 Function None 78
         79(inF0):     77(ptr) FunctionParameter
         80(inF1):     77(ptr) FunctionParameter
         81(inF2):     77(ptr) FunctionParameter
               83:             Label
-      1433(r000):    132(ptr) Variable Function
-      1436(r001):     77(ptr) Variable Function
-      1441(r003):    132(ptr) Variable Function
-      1444(r004):     77(ptr) Variable Function
-      1447(r005):     77(ptr) Variable Function
-      1450(r006):     77(ptr) Variable Function
-      1454(r007):     77(ptr) Variable Function
-      1465(r008):     77(ptr) Variable Function
-      1470(r009):     77(ptr) Variable Function
-      1473(r010):     77(ptr) Variable Function
-      1476(r011):     77(ptr) Variable Function
-      1479(r012):     77(ptr) Variable Function
-      1482(r013):     77(ptr) Variable Function
-      1485(r014):     77(ptr) Variable Function
-      1488(r015):     77(ptr) Variable Function
-      1491(r016):     77(ptr) Variable Function
-      1494(r017):     77(ptr) Variable Function
-      1497(r018):      7(ptr) Variable Function
-      1500(r019):     77(ptr) Variable Function
-      1503(R020):     77(ptr) Variable Function
-      1506(r021):     77(ptr) Variable Function
-      1509(r022):     77(ptr) Variable Function
-      1525(r023):     77(ptr) Variable Function
-      1528(r024):     77(ptr) Variable Function
-      1534(r025):     77(ptr) Variable Function
-      1537(r026):     77(ptr) Variable Function
-     1541(r026a):     77(ptr) Variable Function
-      1546(r027):     77(ptr) Variable Function
-      1549(r028):     77(ptr) Variable Function
-      1553(r029):     77(ptr) Variable Function
-      1556(r030):     77(ptr) Variable Function
-      1560(r031):     77(ptr) Variable Function
-      1564(r032):     77(ptr) Variable Function
-      1568(r033):     77(ptr) Variable Function
-      1571(r034):     77(ptr) Variable Function
-      1574(r035):     77(ptr) Variable Function
-      1577(r036):     77(ptr) Variable Function
-      1582(r037):     77(ptr) Variable Function
-      1585(r038):     77(ptr) Variable Function
-      1592(r039):     77(ptr) Variable Function
-      1595(r049):     77(ptr) Variable Function
-      1600(r041):     77(ptr) Variable Function
-      1603(r042):     77(ptr) Variable Function
-      1607(r043):     77(ptr) Variable Function
-      1610(r044):     77(ptr) Variable Function
-      1615(r046):     77(ptr) Variable Function
-            1434:          76 Load 79(inF0)
-            1435:   131(bool) All 1434
-                              Store 1433(r000) 1435
+      1436(r000):    132(ptr) Variable Function
+      1439(r001):     77(ptr) Variable Function
+      1444(r003):    132(ptr) Variable Function
+      1447(r004):     77(ptr) Variable Function
+      1450(r005):     77(ptr) Variable Function
+      1453(r006):     77(ptr) Variable Function
+      1457(r007):     77(ptr) Variable Function
+      1468(r008):     77(ptr) Variable Function
+      1473(r009):     77(ptr) Variable Function
+      1476(r010):     77(ptr) Variable Function
+      1479(r011):     77(ptr) Variable Function
+      1482(r012):     77(ptr) Variable Function
+      1485(r013):     77(ptr) Variable Function
+      1488(r014):     77(ptr) Variable Function
+      1491(r015):     77(ptr) Variable Function
+      1494(r016):     77(ptr) Variable Function
+      1497(r017):     77(ptr) Variable Function
+      1500(r018):      7(ptr) Variable Function
+      1503(r019):     77(ptr) Variable Function
+      1506(R020):     77(ptr) Variable Function
+      1509(r021):     77(ptr) Variable Function
+      1512(r022):     77(ptr) Variable Function
+      1528(r023):     77(ptr) Variable Function
+      1531(r024):     77(ptr) Variable Function
+      1537(r025):     77(ptr) Variable Function
+      1540(r026):     77(ptr) Variable Function
+     1544(r026a):     77(ptr) Variable Function
+      1549(r027):     77(ptr) Variable Function
+      1552(r028):     77(ptr) Variable Function
+      1556(r029):     77(ptr) Variable Function
+      1559(r030):     77(ptr) Variable Function
+      1563(r031):     77(ptr) Variable Function
+      1567(r032):     77(ptr) Variable Function
+      1571(r033):     77(ptr) Variable Function
+      1574(r034):     77(ptr) Variable Function
+      1577(r035):     77(ptr) Variable Function
+      1580(r036):     77(ptr) Variable Function
+      1585(r037):     77(ptr) Variable Function
+      1588(r038):     77(ptr) Variable Function
+      1595(r039):     77(ptr) Variable Function
+      1598(r049):     77(ptr) Variable Function
+      1603(r041):     77(ptr) Variable Function
+      1606(r042):     77(ptr) Variable Function
+      1610(r043):     77(ptr) Variable Function
+      1613(r044):     77(ptr) Variable Function
+      1618(r046):     77(ptr) Variable Function
             1437:          76 Load 79(inF0)
-            1438:          76 ExtInst 1(GLSL.std.450) 4(FAbs) 1437
-                              Store 1436(r001) 1438
-            1439:          76 Load 79(inF0)
-            1440:          76 ExtInst 1(GLSL.std.450) 17(Acos) 1439
+            1438:   131(bool) All 1437
+                              Store 1436(r000) 1438
+            1440:          76 Load 79(inF0)
+            1441:          76 ExtInst 1(GLSL.std.450) 4(FAbs) 1440
+                              Store 1439(r001) 1441
             1442:          76 Load 79(inF0)
-            1443:   131(bool) Any 1442
-                              Store 1441(r003) 1443
+            1443:          76 ExtInst 1(GLSL.std.450) 17(Acos) 1442
             1445:          76 Load 79(inF0)
-            1446:          76 ExtInst 1(GLSL.std.450) 16(Asin) 1445
-                              Store 1444(r004) 1446
+            1446:   131(bool) Any 1445
+                              Store 1444(r003) 1446
             1448:          76 Load 79(inF0)
-            1449:          76 ExtInst 1(GLSL.std.450) 18(Atan) 1448
-                              Store 1447(r005) 1449
+            1449:          76 ExtInst 1(GLSL.std.450) 16(Asin) 1448
+                              Store 1447(r004) 1449
             1451:          76 Load 79(inF0)
-            1452:          76 Load 80(inF1)
-            1453:          76 ExtInst 1(GLSL.std.450) 25(Atan2) 1451 1452
-                              Store 1450(r006) 1453
-            1455:          76 Load 79(inF0)
-            1456:          76 ExtInst 1(GLSL.std.450) 9(Ceil) 1455
-                              Store 1454(r007) 1456
-            1457:          76 Load 79(inF0)
-            1460:        1459 FOrdLessThan 1457 1458
-            1461:   131(bool) Any 1460
-                              SelectionMerge 1463 None
-                              BranchConditional 1461 1462 1463
-            1462:               Label
+            1452:          76 ExtInst 1(GLSL.std.450) 18(Atan) 1451
+                              Store 1450(r005) 1452
+            1454:          76 Load 79(inF0)
+            1455:          76 Load 80(inF1)
+            1456:          76 ExtInst 1(GLSL.std.450) 25(Atan2) 1454 1455
+                              Store 1453(r006) 1456
+            1458:          76 Load 79(inF0)
+            1459:          76 ExtInst 1(GLSL.std.450) 9(Ceil) 1458
+                              Store 1457(r007) 1459
+            1460:          76 Load 79(inF0)
+            1463:        1462 FOrdLessThan 1460 1461
+            1464:   131(bool) Any 1463
+                              SelectionMerge 1466 None
+                              BranchConditional 1464 1465 1466
+            1465:               Label
                                 Kill
-            1463:             Label
-            1466:          76 Load 79(inF0)
-            1467:          76 Load 80(inF1)
-            1468:          76 Load 81(inF2)
-            1469:          76 ExtInst 1(GLSL.std.450) 43(FClamp) 1466 1467 1468
-                              Store 1465(r008) 1469
-            1471:          76 Load 79(inF0)
-            1472:          76 ExtInst 1(GLSL.std.450) 14(Cos) 1471
-                              Store 1470(r009) 1472
+            1466:             Label
+            1469:          76 Load 79(inF0)
+            1470:          76 Load 80(inF1)
+            1471:          76 Load 81(inF2)
+            1472:          76 ExtInst 1(GLSL.std.450) 43(FClamp) 1469 1470 1471
+                              Store 1468(r008) 1472
             1474:          76 Load 79(inF0)
-            1475:          76 ExtInst 1(GLSL.std.450) 20(Cosh) 1474
-                              Store 1473(r010) 1475
+            1475:          76 ExtInst 1(GLSL.std.450) 14(Cos) 1474
+                              Store 1473(r009) 1475
             1477:          76 Load 79(inF0)
-            1478:          76 DPdx 1477
-                              Store 1476(r011) 1478
+            1478:          76 ExtInst 1(GLSL.std.450) 20(Cosh) 1477
+                              Store 1476(r010) 1478
             1480:          76 Load 79(inF0)
-            1481:          76 DPdxCoarse 1480
-                              Store 1479(r012) 1481
+            1481:          76 DPdx 1480
+                              Store 1479(r011) 1481
             1483:          76 Load 79(inF0)
-            1484:          76 DPdxFine 1483
-                              Store 1482(r013) 1484
+            1484:          76 DPdxCoarse 1483
+                              Store 1482(r012) 1484
             1486:          76 Load 79(inF0)
-            1487:          76 DPdy 1486
-                              Store 1485(r014) 1487
+            1487:          76 DPdxFine 1486
+                              Store 1485(r013) 1487
             1489:          76 Load 79(inF0)
-            1490:          76 DPdyCoarse 1489
-                              Store 1488(r015) 1490
+            1490:          76 DPdy 1489
+                              Store 1488(r014) 1490
             1492:          76 Load 79(inF0)
-            1493:          76 DPdyFine 1492
-                              Store 1491(r016) 1493
+            1493:          76 DPdyCoarse 1492
+                              Store 1491(r015) 1493
             1495:          76 Load 79(inF0)
-            1496:          76 ExtInst 1(GLSL.std.450) 12(Degrees) 1495
-                              Store 1494(r017) 1496
+            1496:          76 DPdyFine 1495
+                              Store 1494(r016) 1496
             1498:          76 Load 79(inF0)
-            1499:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1498
-                              Store 1497(r018) 1499
+            1499:          76 ExtInst 1(GLSL.std.450) 12(Degrees) 1498
+                              Store 1497(r017) 1499
             1501:          76 Load 79(inF0)
-            1502:          76 ExtInst 1(GLSL.std.450) 27(Exp) 1501
-                              Store 1500(r019) 1502
+            1502:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1501
+                              Store 1500(r018) 1502
             1504:          76 Load 79(inF0)
-            1505:          76 ExtInst 1(GLSL.std.450) 29(Exp2) 1504
-                              Store 1503(R020) 1505
+            1505:          76 ExtInst 1(GLSL.std.450) 27(Exp) 1504
+                              Store 1503(r019) 1505
             1507:          76 Load 79(inF0)
-            1508:          76 ExtInst 1(GLSL.std.450) 8(Floor) 1507
-                              Store 1506(r021) 1508
+            1508:          76 ExtInst 1(GLSL.std.450) 29(Exp2) 1507
+                              Store 1506(R020) 1508
             1510:          76 Load 79(inF0)
-            1511:          76 Load 80(inF1)
-            1512:   48(fvec4) CompositeExtract 1510 0
-            1513:   48(fvec4) CompositeExtract 1511 0
-            1514:   48(fvec4) FMod 1512 1513
-            1515:   48(fvec4) CompositeExtract 1510 1
-            1516:   48(fvec4) CompositeExtract 1511 1
+            1511:          76 ExtInst 1(GLSL.std.450) 8(Floor) 1510
+                              Store 1509(r021) 1511
+            1513:          76 Load 79(inF0)
+            1514:          76 Load 80(inF1)
+            1515:   48(fvec4) CompositeExtract 1513 0
+            1516:   48(fvec4) CompositeExtract 1514 0
             1517:   48(fvec4) FMod 1515 1516
-            1518:   48(fvec4) CompositeExtract 1510 2
-            1519:   48(fvec4) CompositeExtract 1511 2
+            1518:   48(fvec4) CompositeExtract 1513 1
+            1519:   48(fvec4) CompositeExtract 1514 1
             1520:   48(fvec4) FMod 1518 1519
-            1521:   48(fvec4) CompositeExtract 1510 3
-            1522:   48(fvec4) CompositeExtract 1511 3
+            1521:   48(fvec4) CompositeExtract 1513 2
+            1522:   48(fvec4) CompositeExtract 1514 2
             1523:   48(fvec4) FMod 1521 1522
-            1524:          76 CompositeConstruct 1514 1517 1520 1523
-                              Store 1509(r022) 1524
-            1526:          76 Load 79(inF0)
-            1527:          76 ExtInst 1(GLSL.std.450) 10(Fract) 1526
-                              Store 1525(r023) 1527
+            1524:   48(fvec4) CompositeExtract 1513 3
+            1525:   48(fvec4) CompositeExtract 1514 3
+            1526:   48(fvec4) FMod 1524 1525
+            1527:          76 CompositeConstruct 1517 1520 1523 1526
+                              Store 1512(r022) 1527
             1529:          76 Load 79(inF0)
-            1531:1530(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 1529
-            1532:  833(ivec4) CompositeExtract 1531 1
-                              Store 80(inF1) 1532
-            1533:          76 CompositeExtract 1531 0
-                              Store 1528(r024) 1533
-            1535:          76 Load 79(inF0)
-            1536:          76 Fwidth 1535
-                              Store 1534(r025) 1536
+            1530:          76 ExtInst 1(GLSL.std.450) 10(Fract) 1529
+                              Store 1528(r023) 1530
+            1532:          76 Load 79(inF0)
+            1534:1533(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 1532
+            1535:  836(ivec4) CompositeExtract 1534 1
+                              Store 80(inF1) 1535
+            1536:          76 CompositeExtract 1534 0
+                              Store 1531(r024) 1536
             1538:          76 Load 79(inF0)
-            1539:          76 Load 80(inF1)
-            1540:          76 ExtInst 1(GLSL.std.450) 53(Ldexp) 1538 1539
-                              Store 1537(r026) 1540
-            1542:          76 Load 79(inF0)
-            1543:          76 Load 80(inF1)
-            1544:          76 Load 81(inF2)
-            1545:          76 ExtInst 1(GLSL.std.450) 46(FMix) 1542 1543 1544
-                              Store 1541(r026a) 1545
-            1547:          76 Load 79(inF0)
-            1548:          76 ExtInst 1(GLSL.std.450) 28(Log) 1547
-                              Store 1546(r027) 1548
+            1539:          76 Fwidth 1538
+                              Store 1537(r025) 1539
+            1541:          76 Load 79(inF0)
+            1542:          76 Load 80(inF1)
+            1543:          76 ExtInst 1(GLSL.std.450) 53(Ldexp) 1541 1542
+                              Store 1540(r026) 1543
+            1545:          76 Load 79(inF0)
+            1546:          76 Load 80(inF1)
+            1547:          76 Load 81(inF2)
+            1548:          76 ExtInst 1(GLSL.std.450) 46(FMix) 1545 1546 1547
+                              Store 1544(r026a) 1548
             1550:          76 Load 79(inF0)
-            1551:          76 ExtInst 1(GLSL.std.450) 30(Log2) 1550
-            1552:          76 MatrixTimesScalar 1551 263
-                              Store 1549(r028) 1552
-            1554:          76 Load 79(inF0)
-            1555:          76 ExtInst 1(GLSL.std.450) 30(Log2) 1554
-                              Store 1553(r029) 1555
+            1551:          76 ExtInst 1(GLSL.std.450) 28(Log) 1550
+                              Store 1549(r027) 1551
+            1553:          76 Load 79(inF0)
+            1554:          76 ExtInst 1(GLSL.std.450) 30(Log2) 1553
+            1555:          76 MatrixTimesScalar 1554 262
+                              Store 1552(r028) 1555
             1557:          76 Load 79(inF0)
-            1558:          76 Load 80(inF1)
-            1559:          76 ExtInst 1(GLSL.std.450) 40(FMax) 1557 1558
-                              Store 1556(r030) 1559
-            1561:          76 Load 79(inF0)
-            1562:          76 Load 80(inF1)
-            1563:          76 ExtInst 1(GLSL.std.450) 37(FMin) 1561 1562
-                              Store 1560(r031) 1563
-            1565:          76 Load 79(inF0)
-            1566:          76 Load 80(inF1)
-            1567:          76 ExtInst 1(GLSL.std.450) 26(Pow) 1565 1566
-                              Store 1564(r032) 1567
-            1569:          76 Load 79(inF0)
-            1570:          76 ExtInst 1(GLSL.std.450) 11(Radians) 1569
-                              Store 1568(r033) 1570
+            1558:          76 ExtInst 1(GLSL.std.450) 30(Log2) 1557
+                              Store 1556(r029) 1558
+            1560:          76 Load 79(inF0)
+            1561:          76 Load 80(inF1)
+            1562:          76 ExtInst 1(GLSL.std.450) 40(FMax) 1560 1561
+                              Store 1559(r030) 1562
+            1564:          76 Load 79(inF0)
+            1565:          76 Load 80(inF1)
+            1566:          76 ExtInst 1(GLSL.std.450) 37(FMin) 1564 1565
+                              Store 1563(r031) 1566
+            1568:          76 Load 79(inF0)
+            1569:          76 Load 80(inF1)
+            1570:          76 ExtInst 1(GLSL.std.450) 26(Pow) 1568 1569
+                              Store 1567(r032) 1570
             1572:          76 Load 79(inF0)
-            1573:          76 ExtInst 1(GLSL.std.450) 2(RoundEven) 1572
-                              Store 1571(r034) 1573
+            1573:          76 ExtInst 1(GLSL.std.450) 11(Radians) 1572
+                              Store 1571(r033) 1573
             1575:          76 Load 79(inF0)
-            1576:          76 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1575
-                              Store 1574(r035) 1576
+            1576:          76 ExtInst 1(GLSL.std.450) 2(RoundEven) 1575
+                              Store 1574(r034) 1576
             1578:          76 Load 79(inF0)
-            1579:   48(fvec4) CompositeConstruct 175 175 175 175
-            1580:   48(fvec4) CompositeConstruct 284 284 284 284
-            1581:          76 ExtInst 1(GLSL.std.450) 43(FClamp) 1578 1579 1580
-                              Store 1577(r036) 1581
-            1583:          76 Load 79(inF0)
-            1584:          76 ExtInst 1(GLSL.std.450) 6(FSign) 1583
-                              Store 1582(r037) 1584
+            1579:          76 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1578
+                              Store 1577(r035) 1579
+            1581:          76 Load 79(inF0)
+            1582:   48(fvec4) CompositeConstruct 175 175 175 175
+            1583:   48(fvec4) CompositeConstruct 283 283 283 283
+            1584:          76 ExtInst 1(GLSL.std.450) 43(FClamp) 1581 1582 1583
+                              Store 1580(r036) 1584
             1586:          76 Load 79(inF0)
-            1587:          76 ExtInst 1(GLSL.std.450) 13(Sin) 1586
-                              Store 1585(r038) 1587
-            1588:          76 Load 79(inF0)
-            1589:          76 ExtInst 1(GLSL.std.450) 13(Sin) 1588
-                              Store 80(inF1) 1589
-            1590:          76 Load 79(inF0)
-            1591:          76 ExtInst 1(GLSL.std.450) 14(Cos) 1590
-                              Store 81(inF2) 1591
+            1587:          76 ExtInst 1(GLSL.std.450) 6(FSign) 1586
+                              Store 1585(r037) 1587
+            1589:          76 Load 79(inF0)
+            1590:          76 ExtInst 1(GLSL.std.450) 13(Sin) 1589
+                              Store 1588(r038) 1590
+            1591:          76 Load 79(inF0)
+            1592:          76 ExtInst 1(GLSL.std.450) 13(Sin) 1591
+                              Store 80(inF1) 1592
             1593:          76 Load 79(inF0)
-            1594:          76 ExtInst 1(GLSL.std.450) 19(Sinh) 1593
-                              Store 1592(r039) 1594
+            1594:          76 ExtInst 1(GLSL.std.450) 14(Cos) 1593
+                              Store 81(inF2) 1594
             1596:          76 Load 79(inF0)
-            1597:          76 Load 80(inF1)
-            1598:          76 Load 81(inF2)
-            1599:          76 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1596 1597 1598
-                              Store 1595(r049) 1599
-            1601:          76 Load 79(inF0)
-            1602:          76 ExtInst 1(GLSL.std.450) 31(Sqrt) 1601
-                              Store 1600(r041) 1602
+            1597:          76 ExtInst 1(GLSL.std.450) 19(Sinh) 1596
+                              Store 1595(r039) 1597
+            1599:          76 Load 79(inF0)
+            1600:          76 Load 80(inF1)
+            1601:          76 Load 81(inF2)
+            1602:          76 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1599 1600 1601
+                              Store 1598(r049) 1602
             1604:          76 Load 79(inF0)
-            1605:          76 Load 80(inF1)
-            1606:          76 ExtInst 1(GLSL.std.450) 48(Step) 1604 1605
-                              Store 1603(r042) 1606
-            1608:          76 Load 79(inF0)
-            1609:          76 ExtInst 1(GLSL.std.450) 15(Tan) 1608
-                              Store 1607(r043) 1609
+            1605:          76 ExtInst 1(GLSL.std.450) 31(Sqrt) 1604
+                              Store 1603(r041) 1605
+            1607:          76 Load 79(inF0)
+            1608:          76 Load 80(inF1)
+            1609:          76 ExtInst 1(GLSL.std.450) 48(Step) 1607 1608
+                              Store 1606(r042) 1609
             1611:          76 Load 79(inF0)
-            1612:          76 ExtInst 1(GLSL.std.450) 21(Tanh) 1611
-                              Store 1610(r044) 1612
-            1613:          76 Load 79(inF0)
-            1614:          76 Transpose 1613
+            1612:          76 ExtInst 1(GLSL.std.450) 15(Tan) 1611
+                              Store 1610(r043) 1612
+            1614:          76 Load 79(inF0)
+            1615:          76 ExtInst 1(GLSL.std.450) 21(Tanh) 1614
+                              Store 1613(r044) 1615
             1616:          76 Load 79(inF0)
-            1617:          76 ExtInst 1(GLSL.std.450) 3(Trunc) 1616
-                              Store 1615(r046) 1617
-                              ReturnValue 1619
+            1617:          76 Transpose 1616
+            1619:          76 Load 79(inF0)
+            1620:          76 ExtInst 1(GLSL.std.450) 3(Trunc) 1619
+                              Store 1618(r046) 1620
+                              ReturnValue 1622
                               FunctionEnd
 91(TestGenMul2(f1;f1;vf2;vf2;mf22;mf22;):           2 Function None 84
         85(inF0):      7(ptr) FunctionParameter
@@ -8177,51 +8182,51 @@
        89(inFM0):     61(ptr) FunctionParameter
        90(inFM1):     61(ptr) FunctionParameter
               92:             Label
-        1622(r0):      7(ptr) Variable Function
-        1626(r1):     25(ptr) Variable Function
-        1630(r2):     25(ptr) Variable Function
-        1634(r3):      7(ptr) Variable Function
-        1638(r4):     25(ptr) Variable Function
-        1642(r5):     25(ptr) Variable Function
-        1646(r6):     61(ptr) Variable Function
-        1650(r7):     61(ptr) Variable Function
-        1654(r8):     61(ptr) Variable Function
-            1623:    6(float) Load 86(inF1)
-            1624:    6(float) Load 85(inF0)
-            1625:    6(float) FMul 1623 1624
-                              Store 1622(r0) 1625
+        1625(r0):      7(ptr) Variable Function
+        1629(r1):     25(ptr) Variable Function
+        1633(r2):     25(ptr) Variable Function
+        1637(r3):      7(ptr) Variable Function
+        1641(r4):     25(ptr) Variable Function
+        1645(r5):     25(ptr) Variable Function
+        1649(r6):     61(ptr) Variable Function
+        1653(r7):     61(ptr) Variable Function
+        1657(r8):     61(ptr) Variable Function
+            1626:    6(float) Load 86(inF1)
             1627:    6(float) Load 85(inF0)
-            1628:   24(fvec2) Load 87(inFV0)
-            1629:   24(fvec2) VectorTimesScalar 1628 1627
-                              Store 1626(r1) 1629
+            1628:    6(float) FMul 1626 1627
+                              Store 1625(r0) 1628
+            1630:    6(float) Load 85(inF0)
             1631:   24(fvec2) Load 87(inFV0)
-            1632:    6(float) Load 85(inF0)
-            1633:   24(fvec2) VectorTimesScalar 1631 1632
-                              Store 1630(r2) 1633
-            1635:   24(fvec2) Load 87(inFV0)
-            1636:   24(fvec2) Load 88(inFV1)
-            1637:    6(float) Dot 1635 1636
-                              Store 1634(r3) 1637
-            1639:   24(fvec2) Load 87(inFV0)
-            1640:          60 Load 89(inFM0)
-            1641:   24(fvec2) VectorTimesMatrix 1639 1640
-                              Store 1638(r4) 1641
+            1632:   24(fvec2) VectorTimesScalar 1631 1630
+                              Store 1629(r1) 1632
+            1634:   24(fvec2) Load 87(inFV0)
+            1635:    6(float) Load 85(inF0)
+            1636:   24(fvec2) VectorTimesScalar 1634 1635
+                              Store 1633(r2) 1636
+            1638:   24(fvec2) Load 87(inFV0)
+            1639:   24(fvec2) Load 88(inFV1)
+            1640:    6(float) Dot 1638 1639
+                              Store 1637(r3) 1640
+            1642:   24(fvec2) Load 87(inFV0)
             1643:          60 Load 89(inFM0)
-            1644:   24(fvec2) Load 87(inFV0)
-            1645:   24(fvec2) MatrixTimesVector 1643 1644
-                              Store 1642(r5) 1645
-            1647:    6(float) Load 85(inF0)
-            1648:          60 Load 89(inFM0)
-            1649:          60 MatrixTimesScalar 1648 1647
-                              Store 1646(r6) 1649
+            1644:   24(fvec2) VectorTimesMatrix 1642 1643
+                              Store 1641(r4) 1644
+            1646:          60 Load 89(inFM0)
+            1647:   24(fvec2) Load 87(inFV0)
+            1648:   24(fvec2) MatrixTimesVector 1646 1647
+                              Store 1645(r5) 1648
+            1650:    6(float) Load 85(inF0)
             1651:          60 Load 89(inFM0)
-            1652:    6(float) Load 85(inF0)
-            1653:          60 MatrixTimesScalar 1651 1652
-                              Store 1650(r7) 1653
-            1655:          60 Load 90(inFM1)
-            1656:          60 Load 89(inFM0)
-            1657:          60 MatrixTimesMatrix 1655 1656
-                              Store 1654(r8) 1657
+            1652:          60 MatrixTimesScalar 1651 1650
+                              Store 1649(r6) 1652
+            1654:          60 Load 89(inFM0)
+            1655:    6(float) Load 85(inF0)
+            1656:          60 MatrixTimesScalar 1654 1655
+                              Store 1653(r7) 1656
+            1658:          60 Load 90(inFM1)
+            1659:          60 Load 89(inFM0)
+            1660:          60 MatrixTimesMatrix 1658 1659
+                              Store 1657(r8) 1660
                               Return
                               FunctionEnd
 100(TestGenMul3(f1;f1;vf3;vf3;mf33;mf33;):           2 Function None 93
@@ -8232,51 +8237,51 @@
        98(inFM0):     69(ptr) FunctionParameter
        99(inFM1):     69(ptr) FunctionParameter
              101:             Label
-        1658(r0):      7(ptr) Variable Function
-        1662(r1):     37(ptr) Variable Function
-        1666(r2):     37(ptr) Variable Function
-        1670(r3):      7(ptr) Variable Function
-        1674(r4):     37(ptr) Variable Function
-        1678(r5):     37(ptr) Variable Function
-        1682(r6):     69(ptr) Variable Function
-        1686(r7):     69(ptr) Variable Function
-        1690(r8):     69(ptr) Variable Function
-            1659:    6(float) Load 95(inF1)
-            1660:    6(float) Load 94(inF0)
-            1661:    6(float) FMul 1659 1660
-                              Store 1658(r0) 1661
+        1661(r0):      7(ptr) Variable Function
+        1665(r1):     37(ptr) Variable Function
+        1669(r2):     37(ptr) Variable Function
+        1673(r3):      7(ptr) Variable Function
+        1677(r4):     37(ptr) Variable Function
+        1681(r5):     37(ptr) Variable Function
+        1685(r6):     69(ptr) Variable Function
+        1689(r7):     69(ptr) Variable Function
+        1693(r8):     69(ptr) Variable Function
+            1662:    6(float) Load 95(inF1)
             1663:    6(float) Load 94(inF0)
-            1664:   36(fvec3) Load 96(inFV0)
-            1665:   36(fvec3) VectorTimesScalar 1664 1663
-                              Store 1662(r1) 1665
+            1664:    6(float) FMul 1662 1663
+                              Store 1661(r0) 1664
+            1666:    6(float) Load 94(inF0)
             1667:   36(fvec3) Load 96(inFV0)
-            1668:    6(float) Load 94(inF0)
-            1669:   36(fvec3) VectorTimesScalar 1667 1668
-                              Store 1666(r2) 1669
-            1671:   36(fvec3) Load 96(inFV0)
-            1672:   36(fvec3) Load 97(inFV1)
-            1673:    6(float) Dot 1671 1672
-                              Store 1670(r3) 1673
-            1675:   36(fvec3) Load 96(inFV0)
-            1676:          68 Load 98(inFM0)
-            1677:   36(fvec3) VectorTimesMatrix 1675 1676
-                              Store 1674(r4) 1677
+            1668:   36(fvec3) VectorTimesScalar 1667 1666
+                              Store 1665(r1) 1668
+            1670:   36(fvec3) Load 96(inFV0)
+            1671:    6(float) Load 94(inF0)
+            1672:   36(fvec3) VectorTimesScalar 1670 1671
+                              Store 1669(r2) 1672
+            1674:   36(fvec3) Load 96(inFV0)
+            1675:   36(fvec3) Load 97(inFV1)
+            1676:    6(float) Dot 1674 1675
+                              Store 1673(r3) 1676
+            1678:   36(fvec3) Load 96(inFV0)
             1679:          68 Load 98(inFM0)
-            1680:   36(fvec3) Load 96(inFV0)
-            1681:   36(fvec3) MatrixTimesVector 1679 1680
-                              Store 1678(r5) 1681
-            1683:    6(float) Load 94(inF0)
-            1684:          68 Load 98(inFM0)
-            1685:          68 MatrixTimesScalar 1684 1683
-                              Store 1682(r6) 1685
+            1680:   36(fvec3) VectorTimesMatrix 1678 1679
+                              Store 1677(r4) 1680
+            1682:          68 Load 98(inFM0)
+            1683:   36(fvec3) Load 96(inFV0)
+            1684:   36(fvec3) MatrixTimesVector 1682 1683
+                              Store 1681(r5) 1684
+            1686:    6(float) Load 94(inF0)
             1687:          68 Load 98(inFM0)
-            1688:    6(float) Load 94(inF0)
-            1689:          68 MatrixTimesScalar 1687 1688
-                              Store 1686(r7) 1689
-            1691:          68 Load 99(inFM1)
-            1692:          68 Load 98(inFM0)
-            1693:          68 MatrixTimesMatrix 1691 1692
-                              Store 1690(r8) 1693
+            1688:          68 MatrixTimesScalar 1687 1686
+                              Store 1685(r6) 1688
+            1690:          68 Load 98(inFM0)
+            1691:    6(float) Load 94(inF0)
+            1692:          68 MatrixTimesScalar 1690 1691
+                              Store 1689(r7) 1692
+            1694:          68 Load 99(inFM1)
+            1695:          68 Load 98(inFM0)
+            1696:          68 MatrixTimesMatrix 1694 1695
+                              Store 1693(r8) 1696
                               Return
                               FunctionEnd
 109(TestGenMul4(f1;f1;vf4;vf4;mf44;mf44;):           2 Function None 102
@@ -8287,51 +8292,51 @@
       107(inFM0):     77(ptr) FunctionParameter
       108(inFM1):     77(ptr) FunctionParameter
              110:             Label
-        1694(r0):      7(ptr) Variable Function
-        1698(r1):     49(ptr) Variable Function
-        1702(r2):     49(ptr) Variable Function
-        1706(r3):      7(ptr) Variable Function
-        1710(r4):     49(ptr) Variable Function
-        1714(r5):     49(ptr) Variable Function
-        1718(r6):     77(ptr) Variable Function
-        1722(r7):     77(ptr) Variable Function
-        1726(r8):     77(ptr) Variable Function
-            1695:    6(float) Load 104(inF1)
-            1696:    6(float) Load 103(inF0)
-            1697:    6(float) FMul 1695 1696
-                              Store 1694(r0) 1697
+        1697(r0):      7(ptr) Variable Function
+        1701(r1):     49(ptr) Variable Function
+        1705(r2):     49(ptr) Variable Function
+        1709(r3):      7(ptr) Variable Function
+        1713(r4):     49(ptr) Variable Function
+        1717(r5):     49(ptr) Variable Function
+        1721(r6):     77(ptr) Variable Function
+        1725(r7):     77(ptr) Variable Function
+        1729(r8):     77(ptr) Variable Function
+            1698:    6(float) Load 104(inF1)
             1699:    6(float) Load 103(inF0)
-            1700:   48(fvec4) Load 105(inFV0)
-            1701:   48(fvec4) VectorTimesScalar 1700 1699
-                              Store 1698(r1) 1701
+            1700:    6(float) FMul 1698 1699
+                              Store 1697(r0) 1700
+            1702:    6(float) Load 103(inF0)
             1703:   48(fvec4) Load 105(inFV0)
-            1704:    6(float) Load 103(inF0)
-            1705:   48(fvec4) VectorTimesScalar 1703 1704
-                              Store 1702(r2) 1705
-            1707:   48(fvec4) Load 105(inFV0)
-            1708:   48(fvec4) Load 106(inFV1)
-            1709:    6(float) Dot 1707 1708
-                              Store 1706(r3) 1709
-            1711:   48(fvec4) Load 105(inFV0)
-            1712:          76 Load 107(inFM0)
-            1713:   48(fvec4) VectorTimesMatrix 1711 1712
-                              Store 1710(r4) 1713
+            1704:   48(fvec4) VectorTimesScalar 1703 1702
+                              Store 1701(r1) 1704
+            1706:   48(fvec4) Load 105(inFV0)
+            1707:    6(float) Load 103(inF0)
+            1708:   48(fvec4) VectorTimesScalar 1706 1707
+                              Store 1705(r2) 1708
+            1710:   48(fvec4) Load 105(inFV0)
+            1711:   48(fvec4) Load 106(inFV1)
+            1712:    6(float) Dot 1710 1711
+                              Store 1709(r3) 1712
+            1714:   48(fvec4) Load 105(inFV0)
             1715:          76 Load 107(inFM0)
-            1716:   48(fvec4) Load 105(inFV0)
-            1717:   48(fvec4) MatrixTimesVector 1715 1716
-                              Store 1714(r5) 1717
-            1719:    6(float) Load 103(inF0)
-            1720:          76 Load 107(inFM0)
-            1721:          76 MatrixTimesScalar 1720 1719
-                              Store 1718(r6) 1721
+            1716:   48(fvec4) VectorTimesMatrix 1714 1715
+                              Store 1713(r4) 1716
+            1718:          76 Load 107(inFM0)
+            1719:   48(fvec4) Load 105(inFV0)
+            1720:   48(fvec4) MatrixTimesVector 1718 1719
+                              Store 1717(r5) 1720
+            1722:    6(float) Load 103(inF0)
             1723:          76 Load 107(inFM0)
-            1724:    6(float) Load 103(inF0)
-            1725:          76 MatrixTimesScalar 1723 1724
-                              Store 1722(r7) 1725
-            1727:          76 Load 108(inFM1)
-            1728:          76 Load 107(inFM0)
-            1729:          76 MatrixTimesMatrix 1727 1728
-                              Store 1726(r8) 1729
+            1724:          76 MatrixTimesScalar 1723 1722
+                              Store 1721(r6) 1724
+            1726:          76 Load 107(inFM0)
+            1727:    6(float) Load 103(inF0)
+            1728:          76 MatrixTimesScalar 1726 1727
+                              Store 1725(r7) 1728
+            1730:          76 Load 108(inFM1)
+            1731:          76 Load 107(inFM0)
+            1732:          76 MatrixTimesMatrix 1730 1731
+                              Store 1729(r8) 1732
                               Return
                               FunctionEnd
 129(TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24;):           2 Function None 119
@@ -8345,90 +8350,90 @@
     127(inFM3x4):    116(ptr) FunctionParameter
     128(inFM2x4):    118(ptr) FunctionParameter
              130:             Label
-       1730(r00):      7(ptr) Variable Function
-       1734(r01):     25(ptr) Variable Function
-       1738(r02):     37(ptr) Variable Function
-       1742(r03):     25(ptr) Variable Function
-       1746(r04):     37(ptr) Variable Function
-       1750(r05):      7(ptr) Variable Function
-       1754(r06):      7(ptr) Variable Function
-       1758(r07):     37(ptr) Variable Function
-       1762(r08):     25(ptr) Variable Function
-       1766(r09):     25(ptr) Variable Function
-       1770(r10):     37(ptr) Variable Function
-       1774(r11):    112(ptr) Variable Function
-       1778(r12):    114(ptr) Variable Function
-       1782(r13):     61(ptr) Variable Function
-       1786(r14):    112(ptr) Variable Function
-       1790(r15):    118(ptr) Variable Function
-       1794(r16):    116(ptr) Variable Function
-            1731:    6(float) Load 121(inF1)
-            1732:    6(float) Load 120(inF0)
-            1733:    6(float) FMul 1731 1732
-                              Store 1730(r00) 1733
+       1733(r00):      7(ptr) Variable Function
+       1737(r01):     25(ptr) Variable Function
+       1741(r02):     37(ptr) Variable Function
+       1745(r03):     25(ptr) Variable Function
+       1749(r04):     37(ptr) Variable Function
+       1753(r05):      7(ptr) Variable Function
+       1757(r06):      7(ptr) Variable Function
+       1761(r07):     37(ptr) Variable Function
+       1765(r08):     25(ptr) Variable Function
+       1769(r09):     25(ptr) Variable Function
+       1773(r10):     37(ptr) Variable Function
+       1777(r11):    112(ptr) Variable Function
+       1781(r12):    114(ptr) Variable Function
+       1785(r13):     61(ptr) Variable Function
+       1789(r14):    112(ptr) Variable Function
+       1793(r15):    118(ptr) Variable Function
+       1797(r16):    116(ptr) Variable Function
+            1734:    6(float) Load 121(inF1)
             1735:    6(float) Load 120(inF0)
-            1736:   24(fvec2) Load 122(inFV2)
-            1737:   24(fvec2) VectorTimesScalar 1736 1735
-                              Store 1734(r01) 1737
-            1739:    6(float) Load 120(inF0)
-            1740:   36(fvec3) Load 123(inFV3)
-            1741:   36(fvec3) VectorTimesScalar 1740 1739
-                              Store 1738(r02) 1741
-            1743:   24(fvec2) Load 122(inFV2)
-            1744:    6(float) Load 120(inF0)
-            1745:   24(fvec2) VectorTimesScalar 1743 1744
-                              Store 1742(r03) 1745
-            1747:   36(fvec3) Load 123(inFV3)
-            1748:    6(float) Load 120(inF0)
-            1749:   36(fvec3) VectorTimesScalar 1747 1748
-                              Store 1746(r04) 1749
-            1751:   24(fvec2) Load 122(inFV2)
-            1752:   24(fvec2) Load 122(inFV2)
-            1753:    6(float) Dot 1751 1752
-                              Store 1750(r05) 1753
-            1755:   36(fvec3) Load 123(inFV3)
-            1756:   36(fvec3) Load 123(inFV3)
-            1757:    6(float) Dot 1755 1756
-                              Store 1754(r06) 1757
-            1759:         111 Load 124(inFM2x3)
-            1760:   24(fvec2) Load 122(inFV2)
-            1761:   36(fvec3) MatrixTimesVector 1759 1760
-                              Store 1758(r07) 1761
-            1763:         113 Load 125(inFM3x2)
-            1764:   36(fvec3) Load 123(inFV3)
-            1765:   24(fvec2) MatrixTimesVector 1763 1764
-                              Store 1762(r08) 1765
+            1736:    6(float) FMul 1734 1735
+                              Store 1733(r00) 1736
+            1738:    6(float) Load 120(inF0)
+            1739:   24(fvec2) Load 122(inFV2)
+            1740:   24(fvec2) VectorTimesScalar 1739 1738
+                              Store 1737(r01) 1740
+            1742:    6(float) Load 120(inF0)
+            1743:   36(fvec3) Load 123(inFV3)
+            1744:   36(fvec3) VectorTimesScalar 1743 1742
+                              Store 1741(r02) 1744
+            1746:   24(fvec2) Load 122(inFV2)
+            1747:    6(float) Load 120(inF0)
+            1748:   24(fvec2) VectorTimesScalar 1746 1747
+                              Store 1745(r03) 1748
+            1750:   36(fvec3) Load 123(inFV3)
+            1751:    6(float) Load 120(inF0)
+            1752:   36(fvec3) VectorTimesScalar 1750 1751
+                              Store 1749(r04) 1752
+            1754:   24(fvec2) Load 122(inFV2)
+            1755:   24(fvec2) Load 122(inFV2)
+            1756:    6(float) Dot 1754 1755
+                              Store 1753(r05) 1756
+            1758:   36(fvec3) Load 123(inFV3)
+            1759:   36(fvec3) Load 123(inFV3)
+            1760:    6(float) Dot 1758 1759
+                              Store 1757(r06) 1760
+            1762:         111 Load 124(inFM2x3)
+            1763:   24(fvec2) Load 122(inFV2)
+            1764:   36(fvec3) MatrixTimesVector 1762 1763
+                              Store 1761(r07) 1764
+            1766:         113 Load 125(inFM3x2)
             1767:   36(fvec3) Load 123(inFV3)
-            1768:         111 Load 124(inFM2x3)
-            1769:   24(fvec2) VectorTimesMatrix 1767 1768
-                              Store 1766(r09) 1769
-            1771:   24(fvec2) Load 122(inFV2)
-            1772:         113 Load 125(inFM3x2)
-            1773:   36(fvec3) VectorTimesMatrix 1771 1772
-                              Store 1770(r10) 1773
-            1775:    6(float) Load 120(inF0)
-            1776:         111 Load 124(inFM2x3)
-            1777:         111 MatrixTimesScalar 1776 1775
-                              Store 1774(r11) 1777
-            1779:    6(float) Load 120(inF0)
-            1780:         113 Load 125(inFM3x2)
-            1781:         113 MatrixTimesScalar 1780 1779
-                              Store 1778(r12) 1781
+            1768:   24(fvec2) MatrixTimesVector 1766 1767
+                              Store 1765(r08) 1768
+            1770:   36(fvec3) Load 123(inFV3)
+            1771:         111 Load 124(inFM2x3)
+            1772:   24(fvec2) VectorTimesMatrix 1770 1771
+                              Store 1769(r09) 1772
+            1774:   24(fvec2) Load 122(inFV2)
+            1775:         113 Load 125(inFM3x2)
+            1776:   36(fvec3) VectorTimesMatrix 1774 1775
+                              Store 1773(r10) 1776
+            1778:    6(float) Load 120(inF0)
+            1779:         111 Load 124(inFM2x3)
+            1780:         111 MatrixTimesScalar 1779 1778
+                              Store 1777(r11) 1780
+            1782:    6(float) Load 120(inF0)
             1783:         113 Load 125(inFM3x2)
-            1784:         111 Load 124(inFM2x3)
-            1785:          60 MatrixTimesMatrix 1783 1784
-                              Store 1782(r13) 1785
-            1787:          68 Load 126(inFM3x3)
-            1788:         111 Load 124(inFM2x3)
-            1789:         111 MatrixTimesMatrix 1787 1788
-                              Store 1786(r14) 1789
-            1791:         115 Load 127(inFM3x4)
-            1792:         111 Load 124(inFM2x3)
-            1793:         117 MatrixTimesMatrix 1791 1792
-                              Store 1790(r15) 1793
-            1795:         117 Load 128(inFM2x4)
-            1796:         113 Load 125(inFM3x2)
-            1797:         115 MatrixTimesMatrix 1795 1796
-                              Store 1794(r16) 1797
+            1784:         113 MatrixTimesScalar 1783 1782
+                              Store 1781(r12) 1784
+            1786:         113 Load 125(inFM3x2)
+            1787:         111 Load 124(inFM2x3)
+            1788:          60 MatrixTimesMatrix 1786 1787
+                              Store 1785(r13) 1788
+            1790:          68 Load 126(inFM3x3)
+            1791:         111 Load 124(inFM2x3)
+            1792:         111 MatrixTimesMatrix 1790 1791
+                              Store 1789(r14) 1792
+            1794:         115 Load 127(inFM3x4)
+            1795:         111 Load 124(inFM2x3)
+            1796:         117 MatrixTimesMatrix 1794 1795
+                              Store 1793(r15) 1796
+            1798:         117 Load 128(inFM2x4)
+            1799:         113 Load 125(inFM3x2)
+            1800:         115 MatrixTimesMatrix 1798 1799
+                              Store 1797(r16) 1800
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.intrinsics.promote.down.frag.out b/Test/baseResults/hlsl.intrinsics.promote.down.frag.out
new file mode 100644
index 0000000..f5ba86b
--- /dev/null
+++ b/Test/baseResults/hlsl.intrinsics.promote.down.frag.out
@@ -0,0 +1,184 @@
+hlsl.intrinsics.promote.down.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:15  Function Definition: main( (temp structure{temp 4-component vector of float color})
+0:15    Function Parameters: 
+0:?     Sequence
+0:16      Sequence
+0:16        move second child to first child (temp uint)
+0:16          'r00' (temp uint)
+0:16          bitCount (temp uint)
+0:16            Convert float to uint (temp uint)
+0:16              f: direct index for structure (layout(offset=8 ) uniform float)
+0:16                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2})
+0:16                Constant:
+0:16                  2 (const uint)
+0:17      Sequence
+0:17        move second child to first child (temp 2-component vector of uint)
+0:17          'r01' (temp 2-component vector of uint)
+0:17          bitFieldReverse (temp 2-component vector of uint)
+0:17            Convert float to uint (temp 2-component vector of uint)
+0:17              f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:17                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2})
+0:17                Constant:
+0:17                  6 (const uint)
+0:20      move second child to first child (temp 4-component vector of float)
+0:20        color: direct index for structure (temp 4-component vector of float)
+0:20          'ps_output' (temp structure{temp 4-component vector of float color})
+0:20          Constant:
+0:20            0 (const int)
+0:?         Constant:
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:21      Sequence
+0:21        Sequence
+0:21          move second child to first child (temp 4-component vector of float)
+0:?             'color' (layout(location=0 ) out 4-component vector of float)
+0:21            color: direct index for structure (temp 4-component vector of float)
+0:21              'ps_output' (temp structure{temp 4-component vector of float color})
+0:21              Constant:
+0:21                0 (const int)
+0:21        Branch: Return
+0:?   Linker Objects
+0:?     'color' (layout(location=0 ) out 4-component vector of float)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2})
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:15  Function Definition: main( (temp structure{temp 4-component vector of float color})
+0:15    Function Parameters: 
+0:?     Sequence
+0:16      Sequence
+0:16        move second child to first child (temp uint)
+0:16          'r00' (temp uint)
+0:16          bitCount (temp uint)
+0:16            Convert float to uint (temp uint)
+0:16              f: direct index for structure (layout(offset=8 ) uniform float)
+0:16                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2})
+0:16                Constant:
+0:16                  2 (const uint)
+0:17      Sequence
+0:17        move second child to first child (temp 2-component vector of uint)
+0:17          'r01' (temp 2-component vector of uint)
+0:17          bitFieldReverse (temp 2-component vector of uint)
+0:17            Convert float to uint (temp 2-component vector of uint)
+0:17              f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:17                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2})
+0:17                Constant:
+0:17                  6 (const uint)
+0:20      move second child to first child (temp 4-component vector of float)
+0:20        color: direct index for structure (temp 4-component vector of float)
+0:20          'ps_output' (temp structure{temp 4-component vector of float color})
+0:20          Constant:
+0:20            0 (const int)
+0:?         Constant:
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:21      Sequence
+0:21        Sequence
+0:21          move second child to first child (temp 4-component vector of float)
+0:?             'color' (layout(location=0 ) out 4-component vector of float)
+0:21            color: direct index for structure (temp 4-component vector of float)
+0:21              'ps_output' (temp structure{temp 4-component vector of float color})
+0:21              Constant:
+0:21                0 (const int)
+0:21        Branch: Return
+0:?   Linker Objects
+0:?     'color' (layout(location=0 ) out 4-component vector of float)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2})
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 45
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 41
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 8  "r00"
+                              Name 14  "$Global"
+                              MemberName 14($Global) 0  "i"
+                              MemberName 14($Global) 1  "u"
+                              MemberName 14($Global) 2  "f"
+                              MemberName 14($Global) 3  "b"
+                              MemberName 14($Global) 4  "i2"
+                              MemberName 14($Global) 5  "u2"
+                              MemberName 14($Global) 6  "f2"
+                              MemberName 14($Global) 7  "b2"
+                              Name 16  ""
+                              Name 24  "r01"
+                              Name 32  "PS_OUTPUT"
+                              MemberName 32(PS_OUTPUT) 0  "color"
+                              Name 34  "ps_output"
+                              Name 41  "color"
+                              MemberDecorate 14($Global) 0 Offset 0
+                              MemberDecorate 14($Global) 1 Offset 4
+                              MemberDecorate 14($Global) 2 Offset 8
+                              MemberDecorate 14($Global) 3 Offset 12
+                              MemberDecorate 14($Global) 4 Offset 16
+                              MemberDecorate 14($Global) 5 Offset 24
+                              MemberDecorate 14($Global) 6 Offset 32
+                              MemberDecorate 14($Global) 7 Offset 40
+                              Decorate 14($Global) Block
+                              Decorate 16 DescriptorSet 0
+                              Decorate 41(color) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypeInt 32 1
+              10:             TypeFloat 32
+              11:             TypeVector 9(int) 2
+              12:             TypeVector 6(int) 2
+              13:             TypeVector 10(float) 2
+     14($Global):             TypeStruct 9(int) 6(int) 10(float) 6(int) 11(ivec2) 12(ivec2) 13(fvec2) 12(ivec2)
+              15:             TypePointer Uniform 14($Global)
+              16:     15(ptr) Variable Uniform
+              17:      9(int) Constant 2
+              18:             TypePointer Uniform 10(float)
+              23:             TypePointer Function 12(ivec2)
+              25:      9(int) Constant 6
+              26:             TypePointer Uniform 13(fvec2)
+              31:             TypeVector 10(float) 4
+   32(PS_OUTPUT):             TypeStruct 31(fvec4)
+              33:             TypePointer Function 32(PS_OUTPUT)
+              35:      9(int) Constant 0
+              36:   10(float) Constant 0
+              37:   31(fvec4) ConstantComposite 36 36 36 36
+              38:             TypePointer Function 31(fvec4)
+              40:             TypePointer Output 31(fvec4)
+       41(color):     40(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+          8(r00):      7(ptr) Variable Function
+         24(r01):     23(ptr) Variable Function
+   34(ps_output):     33(ptr) Variable Function
+              19:     18(ptr) AccessChain 16 17
+              20:   10(float) Load 19
+              21:      6(int) ConvertFToU 20
+              22:      6(int) BitCount 21
+                              Store 8(r00) 22
+              27:     26(ptr) AccessChain 16 25
+              28:   13(fvec2) Load 27
+              29:   12(ivec2) ConvertFToU 28
+              30:   12(ivec2) BitReverse 29
+                              Store 24(r01) 30
+              39:     38(ptr) AccessChain 34(ps_output) 35
+                              Store 39 37
+              42:     38(ptr) AccessChain 34(ps_output) 35
+              43:   31(fvec4) Load 42
+                              Store 41(color) 43
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.intrinsics.promote.frag.out b/Test/baseResults/hlsl.intrinsics.promote.frag.out
new file mode 100644
index 0000000..82b9e68
--- /dev/null
+++ b/Test/baseResults/hlsl.intrinsics.promote.frag.out
@@ -0,0 +1,1313 @@
+hlsl.intrinsics.promote.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:20  Function Definition: main( (temp structure{temp 4-component vector of float color})
+0:20    Function Parameters: 
+0:?     Sequence
+0:23      Sequence
+0:23        move second child to first child (temp float)
+0:23          'r00' (temp float)
+0:23          max (temp float)
+0:23            Convert bool to float (temp float)
+0:23              b: direct index for structure (layout(offset=12 ) uniform bool)
+0:23                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:23                Constant:
+0:23                  3 (const uint)
+0:23            f: direct index for structure (layout(offset=8 ) uniform float)
+0:23              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:23              Constant:
+0:23                2 (const uint)
+0:24      Sequence
+0:24        move second child to first child (temp uint)
+0:24          'r01' (temp uint)
+0:24          max (temp uint)
+0:24            Convert bool to uint (temp uint)
+0:24              b: direct index for structure (layout(offset=12 ) uniform bool)
+0:24                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:24                Constant:
+0:24                  3 (const uint)
+0:24            u: direct index for structure (layout(offset=4 ) uniform uint)
+0:24              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:24              Constant:
+0:24                1 (const uint)
+0:25      Sequence
+0:25        move second child to first child (temp int)
+0:25          'r02' (temp int)
+0:25          max (temp int)
+0:25            Convert bool to int (temp int)
+0:25              b: direct index for structure (layout(offset=12 ) uniform bool)
+0:25                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:25                Constant:
+0:25                  3 (const uint)
+0:25            i: direct index for structure (layout(offset=0 ) uniform int)
+0:25              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:25              Constant:
+0:25                0 (const uint)
+0:26      Sequence
+0:26        move second child to first child (temp float)
+0:26          'r03' (temp float)
+0:26          max (temp float)
+0:26            Convert int to float (temp float)
+0:26              i: direct index for structure (layout(offset=0 ) uniform int)
+0:26                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:26                Constant:
+0:26                  0 (const uint)
+0:26            f: direct index for structure (layout(offset=8 ) uniform float)
+0:26              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:26              Constant:
+0:26                2 (const uint)
+0:27      Sequence
+0:27        move second child to first child (temp float)
+0:27          'r04' (temp float)
+0:27          max (temp float)
+0:27            Convert uint to float (temp float)
+0:27              u: direct index for structure (layout(offset=4 ) uniform uint)
+0:27                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:27                Constant:
+0:27                  1 (const uint)
+0:27            f: direct index for structure (layout(offset=8 ) uniform float)
+0:27              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:27              Constant:
+0:27                2 (const uint)
+0:29      Sequence
+0:29        move second child to first child (temp 2-component vector of float)
+0:29          'r10' (temp 2-component vector of float)
+0:29          max (temp 2-component vector of float)
+0:29            Convert bool to float (temp 2-component vector of float)
+0:29              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:29                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:29                Constant:
+0:29                  7 (const uint)
+0:29            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:29              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:29              Constant:
+0:29                6 (const uint)
+0:30      Sequence
+0:30        move second child to first child (temp 2-component vector of uint)
+0:30          'r11' (temp 2-component vector of uint)
+0:30          max (temp 2-component vector of uint)
+0:30            Convert bool to uint (temp 2-component vector of uint)
+0:30              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:30                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:30                Constant:
+0:30                  7 (const uint)
+0:30            u2: direct index for structure (layout(offset=24 ) uniform 2-component vector of uint)
+0:30              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:30              Constant:
+0:30                5 (const uint)
+0:31      Sequence
+0:31        move second child to first child (temp 2-component vector of int)
+0:31          'r12' (temp 2-component vector of int)
+0:31          max (temp 2-component vector of int)
+0:31            Convert bool to int (temp 2-component vector of int)
+0:31              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:31                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:31                Constant:
+0:31                  7 (const uint)
+0:31            i2: direct index for structure (layout(offset=16 ) uniform 2-component vector of int)
+0:31              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:31              Constant:
+0:31                4 (const uint)
+0:32      Sequence
+0:32        move second child to first child (temp 2-component vector of float)
+0:32          'r13' (temp 2-component vector of float)
+0:32          max (temp 2-component vector of float)
+0:32            Convert int to float (temp 2-component vector of float)
+0:32              i2: direct index for structure (layout(offset=16 ) uniform 2-component vector of int)
+0:32                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:32                Constant:
+0:32                  4 (const uint)
+0:32            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:32              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:32              Constant:
+0:32                6 (const uint)
+0:33      Sequence
+0:33        move second child to first child (temp 2-component vector of float)
+0:33          'r14' (temp 2-component vector of float)
+0:33          max (temp 2-component vector of float)
+0:33            Convert uint to float (temp 2-component vector of float)
+0:33              u2: direct index for structure (layout(offset=24 ) uniform 2-component vector of uint)
+0:33                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:33                Constant:
+0:33                  5 (const uint)
+0:33            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:33              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:33              Constant:
+0:33                6 (const uint)
+0:35      Sequence
+0:35        move second child to first child (temp 2-component vector of float)
+0:35          'r20' (temp 2-component vector of float)
+0:35          clamp (temp 2-component vector of float)
+0:35            Convert int to float (temp 2-component vector of float)
+0:35              i2: direct index for structure (layout(offset=16 ) uniform 2-component vector of int)
+0:35                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:35                Constant:
+0:35                  4 (const uint)
+0:35            Convert uint to float (temp 2-component vector of float)
+0:35              u2: direct index for structure (layout(offset=24 ) uniform 2-component vector of uint)
+0:35                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:35                Constant:
+0:35                  5 (const uint)
+0:35            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:35              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:35              Constant:
+0:35                6 (const uint)
+0:36      Sequence
+0:36        move second child to first child (temp 2-component vector of uint)
+0:36          'r21' (temp 2-component vector of uint)
+0:36          clamp (temp 2-component vector of uint)
+0:36            Convert bool to uint (temp 2-component vector of uint)
+0:36              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:36                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:36                Constant:
+0:36                  7 (const uint)
+0:36            u2: direct index for structure (layout(offset=24 ) uniform 2-component vector of uint)
+0:36              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:36              Constant:
+0:36                5 (const uint)
+0:36            Convert bool to uint (temp 2-component vector of uint)
+0:36              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:36                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:36                Constant:
+0:36                  7 (const uint)
+0:37      Sequence
+0:37        move second child to first child (temp 2-component vector of float)
+0:37          'r22' (temp 2-component vector of float)
+0:37          clamp (temp 2-component vector of float)
+0:37            Convert bool to float (temp 2-component vector of float)
+0:37              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:37                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:37                Constant:
+0:37                  7 (const uint)
+0:37            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:37              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:37              Constant:
+0:37                6 (const uint)
+0:37            Convert bool to float (temp 2-component vector of float)
+0:37              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:37                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:37                Constant:
+0:37                  7 (const uint)
+0:40      Sequence
+0:40        move second child to first child (temp 2-component vector of float)
+0:40          'r30' (temp 2-component vector of float)
+0:40          max (temp 2-component vector of float)
+0:40            Construct vec2 (in 2-component vector of float)
+0:40              Convert bool to float (temp float)
+0:40                b: direct index for structure (layout(offset=12 ) uniform bool)
+0:40                  'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:40                  Constant:
+0:40                    3 (const uint)
+0:40            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:40              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:40              Constant:
+0:40                6 (const uint)
+0:41      Sequence
+0:41        move second child to first child (temp 2-component vector of uint)
+0:41          'r31' (temp 2-component vector of uint)
+0:41          max (temp 2-component vector of uint)
+0:41            Construct uvec2 (in 2-component vector of uint)
+0:41              Convert bool to uint (temp uint)
+0:41                b: direct index for structure (layout(offset=12 ) uniform bool)
+0:41                  'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:41                  Constant:
+0:41                    3 (const uint)
+0:41            u2: direct index for structure (layout(offset=24 ) uniform 2-component vector of uint)
+0:41              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:41              Constant:
+0:41                5 (const uint)
+0:42      Sequence
+0:42        move second child to first child (temp 2-component vector of int)
+0:42          'r32' (temp 2-component vector of int)
+0:42          max (temp 2-component vector of int)
+0:42            Construct ivec2 (in 2-component vector of int)
+0:42              Convert bool to int (temp int)
+0:42                b: direct index for structure (layout(offset=12 ) uniform bool)
+0:42                  'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:42                  Constant:
+0:42                    3 (const uint)
+0:42            i2: direct index for structure (layout(offset=16 ) uniform 2-component vector of int)
+0:42              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:42              Constant:
+0:42                4 (const uint)
+0:43      Sequence
+0:43        move second child to first child (temp 2-component vector of float)
+0:43          'r33' (temp 2-component vector of float)
+0:43          max (temp 2-component vector of float)
+0:43            Construct vec2 (in 2-component vector of float)
+0:43              Convert int to float (temp float)
+0:43                i: direct index for structure (layout(offset=0 ) uniform int)
+0:43                  'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:43                  Constant:
+0:43                    0 (const uint)
+0:43            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:43              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:43              Constant:
+0:43                6 (const uint)
+0:44      Sequence
+0:44        move second child to first child (temp 2-component vector of float)
+0:44          'r34' (temp 2-component vector of float)
+0:44          max (temp 2-component vector of float)
+0:44            Construct vec2 (in 2-component vector of float)
+0:44              Convert uint to float (temp float)
+0:44                u: direct index for structure (layout(offset=4 ) uniform uint)
+0:44                  'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:44                  Constant:
+0:44                    1 (const uint)
+0:44            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:44              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:44              Constant:
+0:44                6 (const uint)
+0:46      Sequence
+0:46        move second child to first child (temp 2-component vector of float)
+0:46          'r40' (temp 2-component vector of float)
+0:46          clamp (temp 2-component vector of float)
+0:46            Construct vec2 (in 2-component vector of float)
+0:46              Convert int to float (temp float)
+0:46                i: direct index for structure (layout(offset=0 ) uniform int)
+0:46                  'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:46                  Constant:
+0:46                    0 (const uint)
+0:46            Convert uint to float (temp 2-component vector of float)
+0:46              u2: direct index for structure (layout(offset=24 ) uniform 2-component vector of uint)
+0:46                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:46                Constant:
+0:46                  5 (const uint)
+0:46            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:46              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:46              Constant:
+0:46                6 (const uint)
+0:47      Sequence
+0:47        move second child to first child (temp 2-component vector of uint)
+0:47          'r41' (temp 2-component vector of uint)
+0:47          clamp (temp 2-component vector of uint)
+0:47            Convert bool to uint (temp 2-component vector of uint)
+0:47              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:47                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:47                Constant:
+0:47                  7 (const uint)
+0:47            Construct uvec2 (in 2-component vector of uint)
+0:47              u: direct index for structure (layout(offset=4 ) uniform uint)
+0:47                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:47                Constant:
+0:47                  1 (const uint)
+0:47            Convert bool to uint (temp 2-component vector of uint)
+0:47              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:47                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:47                Constant:
+0:47                  7 (const uint)
+0:48      Sequence
+0:48        move second child to first child (temp 2-component vector of float)
+0:48          'r42' (temp 2-component vector of float)
+0:48          clamp (temp 2-component vector of float)
+0:48            Convert bool to float (temp 2-component vector of float)
+0:48              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:48                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:48                Constant:
+0:48                  7 (const uint)
+0:48            Construct vec2 (in 2-component vector of float)
+0:48              f: direct index for structure (layout(offset=8 ) uniform float)
+0:48                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:48                Constant:
+0:48                  2 (const uint)
+0:48            Construct vec2 (in 2-component vector of float)
+0:48              Convert bool to float (temp float)
+0:48                b: direct index for structure (layout(offset=12 ) uniform bool)
+0:48                  'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:48                  Constant:
+0:48                    3 (const uint)
+0:49      Sequence
+0:49        move second child to first child (temp 2-component vector of int)
+0:49          'r43' (temp 2-component vector of int)
+0:49          Convert uint to int (temp 2-component vector of int)
+0:49            clamp (temp 2-component vector of uint)
+0:49              Construct uvec2 (in 2-component vector of uint)
+0:49                Convert int to uint (temp uint)
+0:49                  i: direct index for structure (layout(offset=0 ) uniform int)
+0:49                    'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:49                    Constant:
+0:49                      0 (const uint)
+0:49              Convert int to uint (temp 2-component vector of uint)
+0:49                i2: direct index for structure (layout(offset=16 ) uniform 2-component vector of int)
+0:49                  'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:49                  Constant:
+0:49                    4 (const uint)
+0:49              u2: direct index for structure (layout(offset=24 ) uniform 2-component vector of uint)
+0:49                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:49                Constant:
+0:49                  5 (const uint)
+0:51      Sequence
+0:51        move second child to first child (temp float)
+0:51          'r50' (temp float)
+0:51          Construct float (temp float)
+0:?             textureFetch (temp 4-component vector of float)
+0:51              'g_tTexbfs' (layout(r32f ) uniform samplerBuffer)
+0:51              Convert uint to int (temp int)
+0:51                upos: direct index for structure (layout(offset=48 ) uniform uint)
+0:51                  'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:51                  Constant:
+0:51                    8 (const uint)
+0:52      Sequence
+0:52        move second child to first child (temp float)
+0:52          'r51' (temp float)
+0:52          Construct float (temp float)
+0:?             textureFetch (temp 4-component vector of float)
+0:52              'g_tTexbfs' (layout(r32f ) uniform samplerBuffer)
+0:52              Convert float to int (temp int)
+0:52                fpos: direct index for structure (layout(offset=52 ) uniform float)
+0:52                  'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:52                  Constant:
+0:52                    9 (const uint)
+0:70      Sequence
+0:70        move second child to first child (temp uint)
+0:70          'sizeQueryTemp' (temp uint)
+0:70          textureSize (temp uint)
+0:70            'g_tTex1df4' (uniform texture1D)
+0:70        move second child to first child (temp int)
+0:70          'WidthI' (temp int)
+0:70          Convert uint to int (temp int)
+0:70            'sizeQueryTemp' (temp uint)
+0:71      Sequence
+0:71        move second child to first child (temp uint)
+0:71          'sizeQueryTemp' (temp uint)
+0:71          textureSize (temp uint)
+0:71            'g_tTex1df4' (uniform texture1D)
+0:71            Constant:
+0:71              6 (const uint)
+0:71        move second child to first child (temp int)
+0:71          'WidthI' (temp int)
+0:71          Convert uint to int (temp int)
+0:71            'sizeQueryTemp' (temp uint)
+0:71        move second child to first child (temp uint)
+0:71          'NumberOfLevelsU' (temp uint)
+0:71          textureQueryLevels (temp uint)
+0:71            'g_tTex1df4' (uniform texture1D)
+0:72      Sequence
+0:72        move second child to first child (temp uint)
+0:72          'sizeQueryTemp' (temp uint)
+0:72          textureSize (temp uint)
+0:72            'g_tTex1df4' (uniform texture1D)
+0:72            Constant:
+0:72              6 (const uint)
+0:72        move second child to first child (temp uint)
+0:72          'WidthU' (temp uint)
+0:72          'sizeQueryTemp' (temp uint)
+0:72        move second child to first child (temp int)
+0:72          'NumberOfLevelsI' (temp int)
+0:72          Convert uint to int (temp int)
+0:72            textureQueryLevels (temp uint)
+0:72              'g_tTex1df4' (uniform texture1D)
+0:73      Sequence
+0:73        move second child to first child (temp uint)
+0:73          'sizeQueryTemp' (temp uint)
+0:73          textureSize (temp uint)
+0:73            'g_tTex1df4' (uniform texture1D)
+0:73            Constant:
+0:73              6 (const uint)
+0:73        move second child to first child (temp int)
+0:73          'WidthI' (temp int)
+0:73          Convert uint to int (temp int)
+0:73            'sizeQueryTemp' (temp uint)
+0:73        move second child to first child (temp int)
+0:73          'NumberOfLevelsI' (temp int)
+0:73          Convert uint to int (temp int)
+0:73            textureQueryLevels (temp uint)
+0:73              'g_tTex1df4' (uniform texture1D)
+0:77      move second child to first child (temp 4-component vector of float)
+0:77        color: direct index for structure (temp 4-component vector of float)
+0:77          'ps_output' (temp structure{temp 4-component vector of float color})
+0:77          Constant:
+0:77            0 (const int)
+0:77        Construct vec4 (temp 4-component vector of float)
+0:77          'r00' (temp float)
+0:78      Sequence
+0:78        Sequence
+0:78          move second child to first child (temp 4-component vector of float)
+0:?             'color' (layout(location=0 ) out 4-component vector of float)
+0:78            color: direct index for structure (temp 4-component vector of float)
+0:78              'ps_output' (temp structure{temp 4-component vector of float color})
+0:78              Constant:
+0:78                0 (const int)
+0:78        Branch: Return
+0:?   Linker Objects
+0:?     'color' (layout(location=0 ) out 4-component vector of float)
+0:?     'g_tTexbfs' (layout(r32f ) uniform samplerBuffer)
+0:?     'g_tTex1df4' (uniform texture1D)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:20  Function Definition: main( (temp structure{temp 4-component vector of float color})
+0:20    Function Parameters: 
+0:?     Sequence
+0:23      Sequence
+0:23        move second child to first child (temp float)
+0:23          'r00' (temp float)
+0:23          max (temp float)
+0:23            Convert bool to float (temp float)
+0:23              b: direct index for structure (layout(offset=12 ) uniform bool)
+0:23                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:23                Constant:
+0:23                  3 (const uint)
+0:23            f: direct index for structure (layout(offset=8 ) uniform float)
+0:23              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:23              Constant:
+0:23                2 (const uint)
+0:24      Sequence
+0:24        move second child to first child (temp uint)
+0:24          'r01' (temp uint)
+0:24          max (temp uint)
+0:24            Convert bool to uint (temp uint)
+0:24              b: direct index for structure (layout(offset=12 ) uniform bool)
+0:24                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:24                Constant:
+0:24                  3 (const uint)
+0:24            u: direct index for structure (layout(offset=4 ) uniform uint)
+0:24              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:24              Constant:
+0:24                1 (const uint)
+0:25      Sequence
+0:25        move second child to first child (temp int)
+0:25          'r02' (temp int)
+0:25          max (temp int)
+0:25            Convert bool to int (temp int)
+0:25              b: direct index for structure (layout(offset=12 ) uniform bool)
+0:25                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:25                Constant:
+0:25                  3 (const uint)
+0:25            i: direct index for structure (layout(offset=0 ) uniform int)
+0:25              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:25              Constant:
+0:25                0 (const uint)
+0:26      Sequence
+0:26        move second child to first child (temp float)
+0:26          'r03' (temp float)
+0:26          max (temp float)
+0:26            Convert int to float (temp float)
+0:26              i: direct index for structure (layout(offset=0 ) uniform int)
+0:26                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:26                Constant:
+0:26                  0 (const uint)
+0:26            f: direct index for structure (layout(offset=8 ) uniform float)
+0:26              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:26              Constant:
+0:26                2 (const uint)
+0:27      Sequence
+0:27        move second child to first child (temp float)
+0:27          'r04' (temp float)
+0:27          max (temp float)
+0:27            Convert uint to float (temp float)
+0:27              u: direct index for structure (layout(offset=4 ) uniform uint)
+0:27                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:27                Constant:
+0:27                  1 (const uint)
+0:27            f: direct index for structure (layout(offset=8 ) uniform float)
+0:27              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:27              Constant:
+0:27                2 (const uint)
+0:29      Sequence
+0:29        move second child to first child (temp 2-component vector of float)
+0:29          'r10' (temp 2-component vector of float)
+0:29          max (temp 2-component vector of float)
+0:29            Convert bool to float (temp 2-component vector of float)
+0:29              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:29                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:29                Constant:
+0:29                  7 (const uint)
+0:29            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:29              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:29              Constant:
+0:29                6 (const uint)
+0:30      Sequence
+0:30        move second child to first child (temp 2-component vector of uint)
+0:30          'r11' (temp 2-component vector of uint)
+0:30          max (temp 2-component vector of uint)
+0:30            Convert bool to uint (temp 2-component vector of uint)
+0:30              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:30                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:30                Constant:
+0:30                  7 (const uint)
+0:30            u2: direct index for structure (layout(offset=24 ) uniform 2-component vector of uint)
+0:30              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:30              Constant:
+0:30                5 (const uint)
+0:31      Sequence
+0:31        move second child to first child (temp 2-component vector of int)
+0:31          'r12' (temp 2-component vector of int)
+0:31          max (temp 2-component vector of int)
+0:31            Convert bool to int (temp 2-component vector of int)
+0:31              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:31                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:31                Constant:
+0:31                  7 (const uint)
+0:31            i2: direct index for structure (layout(offset=16 ) uniform 2-component vector of int)
+0:31              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:31              Constant:
+0:31                4 (const uint)
+0:32      Sequence
+0:32        move second child to first child (temp 2-component vector of float)
+0:32          'r13' (temp 2-component vector of float)
+0:32          max (temp 2-component vector of float)
+0:32            Convert int to float (temp 2-component vector of float)
+0:32              i2: direct index for structure (layout(offset=16 ) uniform 2-component vector of int)
+0:32                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:32                Constant:
+0:32                  4 (const uint)
+0:32            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:32              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:32              Constant:
+0:32                6 (const uint)
+0:33      Sequence
+0:33        move second child to first child (temp 2-component vector of float)
+0:33          'r14' (temp 2-component vector of float)
+0:33          max (temp 2-component vector of float)
+0:33            Convert uint to float (temp 2-component vector of float)
+0:33              u2: direct index for structure (layout(offset=24 ) uniform 2-component vector of uint)
+0:33                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:33                Constant:
+0:33                  5 (const uint)
+0:33            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:33              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:33              Constant:
+0:33                6 (const uint)
+0:35      Sequence
+0:35        move second child to first child (temp 2-component vector of float)
+0:35          'r20' (temp 2-component vector of float)
+0:35          clamp (temp 2-component vector of float)
+0:35            Convert int to float (temp 2-component vector of float)
+0:35              i2: direct index for structure (layout(offset=16 ) uniform 2-component vector of int)
+0:35                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:35                Constant:
+0:35                  4 (const uint)
+0:35            Convert uint to float (temp 2-component vector of float)
+0:35              u2: direct index for structure (layout(offset=24 ) uniform 2-component vector of uint)
+0:35                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:35                Constant:
+0:35                  5 (const uint)
+0:35            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:35              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:35              Constant:
+0:35                6 (const uint)
+0:36      Sequence
+0:36        move second child to first child (temp 2-component vector of uint)
+0:36          'r21' (temp 2-component vector of uint)
+0:36          clamp (temp 2-component vector of uint)
+0:36            Convert bool to uint (temp 2-component vector of uint)
+0:36              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:36                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:36                Constant:
+0:36                  7 (const uint)
+0:36            u2: direct index for structure (layout(offset=24 ) uniform 2-component vector of uint)
+0:36              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:36              Constant:
+0:36                5 (const uint)
+0:36            Convert bool to uint (temp 2-component vector of uint)
+0:36              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:36                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:36                Constant:
+0:36                  7 (const uint)
+0:37      Sequence
+0:37        move second child to first child (temp 2-component vector of float)
+0:37          'r22' (temp 2-component vector of float)
+0:37          clamp (temp 2-component vector of float)
+0:37            Convert bool to float (temp 2-component vector of float)
+0:37              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:37                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:37                Constant:
+0:37                  7 (const uint)
+0:37            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:37              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:37              Constant:
+0:37                6 (const uint)
+0:37            Convert bool to float (temp 2-component vector of float)
+0:37              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:37                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:37                Constant:
+0:37                  7 (const uint)
+0:40      Sequence
+0:40        move second child to first child (temp 2-component vector of float)
+0:40          'r30' (temp 2-component vector of float)
+0:40          max (temp 2-component vector of float)
+0:40            Construct vec2 (in 2-component vector of float)
+0:40              Convert bool to float (temp float)
+0:40                b: direct index for structure (layout(offset=12 ) uniform bool)
+0:40                  'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:40                  Constant:
+0:40                    3 (const uint)
+0:40            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:40              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:40              Constant:
+0:40                6 (const uint)
+0:41      Sequence
+0:41        move second child to first child (temp 2-component vector of uint)
+0:41          'r31' (temp 2-component vector of uint)
+0:41          max (temp 2-component vector of uint)
+0:41            Construct uvec2 (in 2-component vector of uint)
+0:41              Convert bool to uint (temp uint)
+0:41                b: direct index for structure (layout(offset=12 ) uniform bool)
+0:41                  'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:41                  Constant:
+0:41                    3 (const uint)
+0:41            u2: direct index for structure (layout(offset=24 ) uniform 2-component vector of uint)
+0:41              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:41              Constant:
+0:41                5 (const uint)
+0:42      Sequence
+0:42        move second child to first child (temp 2-component vector of int)
+0:42          'r32' (temp 2-component vector of int)
+0:42          max (temp 2-component vector of int)
+0:42            Construct ivec2 (in 2-component vector of int)
+0:42              Convert bool to int (temp int)
+0:42                b: direct index for structure (layout(offset=12 ) uniform bool)
+0:42                  'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:42                  Constant:
+0:42                    3 (const uint)
+0:42            i2: direct index for structure (layout(offset=16 ) uniform 2-component vector of int)
+0:42              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:42              Constant:
+0:42                4 (const uint)
+0:43      Sequence
+0:43        move second child to first child (temp 2-component vector of float)
+0:43          'r33' (temp 2-component vector of float)
+0:43          max (temp 2-component vector of float)
+0:43            Construct vec2 (in 2-component vector of float)
+0:43              Convert int to float (temp float)
+0:43                i: direct index for structure (layout(offset=0 ) uniform int)
+0:43                  'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:43                  Constant:
+0:43                    0 (const uint)
+0:43            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:43              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:43              Constant:
+0:43                6 (const uint)
+0:44      Sequence
+0:44        move second child to first child (temp 2-component vector of float)
+0:44          'r34' (temp 2-component vector of float)
+0:44          max (temp 2-component vector of float)
+0:44            Construct vec2 (in 2-component vector of float)
+0:44              Convert uint to float (temp float)
+0:44                u: direct index for structure (layout(offset=4 ) uniform uint)
+0:44                  'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:44                  Constant:
+0:44                    1 (const uint)
+0:44            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:44              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:44              Constant:
+0:44                6 (const uint)
+0:46      Sequence
+0:46        move second child to first child (temp 2-component vector of float)
+0:46          'r40' (temp 2-component vector of float)
+0:46          clamp (temp 2-component vector of float)
+0:46            Construct vec2 (in 2-component vector of float)
+0:46              Convert int to float (temp float)
+0:46                i: direct index for structure (layout(offset=0 ) uniform int)
+0:46                  'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:46                  Constant:
+0:46                    0 (const uint)
+0:46            Convert uint to float (temp 2-component vector of float)
+0:46              u2: direct index for structure (layout(offset=24 ) uniform 2-component vector of uint)
+0:46                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:46                Constant:
+0:46                  5 (const uint)
+0:46            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:46              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:46              Constant:
+0:46                6 (const uint)
+0:47      Sequence
+0:47        move second child to first child (temp 2-component vector of uint)
+0:47          'r41' (temp 2-component vector of uint)
+0:47          clamp (temp 2-component vector of uint)
+0:47            Convert bool to uint (temp 2-component vector of uint)
+0:47              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:47                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:47                Constant:
+0:47                  7 (const uint)
+0:47            Construct uvec2 (in 2-component vector of uint)
+0:47              u: direct index for structure (layout(offset=4 ) uniform uint)
+0:47                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:47                Constant:
+0:47                  1 (const uint)
+0:47            Convert bool to uint (temp 2-component vector of uint)
+0:47              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:47                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:47                Constant:
+0:47                  7 (const uint)
+0:48      Sequence
+0:48        move second child to first child (temp 2-component vector of float)
+0:48          'r42' (temp 2-component vector of float)
+0:48          clamp (temp 2-component vector of float)
+0:48            Convert bool to float (temp 2-component vector of float)
+0:48              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:48                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:48                Constant:
+0:48                  7 (const uint)
+0:48            Construct vec2 (in 2-component vector of float)
+0:48              f: direct index for structure (layout(offset=8 ) uniform float)
+0:48                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:48                Constant:
+0:48                  2 (const uint)
+0:48            Construct vec2 (in 2-component vector of float)
+0:48              Convert bool to float (temp float)
+0:48                b: direct index for structure (layout(offset=12 ) uniform bool)
+0:48                  'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:48                  Constant:
+0:48                    3 (const uint)
+0:49      Sequence
+0:49        move second child to first child (temp 2-component vector of int)
+0:49          'r43' (temp 2-component vector of int)
+0:49          Convert uint to int (temp 2-component vector of int)
+0:49            clamp (temp 2-component vector of uint)
+0:49              Construct uvec2 (in 2-component vector of uint)
+0:49                Convert int to uint (temp uint)
+0:49                  i: direct index for structure (layout(offset=0 ) uniform int)
+0:49                    'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:49                    Constant:
+0:49                      0 (const uint)
+0:49              Convert int to uint (temp 2-component vector of uint)
+0:49                i2: direct index for structure (layout(offset=16 ) uniform 2-component vector of int)
+0:49                  'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:49                  Constant:
+0:49                    4 (const uint)
+0:49              u2: direct index for structure (layout(offset=24 ) uniform 2-component vector of uint)
+0:49                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:49                Constant:
+0:49                  5 (const uint)
+0:51      Sequence
+0:51        move second child to first child (temp float)
+0:51          'r50' (temp float)
+0:51          Construct float (temp float)
+0:?             textureFetch (temp 4-component vector of float)
+0:51              'g_tTexbfs' (layout(r32f ) uniform samplerBuffer)
+0:51              Convert uint to int (temp int)
+0:51                upos: direct index for structure (layout(offset=48 ) uniform uint)
+0:51                  'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:51                  Constant:
+0:51                    8 (const uint)
+0:52      Sequence
+0:52        move second child to first child (temp float)
+0:52          'r51' (temp float)
+0:52          Construct float (temp float)
+0:?             textureFetch (temp 4-component vector of float)
+0:52              'g_tTexbfs' (layout(r32f ) uniform samplerBuffer)
+0:52              Convert float to int (temp int)
+0:52                fpos: direct index for structure (layout(offset=52 ) uniform float)
+0:52                  'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:52                  Constant:
+0:52                    9 (const uint)
+0:70      Sequence
+0:70        move second child to first child (temp uint)
+0:70          'sizeQueryTemp' (temp uint)
+0:70          textureSize (temp uint)
+0:70            'g_tTex1df4' (uniform texture1D)
+0:70        move second child to first child (temp int)
+0:70          'WidthI' (temp int)
+0:70          Convert uint to int (temp int)
+0:70            'sizeQueryTemp' (temp uint)
+0:71      Sequence
+0:71        move second child to first child (temp uint)
+0:71          'sizeQueryTemp' (temp uint)
+0:71          textureSize (temp uint)
+0:71            'g_tTex1df4' (uniform texture1D)
+0:71            Constant:
+0:71              6 (const uint)
+0:71        move second child to first child (temp int)
+0:71          'WidthI' (temp int)
+0:71          Convert uint to int (temp int)
+0:71            'sizeQueryTemp' (temp uint)
+0:71        move second child to first child (temp uint)
+0:71          'NumberOfLevelsU' (temp uint)
+0:71          textureQueryLevels (temp uint)
+0:71            'g_tTex1df4' (uniform texture1D)
+0:72      Sequence
+0:72        move second child to first child (temp uint)
+0:72          'sizeQueryTemp' (temp uint)
+0:72          textureSize (temp uint)
+0:72            'g_tTex1df4' (uniform texture1D)
+0:72            Constant:
+0:72              6 (const uint)
+0:72        move second child to first child (temp uint)
+0:72          'WidthU' (temp uint)
+0:72          'sizeQueryTemp' (temp uint)
+0:72        move second child to first child (temp int)
+0:72          'NumberOfLevelsI' (temp int)
+0:72          Convert uint to int (temp int)
+0:72            textureQueryLevels (temp uint)
+0:72              'g_tTex1df4' (uniform texture1D)
+0:73      Sequence
+0:73        move second child to first child (temp uint)
+0:73          'sizeQueryTemp' (temp uint)
+0:73          textureSize (temp uint)
+0:73            'g_tTex1df4' (uniform texture1D)
+0:73            Constant:
+0:73              6 (const uint)
+0:73        move second child to first child (temp int)
+0:73          'WidthI' (temp int)
+0:73          Convert uint to int (temp int)
+0:73            'sizeQueryTemp' (temp uint)
+0:73        move second child to first child (temp int)
+0:73          'NumberOfLevelsI' (temp int)
+0:73          Convert uint to int (temp int)
+0:73            textureQueryLevels (temp uint)
+0:73              'g_tTex1df4' (uniform texture1D)
+0:77      move second child to first child (temp 4-component vector of float)
+0:77        color: direct index for structure (temp 4-component vector of float)
+0:77          'ps_output' (temp structure{temp 4-component vector of float color})
+0:77          Constant:
+0:77            0 (const int)
+0:77        Construct vec4 (temp 4-component vector of float)
+0:77          'r00' (temp float)
+0:78      Sequence
+0:78        Sequence
+0:78          move second child to first child (temp 4-component vector of float)
+0:?             'color' (layout(location=0 ) out 4-component vector of float)
+0:78            color: direct index for structure (temp 4-component vector of float)
+0:78              'ps_output' (temp structure{temp 4-component vector of float color})
+0:78              Constant:
+0:78                0 (const int)
+0:78        Branch: Return
+0:?   Linker Objects
+0:?     'color' (layout(location=0 ) out 4-component vector of float)
+0:?     'g_tTexbfs' (layout(r32f ) uniform samplerBuffer)
+0:?     'g_tTex1df4' (uniform texture1D)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 320
+
+                              Capability Shader
+                              Capability Sampled1D
+                              Capability SampledBuffer
+                              Capability ImageQuery
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 316
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 8  "r00"
+                              Name 14  "$Global"
+                              MemberName 14($Global) 0  "i"
+                              MemberName 14($Global) 1  "u"
+                              MemberName 14($Global) 2  "f"
+                              MemberName 14($Global) 3  "b"
+                              MemberName 14($Global) 4  "i2"
+                              MemberName 14($Global) 5  "u2"
+                              MemberName 14($Global) 6  "f2"
+                              MemberName 14($Global) 7  "b2"
+                              MemberName 14($Global) 8  "upos"
+                              MemberName 14($Global) 9  "fpos"
+                              Name 16  ""
+                              Name 33  "r01"
+                              Name 44  "r02"
+                              Name 54  "r03"
+                              Name 61  "r04"
+                              Name 69  "r10"
+                              Name 86  "r11"
+                              Name 97  "r12"
+                              Name 109  "r13"
+                              Name 116  "r14"
+                              Name 123  "r20"
+                              Name 133  "r21"
+                              Name 145  "r22"
+                              Name 157  "r30"
+                              Name 166  "r31"
+                              Name 175  "r32"
+                              Name 184  "r33"
+                              Name 192  "r34"
+                              Name 200  "r40"
+                              Name 211  "r41"
+                              Name 224  "r42"
+                              Name 238  "r43"
+                              Name 250  "r50"
+                              Name 254  "g_tTexbfs"
+                              Name 264  "r51"
+                              Name 273  "sizeQueryTemp"
+                              Name 276  "g_tTex1df4"
+                              Name 279  "WidthI"
+                              Name 282  "sizeQueryTemp"
+                              Name 288  "NumberOfLevelsU"
+                              Name 291  "sizeQueryTemp"
+                              Name 294  "WidthU"
+                              Name 296  "NumberOfLevelsI"
+                              Name 300  "sizeQueryTemp"
+                              Name 308  "PS_OUTPUT"
+                              MemberName 308(PS_OUTPUT) 0  "color"
+                              Name 310  "ps_output"
+                              Name 316  "color"
+                              MemberDecorate 14($Global) 0 Offset 0
+                              MemberDecorate 14($Global) 1 Offset 4
+                              MemberDecorate 14($Global) 2 Offset 8
+                              MemberDecorate 14($Global) 3 Offset 12
+                              MemberDecorate 14($Global) 4 Offset 16
+                              MemberDecorate 14($Global) 5 Offset 24
+                              MemberDecorate 14($Global) 6 Offset 32
+                              MemberDecorate 14($Global) 7 Offset 40
+                              MemberDecorate 14($Global) 8 Offset 48
+                              MemberDecorate 14($Global) 9 Offset 52
+                              Decorate 14($Global) Block
+                              Decorate 16 DescriptorSet 0
+                              Decorate 254(g_tTexbfs) DescriptorSet 0
+                              Decorate 276(g_tTex1df4) DescriptorSet 0
+                              Decorate 316(color) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypePointer Function 6(float)
+               9:             TypeInt 32 1
+              10:             TypeInt 32 0
+              11:             TypeVector 9(int) 2
+              12:             TypeVector 10(int) 2
+              13:             TypeVector 6(float) 2
+     14($Global):             TypeStruct 9(int) 10(int) 6(float) 10(int) 11(ivec2) 12(ivec2) 13(fvec2) 12(ivec2) 10(int) 6(float)
+              15:             TypePointer Uniform 14($Global)
+              16:     15(ptr) Variable Uniform
+              17:      9(int) Constant 3
+              18:             TypePointer Uniform 10(int)
+              21:             TypeBool
+              22:     10(int) Constant 0
+              24:    6(float) Constant 0
+              25:    6(float) Constant 1065353216
+              27:      9(int) Constant 2
+              28:             TypePointer Uniform 6(float)
+              32:             TypePointer Function 10(int)
+              37:     10(int) Constant 1
+              39:      9(int) Constant 1
+              43:             TypePointer Function 9(int)
+              48:      9(int) Constant 0
+              50:             TypePointer Uniform 9(int)
+              68:             TypePointer Function 13(fvec2)
+              70:      9(int) Constant 7
+              71:             TypePointer Uniform 12(ivec2)
+              74:             TypeVector 21(bool) 2
+              75:   12(ivec2) ConstantComposite 22 22
+              77:   13(fvec2) ConstantComposite 24 24
+              78:   13(fvec2) ConstantComposite 25 25
+              80:      9(int) Constant 6
+              81:             TypePointer Uniform 13(fvec2)
+              85:             TypePointer Function 12(ivec2)
+              90:   12(ivec2) ConstantComposite 37 37
+              92:      9(int) Constant 5
+              96:             TypePointer Function 11(ivec2)
+             101:   11(ivec2) ConstantComposite 48 48
+             102:   11(ivec2) ConstantComposite 39 39
+             104:      9(int) Constant 4
+             105:             TypePointer Uniform 11(ivec2)
+             251:             TypeImage 6(float) Buffer sampled format:R32f
+             252:             TypeSampledImage 251
+             253:             TypePointer UniformConstant 252
+  254(g_tTexbfs):    253(ptr) Variable UniformConstant
+             256:      9(int) Constant 8
+             261:             TypeVector 6(float) 4
+             266:      9(int) Constant 9
+             274:             TypeImage 6(float) 1D sampled format:Unknown
+             275:             TypePointer UniformConstant 274
+ 276(g_tTex1df4):    275(ptr) Variable UniformConstant
+             284:     10(int) Constant 6
+  308(PS_OUTPUT):             TypeStruct 261(fvec4)
+             309:             TypePointer Function 308(PS_OUTPUT)
+             313:             TypePointer Function 261(fvec4)
+             315:             TypePointer Output 261(fvec4)
+      316(color):    315(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+          8(r00):      7(ptr) Variable Function
+         33(r01):     32(ptr) Variable Function
+         44(r02):     43(ptr) Variable Function
+         54(r03):      7(ptr) Variable Function
+         61(r04):      7(ptr) Variable Function
+         69(r10):     68(ptr) Variable Function
+         86(r11):     85(ptr) Variable Function
+         97(r12):     96(ptr) Variable Function
+        109(r13):     68(ptr) Variable Function
+        116(r14):     68(ptr) Variable Function
+        123(r20):     68(ptr) Variable Function
+        133(r21):     85(ptr) Variable Function
+        145(r22):     68(ptr) Variable Function
+        157(r30):     68(ptr) Variable Function
+        166(r31):     85(ptr) Variable Function
+        175(r32):     96(ptr) Variable Function
+        184(r33):     68(ptr) Variable Function
+        192(r34):     68(ptr) Variable Function
+        200(r40):     68(ptr) Variable Function
+        211(r41):     85(ptr) Variable Function
+        224(r42):     68(ptr) Variable Function
+        238(r43):     96(ptr) Variable Function
+        250(r50):      7(ptr) Variable Function
+        264(r51):      7(ptr) Variable Function
+273(sizeQueryTemp):     32(ptr) Variable Function
+     279(WidthI):     43(ptr) Variable Function
+282(sizeQueryTemp):     32(ptr) Variable Function
+288(NumberOfLevelsU):     32(ptr) Variable Function
+291(sizeQueryTemp):     32(ptr) Variable Function
+     294(WidthU):     32(ptr) Variable Function
+296(NumberOfLevelsI):     43(ptr) Variable Function
+300(sizeQueryTemp):     32(ptr) Variable Function
+  310(ps_output):    309(ptr) Variable Function
+              19:     18(ptr) AccessChain 16 17
+              20:     10(int) Load 19
+              23:    21(bool) INotEqual 20 22
+              26:    6(float) Select 23 25 24
+              29:     28(ptr) AccessChain 16 27
+              30:    6(float) Load 29
+              31:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 26 30
+                              Store 8(r00) 31
+              34:     18(ptr) AccessChain 16 17
+              35:     10(int) Load 34
+              36:    21(bool) INotEqual 35 22
+              38:     10(int) Select 36 37 22
+              40:     18(ptr) AccessChain 16 39
+              41:     10(int) Load 40
+              42:     10(int) ExtInst 1(GLSL.std.450) 41(UMax) 38 41
+                              Store 33(r01) 42
+              45:     18(ptr) AccessChain 16 17
+              46:     10(int) Load 45
+              47:    21(bool) INotEqual 46 22
+              49:      9(int) Select 47 39 48
+              51:     50(ptr) AccessChain 16 48
+              52:      9(int) Load 51
+              53:      9(int) ExtInst 1(GLSL.std.450) 42(SMax) 49 52
+                              Store 44(r02) 53
+              55:     50(ptr) AccessChain 16 48
+              56:      9(int) Load 55
+              57:    6(float) ConvertSToF 56
+              58:     28(ptr) AccessChain 16 27
+              59:    6(float) Load 58
+              60:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 57 59
+                              Store 54(r03) 60
+              62:     18(ptr) AccessChain 16 39
+              63:     10(int) Load 62
+              64:    6(float) ConvertUToF 63
+              65:     28(ptr) AccessChain 16 27
+              66:    6(float) Load 65
+              67:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 64 66
+                              Store 61(r04) 67
+              72:     71(ptr) AccessChain 16 70
+              73:   12(ivec2) Load 72
+              76:   74(bvec2) INotEqual 73 75
+              79:   13(fvec2) Select 76 78 77
+              82:     81(ptr) AccessChain 16 80
+              83:   13(fvec2) Load 82
+              84:   13(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 79 83
+                              Store 69(r10) 84
+              87:     71(ptr) AccessChain 16 70
+              88:   12(ivec2) Load 87
+              89:   74(bvec2) INotEqual 88 75
+              91:   12(ivec2) Select 89 90 75
+              93:     71(ptr) AccessChain 16 92
+              94:   12(ivec2) Load 93
+              95:   12(ivec2) ExtInst 1(GLSL.std.450) 41(UMax) 91 94
+                              Store 86(r11) 95
+              98:     71(ptr) AccessChain 16 70
+              99:   12(ivec2) Load 98
+             100:   74(bvec2) INotEqual 99 75
+             103:   11(ivec2) Select 100 102 101
+             106:    105(ptr) AccessChain 16 104
+             107:   11(ivec2) Load 106
+             108:   11(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 103 107
+                              Store 97(r12) 108
+             110:    105(ptr) AccessChain 16 104
+             111:   11(ivec2) Load 110
+             112:   13(fvec2) ConvertSToF 111
+             113:     81(ptr) AccessChain 16 80
+             114:   13(fvec2) Load 113
+             115:   13(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 112 114
+                              Store 109(r13) 115
+             117:     71(ptr) AccessChain 16 92
+             118:   12(ivec2) Load 117
+             119:   13(fvec2) ConvertUToF 118
+             120:     81(ptr) AccessChain 16 80
+             121:   13(fvec2) Load 120
+             122:   13(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 119 121
+                              Store 116(r14) 122
+             124:    105(ptr) AccessChain 16 104
+             125:   11(ivec2) Load 124
+             126:   13(fvec2) ConvertSToF 125
+             127:     71(ptr) AccessChain 16 92
+             128:   12(ivec2) Load 127
+             129:   13(fvec2) ConvertUToF 128
+             130:     81(ptr) AccessChain 16 80
+             131:   13(fvec2) Load 130
+             132:   13(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 126 129 131
+                              Store 123(r20) 132
+             134:     71(ptr) AccessChain 16 70
+             135:   12(ivec2) Load 134
+             136:   74(bvec2) INotEqual 135 75
+             137:   12(ivec2) Select 136 90 75
+             138:     71(ptr) AccessChain 16 92
+             139:   12(ivec2) Load 138
+             140:     71(ptr) AccessChain 16 70
+             141:   12(ivec2) Load 140
+             142:   74(bvec2) INotEqual 141 75
+             143:   12(ivec2) Select 142 90 75
+             144:   12(ivec2) ExtInst 1(GLSL.std.450) 44(UClamp) 137 139 143
+                              Store 133(r21) 144
+             146:     71(ptr) AccessChain 16 70
+             147:   12(ivec2) Load 146
+             148:   74(bvec2) INotEqual 147 75
+             149:   13(fvec2) Select 148 78 77
+             150:     81(ptr) AccessChain 16 80
+             151:   13(fvec2) Load 150
+             152:     71(ptr) AccessChain 16 70
+             153:   12(ivec2) Load 152
+             154:   74(bvec2) INotEqual 153 75
+             155:   13(fvec2) Select 154 78 77
+             156:   13(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 149 151 155
+                              Store 145(r22) 156
+             158:     18(ptr) AccessChain 16 17
+             159:     10(int) Load 158
+             160:    21(bool) INotEqual 159 22
+             161:    6(float) Select 160 25 24
+             162:   13(fvec2) CompositeConstruct 161 161
+             163:     81(ptr) AccessChain 16 80
+             164:   13(fvec2) Load 163
+             165:   13(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 162 164
+                              Store 157(r30) 165
+             167:     18(ptr) AccessChain 16 17
+             168:     10(int) Load 167
+             169:    21(bool) INotEqual 168 22
+             170:     10(int) Select 169 37 22
+             171:   12(ivec2) CompositeConstruct 170 170
+             172:     71(ptr) AccessChain 16 92
+             173:   12(ivec2) Load 172
+             174:   12(ivec2) ExtInst 1(GLSL.std.450) 41(UMax) 171 173
+                              Store 166(r31) 174
+             176:     18(ptr) AccessChain 16 17
+             177:     10(int) Load 176
+             178:    21(bool) INotEqual 177 22
+             179:      9(int) Select 178 39 48
+             180:   11(ivec2) CompositeConstruct 179 179
+             181:    105(ptr) AccessChain 16 104
+             182:   11(ivec2) Load 181
+             183:   11(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 180 182
+                              Store 175(r32) 183
+             185:     50(ptr) AccessChain 16 48
+             186:      9(int) Load 185
+             187:    6(float) ConvertSToF 186
+             188:   13(fvec2) CompositeConstruct 187 187
+             189:     81(ptr) AccessChain 16 80
+             190:   13(fvec2) Load 189
+             191:   13(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 188 190
+                              Store 184(r33) 191
+             193:     18(ptr) AccessChain 16 39
+             194:     10(int) Load 193
+             195:    6(float) ConvertUToF 194
+             196:   13(fvec2) CompositeConstruct 195 195
+             197:     81(ptr) AccessChain 16 80
+             198:   13(fvec2) Load 197
+             199:   13(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 196 198
+                              Store 192(r34) 199
+             201:     50(ptr) AccessChain 16 48
+             202:      9(int) Load 201
+             203:    6(float) ConvertSToF 202
+             204:   13(fvec2) CompositeConstruct 203 203
+             205:     71(ptr) AccessChain 16 92
+             206:   12(ivec2) Load 205
+             207:   13(fvec2) ConvertUToF 206
+             208:     81(ptr) AccessChain 16 80
+             209:   13(fvec2) Load 208
+             210:   13(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 204 207 209
+                              Store 200(r40) 210
+             212:     71(ptr) AccessChain 16 70
+             213:   12(ivec2) Load 212
+             214:   74(bvec2) INotEqual 213 75
+             215:   12(ivec2) Select 214 90 75
+             216:     18(ptr) AccessChain 16 39
+             217:     10(int) Load 216
+             218:   12(ivec2) CompositeConstruct 217 217
+             219:     71(ptr) AccessChain 16 70
+             220:   12(ivec2) Load 219
+             221:   74(bvec2) INotEqual 220 75
+             222:   12(ivec2) Select 221 90 75
+             223:   12(ivec2) ExtInst 1(GLSL.std.450) 44(UClamp) 215 218 222
+                              Store 211(r41) 223
+             225:     71(ptr) AccessChain 16 70
+             226:   12(ivec2) Load 225
+             227:   74(bvec2) INotEqual 226 75
+             228:   13(fvec2) Select 227 78 77
+             229:     28(ptr) AccessChain 16 27
+             230:    6(float) Load 229
+             231:   13(fvec2) CompositeConstruct 230 230
+             232:     18(ptr) AccessChain 16 17
+             233:     10(int) Load 232
+             234:    21(bool) INotEqual 233 22
+             235:    6(float) Select 234 25 24
+             236:   13(fvec2) CompositeConstruct 235 235
+             237:   13(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 228 231 236
+                              Store 224(r42) 237
+             239:     50(ptr) AccessChain 16 48
+             240:      9(int) Load 239
+             241:     10(int) Bitcast 240
+             242:   12(ivec2) CompositeConstruct 241 241
+             243:    105(ptr) AccessChain 16 104
+             244:   11(ivec2) Load 243
+             245:   12(ivec2) Bitcast 244
+             246:     71(ptr) AccessChain 16 92
+             247:   12(ivec2) Load 246
+             248:   12(ivec2) ExtInst 1(GLSL.std.450) 44(UClamp) 242 245 247
+             249:   11(ivec2) Bitcast 248
+                              Store 238(r43) 249
+             255:         252 Load 254(g_tTexbfs)
+             257:     18(ptr) AccessChain 16 256
+             258:     10(int) Load 257
+             259:      9(int) Bitcast 258
+             260:         251 Image 255
+             262:  261(fvec4) ImageFetch 260 259
+             263:    6(float) CompositeExtract 262 0
+                              Store 250(r50) 263
+             265:         252 Load 254(g_tTexbfs)
+             267:     28(ptr) AccessChain 16 266
+             268:    6(float) Load 267
+             269:      9(int) ConvertFToS 268
+             270:         251 Image 265
+             271:  261(fvec4) ImageFetch 270 269
+             272:    6(float) CompositeExtract 271 0
+                              Store 264(r51) 272
+             277:         274 Load 276(g_tTex1df4)
+             278:      9(int) ImageQuerySize 277
+                              Store 273(sizeQueryTemp) 278
+             280:     10(int) Load 273(sizeQueryTemp)
+             281:      9(int) Bitcast 280
+                              Store 279(WidthI) 281
+             283:         274 Load 276(g_tTex1df4)
+             285:      9(int) ImageQuerySizeLod 283 284
+                              Store 282(sizeQueryTemp) 285
+             286:     10(int) Load 282(sizeQueryTemp)
+             287:      9(int) Bitcast 286
+                              Store 279(WidthI) 287
+             289:         274 Load 276(g_tTex1df4)
+             290:      9(int) ImageQueryLevels 289
+                              Store 288(NumberOfLevelsU) 290
+             292:         274 Load 276(g_tTex1df4)
+             293:      9(int) ImageQuerySizeLod 292 284
+                              Store 291(sizeQueryTemp) 293
+             295:     10(int) Load 291(sizeQueryTemp)
+                              Store 294(WidthU) 295
+             297:         274 Load 276(g_tTex1df4)
+             298:      9(int) ImageQueryLevels 297
+             299:      9(int) Bitcast 298
+                              Store 296(NumberOfLevelsI) 299
+             301:         274 Load 276(g_tTex1df4)
+             302:      9(int) ImageQuerySizeLod 301 284
+                              Store 300(sizeQueryTemp) 302
+             303:     10(int) Load 300(sizeQueryTemp)
+             304:      9(int) Bitcast 303
+                              Store 279(WidthI) 304
+             305:         274 Load 276(g_tTex1df4)
+             306:      9(int) ImageQueryLevels 305
+             307:      9(int) Bitcast 306
+                              Store 296(NumberOfLevelsI) 307
+             311:    6(float) Load 8(r00)
+             312:  261(fvec4) CompositeConstruct 311 311 311 311
+             314:    313(ptr) AccessChain 310(ps_output) 48
+                              Store 314 312
+             317:    313(ptr) AccessChain 310(ps_output) 48
+             318:  261(fvec4) Load 317
+                              Store 316(color) 318
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out b/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out
new file mode 100644
index 0000000..ebe6a24
--- /dev/null
+++ b/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out
@@ -0,0 +1,337 @@
+hlsl.intrinsics.promote.outputs.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:20  Function Definition: main( (temp structure{temp 4-component vector of float color})
+0:20    Function Parameters: 
+0:?     Sequence
+0:37      clamp (temp float)
+0:37        fpos: direct index for structure (layout(offset=52 ) uniform float)
+0:37          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:37          Constant:
+0:37            9 (const uint)
+0:37        Constant:
+0:37          0.000000
+0:37        Constant:
+0:37          1.000000
+0:40      Sequence
+0:40        move second child to first child (temp uint)
+0:40          'sizeQueryTemp' (temp uint)
+0:40          textureSize (temp uint)
+0:40            'g_tTex1df4' (uniform texture1D)
+0:40        move second child to first child (temp int)
+0:40          'WidthI' (temp int)
+0:40          Convert uint to int (temp int)
+0:40            'sizeQueryTemp' (temp uint)
+0:41      Sequence
+0:41        move second child to first child (temp uint)
+0:41          'sizeQueryTemp' (temp uint)
+0:41          textureSize (temp uint)
+0:41            'g_tTex1df4' (uniform texture1D)
+0:41            Constant:
+0:41              6 (const uint)
+0:41        move second child to first child (temp int)
+0:41          'WidthI' (temp int)
+0:41          Convert uint to int (temp int)
+0:41            'sizeQueryTemp' (temp uint)
+0:41        move second child to first child (temp uint)
+0:41          'NumberOfLevelsU' (temp uint)
+0:41          textureQueryLevels (temp uint)
+0:41            'g_tTex1df4' (uniform texture1D)
+0:42      Sequence
+0:42        move second child to first child (temp uint)
+0:42          'sizeQueryTemp' (temp uint)
+0:42          textureSize (temp uint)
+0:42            'g_tTex1df4' (uniform texture1D)
+0:42            Constant:
+0:42              6 (const uint)
+0:42        move second child to first child (temp uint)
+0:42          'WidthU' (temp uint)
+0:42          'sizeQueryTemp' (temp uint)
+0:42        move second child to first child (temp int)
+0:42          'NumberOfLevelsI' (temp int)
+0:42          Convert uint to int (temp int)
+0:42            textureQueryLevels (temp uint)
+0:42              'g_tTex1df4' (uniform texture1D)
+0:43      Sequence
+0:43        move second child to first child (temp uint)
+0:43          'sizeQueryTemp' (temp uint)
+0:43          textureSize (temp uint)
+0:43            'g_tTex1df4' (uniform texture1D)
+0:43            Constant:
+0:43              6 (const uint)
+0:43        move second child to first child (temp int)
+0:43          'WidthI' (temp int)
+0:43          Convert uint to int (temp int)
+0:43            'sizeQueryTemp' (temp uint)
+0:43        move second child to first child (temp int)
+0:43          'NumberOfLevelsI' (temp int)
+0:43          Convert uint to int (temp int)
+0:43            textureQueryLevels (temp uint)
+0:43              'g_tTex1df4' (uniform texture1D)
+0:47      move second child to first child (temp 4-component vector of float)
+0:47        color: direct index for structure (temp 4-component vector of float)
+0:47          'ps_output' (temp structure{temp 4-component vector of float color})
+0:47          Constant:
+0:47            0 (const int)
+0:47        Constant:
+0:47          0.000000
+0:47          0.000000
+0:47          0.000000
+0:47          0.000000
+0:48      Sequence
+0:48        Sequence
+0:48          move second child to first child (temp 4-component vector of float)
+0:?             'color' (layout(location=0 ) out 4-component vector of float)
+0:48            color: direct index for structure (temp 4-component vector of float)
+0:48              'ps_output' (temp structure{temp 4-component vector of float color})
+0:48              Constant:
+0:48                0 (const int)
+0:48        Branch: Return
+0:?   Linker Objects
+0:?     'color' (layout(location=0 ) out 4-component vector of float)
+0:?     'g_tTexbfs' (layout(r32f ) uniform samplerBuffer)
+0:?     'g_tTex1df4' (uniform texture1D)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:20  Function Definition: main( (temp structure{temp 4-component vector of float color})
+0:20    Function Parameters: 
+0:?     Sequence
+0:37      clamp (temp float)
+0:37        fpos: direct index for structure (layout(offset=52 ) uniform float)
+0:37          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+0:37          Constant:
+0:37            9 (const uint)
+0:37        Constant:
+0:37          0.000000
+0:37        Constant:
+0:37          1.000000
+0:40      Sequence
+0:40        move second child to first child (temp uint)
+0:40          'sizeQueryTemp' (temp uint)
+0:40          textureSize (temp uint)
+0:40            'g_tTex1df4' (uniform texture1D)
+0:40        move second child to first child (temp int)
+0:40          'WidthI' (temp int)
+0:40          Convert uint to int (temp int)
+0:40            'sizeQueryTemp' (temp uint)
+0:41      Sequence
+0:41        move second child to first child (temp uint)
+0:41          'sizeQueryTemp' (temp uint)
+0:41          textureSize (temp uint)
+0:41            'g_tTex1df4' (uniform texture1D)
+0:41            Constant:
+0:41              6 (const uint)
+0:41        move second child to first child (temp int)
+0:41          'WidthI' (temp int)
+0:41          Convert uint to int (temp int)
+0:41            'sizeQueryTemp' (temp uint)
+0:41        move second child to first child (temp uint)
+0:41          'NumberOfLevelsU' (temp uint)
+0:41          textureQueryLevels (temp uint)
+0:41            'g_tTex1df4' (uniform texture1D)
+0:42      Sequence
+0:42        move second child to first child (temp uint)
+0:42          'sizeQueryTemp' (temp uint)
+0:42          textureSize (temp uint)
+0:42            'g_tTex1df4' (uniform texture1D)
+0:42            Constant:
+0:42              6 (const uint)
+0:42        move second child to first child (temp uint)
+0:42          'WidthU' (temp uint)
+0:42          'sizeQueryTemp' (temp uint)
+0:42        move second child to first child (temp int)
+0:42          'NumberOfLevelsI' (temp int)
+0:42          Convert uint to int (temp int)
+0:42            textureQueryLevels (temp uint)
+0:42              'g_tTex1df4' (uniform texture1D)
+0:43      Sequence
+0:43        move second child to first child (temp uint)
+0:43          'sizeQueryTemp' (temp uint)
+0:43          textureSize (temp uint)
+0:43            'g_tTex1df4' (uniform texture1D)
+0:43            Constant:
+0:43              6 (const uint)
+0:43        move second child to first child (temp int)
+0:43          'WidthI' (temp int)
+0:43          Convert uint to int (temp int)
+0:43            'sizeQueryTemp' (temp uint)
+0:43        move second child to first child (temp int)
+0:43          'NumberOfLevelsI' (temp int)
+0:43          Convert uint to int (temp int)
+0:43            textureQueryLevels (temp uint)
+0:43              'g_tTex1df4' (uniform texture1D)
+0:47      move second child to first child (temp 4-component vector of float)
+0:47        color: direct index for structure (temp 4-component vector of float)
+0:47          'ps_output' (temp structure{temp 4-component vector of float color})
+0:47          Constant:
+0:47            0 (const int)
+0:47        Constant:
+0:47          0.000000
+0:47          0.000000
+0:47          0.000000
+0:47          0.000000
+0:48      Sequence
+0:48        Sequence
+0:48          move second child to first child (temp 4-component vector of float)
+0:?             'color' (layout(location=0 ) out 4-component vector of float)
+0:48            color: direct index for structure (temp 4-component vector of float)
+0:48              'ps_output' (temp structure{temp 4-component vector of float color})
+0:48              Constant:
+0:48                0 (const int)
+0:48        Branch: Return
+0:?   Linker Objects
+0:?     'color' (layout(location=0 ) out 4-component vector of float)
+0:?     'g_tTexbfs' (layout(r32f ) uniform samplerBuffer)
+0:?     'g_tTex1df4' (uniform texture1D)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 76
+
+                              Capability Shader
+                              Capability Sampled1D
+                              Capability SampledBuffer
+                              Capability ImageQuery
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 68
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 12  "$Global"
+                              MemberName 12($Global) 0  "i"
+                              MemberName 12($Global) 1  "u"
+                              MemberName 12($Global) 2  "f"
+                              MemberName 12($Global) 3  "b"
+                              MemberName 12($Global) 4  "i2"
+                              MemberName 12($Global) 5  "u2"
+                              MemberName 12($Global) 6  "f2"
+                              MemberName 12($Global) 7  "b2"
+                              MemberName 12($Global) 8  "upos"
+                              MemberName 12($Global) 9  "fpos"
+                              Name 14  ""
+                              Name 23  "sizeQueryTemp"
+                              Name 26  "g_tTex1df4"
+                              Name 30  "WidthI"
+                              Name 33  "sizeQueryTemp"
+                              Name 39  "NumberOfLevelsU"
+                              Name 42  "sizeQueryTemp"
+                              Name 45  "WidthU"
+                              Name 47  "NumberOfLevelsI"
+                              Name 51  "sizeQueryTemp"
+                              Name 60  "PS_OUTPUT"
+                              MemberName 60(PS_OUTPUT) 0  "color"
+                              Name 62  "ps_output"
+                              Name 68  "color"
+                              Name 75  "g_tTexbfs"
+                              MemberDecorate 12($Global) 0 Offset 0
+                              MemberDecorate 12($Global) 1 Offset 4
+                              MemberDecorate 12($Global) 2 Offset 8
+                              MemberDecorate 12($Global) 3 Offset 12
+                              MemberDecorate 12($Global) 4 Offset 16
+                              MemberDecorate 12($Global) 5 Offset 24
+                              MemberDecorate 12($Global) 6 Offset 32
+                              MemberDecorate 12($Global) 7 Offset 40
+                              MemberDecorate 12($Global) 8 Offset 48
+                              MemberDecorate 12($Global) 9 Offset 52
+                              Decorate 12($Global) Block
+                              Decorate 14 DescriptorSet 0
+                              Decorate 26(g_tTex1df4) DescriptorSet 0
+                              Decorate 68(color) Location 0
+                              Decorate 75(g_tTexbfs) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypeInt 32 0
+               8:             TypeFloat 32
+               9:             TypeVector 6(int) 2
+              10:             TypeVector 7(int) 2
+              11:             TypeVector 8(float) 2
+     12($Global):             TypeStruct 6(int) 7(int) 8(float) 7(int) 9(ivec2) 10(ivec2) 11(fvec2) 10(ivec2) 7(int) 8(float)
+              13:             TypePointer Uniform 12($Global)
+              14:     13(ptr) Variable Uniform
+              15:      6(int) Constant 9
+              16:             TypePointer Uniform 8(float)
+              19:    8(float) Constant 0
+              20:    8(float) Constant 1065353216
+              22:             TypePointer Function 7(int)
+              24:             TypeImage 8(float) 1D sampled format:Unknown
+              25:             TypePointer UniformConstant 24
+  26(g_tTex1df4):     25(ptr) Variable UniformConstant
+              29:             TypePointer Function 6(int)
+              35:      7(int) Constant 6
+              59:             TypeVector 8(float) 4
+   60(PS_OUTPUT):             TypeStruct 59(fvec4)
+              61:             TypePointer Function 60(PS_OUTPUT)
+              63:      6(int) Constant 0
+              64:   59(fvec4) ConstantComposite 19 19 19 19
+              65:             TypePointer Function 59(fvec4)
+              67:             TypePointer Output 59(fvec4)
+       68(color):     67(ptr) Variable Output
+              72:             TypeImage 8(float) Buffer sampled format:R32f
+              73:             TypeSampledImage 72
+              74:             TypePointer UniformConstant 73
+   75(g_tTexbfs):     74(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+23(sizeQueryTemp):     22(ptr) Variable Function
+      30(WidthI):     29(ptr) Variable Function
+33(sizeQueryTemp):     22(ptr) Variable Function
+39(NumberOfLevelsU):     22(ptr) Variable Function
+42(sizeQueryTemp):     22(ptr) Variable Function
+      45(WidthU):     22(ptr) Variable Function
+47(NumberOfLevelsI):     29(ptr) Variable Function
+51(sizeQueryTemp):     22(ptr) Variable Function
+   62(ps_output):     61(ptr) Variable Function
+              17:     16(ptr) AccessChain 14 15
+              18:    8(float) Load 17
+              21:    8(float) ExtInst 1(GLSL.std.450) 43(FClamp) 18 19 20
+              27:          24 Load 26(g_tTex1df4)
+              28:      6(int) ImageQuerySize 27
+                              Store 23(sizeQueryTemp) 28
+              31:      7(int) Load 23(sizeQueryTemp)
+              32:      6(int) Bitcast 31
+                              Store 30(WidthI) 32
+              34:          24 Load 26(g_tTex1df4)
+              36:      6(int) ImageQuerySizeLod 34 35
+                              Store 33(sizeQueryTemp) 36
+              37:      7(int) Load 33(sizeQueryTemp)
+              38:      6(int) Bitcast 37
+                              Store 30(WidthI) 38
+              40:          24 Load 26(g_tTex1df4)
+              41:      6(int) ImageQueryLevels 40
+                              Store 39(NumberOfLevelsU) 41
+              43:          24 Load 26(g_tTex1df4)
+              44:      6(int) ImageQuerySizeLod 43 35
+                              Store 42(sizeQueryTemp) 44
+              46:      7(int) Load 42(sizeQueryTemp)
+                              Store 45(WidthU) 46
+              48:          24 Load 26(g_tTex1df4)
+              49:      6(int) ImageQueryLevels 48
+              50:      6(int) Bitcast 49
+                              Store 47(NumberOfLevelsI) 50
+              52:          24 Load 26(g_tTex1df4)
+              53:      6(int) ImageQuerySizeLod 52 35
+                              Store 51(sizeQueryTemp) 53
+              54:      7(int) Load 51(sizeQueryTemp)
+              55:      6(int) Bitcast 54
+                              Store 30(WidthI) 55
+              56:          24 Load 26(g_tTex1df4)
+              57:      6(int) ImageQueryLevels 56
+              58:      6(int) Bitcast 57
+                              Store 47(NumberOfLevelsI) 58
+              66:     65(ptr) AccessChain 62(ps_output) 63
+                              Store 66 64
+              69:     65(ptr) AccessChain 62(ps_output) 63
+              70:   59(fvec4) Load 69
+                              Store 68(color) 70
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.intrinsics.vert.out b/Test/baseResults/hlsl.intrinsics.vert.out
index bcf911b..84146e6 100644
--- a/Test/baseResults/hlsl.intrinsics.vert.out
+++ b/Test/baseResults/hlsl.intrinsics.vert.out
@@ -40,9 +40,9 @@
 0:16        'inF0' (in float)
 0:17      hyp. cosine (temp float)
 0:17        'inF0' (in float)
-0:18      bitCount (temp uint)
+0:18      bitCount (temp int)
 0:18        Constant:
-0:18          7 (const uint)
+0:18          7 (const int)
 0:19      degrees (temp float)
 0:19        'inF0' (in float)
 0:23      exp (temp float)
@@ -96,9 +96,9 @@
 0:42        'inF1' (in float)
 0:43      radians (temp float)
 0:43        'inF0' (in float)
-0:44      bitFieldReverse (temp uint)
+0:44      bitFieldReverse (temp int)
 0:44        Constant:
-0:44          2 (const uint)
+0:44          2 (const int)
 0:45      roundEven (temp float)
 0:45        'inF0' (in float)
 0:46      inverse sqrt (temp float)
@@ -190,10 +190,10 @@
 0:84        'inF0' (in 2-component vector of float)
 0:85      hyp. cosine (temp 2-component vector of float)
 0:85        'inF0' (in 2-component vector of float)
-0:?       bitCount (temp 2-component vector of uint)
+0:?       bitCount (temp 2-component vector of int)
 0:?         Constant:
-0:?           7 (const uint)
-0:?           3 (const uint)
+0:?           7 (const int)
+0:?           3 (const int)
 0:87      degrees (temp 2-component vector of float)
 0:87        'inF0' (in 2-component vector of float)
 0:88      distance (temp float)
@@ -269,10 +269,10 @@
 0:118        'inF1' (in 2-component vector of float)
 0:118        Constant:
 0:118          2.000000
-0:?       bitFieldReverse (temp 2-component vector of uint)
+0:?       bitFieldReverse (temp 2-component vector of int)
 0:?         Constant:
-0:?           1 (const uint)
-0:?           2 (const uint)
+0:?           1 (const int)
+0:?           2 (const int)
 0:120      roundEven (temp 2-component vector of float)
 0:120        'inF0' (in 2-component vector of float)
 0:121      inverse sqrt (temp 2-component vector of float)
@@ -356,11 +356,11 @@
 0:154        'inF0' (in 3-component vector of float)
 0:155      hyp. cosine (temp 3-component vector of float)
 0:155        'inF0' (in 3-component vector of float)
-0:?       bitCount (temp 3-component vector of uint)
+0:?       bitCount (temp 3-component vector of int)
 0:?         Constant:
-0:?           7 (const uint)
-0:?           3 (const uint)
-0:?           5 (const uint)
+0:?           7 (const int)
+0:?           3 (const int)
+0:?           5 (const int)
 0:157      cross-product (temp 3-component vector of float)
 0:157        'inF0' (in 3-component vector of float)
 0:157        'inF1' (in 3-component vector of float)
@@ -439,11 +439,11 @@
 0:189        'inF1' (in 3-component vector of float)
 0:189        Constant:
 0:189          2.000000
-0:?       bitFieldReverse (temp 3-component vector of uint)
+0:?       bitFieldReverse (temp 3-component vector of int)
 0:?         Constant:
-0:?           1 (const uint)
-0:?           2 (const uint)
-0:?           3 (const uint)
+0:?           1 (const int)
+0:?           2 (const int)
+0:?           3 (const int)
 0:191      roundEven (temp 3-component vector of float)
 0:191        'inF0' (in 3-component vector of float)
 0:192      inverse sqrt (temp 3-component vector of float)
@@ -528,12 +528,12 @@
 0:225        'inF0' (in 4-component vector of float)
 0:226      hyp. cosine (temp 4-component vector of float)
 0:226        'inF0' (in 4-component vector of float)
-0:?       bitCount (temp 4-component vector of uint)
+0:?       bitCount (temp 4-component vector of int)
 0:?         Constant:
-0:?           7 (const uint)
-0:?           3 (const uint)
-0:?           5 (const uint)
-0:?           2 (const uint)
+0:?           7 (const int)
+0:?           3 (const int)
+0:?           5 (const int)
+0:?           2 (const int)
 0:228      degrees (temp 4-component vector of float)
 0:228        'inF0' (in 4-component vector of float)
 0:229      distance (temp float)
@@ -629,12 +629,12 @@
 0:260        'inF1' (in 4-component vector of float)
 0:260        Constant:
 0:260          2.000000
-0:?       bitFieldReverse (temp 4-component vector of uint)
+0:?       bitFieldReverse (temp 4-component vector of int)
 0:?         Constant:
-0:?           1 (const uint)
-0:?           2 (const uint)
-0:?           3 (const uint)
-0:?           4 (const uint)
+0:?           1 (const int)
+0:?           2 (const int)
+0:?           3 (const int)
+0:?           4 (const int)
 0:262      roundEven (temp 4-component vector of float)
 0:262        'inF0' (in 4-component vector of float)
 0:263      inverse sqrt (temp 4-component vector of float)
@@ -1439,9 +1439,9 @@
 0:16        'inF0' (in float)
 0:17      hyp. cosine (temp float)
 0:17        'inF0' (in float)
-0:18      bitCount (temp uint)
+0:18      bitCount (temp int)
 0:18        Constant:
-0:18          7 (const uint)
+0:18          7 (const int)
 0:19      degrees (temp float)
 0:19        'inF0' (in float)
 0:23      exp (temp float)
@@ -1495,9 +1495,9 @@
 0:42        'inF1' (in float)
 0:43      radians (temp float)
 0:43        'inF0' (in float)
-0:44      bitFieldReverse (temp uint)
+0:44      bitFieldReverse (temp int)
 0:44        Constant:
-0:44          2 (const uint)
+0:44          2 (const int)
 0:45      roundEven (temp float)
 0:45        'inF0' (in float)
 0:46      inverse sqrt (temp float)
@@ -1589,10 +1589,10 @@
 0:84        'inF0' (in 2-component vector of float)
 0:85      hyp. cosine (temp 2-component vector of float)
 0:85        'inF0' (in 2-component vector of float)
-0:?       bitCount (temp 2-component vector of uint)
+0:?       bitCount (temp 2-component vector of int)
 0:?         Constant:
-0:?           7 (const uint)
-0:?           3 (const uint)
+0:?           7 (const int)
+0:?           3 (const int)
 0:87      degrees (temp 2-component vector of float)
 0:87        'inF0' (in 2-component vector of float)
 0:88      distance (temp float)
@@ -1668,10 +1668,10 @@
 0:118        'inF1' (in 2-component vector of float)
 0:118        Constant:
 0:118          2.000000
-0:?       bitFieldReverse (temp 2-component vector of uint)
+0:?       bitFieldReverse (temp 2-component vector of int)
 0:?         Constant:
-0:?           1 (const uint)
-0:?           2 (const uint)
+0:?           1 (const int)
+0:?           2 (const int)
 0:120      roundEven (temp 2-component vector of float)
 0:120        'inF0' (in 2-component vector of float)
 0:121      inverse sqrt (temp 2-component vector of float)
@@ -1755,11 +1755,11 @@
 0:154        'inF0' (in 3-component vector of float)
 0:155      hyp. cosine (temp 3-component vector of float)
 0:155        'inF0' (in 3-component vector of float)
-0:?       bitCount (temp 3-component vector of uint)
+0:?       bitCount (temp 3-component vector of int)
 0:?         Constant:
-0:?           7 (const uint)
-0:?           3 (const uint)
-0:?           5 (const uint)
+0:?           7 (const int)
+0:?           3 (const int)
+0:?           5 (const int)
 0:157      cross-product (temp 3-component vector of float)
 0:157        'inF0' (in 3-component vector of float)
 0:157        'inF1' (in 3-component vector of float)
@@ -1838,11 +1838,11 @@
 0:189        'inF1' (in 3-component vector of float)
 0:189        Constant:
 0:189          2.000000
-0:?       bitFieldReverse (temp 3-component vector of uint)
+0:?       bitFieldReverse (temp 3-component vector of int)
 0:?         Constant:
-0:?           1 (const uint)
-0:?           2 (const uint)
-0:?           3 (const uint)
+0:?           1 (const int)
+0:?           2 (const int)
+0:?           3 (const int)
 0:191      roundEven (temp 3-component vector of float)
 0:191        'inF0' (in 3-component vector of float)
 0:192      inverse sqrt (temp 3-component vector of float)
@@ -1927,12 +1927,12 @@
 0:225        'inF0' (in 4-component vector of float)
 0:226      hyp. cosine (temp 4-component vector of float)
 0:226        'inF0' (in 4-component vector of float)
-0:?       bitCount (temp 4-component vector of uint)
+0:?       bitCount (temp 4-component vector of int)
 0:?         Constant:
-0:?           7 (const uint)
-0:?           3 (const uint)
-0:?           5 (const uint)
-0:?           2 (const uint)
+0:?           7 (const int)
+0:?           3 (const int)
+0:?           5 (const int)
+0:?           2 (const int)
 0:228      degrees (temp 4-component vector of float)
 0:228        'inF0' (in 4-component vector of float)
 0:229      distance (temp float)
@@ -2028,12 +2028,12 @@
 0:260        'inF1' (in 4-component vector of float)
 0:260        Constant:
 0:260          2.000000
-0:?       bitFieldReverse (temp 4-component vector of uint)
+0:?       bitFieldReverse (temp 4-component vector of int)
 0:?         Constant:
-0:?           1 (const uint)
-0:?           2 (const uint)
-0:?           3 (const uint)
-0:?           4 (const uint)
+0:?           1 (const int)
+0:?           2 (const int)
+0:?           3 (const int)
+0:?           4 (const int)
 0:262      roundEven (temp 4-component vector of float)
 0:262        'inF0' (in 4-component vector of float)
 0:263      inverse sqrt (temp 4-component vector of float)
@@ -2794,7 +2794,7 @@
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 1238
+// Id's are bound by 1240
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
@@ -2872,57 +2872,57 @@
                               Name 126  "inFM3x3"
                               Name 127  "inFM3x4"
                               Name 128  "inFM2x4"
-                              Name 183  "ResType"
-                              Name 317  "ResType"
-                              Name 465  "ResType"
-                              Name 618  "ResType"
-                              Name 751  "ResType"
-                              Name 871  "ResType"
-                              Name 994  "ResType"
-                              Name 1062  "r0"
-                              Name 1066  "r1"
-                              Name 1070  "r2"
-                              Name 1074  "r3"
-                              Name 1078  "r4"
-                              Name 1082  "r5"
-                              Name 1086  "r6"
-                              Name 1090  "r7"
-                              Name 1094  "r8"
-                              Name 1098  "r0"
-                              Name 1102  "r1"
-                              Name 1106  "r2"
-                              Name 1110  "r3"
-                              Name 1114  "r4"
-                              Name 1118  "r5"
-                              Name 1122  "r6"
-                              Name 1126  "r7"
-                              Name 1130  "r8"
-                              Name 1134  "r0"
-                              Name 1138  "r1"
-                              Name 1142  "r2"
-                              Name 1146  "r3"
-                              Name 1150  "r4"
-                              Name 1154  "r5"
-                              Name 1158  "r6"
-                              Name 1162  "r7"
-                              Name 1166  "r8"
-                              Name 1170  "r00"
-                              Name 1174  "r01"
-                              Name 1178  "r02"
-                              Name 1182  "r03"
-                              Name 1186  "r04"
-                              Name 1190  "r05"
-                              Name 1194  "r06"
-                              Name 1198  "r07"
-                              Name 1202  "r08"
-                              Name 1206  "r09"
-                              Name 1210  "r10"
-                              Name 1214  "r11"
-                              Name 1218  "r12"
-                              Name 1222  "r13"
-                              Name 1226  "r14"
-                              Name 1230  "r15"
-                              Name 1234  "r16"
+                              Name 182  "ResType"
+                              Name 316  "ResType"
+                              Name 464  "ResType"
+                              Name 620  "ResType"
+                              Name 753  "ResType"
+                              Name 873  "ResType"
+                              Name 996  "ResType"
+                              Name 1064  "r0"
+                              Name 1068  "r1"
+                              Name 1072  "r2"
+                              Name 1076  "r3"
+                              Name 1080  "r4"
+                              Name 1084  "r5"
+                              Name 1088  "r6"
+                              Name 1092  "r7"
+                              Name 1096  "r8"
+                              Name 1100  "r0"
+                              Name 1104  "r1"
+                              Name 1108  "r2"
+                              Name 1112  "r3"
+                              Name 1116  "r4"
+                              Name 1120  "r5"
+                              Name 1124  "r6"
+                              Name 1128  "r7"
+                              Name 1132  "r8"
+                              Name 1136  "r0"
+                              Name 1140  "r1"
+                              Name 1144  "r2"
+                              Name 1148  "r3"
+                              Name 1152  "r4"
+                              Name 1156  "r5"
+                              Name 1160  "r6"
+                              Name 1164  "r7"
+                              Name 1168  "r8"
+                              Name 1172  "r00"
+                              Name 1176  "r01"
+                              Name 1180  "r02"
+                              Name 1184  "r03"
+                              Name 1188  "r04"
+                              Name 1192  "r05"
+                              Name 1196  "r06"
+                              Name 1200  "r07"
+                              Name 1204  "r08"
+                              Name 1208  "r09"
+                              Name 1212  "r10"
+                              Name 1216  "r11"
+                              Name 1220  "r12"
+                              Name 1224  "r13"
+                              Name 1228  "r14"
+                              Name 1232  "r15"
+                              Name 1236  "r16"
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -2969,47 +2969,49 @@
              119:             TypeFunction 2 7(ptr) 7(ptr) 25(ptr) 37(ptr) 112(ptr) 114(ptr) 69(ptr) 116(ptr) 118(ptr)
              132:             TypeBool
              143:             TypeInt 32 1
-             164:      8(int) Constant 7
-             172:    143(int) Constant 7
-    183(ResType):             TypeStruct 6(float) 143(int)
-             202:    6(float) Constant 1050288283
-             217:      8(int) Constant 2
-             224:    6(float) Constant 0
-             225:    6(float) Constant 1065353216
-             267:             TypeVector 143(int) 2
-             288:      8(int) Constant 3
-             289:   26(ivec2) ConstantComposite 164 288
-    317(ResType):             TypeStruct 24(fvec2) 267(ivec2)
-             322:             TypeVector 132(bool) 2
-             360:    6(float) Constant 1073741824
-             362:      8(int) Constant 1
-             363:   26(ivec2) ConstantComposite 362 217
-             398:   24(fvec2) ConstantComposite 225 360
-             412:             TypeVector 143(int) 3
-             433:      8(int) Constant 5
-             434:   38(ivec3) ConstantComposite 164 288 433
-    465(ResType):             TypeStruct 36(fvec3) 412(ivec3)
-             470:             TypeVector 132(bool) 3
-             509:   38(ivec3) ConstantComposite 362 217 288
-             544:    6(float) Constant 1077936128
-             545:   36(fvec3) ConstantComposite 225 360 544
-             559:             TypeVector 143(int) 4
-             580:   50(ivec4) ConstantComposite 164 288 433 217
-    618(ResType):             TypeStruct 48(fvec4) 559(ivec4)
-             623:             TypeVector 132(bool) 4
-             662:      8(int) Constant 4
-             663:   50(ivec4) ConstantComposite 362 217 288 662
-             698:    6(float) Constant 1082130432
-             699:   48(fvec4) ConstantComposite 225 360 544 698
-    751(ResType):             TypeStruct 60 267(ivec2)
-             815:   24(fvec2) ConstantComposite 360 360
-             816:          60 ConstantComposite 815 815
-    871(ResType):             TypeStruct 68 412(ivec3)
-             935:   36(fvec3) ConstantComposite 544 544 544
-             936:          68 ConstantComposite 935 935 935
-    994(ResType):             TypeStruct 76 559(ivec4)
-            1058:   48(fvec4) ConstantComposite 698 698 698 698
-            1059:          76 ConstantComposite 1058 1058 1058 1058
+             164:    143(int) Constant 7
+    182(ResType):             TypeStruct 6(float) 143(int)
+             201:    6(float) Constant 1050288283
+             216:    143(int) Constant 2
+             223:    6(float) Constant 0
+             224:    6(float) Constant 1065353216
+             266:             TypeVector 143(int) 2
+             287:    143(int) Constant 3
+             288:  266(ivec2) ConstantComposite 164 287
+    316(ResType):             TypeStruct 24(fvec2) 266(ivec2)
+             321:             TypeVector 132(bool) 2
+             359:    6(float) Constant 1073741824
+             361:    143(int) Constant 1
+             362:  266(ivec2) ConstantComposite 361 216
+             397:   24(fvec2) ConstantComposite 224 359
+             411:             TypeVector 143(int) 3
+             432:    143(int) Constant 5
+             433:  411(ivec3) ConstantComposite 164 287 432
+    464(ResType):             TypeStruct 36(fvec3) 411(ivec3)
+             469:             TypeVector 132(bool) 3
+             508:  411(ivec3) ConstantComposite 361 216 287
+             543:    6(float) Constant 1077936128
+             544:   36(fvec3) ConstantComposite 224 359 543
+             558:             TypeVector 143(int) 4
+             579:  558(ivec4) ConstantComposite 164 287 432 216
+             589:      8(int) Constant 1
+             595:      8(int) Constant 2
+             598:      8(int) Constant 3
+    620(ResType):             TypeStruct 48(fvec4) 558(ivec4)
+             625:             TypeVector 132(bool) 4
+             664:    143(int) Constant 4
+             665:  558(ivec4) ConstantComposite 361 216 287 664
+             700:    6(float) Constant 1082130432
+             701:   48(fvec4) ConstantComposite 224 359 543 700
+    753(ResType):             TypeStruct 60 266(ivec2)
+             817:   24(fvec2) ConstantComposite 359 359
+             818:          60 ConstantComposite 817 817
+    873(ResType):             TypeStruct 68 411(ivec3)
+             937:   36(fvec3) ConstantComposite 543 543 543
+             938:          68 ConstantComposite 937 937 937
+    996(ResType):             TypeStruct 76 558(ivec4)
+            1060:   48(fvec4) ConstantComposite 700 700 700 700
+            1061:          76 ConstantComposite 1060 1060 1060 1060
 4(VertexShaderFunction):           2 Function None 3
                5:             Label
                               Return
@@ -3052,98 +3054,98 @@
              161:    6(float) ExtInst 1(GLSL.std.450) 14(Cos) 160
              162:    6(float) Load 11(inF0)
              163:    6(float) ExtInst 1(GLSL.std.450) 20(Cosh) 162
-             165:      8(int) BitCount 164
+             165:    143(int) BitCount 164
              166:    6(float) Load 11(inF0)
              167:    6(float) ExtInst 1(GLSL.std.450) 12(Degrees) 166
              168:    6(float) Load 11(inF0)
              169:    6(float) ExtInst 1(GLSL.std.450) 27(Exp) 168
              170:    6(float) Load 11(inF0)
              171:    6(float) ExtInst 1(GLSL.std.450) 29(Exp2) 170
-             173:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 172
-             174:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 172
-             175:    6(float) Load 11(inF0)
-             176:    6(float) ExtInst 1(GLSL.std.450) 8(Floor) 175
-             177:    6(float) Load 11(inF0)
-             178:    6(float) Load 12(inF1)
-             179:    6(float) FMod 177 178
-             180:    6(float) Load 11(inF0)
-             181:    6(float) ExtInst 1(GLSL.std.450) 10(Fract) 180
-             182:    6(float) Load 11(inF0)
-             184:183(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 182
-             185:    143(int) CompositeExtract 184 1
-                              Store 12(inF1) 185
-             186:    6(float) CompositeExtract 184 0
-             187:    6(float) Load 11(inF0)
-             188:   132(bool) IsInf 187
-             189:    6(float) Load 11(inF0)
-             190:   132(bool) IsNan 189
-             191:    6(float) Load 11(inF0)
-             192:    6(float) Load 12(inF1)
-             193:    6(float) ExtInst 1(GLSL.std.450) 53(Ldexp) 191 192
-             194:    6(float) Load 11(inF0)
-             195:    6(float) Load 12(inF1)
-             196:    6(float) Load 13(inF2)
-             197:    6(float) ExtInst 1(GLSL.std.450) 46(FMix) 194 195 196
-             198:    6(float) Load 11(inF0)
-             199:    6(float) ExtInst 1(GLSL.std.450) 28(Log) 198
-             200:    6(float) Load 11(inF0)
-             201:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 200
-             203:    6(float) FMul 201 202
-             204:    6(float) Load 11(inF0)
-             205:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 204
-             206:    6(float) Load 11(inF0)
-             207:    6(float) Load 12(inF1)
-             208:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 206 207
-             209:    6(float) Load 11(inF0)
-             210:    6(float) Load 12(inF1)
-             211:    6(float) ExtInst 1(GLSL.std.450) 37(FMin) 209 210
-             212:    6(float) Load 11(inF0)
-             213:    6(float) Load 12(inF1)
-             214:    6(float) ExtInst 1(GLSL.std.450) 26(Pow) 212 213
-             215:    6(float) Load 11(inF0)
-             216:    6(float) ExtInst 1(GLSL.std.450) 11(Radians) 215
-             218:      8(int) BitReverse 217
-             219:    6(float) Load 11(inF0)
-             220:    6(float) ExtInst 1(GLSL.std.450) 2(RoundEven) 219
-             221:    6(float) Load 11(inF0)
-             222:    6(float) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 221
-             223:    6(float) Load 11(inF0)
-             226:    6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 223 224 225
-             227:    6(float) Load 11(inF0)
-             228:    6(float) ExtInst 1(GLSL.std.450) 6(FSign) 227
-             229:    6(float) Load 11(inF0)
-             230:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 229
-             231:    6(float) Load 11(inF0)
-             232:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 231
-                              Store 12(inF1) 232
-             233:    6(float) Load 11(inF0)
-             234:    6(float) ExtInst 1(GLSL.std.450) 14(Cos) 233
-                              Store 13(inF2) 234
-             235:    6(float) Load 11(inF0)
-             236:    6(float) ExtInst 1(GLSL.std.450) 19(Sinh) 235
-             237:    6(float) Load 11(inF0)
-             238:    6(float) Load 12(inF1)
-             239:    6(float) Load 13(inF2)
-             240:    6(float) ExtInst 1(GLSL.std.450) 49(SmoothStep) 237 238 239
-             241:    6(float) Load 11(inF0)
-             242:    6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 241
-             243:    6(float) Load 11(inF0)
-             244:    6(float) Load 12(inF1)
-             245:    6(float) ExtInst 1(GLSL.std.450) 48(Step) 243 244
-             246:    6(float) Load 11(inF0)
-             247:    6(float) ExtInst 1(GLSL.std.450) 15(Tan) 246
-             248:    6(float) Load 11(inF0)
-             249:    6(float) ExtInst 1(GLSL.std.450) 21(Tanh) 248
-             250:    6(float) Load 11(inF0)
-             251:    6(float) ExtInst 1(GLSL.std.450) 3(Trunc) 250
-                              ReturnValue 224
+             172:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 164
+             173:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 164
+             174:    6(float) Load 11(inF0)
+             175:    6(float) ExtInst 1(GLSL.std.450) 8(Floor) 174
+             176:    6(float) Load 11(inF0)
+             177:    6(float) Load 12(inF1)
+             178:    6(float) FMod 176 177
+             179:    6(float) Load 11(inF0)
+             180:    6(float) ExtInst 1(GLSL.std.450) 10(Fract) 179
+             181:    6(float) Load 11(inF0)
+             183:182(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 181
+             184:    143(int) CompositeExtract 183 1
+                              Store 12(inF1) 184
+             185:    6(float) CompositeExtract 183 0
+             186:    6(float) Load 11(inF0)
+             187:   132(bool) IsInf 186
+             188:    6(float) Load 11(inF0)
+             189:   132(bool) IsNan 188
+             190:    6(float) Load 11(inF0)
+             191:    6(float) Load 12(inF1)
+             192:    6(float) ExtInst 1(GLSL.std.450) 53(Ldexp) 190 191
+             193:    6(float) Load 11(inF0)
+             194:    6(float) Load 12(inF1)
+             195:    6(float) Load 13(inF2)
+             196:    6(float) ExtInst 1(GLSL.std.450) 46(FMix) 193 194 195
+             197:    6(float) Load 11(inF0)
+             198:    6(float) ExtInst 1(GLSL.std.450) 28(Log) 197
+             199:    6(float) Load 11(inF0)
+             200:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 199
+             202:    6(float) FMul 200 201
+             203:    6(float) Load 11(inF0)
+             204:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 203
+             205:    6(float) Load 11(inF0)
+             206:    6(float) Load 12(inF1)
+             207:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 205 206
+             208:    6(float) Load 11(inF0)
+             209:    6(float) Load 12(inF1)
+             210:    6(float) ExtInst 1(GLSL.std.450) 37(FMin) 208 209
+             211:    6(float) Load 11(inF0)
+             212:    6(float) Load 12(inF1)
+             213:    6(float) ExtInst 1(GLSL.std.450) 26(Pow) 211 212
+             214:    6(float) Load 11(inF0)
+             215:    6(float) ExtInst 1(GLSL.std.450) 11(Radians) 214
+             217:    143(int) BitReverse 216
+             218:    6(float) Load 11(inF0)
+             219:    6(float) ExtInst 1(GLSL.std.450) 2(RoundEven) 218
+             220:    6(float) Load 11(inF0)
+             221:    6(float) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 220
+             222:    6(float) Load 11(inF0)
+             225:    6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 222 223 224
+             226:    6(float) Load 11(inF0)
+             227:    6(float) ExtInst 1(GLSL.std.450) 6(FSign) 226
+             228:    6(float) Load 11(inF0)
+             229:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 228
+             230:    6(float) Load 11(inF0)
+             231:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 230
+                              Store 12(inF1) 231
+             232:    6(float) Load 11(inF0)
+             233:    6(float) ExtInst 1(GLSL.std.450) 14(Cos) 232
+                              Store 13(inF2) 233
+             234:    6(float) Load 11(inF0)
+             235:    6(float) ExtInst 1(GLSL.std.450) 19(Sinh) 234
+             236:    6(float) Load 11(inF0)
+             237:    6(float) Load 12(inF1)
+             238:    6(float) Load 13(inF2)
+             239:    6(float) ExtInst 1(GLSL.std.450) 49(SmoothStep) 236 237 238
+             240:    6(float) Load 11(inF0)
+             241:    6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 240
+             242:    6(float) Load 11(inF0)
+             243:    6(float) Load 12(inF1)
+             244:    6(float) ExtInst 1(GLSL.std.450) 48(Step) 242 243
+             245:    6(float) Load 11(inF0)
+             246:    6(float) ExtInst 1(GLSL.std.450) 15(Tan) 245
+             247:    6(float) Load 11(inF0)
+             248:    6(float) ExtInst 1(GLSL.std.450) 21(Tanh) 247
+             249:    6(float) Load 11(inF0)
+             250:    6(float) ExtInst 1(GLSL.std.450) 3(Trunc) 249
+                              ReturnValue 223
                               FunctionEnd
 22(VertexShaderFunction1(vf1;vf1;vf1;):    6(float) Function None 18
         19(inF0):      7(ptr) FunctionParameter
         20(inF1):      7(ptr) FunctionParameter
         21(inF2):      7(ptr) FunctionParameter
               23:             Label
-                              ReturnValue 224
+                              ReturnValue 223
                               FunctionEnd
 34(VertexShaderFunction2(vf2;vf2;vf2;vu2;vu2;):   24(fvec2) Function None 28
         29(inF0):     25(ptr) FunctionParameter
@@ -3152,144 +3154,144 @@
         32(inU0):     27(ptr) FunctionParameter
         33(inU1):     27(ptr) FunctionParameter
               35:             Label
-             256:   24(fvec2) Load 29(inF0)
-             257:   132(bool) All 256
-             258:   24(fvec2) Load 29(inF0)
-             259:   24(fvec2) ExtInst 1(GLSL.std.450) 4(FAbs) 258
-             260:   24(fvec2) Load 29(inF0)
-             261:   24(fvec2) ExtInst 1(GLSL.std.450) 17(Acos) 260
-             262:   24(fvec2) Load 29(inF0)
-             263:   132(bool) Any 262
-             264:   24(fvec2) Load 29(inF0)
-             265:   24(fvec2) ExtInst 1(GLSL.std.450) 16(Asin) 264
-             266:   24(fvec2) Load 29(inF0)
-             268:  267(ivec2) Bitcast 266
-             269:   24(fvec2) Load 29(inF0)
-             270:   26(ivec2) Bitcast 269
-             271:   26(ivec2) Load 32(inU0)
-             272:   24(fvec2) Bitcast 271
-             273:   24(fvec2) Load 29(inF0)
-             274:   24(fvec2) ExtInst 1(GLSL.std.450) 18(Atan) 273
-             275:   24(fvec2) Load 29(inF0)
-             276:   24(fvec2) Load 30(inF1)
-             277:   24(fvec2) ExtInst 1(GLSL.std.450) 25(Atan2) 275 276
-             278:   24(fvec2) Load 29(inF0)
-             279:   24(fvec2) ExtInst 1(GLSL.std.450) 9(Ceil) 278
-             280:   24(fvec2) Load 29(inF0)
-             281:   24(fvec2) Load 30(inF1)
-             282:   24(fvec2) Load 31(inF2)
-             283:   24(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 280 281 282
-             284:   24(fvec2) Load 29(inF0)
-             285:   24(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 284
-             286:   24(fvec2) Load 29(inF0)
-             287:   24(fvec2) ExtInst 1(GLSL.std.450) 20(Cosh) 286
-             290:   26(ivec2) BitCount 289
-             291:   24(fvec2) Load 29(inF0)
-             292:   24(fvec2) ExtInst 1(GLSL.std.450) 12(Degrees) 291
-             293:   24(fvec2) Load 29(inF0)
-             294:   24(fvec2) Load 30(inF1)
-             295:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 293 294
-             296:   24(fvec2) Load 29(inF0)
-             297:   24(fvec2) Load 30(inF1)
-             298:    6(float) Dot 296 297
-             299:   24(fvec2) Load 29(inF0)
-             300:   24(fvec2) ExtInst 1(GLSL.std.450) 27(Exp) 299
-             301:   24(fvec2) Load 29(inF0)
-             302:   24(fvec2) ExtInst 1(GLSL.std.450) 29(Exp2) 301
-             303:   24(fvec2) Load 29(inF0)
-             304:   24(fvec2) Load 30(inF1)
-             305:   24(fvec2) Load 31(inF2)
-             306:   24(fvec2) ExtInst 1(GLSL.std.450) 70(FaceForward) 303 304 305
-             307:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 172
-             308:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 172
-             309:   24(fvec2) Load 29(inF0)
-             310:   24(fvec2) ExtInst 1(GLSL.std.450) 8(Floor) 309
-             311:   24(fvec2) Load 29(inF0)
-             312:   24(fvec2) Load 30(inF1)
-             313:   24(fvec2) FMod 311 312
-             314:   24(fvec2) Load 29(inF0)
-             315:   24(fvec2) ExtInst 1(GLSL.std.450) 10(Fract) 314
-             316:   24(fvec2) Load 29(inF0)
-             318:317(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 316
-             319:  267(ivec2) CompositeExtract 318 1
-                              Store 30(inF1) 319
-             320:   24(fvec2) CompositeExtract 318 0
-             321:   24(fvec2) Load 29(inF0)
-             323:  322(bvec2) IsInf 321
-             324:   24(fvec2) Load 29(inF0)
-             325:  322(bvec2) IsNan 324
-             326:   24(fvec2) Load 29(inF0)
-             327:   24(fvec2) Load 30(inF1)
-             328:   24(fvec2) ExtInst 1(GLSL.std.450) 53(Ldexp) 326 327
-             329:   24(fvec2) Load 29(inF0)
-             330:   24(fvec2) Load 30(inF1)
-             331:   24(fvec2) Load 31(inF2)
-             332:   24(fvec2) ExtInst 1(GLSL.std.450) 46(FMix) 329 330 331
-             333:   24(fvec2) Load 29(inF0)
-             334:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 333
-             335:   24(fvec2) Load 29(inF0)
-             336:   24(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 335
-             337:   24(fvec2) Load 29(inF0)
-             338:   24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 337
-             339:   24(fvec2) VectorTimesScalar 338 202
-             340:   24(fvec2) Load 29(inF0)
-             341:   24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 340
-             342:   24(fvec2) Load 29(inF0)
-             343:   24(fvec2) Load 30(inF1)
-             344:   24(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 342 343
-             345:   24(fvec2) Load 29(inF0)
-             346:   24(fvec2) Load 30(inF1)
-             347:   24(fvec2) ExtInst 1(GLSL.std.450) 37(FMin) 345 346
-             348:   24(fvec2) Load 29(inF0)
-             349:   24(fvec2) ExtInst 1(GLSL.std.450) 69(Normalize) 348
-             350:   24(fvec2) Load 29(inF0)
-             351:   24(fvec2) Load 30(inF1)
-             352:   24(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 350 351
-             353:   24(fvec2) Load 29(inF0)
-             354:   24(fvec2) ExtInst 1(GLSL.std.450) 11(Radians) 353
-             355:   24(fvec2) Load 29(inF0)
-             356:   24(fvec2) Load 30(inF1)
-             357:   24(fvec2) ExtInst 1(GLSL.std.450) 71(Reflect) 355 356
-             358:   24(fvec2) Load 29(inF0)
-             359:   24(fvec2) Load 30(inF1)
-             361:   24(fvec2) ExtInst 1(GLSL.std.450) 72(Refract) 358 359 360
-             364:   26(ivec2) BitReverse 363
-             365:   24(fvec2) Load 29(inF0)
-             366:   24(fvec2) ExtInst 1(GLSL.std.450) 2(RoundEven) 365
-             367:   24(fvec2) Load 29(inF0)
-             368:   24(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 367
-             369:   24(fvec2) Load 29(inF0)
+             255:   24(fvec2) Load 29(inF0)
+             256:   132(bool) All 255
+             257:   24(fvec2) Load 29(inF0)
+             258:   24(fvec2) ExtInst 1(GLSL.std.450) 4(FAbs) 257
+             259:   24(fvec2) Load 29(inF0)
+             260:   24(fvec2) ExtInst 1(GLSL.std.450) 17(Acos) 259
+             261:   24(fvec2) Load 29(inF0)
+             262:   132(bool) Any 261
+             263:   24(fvec2) Load 29(inF0)
+             264:   24(fvec2) ExtInst 1(GLSL.std.450) 16(Asin) 263
+             265:   24(fvec2) Load 29(inF0)
+             267:  266(ivec2) Bitcast 265
+             268:   24(fvec2) Load 29(inF0)
+             269:   26(ivec2) Bitcast 268
+             270:   26(ivec2) Load 32(inU0)
+             271:   24(fvec2) Bitcast 270
+             272:   24(fvec2) Load 29(inF0)
+             273:   24(fvec2) ExtInst 1(GLSL.std.450) 18(Atan) 272
+             274:   24(fvec2) Load 29(inF0)
+             275:   24(fvec2) Load 30(inF1)
+             276:   24(fvec2) ExtInst 1(GLSL.std.450) 25(Atan2) 274 275
+             277:   24(fvec2) Load 29(inF0)
+             278:   24(fvec2) ExtInst 1(GLSL.std.450) 9(Ceil) 277
+             279:   24(fvec2) Load 29(inF0)
+             280:   24(fvec2) Load 30(inF1)
+             281:   24(fvec2) Load 31(inF2)
+             282:   24(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 279 280 281
+             283:   24(fvec2) Load 29(inF0)
+             284:   24(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 283
+             285:   24(fvec2) Load 29(inF0)
+             286:   24(fvec2) ExtInst 1(GLSL.std.450) 20(Cosh) 285
+             289:  266(ivec2) BitCount 288
+             290:   24(fvec2) Load 29(inF0)
+             291:   24(fvec2) ExtInst 1(GLSL.std.450) 12(Degrees) 290
+             292:   24(fvec2) Load 29(inF0)
+             293:   24(fvec2) Load 30(inF1)
+             294:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 292 293
+             295:   24(fvec2) Load 29(inF0)
+             296:   24(fvec2) Load 30(inF1)
+             297:    6(float) Dot 295 296
+             298:   24(fvec2) Load 29(inF0)
+             299:   24(fvec2) ExtInst 1(GLSL.std.450) 27(Exp) 298
+             300:   24(fvec2) Load 29(inF0)
+             301:   24(fvec2) ExtInst 1(GLSL.std.450) 29(Exp2) 300
+             302:   24(fvec2) Load 29(inF0)
+             303:   24(fvec2) Load 30(inF1)
+             304:   24(fvec2) Load 31(inF2)
+             305:   24(fvec2) ExtInst 1(GLSL.std.450) 70(FaceForward) 302 303 304
+             306:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 164
+             307:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 164
+             308:   24(fvec2) Load 29(inF0)
+             309:   24(fvec2) ExtInst 1(GLSL.std.450) 8(Floor) 308
+             310:   24(fvec2) Load 29(inF0)
+             311:   24(fvec2) Load 30(inF1)
+             312:   24(fvec2) FMod 310 311
+             313:   24(fvec2) Load 29(inF0)
+             314:   24(fvec2) ExtInst 1(GLSL.std.450) 10(Fract) 313
+             315:   24(fvec2) Load 29(inF0)
+             317:316(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 315
+             318:  266(ivec2) CompositeExtract 317 1
+                              Store 30(inF1) 318
+             319:   24(fvec2) CompositeExtract 317 0
+             320:   24(fvec2) Load 29(inF0)
+             322:  321(bvec2) IsInf 320
+             323:   24(fvec2) Load 29(inF0)
+             324:  321(bvec2) IsNan 323
+             325:   24(fvec2) Load 29(inF0)
+             326:   24(fvec2) Load 30(inF1)
+             327:   24(fvec2) ExtInst 1(GLSL.std.450) 53(Ldexp) 325 326
+             328:   24(fvec2) Load 29(inF0)
+             329:   24(fvec2) Load 30(inF1)
+             330:   24(fvec2) Load 31(inF2)
+             331:   24(fvec2) ExtInst 1(GLSL.std.450) 46(FMix) 328 329 330
+             332:   24(fvec2) Load 29(inF0)
+             333:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 332
+             334:   24(fvec2) Load 29(inF0)
+             335:   24(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 334
+             336:   24(fvec2) Load 29(inF0)
+             337:   24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 336
+             338:   24(fvec2) VectorTimesScalar 337 201
+             339:   24(fvec2) Load 29(inF0)
+             340:   24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 339
+             341:   24(fvec2) Load 29(inF0)
+             342:   24(fvec2) Load 30(inF1)
+             343:   24(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 341 342
+             344:   24(fvec2) Load 29(inF0)
+             345:   24(fvec2) Load 30(inF1)
+             346:   24(fvec2) ExtInst 1(GLSL.std.450) 37(FMin) 344 345
+             347:   24(fvec2) Load 29(inF0)
+             348:   24(fvec2) ExtInst 1(GLSL.std.450) 69(Normalize) 347
+             349:   24(fvec2) Load 29(inF0)
+             350:   24(fvec2) Load 30(inF1)
+             351:   24(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 349 350
+             352:   24(fvec2) Load 29(inF0)
+             353:   24(fvec2) ExtInst 1(GLSL.std.450) 11(Radians) 352
+             354:   24(fvec2) Load 29(inF0)
+             355:   24(fvec2) Load 30(inF1)
+             356:   24(fvec2) ExtInst 1(GLSL.std.450) 71(Reflect) 354 355
+             357:   24(fvec2) Load 29(inF0)
+             358:   24(fvec2) Load 30(inF1)
+             360:   24(fvec2) ExtInst 1(GLSL.std.450) 72(Refract) 357 358 359
+             363:  266(ivec2) BitReverse 362
+             364:   24(fvec2) Load 29(inF0)
+             365:   24(fvec2) ExtInst 1(GLSL.std.450) 2(RoundEven) 364
+             366:   24(fvec2) Load 29(inF0)
+             367:   24(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 366
+             368:   24(fvec2) Load 29(inF0)
+             369:   24(fvec2) CompositeConstruct 223 223
              370:   24(fvec2) CompositeConstruct 224 224
-             371:   24(fvec2) CompositeConstruct 225 225
-             372:   24(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 369 370 371
-             373:   24(fvec2) Load 29(inF0)
-             374:   24(fvec2) ExtInst 1(GLSL.std.450) 6(FSign) 373
-             375:   24(fvec2) Load 29(inF0)
-             376:   24(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 375
-             377:   24(fvec2) Load 29(inF0)
-             378:   24(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 377
-                              Store 30(inF1) 378
-             379:   24(fvec2) Load 29(inF0)
-             380:   24(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 379
-                              Store 31(inF2) 380
-             381:   24(fvec2) Load 29(inF0)
-             382:   24(fvec2) ExtInst 1(GLSL.std.450) 19(Sinh) 381
-             383:   24(fvec2) Load 29(inF0)
-             384:   24(fvec2) Load 30(inF1)
-             385:   24(fvec2) Load 31(inF2)
-             386:   24(fvec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 383 384 385
-             387:   24(fvec2) Load 29(inF0)
-             388:   24(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 387
-             389:   24(fvec2) Load 29(inF0)
-             390:   24(fvec2) Load 30(inF1)
-             391:   24(fvec2) ExtInst 1(GLSL.std.450) 48(Step) 389 390
-             392:   24(fvec2) Load 29(inF0)
-             393:   24(fvec2) ExtInst 1(GLSL.std.450) 15(Tan) 392
-             394:   24(fvec2) Load 29(inF0)
-             395:   24(fvec2) ExtInst 1(GLSL.std.450) 21(Tanh) 394
-             396:   24(fvec2) Load 29(inF0)
-             397:   24(fvec2) ExtInst 1(GLSL.std.450) 3(Trunc) 396
-                              ReturnValue 398
+             371:   24(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 368 369 370
+             372:   24(fvec2) Load 29(inF0)
+             373:   24(fvec2) ExtInst 1(GLSL.std.450) 6(FSign) 372
+             374:   24(fvec2) Load 29(inF0)
+             375:   24(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 374
+             376:   24(fvec2) Load 29(inF0)
+             377:   24(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 376
+                              Store 30(inF1) 377
+             378:   24(fvec2) Load 29(inF0)
+             379:   24(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 378
+                              Store 31(inF2) 379
+             380:   24(fvec2) Load 29(inF0)
+             381:   24(fvec2) ExtInst 1(GLSL.std.450) 19(Sinh) 380
+             382:   24(fvec2) Load 29(inF0)
+             383:   24(fvec2) Load 30(inF1)
+             384:   24(fvec2) Load 31(inF2)
+             385:   24(fvec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 382 383 384
+             386:   24(fvec2) Load 29(inF0)
+             387:   24(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 386
+             388:   24(fvec2) Load 29(inF0)
+             389:   24(fvec2) Load 30(inF1)
+             390:   24(fvec2) ExtInst 1(GLSL.std.450) 48(Step) 388 389
+             391:   24(fvec2) Load 29(inF0)
+             392:   24(fvec2) ExtInst 1(GLSL.std.450) 15(Tan) 391
+             393:   24(fvec2) Load 29(inF0)
+             394:   24(fvec2) ExtInst 1(GLSL.std.450) 21(Tanh) 393
+             395:   24(fvec2) Load 29(inF0)
+             396:   24(fvec2) ExtInst 1(GLSL.std.450) 3(Trunc) 395
+                              ReturnValue 397
                               FunctionEnd
 46(VertexShaderFunction3(vf3;vf3;vf3;vu3;vu3;):   36(fvec3) Function None 40
         41(inF0):     37(ptr) FunctionParameter
@@ -3298,147 +3300,147 @@
         44(inU0):     39(ptr) FunctionParameter
         45(inU1):     39(ptr) FunctionParameter
               47:             Label
-             401:   36(fvec3) Load 41(inF0)
-             402:   132(bool) All 401
-             403:   36(fvec3) Load 41(inF0)
-             404:   36(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 403
-             405:   36(fvec3) Load 41(inF0)
-             406:   36(fvec3) ExtInst 1(GLSL.std.450) 17(Acos) 405
-             407:   36(fvec3) Load 41(inF0)
-             408:   132(bool) Any 407
-             409:   36(fvec3) Load 41(inF0)
-             410:   36(fvec3) ExtInst 1(GLSL.std.450) 16(Asin) 409
-             411:   36(fvec3) Load 41(inF0)
-             413:  412(ivec3) Bitcast 411
-             414:   36(fvec3) Load 41(inF0)
-             415:   38(ivec3) Bitcast 414
-             416:   38(ivec3) Load 44(inU0)
-             417:   36(fvec3) Bitcast 416
-             418:   36(fvec3) Load 41(inF0)
-             419:   36(fvec3) ExtInst 1(GLSL.std.450) 18(Atan) 418
-             420:   36(fvec3) Load 41(inF0)
-             421:   36(fvec3) Load 42(inF1)
-             422:   36(fvec3) ExtInst 1(GLSL.std.450) 25(Atan2) 420 421
-             423:   36(fvec3) Load 41(inF0)
-             424:   36(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 423
-             425:   36(fvec3) Load 41(inF0)
-             426:   36(fvec3) Load 42(inF1)
-             427:   36(fvec3) Load 43(inF2)
-             428:   36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 425 426 427
-             429:   36(fvec3) Load 41(inF0)
-             430:   36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 429
-             431:   36(fvec3) Load 41(inF0)
-             432:   36(fvec3) ExtInst 1(GLSL.std.450) 20(Cosh) 431
-             435:   38(ivec3) BitCount 434
-             436:   36(fvec3) Load 41(inF0)
-             437:   36(fvec3) Load 42(inF1)
-             438:   36(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 436 437
-             439:   36(fvec3) Load 41(inF0)
-             440:   36(fvec3) ExtInst 1(GLSL.std.450) 12(Degrees) 439
-             441:   36(fvec3) Load 41(inF0)
-             442:   36(fvec3) Load 42(inF1)
-             443:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 441 442
-             444:   36(fvec3) Load 41(inF0)
-             445:   36(fvec3) Load 42(inF1)
-             446:    6(float) Dot 444 445
-             447:   36(fvec3) Load 41(inF0)
-             448:   36(fvec3) ExtInst 1(GLSL.std.450) 27(Exp) 447
-             449:   36(fvec3) Load 41(inF0)
-             450:   36(fvec3) ExtInst 1(GLSL.std.450) 29(Exp2) 449
-             451:   36(fvec3) Load 41(inF0)
-             452:   36(fvec3) Load 42(inF1)
-             453:   36(fvec3) Load 43(inF2)
-             454:   36(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 451 452 453
-             455:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 172
-             456:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 172
-             457:   36(fvec3) Load 41(inF0)
-             458:   36(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 457
-             459:   36(fvec3) Load 41(inF0)
-             460:   36(fvec3) Load 42(inF1)
-             461:   36(fvec3) FMod 459 460
-             462:   36(fvec3) Load 41(inF0)
-             463:   36(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 462
-             464:   36(fvec3) Load 41(inF0)
-             466:465(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 464
-             467:  412(ivec3) CompositeExtract 466 1
-                              Store 42(inF1) 467
-             468:   36(fvec3) CompositeExtract 466 0
-             469:   36(fvec3) Load 41(inF0)
-             471:  470(bvec3) IsInf 469
-             472:   36(fvec3) Load 41(inF0)
-             473:  470(bvec3) IsNan 472
-             474:   36(fvec3) Load 41(inF0)
-             475:   36(fvec3) Load 42(inF1)
-             476:   36(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 474 475
-             477:   36(fvec3) Load 41(inF0)
-             478:   36(fvec3) Load 42(inF1)
-             479:   36(fvec3) Load 43(inF2)
-             480:   36(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 477 478 479
-             481:   36(fvec3) Load 41(inF0)
-             482:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 481
-             483:   36(fvec3) Load 41(inF0)
-             484:   36(fvec3) ExtInst 1(GLSL.std.450) 28(Log) 483
-             485:   36(fvec3) Load 41(inF0)
-             486:   36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 485
-             487:   36(fvec3) VectorTimesScalar 486 202
-             488:   36(fvec3) Load 41(inF0)
-             489:   36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 488
-             490:   36(fvec3) Load 41(inF0)
-             491:   36(fvec3) Load 42(inF1)
-             492:   36(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 490 491
-             493:   36(fvec3) Load 41(inF0)
-             494:   36(fvec3) Load 42(inF1)
-             495:   36(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 493 494
-             496:   36(fvec3) Load 41(inF0)
-             497:   36(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 496
-             498:   36(fvec3) Load 41(inF0)
-             499:   36(fvec3) Load 42(inF1)
-             500:   36(fvec3) ExtInst 1(GLSL.std.450) 26(Pow) 498 499
-             501:   36(fvec3) Load 41(inF0)
-             502:   36(fvec3) ExtInst 1(GLSL.std.450) 11(Radians) 501
-             503:   36(fvec3) Load 41(inF0)
-             504:   36(fvec3) Load 42(inF1)
-             505:   36(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 503 504
-             506:   36(fvec3) Load 41(inF0)
-             507:   36(fvec3) Load 42(inF1)
-             508:   36(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 506 507 360
-             510:   38(ivec3) BitReverse 509
-             511:   36(fvec3) Load 41(inF0)
-             512:   36(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 511
-             513:   36(fvec3) Load 41(inF0)
-             514:   36(fvec3) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 513
-             515:   36(fvec3) Load 41(inF0)
+             400:   36(fvec3) Load 41(inF0)
+             401:   132(bool) All 400
+             402:   36(fvec3) Load 41(inF0)
+             403:   36(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 402
+             404:   36(fvec3) Load 41(inF0)
+             405:   36(fvec3) ExtInst 1(GLSL.std.450) 17(Acos) 404
+             406:   36(fvec3) Load 41(inF0)
+             407:   132(bool) Any 406
+             408:   36(fvec3) Load 41(inF0)
+             409:   36(fvec3) ExtInst 1(GLSL.std.450) 16(Asin) 408
+             410:   36(fvec3) Load 41(inF0)
+             412:  411(ivec3) Bitcast 410
+             413:   36(fvec3) Load 41(inF0)
+             414:   38(ivec3) Bitcast 413
+             415:   38(ivec3) Load 44(inU0)
+             416:   36(fvec3) Bitcast 415
+             417:   36(fvec3) Load 41(inF0)
+             418:   36(fvec3) ExtInst 1(GLSL.std.450) 18(Atan) 417
+             419:   36(fvec3) Load 41(inF0)
+             420:   36(fvec3) Load 42(inF1)
+             421:   36(fvec3) ExtInst 1(GLSL.std.450) 25(Atan2) 419 420
+             422:   36(fvec3) Load 41(inF0)
+             423:   36(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 422
+             424:   36(fvec3) Load 41(inF0)
+             425:   36(fvec3) Load 42(inF1)
+             426:   36(fvec3) Load 43(inF2)
+             427:   36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 424 425 426
+             428:   36(fvec3) Load 41(inF0)
+             429:   36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 428
+             430:   36(fvec3) Load 41(inF0)
+             431:   36(fvec3) ExtInst 1(GLSL.std.450) 20(Cosh) 430
+             434:  411(ivec3) BitCount 433
+             435:   36(fvec3) Load 41(inF0)
+             436:   36(fvec3) Load 42(inF1)
+             437:   36(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 435 436
+             438:   36(fvec3) Load 41(inF0)
+             439:   36(fvec3) ExtInst 1(GLSL.std.450) 12(Degrees) 438
+             440:   36(fvec3) Load 41(inF0)
+             441:   36(fvec3) Load 42(inF1)
+             442:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 440 441
+             443:   36(fvec3) Load 41(inF0)
+             444:   36(fvec3) Load 42(inF1)
+             445:    6(float) Dot 443 444
+             446:   36(fvec3) Load 41(inF0)
+             447:   36(fvec3) ExtInst 1(GLSL.std.450) 27(Exp) 446
+             448:   36(fvec3) Load 41(inF0)
+             449:   36(fvec3) ExtInst 1(GLSL.std.450) 29(Exp2) 448
+             450:   36(fvec3) Load 41(inF0)
+             451:   36(fvec3) Load 42(inF1)
+             452:   36(fvec3) Load 43(inF2)
+             453:   36(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 450 451 452
+             454:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 164
+             455:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 164
+             456:   36(fvec3) Load 41(inF0)
+             457:   36(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 456
+             458:   36(fvec3) Load 41(inF0)
+             459:   36(fvec3) Load 42(inF1)
+             460:   36(fvec3) FMod 458 459
+             461:   36(fvec3) Load 41(inF0)
+             462:   36(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 461
+             463:   36(fvec3) Load 41(inF0)
+             465:464(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 463
+             466:  411(ivec3) CompositeExtract 465 1
+                              Store 42(inF1) 466
+             467:   36(fvec3) CompositeExtract 465 0
+             468:   36(fvec3) Load 41(inF0)
+             470:  469(bvec3) IsInf 468
+             471:   36(fvec3) Load 41(inF0)
+             472:  469(bvec3) IsNan 471
+             473:   36(fvec3) Load 41(inF0)
+             474:   36(fvec3) Load 42(inF1)
+             475:   36(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 473 474
+             476:   36(fvec3) Load 41(inF0)
+             477:   36(fvec3) Load 42(inF1)
+             478:   36(fvec3) Load 43(inF2)
+             479:   36(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 476 477 478
+             480:   36(fvec3) Load 41(inF0)
+             481:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 480
+             482:   36(fvec3) Load 41(inF0)
+             483:   36(fvec3) ExtInst 1(GLSL.std.450) 28(Log) 482
+             484:   36(fvec3) Load 41(inF0)
+             485:   36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 484
+             486:   36(fvec3) VectorTimesScalar 485 201
+             487:   36(fvec3) Load 41(inF0)
+             488:   36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 487
+             489:   36(fvec3) Load 41(inF0)
+             490:   36(fvec3) Load 42(inF1)
+             491:   36(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 489 490
+             492:   36(fvec3) Load 41(inF0)
+             493:   36(fvec3) Load 42(inF1)
+             494:   36(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 492 493
+             495:   36(fvec3) Load 41(inF0)
+             496:   36(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 495
+             497:   36(fvec3) Load 41(inF0)
+             498:   36(fvec3) Load 42(inF1)
+             499:   36(fvec3) ExtInst 1(GLSL.std.450) 26(Pow) 497 498
+             500:   36(fvec3) Load 41(inF0)
+             501:   36(fvec3) ExtInst 1(GLSL.std.450) 11(Radians) 500
+             502:   36(fvec3) Load 41(inF0)
+             503:   36(fvec3) Load 42(inF1)
+             504:   36(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 502 503
+             505:   36(fvec3) Load 41(inF0)
+             506:   36(fvec3) Load 42(inF1)
+             507:   36(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 505 506 359
+             509:  411(ivec3) BitReverse 508
+             510:   36(fvec3) Load 41(inF0)
+             511:   36(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 510
+             512:   36(fvec3) Load 41(inF0)
+             513:   36(fvec3) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 512
+             514:   36(fvec3) Load 41(inF0)
+             515:   36(fvec3) CompositeConstruct 223 223 223
              516:   36(fvec3) CompositeConstruct 224 224 224
-             517:   36(fvec3) CompositeConstruct 225 225 225
-             518:   36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 515 516 517
-             519:   36(fvec3) Load 41(inF0)
-             520:   36(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 519
-             521:   36(fvec3) Load 41(inF0)
-             522:   36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 521
-             523:   36(fvec3) Load 41(inF0)
-             524:   36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 523
-                              Store 42(inF1) 524
-             525:   36(fvec3) Load 41(inF0)
-             526:   36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 525
-                              Store 43(inF2) 526
-             527:   36(fvec3) Load 41(inF0)
-             528:   36(fvec3) ExtInst 1(GLSL.std.450) 19(Sinh) 527
-             529:   36(fvec3) Load 41(inF0)
-             530:   36(fvec3) Load 42(inF1)
-             531:   36(fvec3) Load 43(inF2)
-             532:   36(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 529 530 531
-             533:   36(fvec3) Load 41(inF0)
-             534:   36(fvec3) ExtInst 1(GLSL.std.450) 31(Sqrt) 533
-             535:   36(fvec3) Load 41(inF0)
-             536:   36(fvec3) Load 42(inF1)
-             537:   36(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 535 536
-             538:   36(fvec3) Load 41(inF0)
-             539:   36(fvec3) ExtInst 1(GLSL.std.450) 15(Tan) 538
-             540:   36(fvec3) Load 41(inF0)
-             541:   36(fvec3) ExtInst 1(GLSL.std.450) 21(Tanh) 540
-             542:   36(fvec3) Load 41(inF0)
-             543:   36(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 542
-                              ReturnValue 545
+             517:   36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 514 515 516
+             518:   36(fvec3) Load 41(inF0)
+             519:   36(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 518
+             520:   36(fvec3) Load 41(inF0)
+             521:   36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 520
+             522:   36(fvec3) Load 41(inF0)
+             523:   36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 522
+                              Store 42(inF1) 523
+             524:   36(fvec3) Load 41(inF0)
+             525:   36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 524
+                              Store 43(inF2) 525
+             526:   36(fvec3) Load 41(inF0)
+             527:   36(fvec3) ExtInst 1(GLSL.std.450) 19(Sinh) 526
+             528:   36(fvec3) Load 41(inF0)
+             529:   36(fvec3) Load 42(inF1)
+             530:   36(fvec3) Load 43(inF2)
+             531:   36(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 528 529 530
+             532:   36(fvec3) Load 41(inF0)
+             533:   36(fvec3) ExtInst 1(GLSL.std.450) 31(Sqrt) 532
+             534:   36(fvec3) Load 41(inF0)
+             535:   36(fvec3) Load 42(inF1)
+             536:   36(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 534 535
+             537:   36(fvec3) Load 41(inF0)
+             538:   36(fvec3) ExtInst 1(GLSL.std.450) 15(Tan) 537
+             539:   36(fvec3) Load 41(inF0)
+             540:   36(fvec3) ExtInst 1(GLSL.std.450) 21(Tanh) 539
+             541:   36(fvec3) Load 41(inF0)
+             542:   36(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 541
+                              ReturnValue 544
                               FunctionEnd
 58(VertexShaderFunction4(vf4;vf4;vf4;vu4;vu4;):   48(fvec4) Function None 52
         53(inF0):     49(ptr) FunctionParameter
@@ -3447,529 +3449,529 @@
         56(inU0):     51(ptr) FunctionParameter
         57(inU1):     51(ptr) FunctionParameter
               59:             Label
-             548:   48(fvec4) Load 53(inF0)
-             549:   132(bool) All 548
-             550:   48(fvec4) Load 53(inF0)
-             551:   48(fvec4) ExtInst 1(GLSL.std.450) 4(FAbs) 550
-             552:   48(fvec4) Load 53(inF0)
-             553:   48(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 552
-             554:   48(fvec4) Load 53(inF0)
-             555:   132(bool) Any 554
-             556:   48(fvec4) Load 53(inF0)
-             557:   48(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 556
-             558:   48(fvec4) Load 53(inF0)
-             560:  559(ivec4) Bitcast 558
-             561:   48(fvec4) Load 53(inF0)
-             562:   50(ivec4) Bitcast 561
-             563:   50(ivec4) Load 56(inU0)
-             564:   48(fvec4) Bitcast 563
-             565:   48(fvec4) Load 53(inF0)
-             566:   48(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 565
-             567:   48(fvec4) Load 53(inF0)
-             568:   48(fvec4) Load 54(inF1)
-             569:   48(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 567 568
-             570:   48(fvec4) Load 53(inF0)
-             571:   48(fvec4) ExtInst 1(GLSL.std.450) 9(Ceil) 570
-             572:   48(fvec4) Load 53(inF0)
-             573:   48(fvec4) Load 54(inF1)
-             574:   48(fvec4) Load 55(inF2)
-             575:   48(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 572 573 574
-             576:   48(fvec4) Load 53(inF0)
-             577:   48(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 576
-             578:   48(fvec4) Load 53(inF0)
-             579:   48(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 578
-             581:   50(ivec4) BitCount 580
-             582:   48(fvec4) Load 53(inF0)
-             583:   48(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 582
-             584:   48(fvec4) Load 53(inF0)
-             585:   48(fvec4) Load 54(inF1)
-             586:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 584 585
-             587:   48(fvec4) Load 53(inF0)
-             588:   48(fvec4) Load 54(inF1)
-             589:    6(float) Dot 587 588
-             590:      7(ptr) AccessChain 53(inF0) 362
+             547:   48(fvec4) Load 53(inF0)
+             548:   132(bool) All 547
+             549:   48(fvec4) Load 53(inF0)
+             550:   48(fvec4) ExtInst 1(GLSL.std.450) 4(FAbs) 549
+             551:   48(fvec4) Load 53(inF0)
+             552:   48(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 551
+             553:   48(fvec4) Load 53(inF0)
+             554:   132(bool) Any 553
+             555:   48(fvec4) Load 53(inF0)
+             556:   48(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 555
+             557:   48(fvec4) Load 53(inF0)
+             559:  558(ivec4) Bitcast 557
+             560:   48(fvec4) Load 53(inF0)
+             561:   50(ivec4) Bitcast 560
+             562:   50(ivec4) Load 56(inU0)
+             563:   48(fvec4) Bitcast 562
+             564:   48(fvec4) Load 53(inF0)
+             565:   48(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 564
+             566:   48(fvec4) Load 53(inF0)
+             567:   48(fvec4) Load 54(inF1)
+             568:   48(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 566 567
+             569:   48(fvec4) Load 53(inF0)
+             570:   48(fvec4) ExtInst 1(GLSL.std.450) 9(Ceil) 569
+             571:   48(fvec4) Load 53(inF0)
+             572:   48(fvec4) Load 54(inF1)
+             573:   48(fvec4) Load 55(inF2)
+             574:   48(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 571 572 573
+             575:   48(fvec4) Load 53(inF0)
+             576:   48(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 575
+             577:   48(fvec4) Load 53(inF0)
+             578:   48(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 577
+             580:  558(ivec4) BitCount 579
+             581:   48(fvec4) Load 53(inF0)
+             582:   48(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 581
+             583:   48(fvec4) Load 53(inF0)
+             584:   48(fvec4) Load 54(inF1)
+             585:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 583 584
+             586:   48(fvec4) Load 53(inF0)
+             587:   48(fvec4) Load 54(inF1)
+             588:    6(float) Dot 586 587
+             590:      7(ptr) AccessChain 53(inF0) 589
              591:    6(float) Load 590
-             592:      7(ptr) AccessChain 54(inF1) 362
+             592:      7(ptr) AccessChain 54(inF1) 589
              593:    6(float) Load 592
              594:    6(float) FMul 591 593
-             595:      7(ptr) AccessChain 53(inF0) 217
-             596:    6(float) Load 595
-             597:      7(ptr) AccessChain 54(inF1) 288
-             598:    6(float) Load 597
-             599:   48(fvec4) CompositeConstruct 225 594 596 598
-             600:   48(fvec4) Load 53(inF0)
-             601:   48(fvec4) ExtInst 1(GLSL.std.450) 27(Exp) 600
+             596:      7(ptr) AccessChain 53(inF0) 595
+             597:    6(float) Load 596
+             599:      7(ptr) AccessChain 54(inF1) 598
+             600:    6(float) Load 599
+             601:   48(fvec4) CompositeConstruct 224 594 597 600
              602:   48(fvec4) Load 53(inF0)
-             603:   48(fvec4) ExtInst 1(GLSL.std.450) 29(Exp2) 602
+             603:   48(fvec4) ExtInst 1(GLSL.std.450) 27(Exp) 602
              604:   48(fvec4) Load 53(inF0)
-             605:   48(fvec4) Load 54(inF1)
-             606:   48(fvec4) Load 55(inF2)
-             607:   48(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 604 605 606
-             608:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 172
-             609:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 172
-             610:   48(fvec4) Load 53(inF0)
-             611:   48(fvec4) ExtInst 1(GLSL.std.450) 8(Floor) 610
+             605:   48(fvec4) ExtInst 1(GLSL.std.450) 29(Exp2) 604
+             606:   48(fvec4) Load 53(inF0)
+             607:   48(fvec4) Load 54(inF1)
+             608:   48(fvec4) Load 55(inF2)
+             609:   48(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 606 607 608
+             610:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 164
+             611:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 164
              612:   48(fvec4) Load 53(inF0)
-             613:   48(fvec4) Load 54(inF1)
-             614:   48(fvec4) FMod 612 613
-             615:   48(fvec4) Load 53(inF0)
-             616:   48(fvec4) ExtInst 1(GLSL.std.450) 10(Fract) 615
+             613:   48(fvec4) ExtInst 1(GLSL.std.450) 8(Floor) 612
+             614:   48(fvec4) Load 53(inF0)
+             615:   48(fvec4) Load 54(inF1)
+             616:   48(fvec4) FMod 614 615
              617:   48(fvec4) Load 53(inF0)
-             619:618(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 617
-             620:  559(ivec4) CompositeExtract 619 1
-                              Store 54(inF1) 620
-             621:   48(fvec4) CompositeExtract 619 0
-             622:   48(fvec4) Load 53(inF0)
-             624:  623(bvec4) IsInf 622
-             625:   48(fvec4) Load 53(inF0)
-             626:  623(bvec4) IsNan 625
+             618:   48(fvec4) ExtInst 1(GLSL.std.450) 10(Fract) 617
+             619:   48(fvec4) Load 53(inF0)
+             621:620(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 619
+             622:  558(ivec4) CompositeExtract 621 1
+                              Store 54(inF1) 622
+             623:   48(fvec4) CompositeExtract 621 0
+             624:   48(fvec4) Load 53(inF0)
+             626:  625(bvec4) IsInf 624
              627:   48(fvec4) Load 53(inF0)
-             628:   48(fvec4) Load 54(inF1)
-             629:   48(fvec4) ExtInst 1(GLSL.std.450) 53(Ldexp) 627 628
-             630:   48(fvec4) Load 53(inF0)
-             631:   48(fvec4) Load 54(inF1)
-             632:   48(fvec4) Load 55(inF2)
-             633:   48(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 630 631 632
-             634:   48(fvec4) Load 53(inF0)
-             635:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 634
+             628:  625(bvec4) IsNan 627
+             629:   48(fvec4) Load 53(inF0)
+             630:   48(fvec4) Load 54(inF1)
+             631:   48(fvec4) ExtInst 1(GLSL.std.450) 53(Ldexp) 629 630
+             632:   48(fvec4) Load 53(inF0)
+             633:   48(fvec4) Load 54(inF1)
+             634:   48(fvec4) Load 55(inF2)
+             635:   48(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 632 633 634
              636:   48(fvec4) Load 53(inF0)
-             637:   48(fvec4) ExtInst 1(GLSL.std.450) 28(Log) 636
+             637:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 636
              638:   48(fvec4) Load 53(inF0)
-             639:   48(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 638
-             640:   48(fvec4) VectorTimesScalar 639 202
-             641:   48(fvec4) Load 53(inF0)
-             642:   48(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 641
+             639:   48(fvec4) ExtInst 1(GLSL.std.450) 28(Log) 638
+             640:   48(fvec4) Load 53(inF0)
+             641:   48(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 640
+             642:   48(fvec4) VectorTimesScalar 641 201
              643:   48(fvec4) Load 53(inF0)
-             644:   48(fvec4) Load 54(inF1)
-             645:   48(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 643 644
-             646:   48(fvec4) Load 53(inF0)
-             647:   48(fvec4) Load 54(inF1)
-             648:   48(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 646 647
-             649:   48(fvec4) Load 53(inF0)
-             650:   48(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 649
+             644:   48(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 643
+             645:   48(fvec4) Load 53(inF0)
+             646:   48(fvec4) Load 54(inF1)
+             647:   48(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 645 646
+             648:   48(fvec4) Load 53(inF0)
+             649:   48(fvec4) Load 54(inF1)
+             650:   48(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 648 649
              651:   48(fvec4) Load 53(inF0)
-             652:   48(fvec4) Load 54(inF1)
-             653:   48(fvec4) ExtInst 1(GLSL.std.450) 26(Pow) 651 652
-             654:   48(fvec4) Load 53(inF0)
-             655:   48(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 654
+             652:   48(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 651
+             653:   48(fvec4) Load 53(inF0)
+             654:   48(fvec4) Load 54(inF1)
+             655:   48(fvec4) ExtInst 1(GLSL.std.450) 26(Pow) 653 654
              656:   48(fvec4) Load 53(inF0)
-             657:   48(fvec4) Load 54(inF1)
-             658:   48(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 656 657
-             659:   48(fvec4) Load 53(inF0)
-             660:   48(fvec4) Load 54(inF1)
-             661:   48(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 659 660 360
-             664:   50(ivec4) BitReverse 663
-             665:   48(fvec4) Load 53(inF0)
-             666:   48(fvec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 665
+             657:   48(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 656
+             658:   48(fvec4) Load 53(inF0)
+             659:   48(fvec4) Load 54(inF1)
+             660:   48(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 658 659
+             661:   48(fvec4) Load 53(inF0)
+             662:   48(fvec4) Load 54(inF1)
+             663:   48(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 661 662 359
+             666:  558(ivec4) BitReverse 665
              667:   48(fvec4) Load 53(inF0)
-             668:   48(fvec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 667
+             668:   48(fvec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 667
              669:   48(fvec4) Load 53(inF0)
-             670:   48(fvec4) CompositeConstruct 224 224 224 224
-             671:   48(fvec4) CompositeConstruct 225 225 225 225
-             672:   48(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 669 670 671
-             673:   48(fvec4) Load 53(inF0)
-             674:   48(fvec4) ExtInst 1(GLSL.std.450) 6(FSign) 673
+             670:   48(fvec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 669
+             671:   48(fvec4) Load 53(inF0)
+             672:   48(fvec4) CompositeConstruct 223 223 223 223
+             673:   48(fvec4) CompositeConstruct 224 224 224 224
+             674:   48(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 671 672 673
              675:   48(fvec4) Load 53(inF0)
-             676:   48(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 675
+             676:   48(fvec4) ExtInst 1(GLSL.std.450) 6(FSign) 675
              677:   48(fvec4) Load 53(inF0)
              678:   48(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 677
-                              Store 54(inF1) 678
              679:   48(fvec4) Load 53(inF0)
-             680:   48(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 679
-                              Store 55(inF2) 680
+             680:   48(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 679
+                              Store 54(inF1) 680
              681:   48(fvec4) Load 53(inF0)
-             682:   48(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 681
+             682:   48(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 681
+                              Store 55(inF2) 682
              683:   48(fvec4) Load 53(inF0)
-             684:   48(fvec4) Load 54(inF1)
-             685:   48(fvec4) Load 55(inF2)
-             686:   48(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 683 684 685
-             687:   48(fvec4) Load 53(inF0)
-             688:   48(fvec4) ExtInst 1(GLSL.std.450) 31(Sqrt) 687
+             684:   48(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 683
+             685:   48(fvec4) Load 53(inF0)
+             686:   48(fvec4) Load 54(inF1)
+             687:   48(fvec4) Load 55(inF2)
+             688:   48(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 685 686 687
              689:   48(fvec4) Load 53(inF0)
-             690:   48(fvec4) Load 54(inF1)
-             691:   48(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 689 690
-             692:   48(fvec4) Load 53(inF0)
-             693:   48(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 692
+             690:   48(fvec4) ExtInst 1(GLSL.std.450) 31(Sqrt) 689
+             691:   48(fvec4) Load 53(inF0)
+             692:   48(fvec4) Load 54(inF1)
+             693:   48(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 691 692
              694:   48(fvec4) Load 53(inF0)
-             695:   48(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 694
+             695:   48(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 694
              696:   48(fvec4) Load 53(inF0)
-             697:   48(fvec4) ExtInst 1(GLSL.std.450) 3(Trunc) 696
-                              ReturnValue 699
+             697:   48(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 696
+             698:   48(fvec4) Load 53(inF0)
+             699:   48(fvec4) ExtInst 1(GLSL.std.450) 3(Trunc) 698
+                              ReturnValue 701
                               FunctionEnd
 66(VertexShaderFunction2x2(mf22;mf22;mf22;):          60 Function None 62
         63(inF0):     61(ptr) FunctionParameter
         64(inF1):     61(ptr) FunctionParameter
         65(inF2):     61(ptr) FunctionParameter
               67:             Label
-             702:          60 Load 63(inF0)
-             703:   132(bool) All 702
              704:          60 Load 63(inF0)
-             705:          60 ExtInst 1(GLSL.std.450) 4(FAbs) 704
+             705:   132(bool) All 704
              706:          60 Load 63(inF0)
-             707:          60 ExtInst 1(GLSL.std.450) 17(Acos) 706
+             707:          60 ExtInst 1(GLSL.std.450) 4(FAbs) 706
              708:          60 Load 63(inF0)
-             709:   132(bool) Any 708
+             709:          60 ExtInst 1(GLSL.std.450) 17(Acos) 708
              710:          60 Load 63(inF0)
-             711:          60 ExtInst 1(GLSL.std.450) 16(Asin) 710
+             711:   132(bool) Any 710
              712:          60 Load 63(inF0)
-             713:          60 ExtInst 1(GLSL.std.450) 18(Atan) 712
+             713:          60 ExtInst 1(GLSL.std.450) 16(Asin) 712
              714:          60 Load 63(inF0)
-             715:          60 Load 64(inF1)
-             716:          60 ExtInst 1(GLSL.std.450) 25(Atan2) 714 715
-             717:          60 Load 63(inF0)
-             718:          60 ExtInst 1(GLSL.std.450) 9(Ceil) 717
+             715:          60 ExtInst 1(GLSL.std.450) 18(Atan) 714
+             716:          60 Load 63(inF0)
+             717:          60 Load 64(inF1)
+             718:          60 ExtInst 1(GLSL.std.450) 25(Atan2) 716 717
              719:          60 Load 63(inF0)
-             720:          60 Load 64(inF1)
-             721:          60 Load 65(inF2)
-             722:          60 ExtInst 1(GLSL.std.450) 43(FClamp) 719 720 721
-             723:          60 Load 63(inF0)
-             724:          60 ExtInst 1(GLSL.std.450) 14(Cos) 723
+             720:          60 ExtInst 1(GLSL.std.450) 9(Ceil) 719
+             721:          60 Load 63(inF0)
+             722:          60 Load 64(inF1)
+             723:          60 Load 65(inF2)
+             724:          60 ExtInst 1(GLSL.std.450) 43(FClamp) 721 722 723
              725:          60 Load 63(inF0)
-             726:          60 ExtInst 1(GLSL.std.450) 20(Cosh) 725
+             726:          60 ExtInst 1(GLSL.std.450) 14(Cos) 725
              727:          60 Load 63(inF0)
-             728:          60 ExtInst 1(GLSL.std.450) 12(Degrees) 727
+             728:          60 ExtInst 1(GLSL.std.450) 20(Cosh) 727
              729:          60 Load 63(inF0)
-             730:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 729
+             730:          60 ExtInst 1(GLSL.std.450) 12(Degrees) 729
              731:          60 Load 63(inF0)
-             732:          60 ExtInst 1(GLSL.std.450) 27(Exp) 731
+             732:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 731
              733:          60 Load 63(inF0)
-             734:          60 ExtInst 1(GLSL.std.450) 29(Exp2) 733
-             735:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 172
-             736:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 172
-             737:          60 Load 63(inF0)
-             738:          60 ExtInst 1(GLSL.std.450) 8(Floor) 737
+             734:          60 ExtInst 1(GLSL.std.450) 27(Exp) 733
+             735:          60 Load 63(inF0)
+             736:          60 ExtInst 1(GLSL.std.450) 29(Exp2) 735
+             737:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 164
+             738:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 164
              739:          60 Load 63(inF0)
-             740:          60 Load 64(inF1)
-             741:   24(fvec2) CompositeExtract 739 0
-             742:   24(fvec2) CompositeExtract 740 0
-             743:   24(fvec2) FMod 741 742
-             744:   24(fvec2) CompositeExtract 739 1
-             745:   24(fvec2) CompositeExtract 740 1
-             746:   24(fvec2) FMod 744 745
-             747:          60 CompositeConstruct 743 746
-             748:          60 Load 63(inF0)
-             749:          60 ExtInst 1(GLSL.std.450) 10(Fract) 748
+             740:          60 ExtInst 1(GLSL.std.450) 8(Floor) 739
+             741:          60 Load 63(inF0)
+             742:          60 Load 64(inF1)
+             743:   24(fvec2) CompositeExtract 741 0
+             744:   24(fvec2) CompositeExtract 742 0
+             745:   24(fvec2) FMod 743 744
+             746:   24(fvec2) CompositeExtract 741 1
+             747:   24(fvec2) CompositeExtract 742 1
+             748:   24(fvec2) FMod 746 747
+             749:          60 CompositeConstruct 745 748
              750:          60 Load 63(inF0)
-             752:751(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 750
-             753:  267(ivec2) CompositeExtract 752 1
-                              Store 64(inF1) 753
-             754:          60 CompositeExtract 752 0
-             755:          60 Load 63(inF0)
-             756:          60 Load 64(inF1)
-             757:          60 ExtInst 1(GLSL.std.450) 53(Ldexp) 755 756
-             758:          60 Load 63(inF0)
-             759:          60 Load 64(inF1)
-             760:          60 Load 65(inF2)
-             761:          60 ExtInst 1(GLSL.std.450) 46(FMix) 758 759 760
-             762:          60 Load 63(inF0)
-             763:          60 ExtInst 1(GLSL.std.450) 28(Log) 762
+             751:          60 ExtInst 1(GLSL.std.450) 10(Fract) 750
+             752:          60 Load 63(inF0)
+             754:753(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 752
+             755:  266(ivec2) CompositeExtract 754 1
+                              Store 64(inF1) 755
+             756:          60 CompositeExtract 754 0
+             757:          60 Load 63(inF0)
+             758:          60 Load 64(inF1)
+             759:          60 ExtInst 1(GLSL.std.450) 53(Ldexp) 757 758
+             760:          60 Load 63(inF0)
+             761:          60 Load 64(inF1)
+             762:          60 Load 65(inF2)
+             763:          60 ExtInst 1(GLSL.std.450) 46(FMix) 760 761 762
              764:          60 Load 63(inF0)
-             765:          60 ExtInst 1(GLSL.std.450) 30(Log2) 764
-             766:          60 MatrixTimesScalar 765 202
-             767:          60 Load 63(inF0)
-             768:          60 ExtInst 1(GLSL.std.450) 30(Log2) 767
+             765:          60 ExtInst 1(GLSL.std.450) 28(Log) 764
+             766:          60 Load 63(inF0)
+             767:          60 ExtInst 1(GLSL.std.450) 30(Log2) 766
+             768:          60 MatrixTimesScalar 767 201
              769:          60 Load 63(inF0)
-             770:          60 Load 64(inF1)
-             771:          60 ExtInst 1(GLSL.std.450) 40(FMax) 769 770
-             772:          60 Load 63(inF0)
-             773:          60 Load 64(inF1)
-             774:          60 ExtInst 1(GLSL.std.450) 37(FMin) 772 773
-             775:          60 Load 63(inF0)
-             776:          60 Load 64(inF1)
-             777:          60 ExtInst 1(GLSL.std.450) 26(Pow) 775 776
-             778:          60 Load 63(inF0)
-             779:          60 ExtInst 1(GLSL.std.450) 11(Radians) 778
+             770:          60 ExtInst 1(GLSL.std.450) 30(Log2) 769
+             771:          60 Load 63(inF0)
+             772:          60 Load 64(inF1)
+             773:          60 ExtInst 1(GLSL.std.450) 40(FMax) 771 772
+             774:          60 Load 63(inF0)
+             775:          60 Load 64(inF1)
+             776:          60 ExtInst 1(GLSL.std.450) 37(FMin) 774 775
+             777:          60 Load 63(inF0)
+             778:          60 Load 64(inF1)
+             779:          60 ExtInst 1(GLSL.std.450) 26(Pow) 777 778
              780:          60 Load 63(inF0)
-             781:          60 ExtInst 1(GLSL.std.450) 2(RoundEven) 780
+             781:          60 ExtInst 1(GLSL.std.450) 11(Radians) 780
              782:          60 Load 63(inF0)
-             783:          60 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 782
+             783:          60 ExtInst 1(GLSL.std.450) 2(RoundEven) 782
              784:          60 Load 63(inF0)
-             785:   24(fvec2) CompositeConstruct 224 224
-             786:   24(fvec2) CompositeConstruct 225 225
-             787:          60 ExtInst 1(GLSL.std.450) 43(FClamp) 784 785 786
-             788:          60 Load 63(inF0)
-             789:          60 ExtInst 1(GLSL.std.450) 6(FSign) 788
+             785:          60 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 784
+             786:          60 Load 63(inF0)
+             787:   24(fvec2) CompositeConstruct 223 223
+             788:   24(fvec2) CompositeConstruct 224 224
+             789:          60 ExtInst 1(GLSL.std.450) 43(FClamp) 786 787 788
              790:          60 Load 63(inF0)
-             791:          60 ExtInst 1(GLSL.std.450) 13(Sin) 790
+             791:          60 ExtInst 1(GLSL.std.450) 6(FSign) 790
              792:          60 Load 63(inF0)
              793:          60 ExtInst 1(GLSL.std.450) 13(Sin) 792
-                              Store 64(inF1) 793
              794:          60 Load 63(inF0)
-             795:          60 ExtInst 1(GLSL.std.450) 14(Cos) 794
-                              Store 65(inF2) 795
+             795:          60 ExtInst 1(GLSL.std.450) 13(Sin) 794
+                              Store 64(inF1) 795
              796:          60 Load 63(inF0)
-             797:          60 ExtInst 1(GLSL.std.450) 19(Sinh) 796
+             797:          60 ExtInst 1(GLSL.std.450) 14(Cos) 796
+                              Store 65(inF2) 797
              798:          60 Load 63(inF0)
-             799:          60 Load 64(inF1)
-             800:          60 Load 65(inF2)
-             801:          60 ExtInst 1(GLSL.std.450) 49(SmoothStep) 798 799 800
-             802:          60 Load 63(inF0)
-             803:          60 ExtInst 1(GLSL.std.450) 31(Sqrt) 802
+             799:          60 ExtInst 1(GLSL.std.450) 19(Sinh) 798
+             800:          60 Load 63(inF0)
+             801:          60 Load 64(inF1)
+             802:          60 Load 65(inF2)
+             803:          60 ExtInst 1(GLSL.std.450) 49(SmoothStep) 800 801 802
              804:          60 Load 63(inF0)
-             805:          60 Load 64(inF1)
-             806:          60 ExtInst 1(GLSL.std.450) 48(Step) 804 805
-             807:          60 Load 63(inF0)
-             808:          60 ExtInst 1(GLSL.std.450) 15(Tan) 807
+             805:          60 ExtInst 1(GLSL.std.450) 31(Sqrt) 804
+             806:          60 Load 63(inF0)
+             807:          60 Load 64(inF1)
+             808:          60 ExtInst 1(GLSL.std.450) 48(Step) 806 807
              809:          60 Load 63(inF0)
-             810:          60 ExtInst 1(GLSL.std.450) 21(Tanh) 809
+             810:          60 ExtInst 1(GLSL.std.450) 15(Tan) 809
              811:          60 Load 63(inF0)
-             812:          60 Transpose 811
+             812:          60 ExtInst 1(GLSL.std.450) 21(Tanh) 811
              813:          60 Load 63(inF0)
-             814:          60 ExtInst 1(GLSL.std.450) 3(Trunc) 813
-                              ReturnValue 816
+             814:          60 Transpose 813
+             815:          60 Load 63(inF0)
+             816:          60 ExtInst 1(GLSL.std.450) 3(Trunc) 815
+                              ReturnValue 818
                               FunctionEnd
 74(VertexShaderFunction3x3(mf33;mf33;mf33;):          68 Function None 70
         71(inF0):     69(ptr) FunctionParameter
         72(inF1):     69(ptr) FunctionParameter
         73(inF2):     69(ptr) FunctionParameter
               75:             Label
-             819:          68 Load 71(inF0)
-             820:   132(bool) All 819
              821:          68 Load 71(inF0)
-             822:          68 ExtInst 1(GLSL.std.450) 4(FAbs) 821
+             822:   132(bool) All 821
              823:          68 Load 71(inF0)
-             824:          68 ExtInst 1(GLSL.std.450) 17(Acos) 823
+             824:          68 ExtInst 1(GLSL.std.450) 4(FAbs) 823
              825:          68 Load 71(inF0)
-             826:   132(bool) Any 825
+             826:          68 ExtInst 1(GLSL.std.450) 17(Acos) 825
              827:          68 Load 71(inF0)
-             828:          68 ExtInst 1(GLSL.std.450) 16(Asin) 827
+             828:   132(bool) Any 827
              829:          68 Load 71(inF0)
-             830:          68 ExtInst 1(GLSL.std.450) 18(Atan) 829
+             830:          68 ExtInst 1(GLSL.std.450) 16(Asin) 829
              831:          68 Load 71(inF0)
-             832:          68 Load 72(inF1)
-             833:          68 ExtInst 1(GLSL.std.450) 25(Atan2) 831 832
-             834:          68 Load 71(inF0)
-             835:          68 ExtInst 1(GLSL.std.450) 9(Ceil) 834
+             832:          68 ExtInst 1(GLSL.std.450) 18(Atan) 831
+             833:          68 Load 71(inF0)
+             834:          68 Load 72(inF1)
+             835:          68 ExtInst 1(GLSL.std.450) 25(Atan2) 833 834
              836:          68 Load 71(inF0)
-             837:          68 Load 72(inF1)
-             838:          68 Load 73(inF2)
-             839:          68 ExtInst 1(GLSL.std.450) 43(FClamp) 836 837 838
-             840:          68 Load 71(inF0)
-             841:          68 ExtInst 1(GLSL.std.450) 14(Cos) 840
+             837:          68 ExtInst 1(GLSL.std.450) 9(Ceil) 836
+             838:          68 Load 71(inF0)
+             839:          68 Load 72(inF1)
+             840:          68 Load 73(inF2)
+             841:          68 ExtInst 1(GLSL.std.450) 43(FClamp) 838 839 840
              842:          68 Load 71(inF0)
-             843:          68 ExtInst 1(GLSL.std.450) 20(Cosh) 842
+             843:          68 ExtInst 1(GLSL.std.450) 14(Cos) 842
              844:          68 Load 71(inF0)
-             845:          68 ExtInst 1(GLSL.std.450) 12(Degrees) 844
+             845:          68 ExtInst 1(GLSL.std.450) 20(Cosh) 844
              846:          68 Load 71(inF0)
-             847:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 846
+             847:          68 ExtInst 1(GLSL.std.450) 12(Degrees) 846
              848:          68 Load 71(inF0)
-             849:          68 ExtInst 1(GLSL.std.450) 27(Exp) 848
+             849:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 848
              850:          68 Load 71(inF0)
-             851:          68 ExtInst 1(GLSL.std.450) 29(Exp2) 850
-             852:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 172
-             853:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 172
-             854:          68 Load 71(inF0)
-             855:          68 ExtInst 1(GLSL.std.450) 8(Floor) 854
+             851:          68 ExtInst 1(GLSL.std.450) 27(Exp) 850
+             852:          68 Load 71(inF0)
+             853:          68 ExtInst 1(GLSL.std.450) 29(Exp2) 852
+             854:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 164
+             855:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 164
              856:          68 Load 71(inF0)
-             857:          68 Load 72(inF1)
-             858:   36(fvec3) CompositeExtract 856 0
-             859:   36(fvec3) CompositeExtract 857 0
-             860:   36(fvec3) FMod 858 859
-             861:   36(fvec3) CompositeExtract 856 1
-             862:   36(fvec3) CompositeExtract 857 1
-             863:   36(fvec3) FMod 861 862
-             864:   36(fvec3) CompositeExtract 856 2
-             865:   36(fvec3) CompositeExtract 857 2
-             866:   36(fvec3) FMod 864 865
-             867:          68 CompositeConstruct 860 863 866
-             868:          68 Load 71(inF0)
-             869:          68 ExtInst 1(GLSL.std.450) 10(Fract) 868
+             857:          68 ExtInst 1(GLSL.std.450) 8(Floor) 856
+             858:          68 Load 71(inF0)
+             859:          68 Load 72(inF1)
+             860:   36(fvec3) CompositeExtract 858 0
+             861:   36(fvec3) CompositeExtract 859 0
+             862:   36(fvec3) FMod 860 861
+             863:   36(fvec3) CompositeExtract 858 1
+             864:   36(fvec3) CompositeExtract 859 1
+             865:   36(fvec3) FMod 863 864
+             866:   36(fvec3) CompositeExtract 858 2
+             867:   36(fvec3) CompositeExtract 859 2
+             868:   36(fvec3) FMod 866 867
+             869:          68 CompositeConstruct 862 865 868
              870:          68 Load 71(inF0)
-             872:871(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 870
-             873:  412(ivec3) CompositeExtract 872 1
-                              Store 72(inF1) 873
-             874:          68 CompositeExtract 872 0
-             875:          68 Load 71(inF0)
-             876:          68 Load 72(inF1)
-             877:          68 ExtInst 1(GLSL.std.450) 53(Ldexp) 875 876
-             878:          68 Load 71(inF0)
-             879:          68 Load 72(inF1)
-             880:          68 Load 73(inF2)
-             881:          68 ExtInst 1(GLSL.std.450) 46(FMix) 878 879 880
-             882:          68 Load 71(inF0)
-             883:          68 ExtInst 1(GLSL.std.450) 28(Log) 882
+             871:          68 ExtInst 1(GLSL.std.450) 10(Fract) 870
+             872:          68 Load 71(inF0)
+             874:873(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 872
+             875:  411(ivec3) CompositeExtract 874 1
+                              Store 72(inF1) 875
+             876:          68 CompositeExtract 874 0
+             877:          68 Load 71(inF0)
+             878:          68 Load 72(inF1)
+             879:          68 ExtInst 1(GLSL.std.450) 53(Ldexp) 877 878
+             880:          68 Load 71(inF0)
+             881:          68 Load 72(inF1)
+             882:          68 Load 73(inF2)
+             883:          68 ExtInst 1(GLSL.std.450) 46(FMix) 880 881 882
              884:          68 Load 71(inF0)
-             885:          68 ExtInst 1(GLSL.std.450) 30(Log2) 884
-             886:          68 MatrixTimesScalar 885 202
-             887:          68 Load 71(inF0)
-             888:          68 ExtInst 1(GLSL.std.450) 30(Log2) 887
+             885:          68 ExtInst 1(GLSL.std.450) 28(Log) 884
+             886:          68 Load 71(inF0)
+             887:          68 ExtInst 1(GLSL.std.450) 30(Log2) 886
+             888:          68 MatrixTimesScalar 887 201
              889:          68 Load 71(inF0)
-             890:          68 Load 72(inF1)
-             891:          68 ExtInst 1(GLSL.std.450) 40(FMax) 889 890
-             892:          68 Load 71(inF0)
-             893:          68 Load 72(inF1)
-             894:          68 ExtInst 1(GLSL.std.450) 37(FMin) 892 893
-             895:          68 Load 71(inF0)
-             896:          68 Load 72(inF1)
-             897:          68 ExtInst 1(GLSL.std.450) 26(Pow) 895 896
-             898:          68 Load 71(inF0)
-             899:          68 ExtInst 1(GLSL.std.450) 11(Radians) 898
+             890:          68 ExtInst 1(GLSL.std.450) 30(Log2) 889
+             891:          68 Load 71(inF0)
+             892:          68 Load 72(inF1)
+             893:          68 ExtInst 1(GLSL.std.450) 40(FMax) 891 892
+             894:          68 Load 71(inF0)
+             895:          68 Load 72(inF1)
+             896:          68 ExtInst 1(GLSL.std.450) 37(FMin) 894 895
+             897:          68 Load 71(inF0)
+             898:          68 Load 72(inF1)
+             899:          68 ExtInst 1(GLSL.std.450) 26(Pow) 897 898
              900:          68 Load 71(inF0)
-             901:          68 ExtInst 1(GLSL.std.450) 2(RoundEven) 900
+             901:          68 ExtInst 1(GLSL.std.450) 11(Radians) 900
              902:          68 Load 71(inF0)
-             903:          68 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 902
+             903:          68 ExtInst 1(GLSL.std.450) 2(RoundEven) 902
              904:          68 Load 71(inF0)
-             905:   36(fvec3) CompositeConstruct 224 224 224
-             906:   36(fvec3) CompositeConstruct 225 225 225
-             907:          68 ExtInst 1(GLSL.std.450) 43(FClamp) 904 905 906
-             908:          68 Load 71(inF0)
-             909:          68 ExtInst 1(GLSL.std.450) 6(FSign) 908
+             905:          68 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 904
+             906:          68 Load 71(inF0)
+             907:   36(fvec3) CompositeConstruct 223 223 223
+             908:   36(fvec3) CompositeConstruct 224 224 224
+             909:          68 ExtInst 1(GLSL.std.450) 43(FClamp) 906 907 908
              910:          68 Load 71(inF0)
-             911:          68 ExtInst 1(GLSL.std.450) 13(Sin) 910
+             911:          68 ExtInst 1(GLSL.std.450) 6(FSign) 910
              912:          68 Load 71(inF0)
              913:          68 ExtInst 1(GLSL.std.450) 13(Sin) 912
-                              Store 72(inF1) 913
              914:          68 Load 71(inF0)
-             915:          68 ExtInst 1(GLSL.std.450) 14(Cos) 914
-                              Store 73(inF2) 915
+             915:          68 ExtInst 1(GLSL.std.450) 13(Sin) 914
+                              Store 72(inF1) 915
              916:          68 Load 71(inF0)
-             917:          68 ExtInst 1(GLSL.std.450) 19(Sinh) 916
+             917:          68 ExtInst 1(GLSL.std.450) 14(Cos) 916
+                              Store 73(inF2) 917
              918:          68 Load 71(inF0)
-             919:          68 Load 72(inF1)
-             920:          68 Load 73(inF2)
-             921:          68 ExtInst 1(GLSL.std.450) 49(SmoothStep) 918 919 920
-             922:          68 Load 71(inF0)
-             923:          68 ExtInst 1(GLSL.std.450) 31(Sqrt) 922
+             919:          68 ExtInst 1(GLSL.std.450) 19(Sinh) 918
+             920:          68 Load 71(inF0)
+             921:          68 Load 72(inF1)
+             922:          68 Load 73(inF2)
+             923:          68 ExtInst 1(GLSL.std.450) 49(SmoothStep) 920 921 922
              924:          68 Load 71(inF0)
-             925:          68 Load 72(inF1)
-             926:          68 ExtInst 1(GLSL.std.450) 48(Step) 924 925
-             927:          68 Load 71(inF0)
-             928:          68 ExtInst 1(GLSL.std.450) 15(Tan) 927
+             925:          68 ExtInst 1(GLSL.std.450) 31(Sqrt) 924
+             926:          68 Load 71(inF0)
+             927:          68 Load 72(inF1)
+             928:          68 ExtInst 1(GLSL.std.450) 48(Step) 926 927
              929:          68 Load 71(inF0)
-             930:          68 ExtInst 1(GLSL.std.450) 21(Tanh) 929
+             930:          68 ExtInst 1(GLSL.std.450) 15(Tan) 929
              931:          68 Load 71(inF0)
-             932:          68 Transpose 931
+             932:          68 ExtInst 1(GLSL.std.450) 21(Tanh) 931
              933:          68 Load 71(inF0)
-             934:          68 ExtInst 1(GLSL.std.450) 3(Trunc) 933
-                              ReturnValue 936
+             934:          68 Transpose 933
+             935:          68 Load 71(inF0)
+             936:          68 ExtInst 1(GLSL.std.450) 3(Trunc) 935
+                              ReturnValue 938
                               FunctionEnd
 82(VertexShaderFunction4x4(mf44;mf44;mf44;):          76 Function None 78
         79(inF0):     77(ptr) FunctionParameter
         80(inF1):     77(ptr) FunctionParameter
         81(inF2):     77(ptr) FunctionParameter
               83:             Label
-             939:          76 Load 79(inF0)
-             940:   132(bool) All 939
              941:          76 Load 79(inF0)
-             942:          76 ExtInst 1(GLSL.std.450) 4(FAbs) 941
+             942:   132(bool) All 941
              943:          76 Load 79(inF0)
-             944:          76 ExtInst 1(GLSL.std.450) 17(Acos) 943
+             944:          76 ExtInst 1(GLSL.std.450) 4(FAbs) 943
              945:          76 Load 79(inF0)
-             946:   132(bool) Any 945
+             946:          76 ExtInst 1(GLSL.std.450) 17(Acos) 945
              947:          76 Load 79(inF0)
-             948:          76 ExtInst 1(GLSL.std.450) 16(Asin) 947
+             948:   132(bool) Any 947
              949:          76 Load 79(inF0)
-             950:          76 ExtInst 1(GLSL.std.450) 18(Atan) 949
+             950:          76 ExtInst 1(GLSL.std.450) 16(Asin) 949
              951:          76 Load 79(inF0)
-             952:          76 Load 80(inF1)
-             953:          76 ExtInst 1(GLSL.std.450) 25(Atan2) 951 952
-             954:          76 Load 79(inF0)
-             955:          76 ExtInst 1(GLSL.std.450) 9(Ceil) 954
+             952:          76 ExtInst 1(GLSL.std.450) 18(Atan) 951
+             953:          76 Load 79(inF0)
+             954:          76 Load 80(inF1)
+             955:          76 ExtInst 1(GLSL.std.450) 25(Atan2) 953 954
              956:          76 Load 79(inF0)
-             957:          76 Load 80(inF1)
-             958:          76 Load 81(inF2)
-             959:          76 ExtInst 1(GLSL.std.450) 43(FClamp) 956 957 958
-             960:          76 Load 79(inF0)
-             961:          76 ExtInst 1(GLSL.std.450) 14(Cos) 960
+             957:          76 ExtInst 1(GLSL.std.450) 9(Ceil) 956
+             958:          76 Load 79(inF0)
+             959:          76 Load 80(inF1)
+             960:          76 Load 81(inF2)
+             961:          76 ExtInst 1(GLSL.std.450) 43(FClamp) 958 959 960
              962:          76 Load 79(inF0)
-             963:          76 ExtInst 1(GLSL.std.450) 20(Cosh) 962
+             963:          76 ExtInst 1(GLSL.std.450) 14(Cos) 962
              964:          76 Load 79(inF0)
-             965:          76 ExtInst 1(GLSL.std.450) 12(Degrees) 964
+             965:          76 ExtInst 1(GLSL.std.450) 20(Cosh) 964
              966:          76 Load 79(inF0)
-             967:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 966
+             967:          76 ExtInst 1(GLSL.std.450) 12(Degrees) 966
              968:          76 Load 79(inF0)
-             969:          76 ExtInst 1(GLSL.std.450) 27(Exp) 968
+             969:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 968
              970:          76 Load 79(inF0)
-             971:          76 ExtInst 1(GLSL.std.450) 29(Exp2) 970
-             972:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 172
-             973:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 172
-             974:          76 Load 79(inF0)
-             975:          76 ExtInst 1(GLSL.std.450) 8(Floor) 974
+             971:          76 ExtInst 1(GLSL.std.450) 27(Exp) 970
+             972:          76 Load 79(inF0)
+             973:          76 ExtInst 1(GLSL.std.450) 29(Exp2) 972
+             974:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 164
+             975:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 164
              976:          76 Load 79(inF0)
-             977:          76 Load 80(inF1)
-             978:   48(fvec4) CompositeExtract 976 0
-             979:   48(fvec4) CompositeExtract 977 0
-             980:   48(fvec4) FMod 978 979
-             981:   48(fvec4) CompositeExtract 976 1
-             982:   48(fvec4) CompositeExtract 977 1
-             983:   48(fvec4) FMod 981 982
-             984:   48(fvec4) CompositeExtract 976 2
-             985:   48(fvec4) CompositeExtract 977 2
-             986:   48(fvec4) FMod 984 985
-             987:   48(fvec4) CompositeExtract 976 3
-             988:   48(fvec4) CompositeExtract 977 3
-             989:   48(fvec4) FMod 987 988
-             990:          76 CompositeConstruct 980 983 986 989
-             991:          76 Load 79(inF0)
-             992:          76 ExtInst 1(GLSL.std.450) 10(Fract) 991
+             977:          76 ExtInst 1(GLSL.std.450) 8(Floor) 976
+             978:          76 Load 79(inF0)
+             979:          76 Load 80(inF1)
+             980:   48(fvec4) CompositeExtract 978 0
+             981:   48(fvec4) CompositeExtract 979 0
+             982:   48(fvec4) FMod 980 981
+             983:   48(fvec4) CompositeExtract 978 1
+             984:   48(fvec4) CompositeExtract 979 1
+             985:   48(fvec4) FMod 983 984
+             986:   48(fvec4) CompositeExtract 978 2
+             987:   48(fvec4) CompositeExtract 979 2
+             988:   48(fvec4) FMod 986 987
+             989:   48(fvec4) CompositeExtract 978 3
+             990:   48(fvec4) CompositeExtract 979 3
+             991:   48(fvec4) FMod 989 990
+             992:          76 CompositeConstruct 982 985 988 991
              993:          76 Load 79(inF0)
-             995:994(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 993
-             996:  559(ivec4) CompositeExtract 995 1
-                              Store 80(inF1) 996
-             997:          76 CompositeExtract 995 0
-             998:          76 Load 79(inF0)
-             999:          76 Load 80(inF1)
-            1000:          76 ExtInst 1(GLSL.std.450) 53(Ldexp) 998 999
-            1001:          76 Load 79(inF0)
-            1002:          76 Load 80(inF1)
-            1003:          76 Load 81(inF2)
-            1004:          76 ExtInst 1(GLSL.std.450) 46(FMix) 1001 1002 1003
-            1005:          76 Load 79(inF0)
-            1006:          76 ExtInst 1(GLSL.std.450) 28(Log) 1005
+             994:          76 ExtInst 1(GLSL.std.450) 10(Fract) 993
+             995:          76 Load 79(inF0)
+             997:996(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 995
+             998:  558(ivec4) CompositeExtract 997 1
+                              Store 80(inF1) 998
+             999:          76 CompositeExtract 997 0
+            1000:          76 Load 79(inF0)
+            1001:          76 Load 80(inF1)
+            1002:          76 ExtInst 1(GLSL.std.450) 53(Ldexp) 1000 1001
+            1003:          76 Load 79(inF0)
+            1004:          76 Load 80(inF1)
+            1005:          76 Load 81(inF2)
+            1006:          76 ExtInst 1(GLSL.std.450) 46(FMix) 1003 1004 1005
             1007:          76 Load 79(inF0)
-            1008:          76 ExtInst 1(GLSL.std.450) 30(Log2) 1007
-            1009:          76 MatrixTimesScalar 1008 202
-            1010:          76 Load 79(inF0)
-            1011:          76 ExtInst 1(GLSL.std.450) 30(Log2) 1010
+            1008:          76 ExtInst 1(GLSL.std.450) 28(Log) 1007
+            1009:          76 Load 79(inF0)
+            1010:          76 ExtInst 1(GLSL.std.450) 30(Log2) 1009
+            1011:          76 MatrixTimesScalar 1010 201
             1012:          76 Load 79(inF0)
-            1013:          76 Load 80(inF1)
-            1014:          76 ExtInst 1(GLSL.std.450) 40(FMax) 1012 1013
-            1015:          76 Load 79(inF0)
-            1016:          76 Load 80(inF1)
-            1017:          76 ExtInst 1(GLSL.std.450) 37(FMin) 1015 1016
-            1018:          76 Load 79(inF0)
-            1019:          76 Load 80(inF1)
-            1020:          76 ExtInst 1(GLSL.std.450) 26(Pow) 1018 1019
-            1021:          76 Load 79(inF0)
-            1022:          76 ExtInst 1(GLSL.std.450) 11(Radians) 1021
+            1013:          76 ExtInst 1(GLSL.std.450) 30(Log2) 1012
+            1014:          76 Load 79(inF0)
+            1015:          76 Load 80(inF1)
+            1016:          76 ExtInst 1(GLSL.std.450) 40(FMax) 1014 1015
+            1017:          76 Load 79(inF0)
+            1018:          76 Load 80(inF1)
+            1019:          76 ExtInst 1(GLSL.std.450) 37(FMin) 1017 1018
+            1020:          76 Load 79(inF0)
+            1021:          76 Load 80(inF1)
+            1022:          76 ExtInst 1(GLSL.std.450) 26(Pow) 1020 1021
             1023:          76 Load 79(inF0)
-            1024:          76 ExtInst 1(GLSL.std.450) 2(RoundEven) 1023
+            1024:          76 ExtInst 1(GLSL.std.450) 11(Radians) 1023
             1025:          76 Load 79(inF0)
-            1026:          76 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1025
+            1026:          76 ExtInst 1(GLSL.std.450) 2(RoundEven) 1025
             1027:          76 Load 79(inF0)
-            1028:   48(fvec4) CompositeConstruct 224 224 224 224
-            1029:   48(fvec4) CompositeConstruct 225 225 225 225
-            1030:          76 ExtInst 1(GLSL.std.450) 43(FClamp) 1027 1028 1029
-            1031:          76 Load 79(inF0)
-            1032:          76 ExtInst 1(GLSL.std.450) 6(FSign) 1031
+            1028:          76 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1027
+            1029:          76 Load 79(inF0)
+            1030:   48(fvec4) CompositeConstruct 223 223 223 223
+            1031:   48(fvec4) CompositeConstruct 224 224 224 224
+            1032:          76 ExtInst 1(GLSL.std.450) 43(FClamp) 1029 1030 1031
             1033:          76 Load 79(inF0)
-            1034:          76 ExtInst 1(GLSL.std.450) 13(Sin) 1033
+            1034:          76 ExtInst 1(GLSL.std.450) 6(FSign) 1033
             1035:          76 Load 79(inF0)
             1036:          76 ExtInst 1(GLSL.std.450) 13(Sin) 1035
-                              Store 80(inF1) 1036
             1037:          76 Load 79(inF0)
-            1038:          76 ExtInst 1(GLSL.std.450) 14(Cos) 1037
-                              Store 81(inF2) 1038
+            1038:          76 ExtInst 1(GLSL.std.450) 13(Sin) 1037
+                              Store 80(inF1) 1038
             1039:          76 Load 79(inF0)
-            1040:          76 ExtInst 1(GLSL.std.450) 19(Sinh) 1039
+            1040:          76 ExtInst 1(GLSL.std.450) 14(Cos) 1039
+                              Store 81(inF2) 1040
             1041:          76 Load 79(inF0)
-            1042:          76 Load 80(inF1)
-            1043:          76 Load 81(inF2)
-            1044:          76 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1041 1042 1043
-            1045:          76 Load 79(inF0)
-            1046:          76 ExtInst 1(GLSL.std.450) 31(Sqrt) 1045
+            1042:          76 ExtInst 1(GLSL.std.450) 19(Sinh) 1041
+            1043:          76 Load 79(inF0)
+            1044:          76 Load 80(inF1)
+            1045:          76 Load 81(inF2)
+            1046:          76 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1043 1044 1045
             1047:          76 Load 79(inF0)
-            1048:          76 Load 80(inF1)
-            1049:          76 ExtInst 1(GLSL.std.450) 48(Step) 1047 1048
-            1050:          76 Load 79(inF0)
-            1051:          76 ExtInst 1(GLSL.std.450) 15(Tan) 1050
+            1048:          76 ExtInst 1(GLSL.std.450) 31(Sqrt) 1047
+            1049:          76 Load 79(inF0)
+            1050:          76 Load 80(inF1)
+            1051:          76 ExtInst 1(GLSL.std.450) 48(Step) 1049 1050
             1052:          76 Load 79(inF0)
-            1053:          76 ExtInst 1(GLSL.std.450) 21(Tanh) 1052
+            1053:          76 ExtInst 1(GLSL.std.450) 15(Tan) 1052
             1054:          76 Load 79(inF0)
-            1055:          76 Transpose 1054
+            1055:          76 ExtInst 1(GLSL.std.450) 21(Tanh) 1054
             1056:          76 Load 79(inF0)
-            1057:          76 ExtInst 1(GLSL.std.450) 3(Trunc) 1056
-                              ReturnValue 1059
+            1057:          76 Transpose 1056
+            1058:          76 Load 79(inF0)
+            1059:          76 ExtInst 1(GLSL.std.450) 3(Trunc) 1058
+                              ReturnValue 1061
                               FunctionEnd
 91(TestGenMul2(f1;f1;vf2;vf2;mf22;mf22;):           2 Function None 84
         85(inF0):      7(ptr) FunctionParameter
@@ -3979,51 +3981,51 @@
        89(inFM0):     61(ptr) FunctionParameter
        90(inFM1):     61(ptr) FunctionParameter
               92:             Label
-        1062(r0):      7(ptr) Variable Function
-        1066(r1):     25(ptr) Variable Function
-        1070(r2):     25(ptr) Variable Function
-        1074(r3):      7(ptr) Variable Function
-        1078(r4):     25(ptr) Variable Function
-        1082(r5):     25(ptr) Variable Function
-        1086(r6):     61(ptr) Variable Function
-        1090(r7):     61(ptr) Variable Function
-        1094(r8):     61(ptr) Variable Function
-            1063:    6(float) Load 86(inF1)
-            1064:    6(float) Load 85(inF0)
-            1065:    6(float) FMul 1063 1064
-                              Store 1062(r0) 1065
-            1067:    6(float) Load 85(inF0)
-            1068:   24(fvec2) Load 87(inFV0)
-            1069:   24(fvec2) VectorTimesScalar 1068 1067
-                              Store 1066(r1) 1069
-            1071:   24(fvec2) Load 87(inFV0)
-            1072:    6(float) Load 85(inF0)
-            1073:   24(fvec2) VectorTimesScalar 1071 1072
-                              Store 1070(r2) 1073
-            1075:   24(fvec2) Load 87(inFV0)
-            1076:   24(fvec2) Load 88(inFV1)
-            1077:    6(float) Dot 1075 1076
-                              Store 1074(r3) 1077
-            1079:   24(fvec2) Load 87(inFV0)
-            1080:          60 Load 89(inFM0)
-            1081:   24(fvec2) VectorTimesMatrix 1079 1080
-                              Store 1078(r4) 1081
-            1083:          60 Load 89(inFM0)
-            1084:   24(fvec2) Load 87(inFV0)
-            1085:   24(fvec2) MatrixTimesVector 1083 1084
-                              Store 1082(r5) 1085
-            1087:    6(float) Load 85(inF0)
-            1088:          60 Load 89(inFM0)
-            1089:          60 MatrixTimesScalar 1088 1087
-                              Store 1086(r6) 1089
-            1091:          60 Load 89(inFM0)
-            1092:    6(float) Load 85(inF0)
-            1093:          60 MatrixTimesScalar 1091 1092
-                              Store 1090(r7) 1093
-            1095:          60 Load 90(inFM1)
-            1096:          60 Load 89(inFM0)
-            1097:          60 MatrixTimesMatrix 1095 1096
-                              Store 1094(r8) 1097
+        1064(r0):      7(ptr) Variable Function
+        1068(r1):     25(ptr) Variable Function
+        1072(r2):     25(ptr) Variable Function
+        1076(r3):      7(ptr) Variable Function
+        1080(r4):     25(ptr) Variable Function
+        1084(r5):     25(ptr) Variable Function
+        1088(r6):     61(ptr) Variable Function
+        1092(r7):     61(ptr) Variable Function
+        1096(r8):     61(ptr) Variable Function
+            1065:    6(float) Load 86(inF1)
+            1066:    6(float) Load 85(inF0)
+            1067:    6(float) FMul 1065 1066
+                              Store 1064(r0) 1067
+            1069:    6(float) Load 85(inF0)
+            1070:   24(fvec2) Load 87(inFV0)
+            1071:   24(fvec2) VectorTimesScalar 1070 1069
+                              Store 1068(r1) 1071
+            1073:   24(fvec2) Load 87(inFV0)
+            1074:    6(float) Load 85(inF0)
+            1075:   24(fvec2) VectorTimesScalar 1073 1074
+                              Store 1072(r2) 1075
+            1077:   24(fvec2) Load 87(inFV0)
+            1078:   24(fvec2) Load 88(inFV1)
+            1079:    6(float) Dot 1077 1078
+                              Store 1076(r3) 1079
+            1081:   24(fvec2) Load 87(inFV0)
+            1082:          60 Load 89(inFM0)
+            1083:   24(fvec2) VectorTimesMatrix 1081 1082
+                              Store 1080(r4) 1083
+            1085:          60 Load 89(inFM0)
+            1086:   24(fvec2) Load 87(inFV0)
+            1087:   24(fvec2) MatrixTimesVector 1085 1086
+                              Store 1084(r5) 1087
+            1089:    6(float) Load 85(inF0)
+            1090:          60 Load 89(inFM0)
+            1091:          60 MatrixTimesScalar 1090 1089
+                              Store 1088(r6) 1091
+            1093:          60 Load 89(inFM0)
+            1094:    6(float) Load 85(inF0)
+            1095:          60 MatrixTimesScalar 1093 1094
+                              Store 1092(r7) 1095
+            1097:          60 Load 90(inFM1)
+            1098:          60 Load 89(inFM0)
+            1099:          60 MatrixTimesMatrix 1097 1098
+                              Store 1096(r8) 1099
                               Return
                               FunctionEnd
 100(TestGenMul3(f1;f1;vf3;vf3;mf33;mf33;):           2 Function None 93
@@ -4034,51 +4036,51 @@
        98(inFM0):     69(ptr) FunctionParameter
        99(inFM1):     69(ptr) FunctionParameter
              101:             Label
-        1098(r0):      7(ptr) Variable Function
-        1102(r1):     37(ptr) Variable Function
-        1106(r2):     37(ptr) Variable Function
-        1110(r3):      7(ptr) Variable Function
-        1114(r4):     37(ptr) Variable Function
-        1118(r5):     37(ptr) Variable Function
-        1122(r6):     69(ptr) Variable Function
-        1126(r7):     69(ptr) Variable Function
-        1130(r8):     69(ptr) Variable Function
-            1099:    6(float) Load 95(inF1)
-            1100:    6(float) Load 94(inF0)
-            1101:    6(float) FMul 1099 1100
-                              Store 1098(r0) 1101
-            1103:    6(float) Load 94(inF0)
-            1104:   36(fvec3) Load 96(inFV0)
-            1105:   36(fvec3) VectorTimesScalar 1104 1103
-                              Store 1102(r1) 1105
-            1107:   36(fvec3) Load 96(inFV0)
-            1108:    6(float) Load 94(inF0)
-            1109:   36(fvec3) VectorTimesScalar 1107 1108
-                              Store 1106(r2) 1109
-            1111:   36(fvec3) Load 96(inFV0)
-            1112:   36(fvec3) Load 97(inFV1)
-            1113:    6(float) Dot 1111 1112
-                              Store 1110(r3) 1113
-            1115:   36(fvec3) Load 96(inFV0)
-            1116:          68 Load 98(inFM0)
-            1117:   36(fvec3) VectorTimesMatrix 1115 1116
-                              Store 1114(r4) 1117
-            1119:          68 Load 98(inFM0)
-            1120:   36(fvec3) Load 96(inFV0)
-            1121:   36(fvec3) MatrixTimesVector 1119 1120
-                              Store 1118(r5) 1121
-            1123:    6(float) Load 94(inF0)
-            1124:          68 Load 98(inFM0)
-            1125:          68 MatrixTimesScalar 1124 1123
-                              Store 1122(r6) 1125
-            1127:          68 Load 98(inFM0)
-            1128:    6(float) Load 94(inF0)
-            1129:          68 MatrixTimesScalar 1127 1128
-                              Store 1126(r7) 1129
-            1131:          68 Load 99(inFM1)
-            1132:          68 Load 98(inFM0)
-            1133:          68 MatrixTimesMatrix 1131 1132
-                              Store 1130(r8) 1133
+        1100(r0):      7(ptr) Variable Function
+        1104(r1):     37(ptr) Variable Function
+        1108(r2):     37(ptr) Variable Function
+        1112(r3):      7(ptr) Variable Function
+        1116(r4):     37(ptr) Variable Function
+        1120(r5):     37(ptr) Variable Function
+        1124(r6):     69(ptr) Variable Function
+        1128(r7):     69(ptr) Variable Function
+        1132(r8):     69(ptr) Variable Function
+            1101:    6(float) Load 95(inF1)
+            1102:    6(float) Load 94(inF0)
+            1103:    6(float) FMul 1101 1102
+                              Store 1100(r0) 1103
+            1105:    6(float) Load 94(inF0)
+            1106:   36(fvec3) Load 96(inFV0)
+            1107:   36(fvec3) VectorTimesScalar 1106 1105
+                              Store 1104(r1) 1107
+            1109:   36(fvec3) Load 96(inFV0)
+            1110:    6(float) Load 94(inF0)
+            1111:   36(fvec3) VectorTimesScalar 1109 1110
+                              Store 1108(r2) 1111
+            1113:   36(fvec3) Load 96(inFV0)
+            1114:   36(fvec3) Load 97(inFV1)
+            1115:    6(float) Dot 1113 1114
+                              Store 1112(r3) 1115
+            1117:   36(fvec3) Load 96(inFV0)
+            1118:          68 Load 98(inFM0)
+            1119:   36(fvec3) VectorTimesMatrix 1117 1118
+                              Store 1116(r4) 1119
+            1121:          68 Load 98(inFM0)
+            1122:   36(fvec3) Load 96(inFV0)
+            1123:   36(fvec3) MatrixTimesVector 1121 1122
+                              Store 1120(r5) 1123
+            1125:    6(float) Load 94(inF0)
+            1126:          68 Load 98(inFM0)
+            1127:          68 MatrixTimesScalar 1126 1125
+                              Store 1124(r6) 1127
+            1129:          68 Load 98(inFM0)
+            1130:    6(float) Load 94(inF0)
+            1131:          68 MatrixTimesScalar 1129 1130
+                              Store 1128(r7) 1131
+            1133:          68 Load 99(inFM1)
+            1134:          68 Load 98(inFM0)
+            1135:          68 MatrixTimesMatrix 1133 1134
+                              Store 1132(r8) 1135
                               Return
                               FunctionEnd
 109(TestGenMul4(f1;f1;vf4;vf4;mf44;mf44;):           2 Function None 102
@@ -4089,51 +4091,51 @@
       107(inFM0):     77(ptr) FunctionParameter
       108(inFM1):     77(ptr) FunctionParameter
              110:             Label
-        1134(r0):      7(ptr) Variable Function
-        1138(r1):     49(ptr) Variable Function
-        1142(r2):     49(ptr) Variable Function
-        1146(r3):      7(ptr) Variable Function
-        1150(r4):     49(ptr) Variable Function
-        1154(r5):     49(ptr) Variable Function
-        1158(r6):     77(ptr) Variable Function
-        1162(r7):     77(ptr) Variable Function
-        1166(r8):     77(ptr) Variable Function
-            1135:    6(float) Load 104(inF1)
-            1136:    6(float) Load 103(inF0)
-            1137:    6(float) FMul 1135 1136
-                              Store 1134(r0) 1137
-            1139:    6(float) Load 103(inF0)
-            1140:   48(fvec4) Load 105(inFV0)
-            1141:   48(fvec4) VectorTimesScalar 1140 1139
-                              Store 1138(r1) 1141
-            1143:   48(fvec4) Load 105(inFV0)
-            1144:    6(float) Load 103(inF0)
-            1145:   48(fvec4) VectorTimesScalar 1143 1144
-                              Store 1142(r2) 1145
-            1147:   48(fvec4) Load 105(inFV0)
-            1148:   48(fvec4) Load 106(inFV1)
-            1149:    6(float) Dot 1147 1148
-                              Store 1146(r3) 1149
-            1151:   48(fvec4) Load 105(inFV0)
-            1152:          76 Load 107(inFM0)
-            1153:   48(fvec4) VectorTimesMatrix 1151 1152
-                              Store 1150(r4) 1153
-            1155:          76 Load 107(inFM0)
-            1156:   48(fvec4) Load 105(inFV0)
-            1157:   48(fvec4) MatrixTimesVector 1155 1156
-                              Store 1154(r5) 1157
-            1159:    6(float) Load 103(inF0)
-            1160:          76 Load 107(inFM0)
-            1161:          76 MatrixTimesScalar 1160 1159
-                              Store 1158(r6) 1161
-            1163:          76 Load 107(inFM0)
-            1164:    6(float) Load 103(inF0)
-            1165:          76 MatrixTimesScalar 1163 1164
-                              Store 1162(r7) 1165
-            1167:          76 Load 108(inFM1)
-            1168:          76 Load 107(inFM0)
-            1169:          76 MatrixTimesMatrix 1167 1168
-                              Store 1166(r8) 1169
+        1136(r0):      7(ptr) Variable Function
+        1140(r1):     49(ptr) Variable Function
+        1144(r2):     49(ptr) Variable Function
+        1148(r3):      7(ptr) Variable Function
+        1152(r4):     49(ptr) Variable Function
+        1156(r5):     49(ptr) Variable Function
+        1160(r6):     77(ptr) Variable Function
+        1164(r7):     77(ptr) Variable Function
+        1168(r8):     77(ptr) Variable Function
+            1137:    6(float) Load 104(inF1)
+            1138:    6(float) Load 103(inF0)
+            1139:    6(float) FMul 1137 1138
+                              Store 1136(r0) 1139
+            1141:    6(float) Load 103(inF0)
+            1142:   48(fvec4) Load 105(inFV0)
+            1143:   48(fvec4) VectorTimesScalar 1142 1141
+                              Store 1140(r1) 1143
+            1145:   48(fvec4) Load 105(inFV0)
+            1146:    6(float) Load 103(inF0)
+            1147:   48(fvec4) VectorTimesScalar 1145 1146
+                              Store 1144(r2) 1147
+            1149:   48(fvec4) Load 105(inFV0)
+            1150:   48(fvec4) Load 106(inFV1)
+            1151:    6(float) Dot 1149 1150
+                              Store 1148(r3) 1151
+            1153:   48(fvec4) Load 105(inFV0)
+            1154:          76 Load 107(inFM0)
+            1155:   48(fvec4) VectorTimesMatrix 1153 1154
+                              Store 1152(r4) 1155
+            1157:          76 Load 107(inFM0)
+            1158:   48(fvec4) Load 105(inFV0)
+            1159:   48(fvec4) MatrixTimesVector 1157 1158
+                              Store 1156(r5) 1159
+            1161:    6(float) Load 103(inF0)
+            1162:          76 Load 107(inFM0)
+            1163:          76 MatrixTimesScalar 1162 1161
+                              Store 1160(r6) 1163
+            1165:          76 Load 107(inFM0)
+            1166:    6(float) Load 103(inF0)
+            1167:          76 MatrixTimesScalar 1165 1166
+                              Store 1164(r7) 1167
+            1169:          76 Load 108(inFM1)
+            1170:          76 Load 107(inFM0)
+            1171:          76 MatrixTimesMatrix 1169 1170
+                              Store 1168(r8) 1171
                               Return
                               FunctionEnd
 129(TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24;):           2 Function None 119
@@ -4147,90 +4149,90 @@
     127(inFM3x4):    116(ptr) FunctionParameter
     128(inFM2x4):    118(ptr) FunctionParameter
              130:             Label
-       1170(r00):      7(ptr) Variable Function
-       1174(r01):     25(ptr) Variable Function
-       1178(r02):     37(ptr) Variable Function
-       1182(r03):     25(ptr) Variable Function
-       1186(r04):     37(ptr) Variable Function
-       1190(r05):      7(ptr) Variable Function
-       1194(r06):      7(ptr) Variable Function
-       1198(r07):     37(ptr) Variable Function
-       1202(r08):     25(ptr) Variable Function
-       1206(r09):     25(ptr) Variable Function
-       1210(r10):     37(ptr) Variable Function
-       1214(r11):    112(ptr) Variable Function
-       1218(r12):    114(ptr) Variable Function
-       1222(r13):     61(ptr) Variable Function
-       1226(r14):    112(ptr) Variable Function
-       1230(r15):    118(ptr) Variable Function
-       1234(r16):    116(ptr) Variable Function
-            1171:    6(float) Load 121(inF1)
-            1172:    6(float) Load 120(inF0)
-            1173:    6(float) FMul 1171 1172
-                              Store 1170(r00) 1173
-            1175:    6(float) Load 120(inF0)
-            1176:   24(fvec2) Load 122(inFV2)
-            1177:   24(fvec2) VectorTimesScalar 1176 1175
-                              Store 1174(r01) 1177
-            1179:    6(float) Load 120(inF0)
-            1180:   36(fvec3) Load 123(inFV3)
-            1181:   36(fvec3) VectorTimesScalar 1180 1179
-                              Store 1178(r02) 1181
-            1183:   24(fvec2) Load 122(inFV2)
-            1184:    6(float) Load 120(inF0)
-            1185:   24(fvec2) VectorTimesScalar 1183 1184
-                              Store 1182(r03) 1185
-            1187:   36(fvec3) Load 123(inFV3)
-            1188:    6(float) Load 120(inF0)
-            1189:   36(fvec3) VectorTimesScalar 1187 1188
-                              Store 1186(r04) 1189
-            1191:   24(fvec2) Load 122(inFV2)
-            1192:   24(fvec2) Load 122(inFV2)
-            1193:    6(float) Dot 1191 1192
-                              Store 1190(r05) 1193
-            1195:   36(fvec3) Load 123(inFV3)
-            1196:   36(fvec3) Load 123(inFV3)
-            1197:    6(float) Dot 1195 1196
-                              Store 1194(r06) 1197
-            1199:         111 Load 124(inFM2x3)
-            1200:   24(fvec2) Load 122(inFV2)
-            1201:   36(fvec3) MatrixTimesVector 1199 1200
-                              Store 1198(r07) 1201
-            1203:         113 Load 125(inFM3x2)
-            1204:   36(fvec3) Load 123(inFV3)
-            1205:   24(fvec2) MatrixTimesVector 1203 1204
-                              Store 1202(r08) 1205
-            1207:   36(fvec3) Load 123(inFV3)
-            1208:         111 Load 124(inFM2x3)
-            1209:   24(fvec2) VectorTimesMatrix 1207 1208
-                              Store 1206(r09) 1209
-            1211:   24(fvec2) Load 122(inFV2)
-            1212:         113 Load 125(inFM3x2)
-            1213:   36(fvec3) VectorTimesMatrix 1211 1212
-                              Store 1210(r10) 1213
-            1215:    6(float) Load 120(inF0)
-            1216:         111 Load 124(inFM2x3)
-            1217:         111 MatrixTimesScalar 1216 1215
-                              Store 1214(r11) 1217
-            1219:    6(float) Load 120(inF0)
-            1220:         113 Load 125(inFM3x2)
-            1221:         113 MatrixTimesScalar 1220 1219
-                              Store 1218(r12) 1221
-            1223:         113 Load 125(inFM3x2)
-            1224:         111 Load 124(inFM2x3)
-            1225:          60 MatrixTimesMatrix 1223 1224
-                              Store 1222(r13) 1225
-            1227:          68 Load 126(inFM3x3)
-            1228:         111 Load 124(inFM2x3)
-            1229:         111 MatrixTimesMatrix 1227 1228
-                              Store 1226(r14) 1229
-            1231:         115 Load 127(inFM3x4)
-            1232:         111 Load 124(inFM2x3)
-            1233:         117 MatrixTimesMatrix 1231 1232
-                              Store 1230(r15) 1233
-            1235:         117 Load 128(inFM2x4)
-            1236:         113 Load 125(inFM3x2)
-            1237:         115 MatrixTimesMatrix 1235 1236
-                              Store 1234(r16) 1237
+       1172(r00):      7(ptr) Variable Function
+       1176(r01):     25(ptr) Variable Function
+       1180(r02):     37(ptr) Variable Function
+       1184(r03):     25(ptr) Variable Function
+       1188(r04):     37(ptr) Variable Function
+       1192(r05):      7(ptr) Variable Function
+       1196(r06):      7(ptr) Variable Function
+       1200(r07):     37(ptr) Variable Function
+       1204(r08):     25(ptr) Variable Function
+       1208(r09):     25(ptr) Variable Function
+       1212(r10):     37(ptr) Variable Function
+       1216(r11):    112(ptr) Variable Function
+       1220(r12):    114(ptr) Variable Function
+       1224(r13):     61(ptr) Variable Function
+       1228(r14):    112(ptr) Variable Function
+       1232(r15):    118(ptr) Variable Function
+       1236(r16):    116(ptr) Variable Function
+            1173:    6(float) Load 121(inF1)
+            1174:    6(float) Load 120(inF0)
+            1175:    6(float) FMul 1173 1174
+                              Store 1172(r00) 1175
+            1177:    6(float) Load 120(inF0)
+            1178:   24(fvec2) Load 122(inFV2)
+            1179:   24(fvec2) VectorTimesScalar 1178 1177
+                              Store 1176(r01) 1179
+            1181:    6(float) Load 120(inF0)
+            1182:   36(fvec3) Load 123(inFV3)
+            1183:   36(fvec3) VectorTimesScalar 1182 1181
+                              Store 1180(r02) 1183
+            1185:   24(fvec2) Load 122(inFV2)
+            1186:    6(float) Load 120(inF0)
+            1187:   24(fvec2) VectorTimesScalar 1185 1186
+                              Store 1184(r03) 1187
+            1189:   36(fvec3) Load 123(inFV3)
+            1190:    6(float) Load 120(inF0)
+            1191:   36(fvec3) VectorTimesScalar 1189 1190
+                              Store 1188(r04) 1191
+            1193:   24(fvec2) Load 122(inFV2)
+            1194:   24(fvec2) Load 122(inFV2)
+            1195:    6(float) Dot 1193 1194
+                              Store 1192(r05) 1195
+            1197:   36(fvec3) Load 123(inFV3)
+            1198:   36(fvec3) Load 123(inFV3)
+            1199:    6(float) Dot 1197 1198
+                              Store 1196(r06) 1199
+            1201:         111 Load 124(inFM2x3)
+            1202:   24(fvec2) Load 122(inFV2)
+            1203:   36(fvec3) MatrixTimesVector 1201 1202
+                              Store 1200(r07) 1203
+            1205:         113 Load 125(inFM3x2)
+            1206:   36(fvec3) Load 123(inFV3)
+            1207:   24(fvec2) MatrixTimesVector 1205 1206
+                              Store 1204(r08) 1207
+            1209:   36(fvec3) Load 123(inFV3)
+            1210:         111 Load 124(inFM2x3)
+            1211:   24(fvec2) VectorTimesMatrix 1209 1210
+                              Store 1208(r09) 1211
+            1213:   24(fvec2) Load 122(inFV2)
+            1214:         113 Load 125(inFM3x2)
+            1215:   36(fvec3) VectorTimesMatrix 1213 1214
+                              Store 1212(r10) 1215
+            1217:    6(float) Load 120(inF0)
+            1218:         111 Load 124(inFM2x3)
+            1219:         111 MatrixTimesScalar 1218 1217
+                              Store 1216(r11) 1219
+            1221:    6(float) Load 120(inF0)
+            1222:         113 Load 125(inFM3x2)
+            1223:         113 MatrixTimesScalar 1222 1221
+                              Store 1220(r12) 1223
+            1225:         113 Load 125(inFM3x2)
+            1226:         111 Load 124(inFM2x3)
+            1227:          60 MatrixTimesMatrix 1225 1226
+                              Store 1224(r13) 1227
+            1229:          68 Load 126(inFM3x3)
+            1230:         111 Load 124(inFM2x3)
+            1231:         111 MatrixTimesMatrix 1229 1230
+                              Store 1228(r14) 1231
+            1233:         115 Load 127(inFM3x4)
+            1234:         111 Load 124(inFM2x3)
+            1235:         117 MatrixTimesMatrix 1233 1234
+                              Store 1232(r15) 1235
+            1237:         117 Load 128(inFM2x4)
+            1238:         113 Load 125(inFM3x2)
+            1239:         115 MatrixTimesMatrix 1237 1238
+                              Store 1236(r16) 1239
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.promote.atomic.frag.out b/Test/baseResults/hlsl.promote.atomic.frag.out
new file mode 100644
index 0000000..7fa0cad
--- /dev/null
+++ b/Test/baseResults/hlsl.promote.atomic.frag.out
@@ -0,0 +1,109 @@
+hlsl.promote.atomic.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:5  Function Definition: main( (temp 4-component vector of float)
+0:5    Function Parameters: 
+0:?     Sequence
+0:13      move second child to first child (temp int)
+0:13        'Orig' (temp int)
+0:13        Convert uint to int (temp int)
+0:13          imageAtomicAdd (temp uint)
+0:13            's_uintbuff' (layout(r32ui ) uniform uimageBuffer)
+0:13            'Loc' (temp int)
+0:13            Convert int to uint (temp uint)
+0:13              'Inc' (temp int)
+0:15      Sequence
+0:15        move second child to first child (temp 4-component vector of float)
+0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?           Constant:
+0:?             0.000000
+0:?             0.000000
+0:?             0.000000
+0:?             0.000000
+0:15        Branch: Return
+0:?   Linker Objects
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?     's_uintbuff' (layout(r32ui ) uniform uimageBuffer)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:5  Function Definition: main( (temp 4-component vector of float)
+0:5    Function Parameters: 
+0:?     Sequence
+0:13      move second child to first child (temp int)
+0:13        'Orig' (temp int)
+0:13        Convert uint to int (temp int)
+0:13          imageAtomicAdd (temp uint)
+0:13            's_uintbuff' (layout(r32ui ) uniform uimageBuffer)
+0:13            'Loc' (temp int)
+0:13            Convert int to uint (temp uint)
+0:13              'Inc' (temp int)
+0:15      Sequence
+0:15        move second child to first child (temp 4-component vector of float)
+0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?           Constant:
+0:?             0.000000
+0:?             0.000000
+0:?             0.000000
+0:?             0.000000
+0:15        Branch: Return
+0:?   Linker Objects
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?     's_uintbuff' (layout(r32ui ) uniform uimageBuffer)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 31
+
+                              Capability Shader
+                              Capability SampledBuffer
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 27
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 8  "Orig"
+                              Name 12  "s_uintbuff"
+                              Name 13  "Loc"
+                              Name 15  "Inc"
+                              Name 27  "@entryPointOutput"
+                              Decorate 12(s_uintbuff) DescriptorSet 0
+                              Decorate 27(@entryPointOutput) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Function 6(int)
+               9:             TypeInt 32 0
+              10:             TypeImage 9(int) Buffer nonsampled format:R32ui
+              11:             TypePointer UniformConstant 10
+  12(s_uintbuff):     11(ptr) Variable UniformConstant
+              18:      9(int) Constant 0
+              19:             TypePointer Image 9(int)
+              21:      9(int) Constant 1
+              24:             TypeFloat 32
+              25:             TypeVector 24(float) 4
+              26:             TypePointer Output 25(fvec4)
+27(@entryPointOutput):     26(ptr) Variable Output
+              28:   24(float) Constant 0
+              29:   25(fvec4) ConstantComposite 28 28 28 28
+         4(main):           2 Function None 3
+               5:             Label
+         8(Orig):      7(ptr) Variable Function
+         13(Loc):      7(ptr) Variable Function
+         15(Inc):      7(ptr) Variable Function
+              14:      6(int) Load 13(Loc)
+              16:      6(int) Load 15(Inc)
+              17:      9(int) Bitcast 16
+              20:     19(ptr) ImageTexelPointer 12(s_uintbuff) 14 18
+              22:      9(int) AtomicIAdd 20 21 18 17
+              23:      6(int) Bitcast 22
+                              Store 8(Orig) 23
+                              Store 27(@entryPointOutput) 29
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.reflection.binding.frag.out b/Test/baseResults/hlsl.reflection.binding.frag.out
index e26e0f6..dd19621 100644
--- a/Test/baseResults/hlsl.reflection.binding.frag.out
+++ b/Test/baseResults/hlsl.reflection.binding.frag.out
@@ -1,8 +1,4 @@
 hlsl.reflection.binding.frag
-
-Linked fragment stage:
-
-
 Uniform reflection:
 t1: offset -1, type 8b5d, size 1, index -1, binding 15
 s1: offset -1, type 0, size 1, index -1, binding 5
diff --git a/Test/baseResults/hlsl.reflection.vert.out b/Test/baseResults/hlsl.reflection.vert.out
index cbce25e..8ecfde6 100644
--- a/Test/baseResults/hlsl.reflection.vert.out
+++ b/Test/baseResults/hlsl.reflection.vert.out
@@ -1,8 +1,4 @@
 hlsl.reflection.vert
-
-Linked vertex stage:
-
-
 Uniform reflection:
 anonMember3: offset 80, type 8b52, size 1, index 0, binding -1
 s.a: offset 0, type 1404, size 1, index 1, binding -1
diff --git a/Test/baseResults/hlsl.structarray.flatten.frag.out b/Test/baseResults/hlsl.structarray.flatten.frag.out
new file mode 100644
index 0000000..6b22d66
--- /dev/null
+++ b/Test/baseResults/hlsl.structarray.flatten.frag.out
@@ -0,0 +1,197 @@
+hlsl.structarray.flatten.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:23  Function Definition: main(struct-PS_OUTPUT-vf41; (temp void)
+0:23    Function Parameters: 
+0:23      'ps_output' (out structure{temp 4-component vector of float color})
+0:?     Sequence
+0:24      move second child to first child (temp 4-component vector of float)
+0:?         'color' (layout(location=0 ) out 4-component vector of float)
+0:26        add (temp 4-component vector of float)
+0:25          add (temp 4-component vector of float)
+0:25            texture (temp 4-component vector of float)
+0:25              Construct combined texture-sampler (temp sampler1D)
+0:?                 'tex' (uniform texture1D)
+0:?                 'samp' (uniform sampler)
+0:25              Constant:
+0:25                0.500000
+0:26            texture (temp 4-component vector of float)
+0:26              Construct combined texture-sampler (temp sampler1D)
+0:?                 'g_texdata_array[1].tex' (uniform texture1D)
+0:?                 'g_texdata_array[1].samp' (uniform sampler)
+0:26              Constant:
+0:26                0.400000
+0:27          texture (temp 4-component vector of float)
+0:27            Construct combined texture-sampler (temp sampler1D)
+0:?               'g_texdata_array2[1].tex[0]' (uniform texture1D)
+0:?               'g_texdata_array2[1].samp[0]' (uniform sampler)
+0:27            Constant:
+0:27              0.300000
+0:?   Linker Objects
+0:?     'color' (layout(location=0 ) out 4-component vector of float)
+0:?     'g_samp' (uniform sampler)
+0:?     'g_tex' (uniform texture1D)
+0:?     'g_texdata_array2[0].samp[0]' (uniform sampler)
+0:?     'g_texdata_array2[0].samp[1]' (uniform sampler)
+0:?     'g_texdata_array2[0].tex[0]' (uniform texture1D)
+0:?     'g_texdata_array2[0].tex[1]' (uniform texture1D)
+0:?     'g_texdata_array2[1].samp[0]' (uniform sampler)
+0:?     'g_texdata_array2[1].samp[1]' (uniform sampler)
+0:?     'g_texdata_array2[1].tex[0]' (uniform texture1D)
+0:?     'g_texdata_array2[1].tex[1]' (uniform texture1D)
+0:?     'g_texdata_array2[2].samp[0]' (uniform sampler)
+0:?     'g_texdata_array2[2].samp[1]' (uniform sampler)
+0:?     'g_texdata_array2[2].tex[0]' (uniform texture1D)
+0:?     'g_texdata_array2[2].tex[1]' (uniform texture1D)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:23  Function Definition: main(struct-PS_OUTPUT-vf41; (temp void)
+0:23    Function Parameters: 
+0:23      'ps_output' (out structure{temp 4-component vector of float color})
+0:?     Sequence
+0:24      move second child to first child (temp 4-component vector of float)
+0:?         'color' (layout(location=0 ) out 4-component vector of float)
+0:26        add (temp 4-component vector of float)
+0:25          add (temp 4-component vector of float)
+0:25            texture (temp 4-component vector of float)
+0:25              Construct combined texture-sampler (temp sampler1D)
+0:?                 'tex' (uniform texture1D)
+0:?                 'samp' (uniform sampler)
+0:25              Constant:
+0:25                0.500000
+0:26            texture (temp 4-component vector of float)
+0:26              Construct combined texture-sampler (temp sampler1D)
+0:?                 'g_texdata_array[1].tex' (uniform texture1D)
+0:?                 'g_texdata_array[1].samp' (uniform sampler)
+0:26              Constant:
+0:26                0.400000
+0:27          texture (temp 4-component vector of float)
+0:27            Construct combined texture-sampler (temp sampler1D)
+0:?               'g_texdata_array2[1].tex[0]' (uniform texture1D)
+0:?               'g_texdata_array2[1].samp[0]' (uniform sampler)
+0:27            Constant:
+0:27              0.300000
+0:?   Linker Objects
+0:?     'color' (layout(location=0 ) out 4-component vector of float)
+0:?     'g_samp' (uniform sampler)
+0:?     'g_tex' (uniform texture1D)
+0:?     'g_texdata_array2[0].samp[0]' (uniform sampler)
+0:?     'g_texdata_array2[0].samp[1]' (uniform sampler)
+0:?     'g_texdata_array2[0].tex[0]' (uniform texture1D)
+0:?     'g_texdata_array2[0].tex[1]' (uniform texture1D)
+0:?     'g_texdata_array2[1].samp[0]' (uniform sampler)
+0:?     'g_texdata_array2[1].samp[1]' (uniform sampler)
+0:?     'g_texdata_array2[1].tex[0]' (uniform texture1D)
+0:?     'g_texdata_array2[1].tex[1]' (uniform texture1D)
+0:?     'g_texdata_array2[2].samp[0]' (uniform sampler)
+0:?     'g_texdata_array2[2].samp[1]' (uniform sampler)
+0:?     'g_texdata_array2[2].tex[0]' (uniform texture1D)
+0:?     'g_texdata_array2[2].tex[1]' (uniform texture1D)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 50
+
+                              Capability Shader
+                              Capability Sampled1D
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 9
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 9  "color"
+                              Name 12  "tex"
+                              Name 16  "samp"
+                              Name 22  "g_texdata_array[1].tex"
+                              Name 24  "g_texdata_array[1].samp"
+                              Name 30  "g_texdata_array2[1].tex[0]"
+                              Name 32  "g_texdata_array2[1].samp[0]"
+                              Name 38  "g_samp"
+                              Name 39  "g_tex"
+                              Name 40  "g_texdata_array2[0].samp[0]"
+                              Name 41  "g_texdata_array2[0].samp[1]"
+                              Name 42  "g_texdata_array2[0].tex[0]"
+                              Name 43  "g_texdata_array2[0].tex[1]"
+                              Name 44  "g_texdata_array2[1].samp[1]"
+                              Name 45  "g_texdata_array2[1].tex[1]"
+                              Name 46  "g_texdata_array2[2].samp[0]"
+                              Name 47  "g_texdata_array2[2].samp[1]"
+                              Name 48  "g_texdata_array2[2].tex[0]"
+                              Name 49  "g_texdata_array2[2].tex[1]"
+                              Decorate 9(color) Location 0
+                              Decorate 12(tex) DescriptorSet 0
+                              Decorate 16(samp) DescriptorSet 0
+                              Decorate 22(g_texdata_array[1].tex) DescriptorSet 0
+                              Decorate 24(g_texdata_array[1].samp) DescriptorSet 0
+                              Decorate 30(g_texdata_array2[1].tex[0]) DescriptorSet 0
+                              Decorate 32(g_texdata_array2[1].samp[0]) DescriptorSet 0
+                              Decorate 38(g_samp) DescriptorSet 0
+                              Decorate 39(g_tex) DescriptorSet 0
+                              Decorate 40(g_texdata_array2[0].samp[0]) DescriptorSet 0
+                              Decorate 41(g_texdata_array2[0].samp[1]) DescriptorSet 0
+                              Decorate 42(g_texdata_array2[0].tex[0]) DescriptorSet 0
+                              Decorate 43(g_texdata_array2[0].tex[1]) DescriptorSet 0
+                              Decorate 44(g_texdata_array2[1].samp[1]) DescriptorSet 0
+                              Decorate 45(g_texdata_array2[1].tex[1]) DescriptorSet 0
+                              Decorate 46(g_texdata_array2[2].samp[0]) DescriptorSet 0
+                              Decorate 47(g_texdata_array2[2].samp[1]) DescriptorSet 0
+                              Decorate 48(g_texdata_array2[2].tex[0]) DescriptorSet 0
+                              Decorate 49(g_texdata_array2[2].tex[1]) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Output 7(fvec4)
+        9(color):      8(ptr) Variable Output
+              10:             TypeImage 6(float) 1D sampled format:Unknown
+              11:             TypePointer UniformConstant 10
+         12(tex):     11(ptr) Variable UniformConstant
+              14:             TypeSampler
+              15:             TypePointer UniformConstant 14
+        16(samp):     15(ptr) Variable UniformConstant
+              18:             TypeSampledImage 10
+              20:    6(float) Constant 1056964608
+22(g_texdata_array[1].tex):     11(ptr) Variable UniformConstant
+24(g_texdata_array[1].samp):     15(ptr) Variable UniformConstant
+              27:    6(float) Constant 1053609165
+30(g_texdata_array2[1].tex[0]):     11(ptr) Variable UniformConstant
+32(g_texdata_array2[1].samp[0]):     15(ptr) Variable UniformConstant
+              35:    6(float) Constant 1050253722
+      38(g_samp):     15(ptr) Variable UniformConstant
+       39(g_tex):     11(ptr) Variable UniformConstant
+40(g_texdata_array2[0].samp[0]):     15(ptr) Variable UniformConstant
+41(g_texdata_array2[0].samp[1]):     15(ptr) Variable UniformConstant
+42(g_texdata_array2[0].tex[0]):     11(ptr) Variable UniformConstant
+43(g_texdata_array2[0].tex[1]):     11(ptr) Variable UniformConstant
+44(g_texdata_array2[1].samp[1]):     15(ptr) Variable UniformConstant
+45(g_texdata_array2[1].tex[1]):     11(ptr) Variable UniformConstant
+46(g_texdata_array2[2].samp[0]):     15(ptr) Variable UniformConstant
+47(g_texdata_array2[2].samp[1]):     15(ptr) Variable UniformConstant
+48(g_texdata_array2[2].tex[0]):     11(ptr) Variable UniformConstant
+49(g_texdata_array2[2].tex[1]):     11(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+              13:          10 Load 12(tex)
+              17:          14 Load 16(samp)
+              19:          18 SampledImage 13 17
+              21:    7(fvec4) ImageSampleImplicitLod 19 20
+              23:          10 Load 22(g_texdata_array[1].tex)
+              25:          14 Load 24(g_texdata_array[1].samp)
+              26:          18 SampledImage 23 25
+              28:    7(fvec4) ImageSampleImplicitLod 26 27
+              29:    7(fvec4) FAdd 21 28
+              31:          10 Load 30(g_texdata_array2[1].tex[0])
+              33:          14 Load 32(g_texdata_array2[1].samp[0])
+              34:          18 SampledImage 31 33
+              36:    7(fvec4) ImageSampleImplicitLod 34 35
+              37:    7(fvec4) FAdd 29 36
+                              Store 9(color) 37
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.structarray.flatten.geom.out b/Test/baseResults/hlsl.structarray.flatten.geom.out
new file mode 100644
index 0000000..0994af8
--- /dev/null
+++ b/Test/baseResults/hlsl.structarray.flatten.geom.out
@@ -0,0 +1,100 @@
+hlsl.structarray.flatten.geom
+ERROR: 0:10: 'vin' : recursive type not yet supported in GS input 
+ERROR: 1 compilation errors.  No code generated.
+
+
+Shader version: 450
+invocations = -1
+max_vertices = 4
+input primitive = lines
+output primitive = triangle_strip
+ERROR: node is still EOpNull!
+0:10  Function Definition: main(struct-VertexData-vf4-vf4-vf21[2];struct-VertexData-vf4-vf4-vf21; (temp void)
+0:10    Function Parameters: 
+0:10      'vin' (in 2-element array of structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:10      'outStream' (out structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:?     Sequence
+0:13      move second child to first child (temp 4-component vector of float)
+0:13        color: direct index for structure (temp 4-component vector of float)
+0:13          'vout' (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:13          Constant:
+0:13            1 (const int)
+0:?         'vin[0].color' (layout(location=1 ) in 4-component vector of float)
+0:14      move second child to first child (temp 2-component vector of float)
+0:14        uv: direct index for structure (temp 2-component vector of float)
+0:14          'vout' (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:14          Constant:
+0:14            2 (const int)
+0:?         'vin[0].uv' (layout(location=2 ) in 2-component vector of float)
+0:15      move second child to first child (temp 4-component vector of float)
+0:15        position: direct index for structure (temp 4-component vector of float)
+0:15          'vout' (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:15          Constant:
+0:15            0 (const int)
+0:?         'vin[0].position' (layout(location=0 ) in 4-component vector of float)
+0:16      Sequence
+0:16        move second child to first child (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:16          'outStream' (out structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:16          'vout' (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:16        EmitVertex (temp void)
+0:?   Linker Objects
+0:?     'vin[0].position' (layout(location=0 ) in 4-component vector of float)
+0:?     'vin[0].color' (layout(location=1 ) in 4-component vector of float)
+0:?     'vin[0].uv' (layout(location=2 ) in 2-component vector of float)
+0:?     'vin[1].position' (layout(location=3 ) in 4-component vector of float)
+0:?     'vin[1].color' (layout(location=4 ) in 4-component vector of float)
+0:?     'vin[1].uv' (layout(location=5 ) in 2-component vector of float)
+0:?     'position' (layout(location=0 ) out 4-component vector of float)
+0:?     'color' (layout(location=1 ) out 4-component vector of float)
+0:?     'uv' (layout(location=2 ) out 2-component vector of float)
+
+
+Linked geometry stage:
+
+
+Shader version: 450
+invocations = 1
+max_vertices = 4
+input primitive = lines
+output primitive = triangle_strip
+ERROR: node is still EOpNull!
+0:10  Function Definition: main(struct-VertexData-vf4-vf4-vf21[2];struct-VertexData-vf4-vf4-vf21; (temp void)
+0:10    Function Parameters: 
+0:10      'vin' (in 2-element array of structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:10      'outStream' (out structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:?     Sequence
+0:13      move second child to first child (temp 4-component vector of float)
+0:13        color: direct index for structure (temp 4-component vector of float)
+0:13          'vout' (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:13          Constant:
+0:13            1 (const int)
+0:?         'vin[0].color' (layout(location=1 ) in 4-component vector of float)
+0:14      move second child to first child (temp 2-component vector of float)
+0:14        uv: direct index for structure (temp 2-component vector of float)
+0:14          'vout' (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:14          Constant:
+0:14            2 (const int)
+0:?         'vin[0].uv' (layout(location=2 ) in 2-component vector of float)
+0:15      move second child to first child (temp 4-component vector of float)
+0:15        position: direct index for structure (temp 4-component vector of float)
+0:15          'vout' (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:15          Constant:
+0:15            0 (const int)
+0:?         'vin[0].position' (layout(location=0 ) in 4-component vector of float)
+0:16      Sequence
+0:16        move second child to first child (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:16          'outStream' (out structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:16          'vout' (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:16        EmitVertex (temp void)
+0:?   Linker Objects
+0:?     'vin[0].position' (layout(location=0 ) in 4-component vector of float)
+0:?     'vin[0].color' (layout(location=1 ) in 4-component vector of float)
+0:?     'vin[0].uv' (layout(location=2 ) in 2-component vector of float)
+0:?     'vin[1].position' (layout(location=3 ) in 4-component vector of float)
+0:?     'vin[1].color' (layout(location=4 ) in 4-component vector of float)
+0:?     'vin[1].uv' (layout(location=5 ) in 2-component vector of float)
+0:?     'position' (layout(location=0 ) out 4-component vector of float)
+0:?     'color' (layout(location=1 ) out 4-component vector of float)
+0:?     'uv' (layout(location=2 ) out 2-component vector of float)
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/hlsl.structin.vert.out b/Test/baseResults/hlsl.structin.vert.out
index f3e56b6..a5feea8 100755
--- a/Test/baseResults/hlsl.structin.vert.out
+++ b/Test/baseResults/hlsl.structin.vert.out
@@ -16,14 +16,8 @@
 0:11          add (temp 4-component vector of float)
 0:11            add (temp 4-component vector of float)
 0:11              add (temp 4-component vector of float)
-0:11                direct index (layout(location=1 ) temp 4-component vector of float)
-0:?                   'm' (layout(location=1 ) in 2-element array of 4-component vector of float)
-0:11                  Constant:
-0:11                    1 (const int)
-0:11                direct index (layout(location=1 ) temp 4-component vector of float)
-0:?                   'm' (layout(location=1 ) in 2-element array of 4-component vector of float)
-0:11                  Constant:
-0:11                    0 (const int)
+0:?                 'm[1]' (layout(location=2 ) in 4-component vector of float)
+0:?                 'm[0]' (layout(location=1 ) in 4-component vector of float)
 0:11              Construct vec4 (temp 4-component vector of float)
 0:11                Convert uint to float (temp float)
 0:11                  direct index (temp uint)
@@ -34,12 +28,24 @@
 0:11          'e' (layout(location=5 ) in 4-component vector of float)
 0:13      Sequence
 0:13        Sequence
-0:13          move second child to first child (temp 2-element array of 4-component vector of float)
-0:?             'm' (layout(location=0 ) out 2-element array of 4-component vector of float)
-0:13            m: direct index for structure (temp 2-element array of 4-component vector of float)
-0:13              'local' (temp structure{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:13          move second child to first child (temp 4-component vector of float)
+0:?             'm[0]' (layout(location=0 ) out 4-component vector of float)
+0:13            direct index (temp 4-component vector of float)
+0:13              m: direct index for structure (temp 2-element array of 4-component vector of float)
+0:13                'local' (temp structure{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:13                Constant:
+0:13                  0 (const int)
 0:13              Constant:
 0:13                0 (const int)
+0:13          move second child to first child (temp 4-component vector of float)
+0:?             'm[1]' (layout(location=1 ) out 4-component vector of float)
+0:13            direct index (temp 4-component vector of float)
+0:13              m: direct index for structure (temp 2-element array of 4-component vector of float)
+0:13                'local' (temp structure{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:13                Constant:
+0:13                  0 (const int)
+0:13              Constant:
+0:13                1 (const int)
 0:13          move second child to first child (temp 2-component vector of uint)
 0:?             'coord' (layout(location=2 ) out 2-component vector of uint)
 0:13            coord: direct index for structure (temp 2-component vector of uint)
@@ -54,14 +60,20 @@
 0:13                2 (const int)
 0:13        Branch: Return
 0:?   Linker Objects
-0:?     'm' (layout(location=0 ) out 2-element array of 4-component vector of float)
+0:?     'm[0]' (layout(location=0 ) out 4-component vector of float)
+0:?     'm[1]' (layout(location=1 ) out 4-component vector of float)
 0:?     'coord' (layout(location=2 ) out 2-component vector of uint)
 0:?     'b' (layout(location=3 ) smooth out 4-component vector of float)
 0:?     'd' (layout(location=0 ) in 4-component vector of float)
-0:?     'm' (layout(location=1 ) in 2-element array of 4-component vector of float)
+0:?     'm[0]' (layout(location=1 ) in 4-component vector of float)
+0:?     'm[1]' (layout(location=2 ) in 4-component vector of float)
 0:?     'coord' (layout(location=3 ) in 2-component vector of uint)
 0:?     'b' (layout(location=4 ) in 4-component vector of float)
 0:?     'e' (layout(location=5 ) in 4-component vector of float)
+0:?     'm[0]' (layout(location=0 ) out 4-component vector of float)
+0:?     'm[1]' (layout(location=1 ) out 4-component vector of float)
+0:?     'm[0]' (layout(location=1 ) in 4-component vector of float)
+0:?     'm[1]' (layout(location=2 ) in 4-component vector of float)
 
 
 Linked vertex stage:
@@ -84,14 +96,8 @@
 0:11          add (temp 4-component vector of float)
 0:11            add (temp 4-component vector of float)
 0:11              add (temp 4-component vector of float)
-0:11                direct index (layout(location=1 ) temp 4-component vector of float)
-0:?                   'm' (layout(location=1 ) in 2-element array of 4-component vector of float)
-0:11                  Constant:
-0:11                    1 (const int)
-0:11                direct index (layout(location=1 ) temp 4-component vector of float)
-0:?                   'm' (layout(location=1 ) in 2-element array of 4-component vector of float)
-0:11                  Constant:
-0:11                    0 (const int)
+0:?                 'm[1]' (layout(location=2 ) in 4-component vector of float)
+0:?                 'm[0]' (layout(location=1 ) in 4-component vector of float)
 0:11              Construct vec4 (temp 4-component vector of float)
 0:11                Convert uint to float (temp float)
 0:11                  direct index (temp uint)
@@ -102,12 +108,24 @@
 0:11          'e' (layout(location=5 ) in 4-component vector of float)
 0:13      Sequence
 0:13        Sequence
-0:13          move second child to first child (temp 2-element array of 4-component vector of float)
-0:?             'm' (layout(location=0 ) out 2-element array of 4-component vector of float)
-0:13            m: direct index for structure (temp 2-element array of 4-component vector of float)
-0:13              'local' (temp structure{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:13          move second child to first child (temp 4-component vector of float)
+0:?             'm[0]' (layout(location=0 ) out 4-component vector of float)
+0:13            direct index (temp 4-component vector of float)
+0:13              m: direct index for structure (temp 2-element array of 4-component vector of float)
+0:13                'local' (temp structure{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:13                Constant:
+0:13                  0 (const int)
 0:13              Constant:
 0:13                0 (const int)
+0:13          move second child to first child (temp 4-component vector of float)
+0:?             'm[1]' (layout(location=1 ) out 4-component vector of float)
+0:13            direct index (temp 4-component vector of float)
+0:13              m: direct index for structure (temp 2-element array of 4-component vector of float)
+0:13                'local' (temp structure{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:13                Constant:
+0:13                  0 (const int)
+0:13              Constant:
+0:13                1 (const int)
 0:13          move second child to first child (temp 2-component vector of uint)
 0:?             'coord' (layout(location=2 ) out 2-component vector of uint)
 0:13            coord: direct index for structure (temp 2-component vector of uint)
@@ -122,45 +140,55 @@
 0:13                2 (const int)
 0:13        Branch: Return
 0:?   Linker Objects
-0:?     'm' (layout(location=0 ) out 2-element array of 4-component vector of float)
+0:?     'm[0]' (layout(location=0 ) out 4-component vector of float)
+0:?     'm[1]' (layout(location=1 ) out 4-component vector of float)
 0:?     'coord' (layout(location=2 ) out 2-component vector of uint)
 0:?     'b' (layout(location=3 ) smooth out 4-component vector of float)
 0:?     'd' (layout(location=0 ) in 4-component vector of float)
-0:?     'm' (layout(location=1 ) in 2-element array of 4-component vector of float)
+0:?     'm[0]' (layout(location=1 ) in 4-component vector of float)
+0:?     'm[1]' (layout(location=2 ) in 4-component vector of float)
 0:?     'coord' (layout(location=3 ) in 2-component vector of uint)
 0:?     'b' (layout(location=4 ) in 4-component vector of float)
 0:?     'e' (layout(location=5 ) in 4-component vector of float)
+0:?     'm[0]' (layout(location=0 ) out 4-component vector of float)
+0:?     'm[1]' (layout(location=1 ) out 4-component vector of float)
+0:?     'm[0]' (layout(location=1 ) in 4-component vector of float)
+0:?     'm[1]' (layout(location=2 ) in 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 60
+// Id's are bound by 59
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 4  "main" 18 28 36 39 45 50 55 59
+                              EntryPoint Vertex 4  "main" 18 20 24 32 35 41 45 50 54 58
                               Name 4  "main"
                               Name 12  "VI"
                               MemberName 12(VI) 0  "m"
                               MemberName 12(VI) 1  "coord"
                               MemberName 12(VI) 2  "b"
                               Name 14  "local"
-                              Name 18  "m"
-                              Name 28  "coord"
-                              Name 36  "d"
-                              Name 39  "e"
-                              Name 45  "m"
+                              Name 18  "m[1]"
+                              Name 20  "m[0]"
+                              Name 24  "coord"
+                              Name 32  "d"
+                              Name 35  "e"
+                              Name 41  "m[0]"
+                              Name 45  "m[1]"
                               Name 50  "coord"
-                              Name 55  "b"
-                              Name 59  "b"
-                              Decorate 18(m) Location 1
-                              Decorate 28(coord) Location 3
-                              Decorate 36(d) Location 0
-                              Decorate 39(e) Location 5
-                              Decorate 45(m) Location 0
+                              Name 54  "b"
+                              Name 58  "b"
+                              Decorate 18(m[1]) Location 2
+                              Decorate 20(m[0]) Location 1
+                              Decorate 24(coord) Location 3
+                              Decorate 32(d) Location 0
+                              Decorate 35(e) Location 5
+                              Decorate 41(m[0]) Location 0
+                              Decorate 45(m[1]) Location 1
                               Decorate 50(coord) Location 2
-                              Decorate 55(b) Location 3
-                              Decorate 59(b) Location 4
+                              Decorate 54(b) Location 3
+                              Decorate 58(b) Location 4
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -173,54 +201,54 @@
               13:             TypePointer Function 12(VI)
               15:             TypeInt 32 1
               16:     15(int) Constant 2
-              17:             TypePointer Input 10
-           18(m):     17(ptr) Variable Input
-              19:     15(int) Constant 1
-              20:             TypePointer Input 7(fvec4)
-              23:     15(int) Constant 0
-              27:             TypePointer Input 11(ivec2)
-       28(coord):     27(ptr) Variable Input
-              29:      8(int) Constant 0
-              30:             TypePointer Input 8(int)
-           36(d):     20(ptr) Variable Input
-           39(e):     20(ptr) Variable Input
-              42:             TypePointer Function 7(fvec4)
-              44:             TypePointer Output 10
-           45(m):     44(ptr) Variable Output
-              46:             TypePointer Function 10
+              17:             TypePointer Input 7(fvec4)
+        18(m[1]):     17(ptr) Variable Input
+        20(m[0]):     17(ptr) Variable Input
+              23:             TypePointer Input 11(ivec2)
+       24(coord):     23(ptr) Variable Input
+              25:      8(int) Constant 0
+              26:             TypePointer Input 8(int)
+           32(d):     17(ptr) Variable Input
+           35(e):     17(ptr) Variable Input
+              38:             TypePointer Function 7(fvec4)
+              40:             TypePointer Output 7(fvec4)
+        41(m[0]):     40(ptr) Variable Output
+              42:     15(int) Constant 0
+        45(m[1]):     40(ptr) Variable Output
+              46:     15(int) Constant 1
               49:             TypePointer Output 11(ivec2)
        50(coord):     49(ptr) Variable Output
               51:             TypePointer Function 11(ivec2)
-              54:             TypePointer Output 7(fvec4)
-           55(b):     54(ptr) Variable Output
-           59(b):     20(ptr) Variable Input
+           54(b):     40(ptr) Variable Output
+           58(b):     17(ptr) Variable Input
          4(main):           2 Function None 3
                5:             Label
        14(local):     13(ptr) Variable Function
-              21:     20(ptr) AccessChain 18(m) 19
-              22:    7(fvec4) Load 21
-              24:     20(ptr) AccessChain 18(m) 23
-              25:    7(fvec4) Load 24
-              26:    7(fvec4) FAdd 22 25
-              31:     30(ptr) AccessChain 28(coord) 29
-              32:      8(int) Load 31
-              33:    6(float) ConvertUToF 32
-              34:    7(fvec4) CompositeConstruct 33 33 33 33
-              35:    7(fvec4) FAdd 26 34
-              37:    7(fvec4) Load 36(d)
-              38:    7(fvec4) FAdd 35 37
-              40:    7(fvec4) Load 39(e)
-              41:    7(fvec4) FAdd 38 40
-              43:     42(ptr) AccessChain 14(local) 16
-                              Store 43 41
-              47:     46(ptr) AccessChain 14(local) 23
-              48:          10 Load 47
-                              Store 45(m) 48
-              52:     51(ptr) AccessChain 14(local) 19
+              19:    7(fvec4) Load 18(m[1])
+              21:    7(fvec4) Load 20(m[0])
+              22:    7(fvec4) FAdd 19 21
+              27:     26(ptr) AccessChain 24(coord) 25
+              28:      8(int) Load 27
+              29:    6(float) ConvertUToF 28
+              30:    7(fvec4) CompositeConstruct 29 29 29 29
+              31:    7(fvec4) FAdd 22 30
+              33:    7(fvec4) Load 32(d)
+              34:    7(fvec4) FAdd 31 33
+              36:    7(fvec4) Load 35(e)
+              37:    7(fvec4) FAdd 34 36
+              39:     38(ptr) AccessChain 14(local) 16
+                              Store 39 37
+              43:     38(ptr) AccessChain 14(local) 42 42
+              44:    7(fvec4) Load 43
+                              Store 41(m[0]) 44
+              47:     38(ptr) AccessChain 14(local) 42 46
+              48:    7(fvec4) Load 47
+                              Store 45(m[1]) 48
+              52:     51(ptr) AccessChain 14(local) 46
               53:   11(ivec2) Load 52
                               Store 50(coord) 53
-              56:     42(ptr) AccessChain 14(local) 16
-              57:    7(fvec4) Load 56
-                              Store 55(b) 57
+              55:     38(ptr) AccessChain 14(local) 16
+              56:    7(fvec4) Load 55
+                              Store 54(b) 56
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/lineContinuation.vert.out b/Test/baseResults/lineContinuation.vert.out
index 78e5c07..d91ffa3 100644
--- a/Test/baseResults/lineContinuation.vert.out
+++ b/Test/baseResults/lineContinuation.vert.out
@@ -176,16 +176,6 @@
 0:20        'gl_Position' (gl_Position highp 4-component vector of float Position)
 0:20        Construct vec4 (temp highp 4-component vector of float)
 0:20          'foo' (global highp float)
-0:22  Function Definition: foo2(vf4; (global highp 4-component vector of float)
-0:22    Function Parameters: 
-0:22      'a' (in highp 4-component vector of float)
-0:24    Sequence
-0:24      Sequence
-0:24        move second child to first child (temp highp 4-component vector of float)
-0:24          'b' (temp highp 4-component vector of float)
-0:24          'a' (in highp 4-component vector of float)
-0:25      Branch: Return with expression
-0:25        'b' (temp highp 4-component vector of float)
 0:47  Sequence
 0:47    move second child to first child (temp highp int)
 0:47      'q1' (global highp int)
@@ -256,25 +246,6 @@
 0:123      'bar107' (global highp int)
 0:128      Constant:
 0:128        5 (const int)
-0:131  Function Definition: foo203209409( (global void)
-0:131    Function Parameters: 
-0:134    Sequence
-0:134      add second child into first child (temp highp int)
-0:133        'bar107' (global highp int)
-0:134        Constant:
-0:134          37 (const int)
-0:135      multiply second child into first child (temp highp int)
-0:135        'bar107' (global highp int)
-0:136        Constant:
-0:136          38 (const int)
-0:137      divide second child into first child (temp highp int)
-0:137        'bar107' (global highp int)
-0:138        Constant:
-0:138          39 (const int)
-0:139      add (temp highp int)
-0:139        'bar107' (global highp int)
-0:140        Constant:
-0:140          41 (const int)
 0:?   Linker Objects
 0:?     'foo' (global highp float)
 0:?     'goodDecl' (global highp int)
diff --git a/Test/baseResults/lineContinuation100.vert.out b/Test/baseResults/lineContinuation100.vert.out
index 003637d..1fb309b 100644
--- a/Test/baseResults/lineContinuation100.vert.out
+++ b/Test/baseResults/lineContinuation100.vert.out
@@ -90,16 +90,6 @@
 0:20        'gl_Position' (gl_Position highp 4-component vector of float Position)
 0:20        Construct vec4 (temp highp 4-component vector of float)
 0:20          'foo' (global highp float)
-0:22  Function Definition: foo2(vf4; (global highp 4-component vector of float)
-0:22    Function Parameters: 
-0:22      'a' (in highp 4-component vector of float)
-0:24    Sequence
-0:24      Sequence
-0:24        move second child to first child (temp highp 4-component vector of float)
-0:24          'b' (temp highp 4-component vector of float)
-0:24          'a' (in highp 4-component vector of float)
-0:25      Branch: Return with expression
-0:25        'b' (temp highp 4-component vector of float)
 0:45  Sequence
 0:45    move second child to first child (temp highp int)
 0:45      'q1' (global highp int)
diff --git a/Test/baseResults/mains1.frag.out b/Test/baseResults/mains1.frag.out
index 0b5c2b7..95e98e4 100644
--- a/Test/baseResults/mains1.frag.out
+++ b/Test/baseResults/mains1.frag.out
@@ -48,6 +48,7 @@
 
 Linked fragment stage:
 
+ERROR: Linking fragment stage: can't handle multiple entry points per stage
 ERROR: Linking fragment stage: Multiple function bodies in multiple compilation units for the same signature in the same stage:
     main(
 
@@ -57,10 +58,6 @@
 input primitive = none
 output primitive = points
 ERROR: node is still EOpNull!
-0:3  Function Definition: foo( (global void)
-0:3    Function Parameters: 
-0:3  Function Definition: bar( (global void)
-0:3    Function Parameters: 
 0:?   Linker Objects
 Shader version: 110
 0:? Sequence
diff --git a/Test/baseResults/missingBodies.vert.out b/Test/baseResults/missingBodies.vert.out
new file mode 100755
index 0000000..6d77e09
--- /dev/null
+++ b/Test/baseResults/missingBodies.vert.out
@@ -0,0 +1,98 @@
+missingBodies.vert
+Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
+
+Shader version: 450
+0:? Sequence
+0:4  Function Definition: foo( (global void)
+0:4    Function Parameters: 
+0:4    Sequence
+0:4      Function Call: bar( (global void)
+0:8  Function Definition: C(i1;i1; (global void)
+0:8    Function Parameters: 
+0:8      '' (in int)
+0:8      '' (in int)
+0:10  Function Definition: A( (global void)
+0:10    Function Parameters: 
+0:10    Sequence
+0:10      Function Call: B( (global void)
+0:10      Function Call: C(i1; (global void)
+0:10        Constant:
+0:10          1 (const int)
+0:10      Function Call: C(b1; (global void)
+0:10        Constant:
+0:10          true (const bool)
+0:10      Function Call: C(i1;i1; (global void)
+0:10        Constant:
+0:10          1 (const int)
+0:10        Constant:
+0:10          2 (const int)
+0:12  Function Definition: main( (global void)
+0:12    Function Parameters: 
+0:14    Sequence
+0:14      Function Call: foo( (global void)
+0:15      Function Call: C(b1; (global void)
+0:15        Constant:
+0:15          true (const bool)
+0:20  Sequence
+0:20    move second child to first child (temp int)
+0:20      'f1' (global int)
+0:20      Function Call: ret1( (global int)
+0:22  Function Definition: ret2( (global int)
+0:22    Function Parameters: 
+0:22    Sequence
+0:22      Branch: Return with expression
+0:22        Constant:
+0:22          3 (const int)
+0:24  Sequence
+0:24    move second child to first child (temp int)
+0:24      'f2' (global int)
+0:24      Function Call: ret2( (global int)
+0:?   Linker Objects
+0:?     'f1' (global int)
+0:?     'f2' (global int)
+0:?     'gl_VertexID' (gl_VertexId int VertexId)
+0:?     'gl_InstanceID' (gl_InstanceId int InstanceId)
+
+
+Linked vertex stage:
+
+ERROR: Linking vertex stage: No function definition (body) found: 
+    ret1(
+ERROR: Linking vertex stage: No function definition (body) found: 
+    C(b1;
+ERROR: Linking vertex stage: No function definition (body) found: 
+    bar(
+
+Shader version: 450
+0:? Sequence
+0:4  Function Definition: foo( (global void)
+0:4    Function Parameters: 
+0:4    Sequence
+0:4      Function Call: bar( (global void)
+0:12  Function Definition: main( (global void)
+0:12    Function Parameters: 
+0:14    Sequence
+0:14      Function Call: foo( (global void)
+0:15      Function Call: C(b1; (global void)
+0:15        Constant:
+0:15          true (const bool)
+0:20  Sequence
+0:20    move second child to first child (temp int)
+0:20      'f1' (global int)
+0:20      Function Call: ret1( (global int)
+0:22  Function Definition: ret2( (global int)
+0:22    Function Parameters: 
+0:22    Sequence
+0:22      Branch: Return with expression
+0:22        Constant:
+0:22          3 (const int)
+0:24  Sequence
+0:24    move second child to first child (temp int)
+0:24      'f2' (global int)
+0:24      Function Call: ret2( (global int)
+0:?   Linker Objects
+0:?     'f1' (global int)
+0:?     'f2' (global int)
+0:?     'gl_VertexID' (gl_VertexId int VertexId)
+0:?     'gl_InstanceID' (gl_InstanceId int InstanceId)
+
diff --git a/Test/baseResults/noMain.vert.out b/Test/baseResults/noMain.vert.out
index 80a3225..60ac3a3 100644
--- a/Test/baseResults/noMain.vert.out
+++ b/Test/baseResults/noMain.vert.out
@@ -30,8 +30,6 @@
 
 Shader version: 300
 0:? Sequence
-0:3  Function Definition: foo( (global void)
-0:3    Function Parameters: 
 0:?   Linker Objects
 0:?     'gl_VertexID' (gl_VertexId highp int VertexId)
 0:?     'gl_InstanceID' (gl_InstanceId highp int InstanceId)
diff --git a/Test/baseResults/precise.tesc.out b/Test/baseResults/precise.tesc.out
index 962a3c9..17c7d53 100644
--- a/Test/baseResults/precise.tesc.out
+++ b/Test/baseResults/precise.tesc.out
@@ -392,376 +392,6 @@
 Requested GL_EXT_tessellation_shader
 vertices = -1
 0:? Sequence
-0:5  Function Definition: minimal( (global float)
-0:5    Function Parameters: 
-0:6    Sequence
-0:6      Sequence
-0:6        move second child to first child (temp float)
-0:6          'result' (noContraction temp float)
-0:6          Constant:
-0:6            5.000000
-0:7      Sequence
-0:7        move second child to first child (temp float)
-0:7          'a' (noContraction temp float)
-0:7          Constant:
-0:7            10.000000
-0:8      Sequence
-0:8        move second child to first child (temp float)
-0:8          'b' (noContraction temp float)
-0:8          Constant:
-0:8            20.000000
-0:9      Sequence
-0:9        move second child to first child (temp float)
-0:9          'c' (noContraction temp float)
-0:9          Constant:
-0:9            30.000000
-0:10      Sequence
-0:10        move second child to first child (temp float)
-0:10          'd' (noContraction temp float)
-0:10          Constant:
-0:10            40.000000
-0:11      move second child to first child (temp float)
-0:11        'result' (noContraction temp float)
-0:11        add (noContraction temp float)
-0:11          component-wise multiply (noContraction temp float)
-0:11            'a' (noContraction temp float)
-0:11            'b' (noContraction temp float)
-0:11          component-wise multiply (noContraction temp float)
-0:11            'c' (noContraction temp float)
-0:11            'd' (noContraction temp float)
-0:12      Branch: Return with expression
-0:12        'result' (noContraction temp float)
-0:15  Function Definition: continuous_assignment( (global void)
-0:15    Function Parameters: 
-0:16    Sequence
-0:16      Sequence
-0:16        move second child to first child (temp float)
-0:16          'result' (noContraction temp float)
-0:16          Constant:
-0:16            5.000000
-0:17      Sequence
-0:17        move second child to first child (temp float)
-0:17          'a' (noContraction temp float)
-0:17          Constant:
-0:17            10.000000
-0:18      Sequence
-0:18        move second child to first child (temp float)
-0:18          'b' (noContraction temp float)
-0:18          Constant:
-0:18            20.000000
-0:19      move second child to first child (temp float)
-0:19        'result' (noContraction temp float)
-0:19        move second child to first child (temp float)
-0:19          'a' (noContraction temp float)
-0:19          add (noContraction temp float)
-0:19            'b' (noContraction temp float)
-0:19            Constant:
-0:19              4.000000
-0:22  Function Definition: convert( (global void)
-0:22    Function Parameters: 
-0:?     Sequence
-0:24      Sequence
-0:24        move second child to first child (temp float)
-0:24          'a' (noContraction temp float)
-0:24          Constant:
-0:24            10.000000
-0:25      Sequence
-0:25        move second child to first child (temp float)
-0:25          'b' (noContraction temp float)
-0:25          Constant:
-0:25            20.000000
-0:26      move second child to first child (temp float)
-0:26        'b' (noContraction temp float)
-0:26        add (noContraction temp float)
-0:26          'a' (noContraction temp float)
-0:26          'b' (noContraction temp float)
-0:27      move second child to first child (temp double)
-0:27        'result' (noContraction temp double)
-0:27        Convert float to double (temp double)
-0:27          'b' (noContraction temp float)
-0:30  Function Definition: loop_for( (global float)
-0:30    Function Parameters: 
-0:31    Sequence
-0:31      Sequence
-0:31        move second child to first child (temp float)
-0:31          'r1' (noContraction temp float)
-0:31          Constant:
-0:31            5.000000
-0:32      Sequence
-0:32        move second child to first child (temp float)
-0:32          'r2' (noContraction temp float)
-0:32          Constant:
-0:32            10.000000
-0:33      Sequence
-0:33        move second child to first child (temp int)
-0:33          'a' (temp int)
-0:33          Constant:
-0:33            10 (const int)
-0:34      Sequence
-0:34        move second child to first child (temp int)
-0:34          'b' (noContraction temp int)
-0:34          Constant:
-0:34            20 (const int)
-0:35      Sequence
-0:35        move second child to first child (temp int)
-0:35          'c' (noContraction temp int)
-0:35          Constant:
-0:35            30 (const int)
-0:36      Sequence
-0:36        Sequence
-0:36          move second child to first child (temp int)
-0:36            'i' (noContraction temp int)
-0:36            Constant:
-0:36              0 (const int)
-0:36        Loop with condition tested first
-0:36          Loop Condition
-0:36          Compare Less Than (temp bool)
-0:36            'i' (temp int)
-0:36            'a' (temp int)
-0:36          Loop Body
-0:37          Sequence
-0:37            add second child into first child (noContraction temp float)
-0:37              'r1' (noContraction temp float)
-0:37              add (noContraction temp float)
-0:37                add (noContraction temp float)
-0:37                  Constant:
-0:37                    3.120000
-0:37                  Convert int to float (temp float)
-0:37                    'b' (noContraction temp int)
-0:37                Convert int to float (temp float)
-0:37                  'i' (noContraction temp int)
-0:38            add second child into first child (noContraction temp int)
-0:38              'c' (noContraction temp int)
-0:38              Constant:
-0:38                1 (const int)
-0:36          Loop Terminal Expression
-0:36          Post-Increment (noContraction temp int)
-0:36            'i' (noContraction temp int)
-0:40      add second child into first child (temp int)
-0:40        'a' (temp int)
-0:40        Constant:
-0:40          1 (const int)
-0:41      move second child to first child (temp float)
-0:41        'r2' (noContraction temp float)
-0:41        Convert int to float (temp float)
-0:41          'c' (noContraction temp int)
-0:42      Branch: Return with expression
-0:42        Construct float (temp float)
-0:42          add (temp float)
-0:42            'r1' (noContraction temp float)
-0:42            'r2' (noContraction temp float)
-0:45  Function Definition: loop_array( (global void)
-0:45    Function Parameters: 
-0:?     Sequence
-0:48      Sequence
-0:48        move second child to first child (temp int)
-0:48          'x' (noContraction temp int)
-0:48          Constant:
-0:48            22 (const int)
-0:49      Sequence
-0:49        move second child to first child (temp int)
-0:49          'y' (noContraction temp int)
-0:49          Constant:
-0:49            33 (const int)
-0:52      add second child into first child (noContraction temp float)
-0:52        'result' (noContraction temp float)
-0:52        add (noContraction temp float)
-0:52          Convert int to float (temp float)
-0:52            'x' (noContraction temp int)
-0:52          Convert int to float (temp float)
-0:52            'y' (noContraction temp int)
-0:54      Sequence
-0:54        Sequence
-0:54          move second child to first child (temp int)
-0:54            'i' (temp int)
-0:54            Constant:
-0:54              0 (const int)
-0:54        Loop with condition tested first
-0:54          Loop Condition
-0:54          Compare Less Than (temp bool)
-0:54            'i' (temp int)
-0:54            Constant:
-0:54              3 (const int)
-0:54          Loop Body
-0:56          Sequence
-0:56            add second child into first child (noContraction temp float)
-0:56              'result' (noContraction temp float)
-0:56              add (noContraction temp float)
-0:56                indirect index (noContraction temp float)
-0:56                  'a0' (temp 3-element array of float)
-0:56                  'i' (temp int)
-0:56                Constant:
-0:56                  2.000000
-0:58            move second child to first child (temp float)
-0:58              indirect index (noContraction temp float)
-0:58                'a0' (noContraction temp 3-element array of float)
-0:58                'i' (temp int)
-0:58              subtract (noContraction temp float)
-0:58                Constant:
-0:58                  3.000000
-0:58                Post-Increment (noContraction temp float)
-0:58                  'result' (noContraction temp float)
-0:54          Loop Terminal Expression
-0:54          Pre-Increment (temp int)
-0:54            'i' (temp int)
-0:62  Function Definition: loop_while( (global void)
-0:62    Function Parameters: 
-0:63    Sequence
-0:63      Sequence
-0:63        move second child to first child (temp float)
-0:63          'result' (noContraction temp float)
-0:63          Constant:
-0:63            5.000000
-0:64      Sequence
-0:64        move second child to first child (temp int)
-0:64          'a' (noContraction temp int)
-0:64          Constant:
-0:64            10 (const int)
-0:65      Sequence
-0:65        move second child to first child (temp int)
-0:65          'b' (noContraction temp int)
-0:65          Constant:
-0:65            20 (const int)
-0:66      Loop with condition tested first
-0:66        Loop Condition
-0:66        Compare Less Than (temp bool)
-0:66          'result' (noContraction temp float)
-0:66          Constant:
-0:66            10.000000
-0:66        Loop Body
-0:67        Sequence
-0:67          add second child into first child (noContraction temp float)
-0:67            'result' (noContraction temp float)
-0:67            add (noContraction temp float)
-0:67              Constant:
-0:67                3.120000
-0:67              Convert int to float (temp float)
-0:67                'b' (noContraction temp int)
-0:69      move second child to first child (temp float)
-0:69        'result' (noContraction temp float)
-0:69        Convert int to float (temp float)
-0:69          add (temp int)
-0:69            add (temp int)
-0:69              'a' (noContraction temp int)
-0:69              'b' (noContraction temp int)
-0:69            Constant:
-0:69              5 (const int)
-0:70      move second child to first child (temp float)
-0:70        'result' (noContraction temp float)
-0:70        Constant:
-0:70          11.100000
-0:73  Function Definition: fma_not_decorated( (global float)
-0:73    Function Parameters: 
-0:?     Sequence
-0:75      Sequence
-0:75        move second child to first child (temp float)
-0:75          'a' (noContraction temp float)
-0:75          Constant:
-0:75            1.000000
-0:76      Sequence
-0:76        move second child to first child (temp float)
-0:76          'b' (noContraction temp float)
-0:76          Constant:
-0:76            2.000000
-0:77      Sequence
-0:77        move second child to first child (temp float)
-0:77          'c' (noContraction temp float)
-0:77          Constant:
-0:77            3.000000
-0:78      move second child to first child (temp float)
-0:78        'b' (noContraction temp float)
-0:78        add (noContraction temp float)
-0:78          'b' (noContraction temp float)
-0:78          'c' (noContraction temp float)
-0:79      move second child to first child (temp float)
-0:79        'result' (noContraction temp float)
-0:79        fma (global float)
-0:79          'a' (noContraction temp float)
-0:79          'b' (noContraction temp float)
-0:79          'c' (noContraction temp float)
-0:80      Branch: Return with expression
-0:80        'result' (noContraction temp float)
-0:83  Function Definition: precise_return_exp_func( (noContraction temp float)
-0:83    Function Parameters: 
-0:84    Sequence
-0:84      Sequence
-0:84        move second child to first child (temp float)
-0:84          'a' (noContraction temp float)
-0:84          Constant:
-0:84            1.000000
-0:85      Sequence
-0:85        move second child to first child (temp float)
-0:85          'b' (noContraction temp float)
-0:85          Constant:
-0:85            2.000000
-0:86      Branch: Return with expression
-0:86        add (noContraction temp float)
-0:86          'a' (noContraction temp float)
-0:86          'b' (noContraction temp float)
-0:89  Function Definition: precise_return_val_func( (noContraction temp float)
-0:89    Function Parameters: 
-0:90    Sequence
-0:90      Sequence
-0:90        move second child to first child (temp float)
-0:90          'a' (noContraction temp float)
-0:90          Constant:
-0:90            1.000000
-0:91      Sequence
-0:91        move second child to first child (temp float)
-0:91          'b' (noContraction temp float)
-0:91          Constant:
-0:91            2.000000
-0:92      Sequence
-0:92        move second child to first child (temp float)
-0:92          'result' (noContraction temp float)
-0:92          add (noContraction temp float)
-0:92            'a' (noContraction temp float)
-0:92            'b' (noContraction temp float)
-0:93      Branch: Return with expression
-0:93        'result' (noContraction temp float)
-0:96  Function Definition: precise_func_parameter(f1;f1; (global float)
-0:96    Function Parameters: 
-0:96      'b' (in float)
-0:96      'c' (noContraction out float)
-0:97    Sequence
-0:97      Sequence
-0:97        move second child to first child (temp float)
-0:97          'a' (noContraction temp float)
-0:97          Constant:
-0:97            0.500000
-0:98      move second child to first child (temp float)
-0:98        'c' (noContraction out float)
-0:98        add (noContraction temp float)
-0:98          'a' (noContraction temp float)
-0:98          'b' (noContraction in float)
-0:99      Branch: Return with expression
-0:99        subtract (temp float)
-0:99          'a' (temp float)
-0:99          'b' (in float)
-0:102  Function Definition: matrix(mf23;mf32; (global 3X3 matrix of float)
-0:102    Function Parameters: 
-0:102      'a' (in 2X3 matrix of float)
-0:102      'b' (in 3X2 matrix of float)
-0:103    Sequence
-0:103      Sequence
-0:103        move second child to first child (temp 2X3 matrix of float)
-0:103          'c' (noContraction temp 2X3 matrix of float)
-0:103          Constant:
-0:103            1.000000
-0:103            2.000000
-0:103            3.000000
-0:103            4.000000
-0:103            5.000000
-0:103            6.000000
-0:105      move second child to first child (temp 3X3 matrix of float)
-0:105        'result' (noContraction temp 3X3 matrix of float)
-0:105        matrix-multiply (noContraction temp 3X3 matrix of float)
-0:105          add (noContraction temp 2X3 matrix of float)
-0:105            'a' (noContraction in 2X3 matrix of float)
-0:105            'c' (noContraction temp 2X3 matrix of float)
-0:105          'b' (noContraction in 3X2 matrix of float)
-0:106      Branch: Return with expression
-0:106        'result' (noContraction temp 3X3 matrix of float)
 0:109  Function Definition: main( (global void)
 0:109    Function Parameters: 
 0:?   Linker Objects
diff --git a/Test/baseResults/precise_struct_block.vert.out b/Test/baseResults/precise_struct_block.vert.out
index 9d726d6..e40fd0c 100644
--- a/Test/baseResults/precise_struct_block.vert.out
+++ b/Test/baseResults/precise_struct_block.vert.out
@@ -526,515 +526,6 @@
 
 Shader version: 450
 0:? Sequence
-0:11  Function Definition: struct_member( (global float)
-0:11    Function Parameters: 
-0:12    Sequence
-0:12      Sequence
-0:12        move second child to first child (temp float)
-0:12          'a' (noContraction temp float)
-0:12          Constant:
-0:12            1.000000
-0:13      Sequence
-0:13        move second child to first child (temp float)
-0:13          'b' (temp float)
-0:13          Constant:
-0:13            2.000000
-0:14      Sequence
-0:14        move second child to first child (temp float)
-0:14          'c' (temp float)
-0:14          Constant:
-0:14            3.000000
-0:15      Sequence
-0:15        move second child to first child (temp float)
-0:15          'd' (temp float)
-0:15          Constant:
-0:15            4.000000
-0:21      move second child to first child (temp float)
-0:21        f1: direct index for structure (noContraction global float)
-0:21          'S2' (temp structure{global float f1, global float f2})
-0:21          Constant:
-0:21            0 (const int)
-0:21        add (noContraction temp float)
-0:21          'a' (noContraction temp float)
-0:21          Constant:
-0:21            0.200000
-0:22      move second child to first child (temp float)
-0:22        f2: direct index for structure (global float)
-0:22          'S2' (temp structure{global float f1, global float f2})
-0:22          Constant:
-0:22            1 (const int)
-0:22        add (temp float)
-0:22          'b' (temp float)
-0:22          Constant:
-0:22            0.200000
-0:23      move second child to first child (temp float)
-0:23        f1: direct index for structure (global float)
-0:23          'S3' (temp structure{global float f1, global float f2})
-0:23          Constant:
-0:23            0 (const int)
-0:23        add (temp float)
-0:23          'a' (temp float)
-0:23          'b' (temp float)
-0:24      move second child to first child (temp structure{global float f1, global float f2})
-0:24        'S' (temp structure{global float f1, global float f2})
-0:24        'S2' (temp structure{global float f1, global float f2})
-0:25      move second child to first child (temp float)
-0:25        'result' (noContraction temp float)
-0:25        add (noContraction temp float)
-0:25          f1: direct index for structure (noContraction global float)
-0:25            'S' (temp structure{global float f1, global float f2})
-0:25            Constant:
-0:25              0 (const int)
-0:25          Constant:
-0:25            0.100000
-0:27      Branch: Return with expression
-0:27        'result' (noContraction temp float)
-0:30  Function Definition: complex_array_struct( (global float)
-0:30    Function Parameters: 
-0:?     Sequence
-0:43      Sequence
-0:43        Sequence
-0:43          move second child to first child (temp int)
-0:43            'i' (noContraction temp int)
-0:43            Constant:
-0:43              0 (const int)
-0:43        Loop with condition tested first
-0:43          Loop Condition
-0:43          Compare Less Than (temp bool)
-0:43            'i' (temp int)
-0:43            Constant:
-0:43              10 (const int)
-0:43          Loop Body
-0:44          Sequence
-0:44            move second child to first child (temp float)
-0:44              f: direct index for structure (temp float)
-0:44                indirect index (temp structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:44                  't3' (temp 10-element array of structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:44                  'i' (temp int)
-0:44                Constant:
-0:44                  0 (const int)
-0:44              divide (temp float)
-0:44                Convert int to float (temp float)
-0:44                  'i' (temp int)
-0:44                Constant:
-0:44                  3.000000
-0:45            move second child to first child (temp 4-component vector of float)
-0:45              v: direct index for structure (noContraction temp 4-component vector of float)
-0:45                indirect index (temp structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:45                  't3' (temp 10-element array of structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:45                  'i' (temp int)
-0:45                Constant:
-0:45                  2 (const int)
-0:45              Construct vec4 (temp 4-component vector of float)
-0:45                component-wise multiply (noContraction temp float)
-0:45                  Convert int to float (temp float)
-0:45                    'i' (noContraction temp int)
-0:45                  Constant:
-0:45                    1.500000
-0:46            move second child to first child (temp int)
-0:46              p: direct index for structure (temp int)
-0:46                indirect index (temp structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:46                  't3' (temp 10-element array of structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:46                  'i' (temp int)
-0:46                Constant:
-0:46                  3 (const int)
-0:46              add (temp int)
-0:46                'i' (temp int)
-0:46                Constant:
-0:46                  1 (const int)
-0:47            Sequence
-0:47              Sequence
-0:47                move second child to first child (temp int)
-0:47                  'j' (temp int)
-0:47                  Constant:
-0:47                    0 (const int)
-0:47              Loop with condition tested first
-0:47                Loop Condition
-0:47                Compare Less Than (temp bool)
-0:47                  'j' (temp int)
-0:47                  Constant:
-0:47                    5 (const int)
-0:47                Loop Body
-0:48                Sequence
-0:48                  Sequence
-0:48                    Sequence
-0:48                      move second child to first child (temp int)
-0:48                        'k' (temp int)
-0:48                        Constant:
-0:48                          0 (const int)
-0:48                    Loop with condition tested first
-0:48                      Loop Condition
-0:48                      Compare Less Than (temp bool)
-0:48                        'k' (temp int)
-0:48                        Constant:
-0:48                          3 (const int)
-0:48                      Loop Body
-0:49                      Sequence
-0:49                        move second child to first child (temp float)
-0:49                          indirect index (temp float)
-0:49                            t1_array: direct index for structure (temp 3-element array of float)
-0:49                              indirect index (temp structure{temp 3-element array of float t1_array, temp float t1_scalar})
-0:49                                t1a: direct index for structure (temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar})
-0:49                                  t2: direct index for structure (temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c})
-0:49                                    indirect index (temp structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:49                                      't3' (temp 10-element array of structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:49                                      'i' (temp int)
-0:49                                    Constant:
-0:49                                      1 (const int)
-0:49                                  Constant:
-0:49                                    0 (const int)
-0:49                                'j' (temp int)
-0:49                              Constant:
-0:49                                0 (const int)
-0:49                            'k' (temp int)
-0:49                          Convert int to float (temp float)
-0:49                            add (temp int)
-0:49                              component-wise multiply (temp int)
-0:49                                'i' (temp int)
-0:49                                'j' (temp int)
-0:49                              'k' (temp int)
-0:48                      Loop Terminal Expression
-0:48                      Post-Increment (temp int)
-0:48                        'k' (temp int)
-0:51                  move second child to first child (temp float)
-0:51                    t1_scalar: direct index for structure (temp float)
-0:51                      indirect index (temp structure{temp 3-element array of float t1_array, temp float t1_scalar})
-0:51                        t1a: direct index for structure (temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar})
-0:51                          t2: direct index for structure (temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c})
-0:51                            indirect index (temp structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:51                              't3' (temp 10-element array of structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:51                              'i' (temp int)
-0:51                            Constant:
-0:51                              1 (const int)
-0:51                          Constant:
-0:51                            0 (const int)
-0:51                        'j' (temp int)
-0:51                      Constant:
-0:51                        1 (const int)
-0:51                    divide (temp float)
-0:51                      component-wise multiply (temp float)
-0:51                        Convert int to float (temp float)
-0:51                          'j' (temp int)
-0:51                        Constant:
-0:51                          2.000000
-0:51                      Convert int to float (temp float)
-0:51                        'i' (temp int)
-0:47                Loop Terminal Expression
-0:47                Post-Increment (temp int)
-0:47                  'j' (temp int)
-0:54            Sequence
-0:54              Sequence
-0:54                move second child to first child (temp int)
-0:54                  'j' (noContraction temp int)
-0:54                  Constant:
-0:54                    0 (const int)
-0:54              Loop with condition tested first
-0:54                Loop Condition
-0:54                Compare Less Than (temp bool)
-0:54                  'j' (temp int)
-0:54                  Constant:
-0:54                    6 (const int)
-0:54                Loop Body
-0:55                Sequence
-0:55                  Sequence
-0:55                    Sequence
-0:55                      move second child to first child (temp int)
-0:55                        'k' (temp int)
-0:55                        Constant:
-0:55                          0 (const int)
-0:55                    Loop with condition tested first
-0:55                      Loop Condition
-0:55                      Compare Less Than (temp bool)
-0:55                        'k' (temp int)
-0:55                        Constant:
-0:55                          3 (const int)
-0:55                      Loop Body
-0:56                      Sequence
-0:56                        move second child to first child (temp float)
-0:56                          indirect index (temp float)
-0:56                            t1_array: direct index for structure (temp 3-element array of float)
-0:56                              indirect index (temp structure{temp 3-element array of float t1_array, temp float t1_scalar})
-0:56                                t1b: direct index for structure (temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar})
-0:56                                  t2: direct index for structure (temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c})
-0:56                                    indirect index (temp structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:56                                      't3' (temp 10-element array of structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:56                                      'i' (temp int)
-0:56                                    Constant:
-0:56                                      1 (const int)
-0:56                                  Constant:
-0:56                                    1 (const int)
-0:56                                'j' (temp int)
-0:56                              Constant:
-0:56                                0 (const int)
-0:56                            'k' (temp int)
-0:56                          Convert int to float (temp float)
-0:56                            add (temp int)
-0:56                              component-wise multiply (temp int)
-0:56                                'i' (temp int)
-0:56                                'j' (temp int)
-0:56                              'k' (temp int)
-0:55                      Loop Terminal Expression
-0:55                      Post-Increment (temp int)
-0:55                        'k' (temp int)
-0:58                  move second child to first child (temp float)
-0:58                    t1_scalar: direct index for structure (noContraction temp float)
-0:58                      indirect index (temp structure{temp 3-element array of float t1_array, temp float t1_scalar})
-0:58                        t1b: direct index for structure (temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar})
-0:58                          t2: direct index for structure (temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c})
-0:58                            indirect index (temp structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:58                              't3' (temp 10-element array of structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:58                              'i' (temp int)
-0:58                            Constant:
-0:58                              1 (const int)
-0:58                          Constant:
-0:58                            1 (const int)
-0:58                        'j' (temp int)
-0:58                      Constant:
-0:58                        1 (const int)
-0:58                    divide (noContraction temp float)
-0:58                      component-wise multiply (noContraction temp float)
-0:58                        Convert int to float (temp float)
-0:58                          'j' (noContraction temp int)
-0:58                        Constant:
-0:58                          2.000000
-0:58                      Convert int to float (temp float)
-0:58                        'i' (noContraction temp int)
-0:54                Loop Terminal Expression
-0:54                Post-Increment (noContraction temp int)
-0:54                  'j' (noContraction temp int)
-0:61            Sequence
-0:61              Sequence
-0:61                move second child to first child (temp int)
-0:61                  'j' (noContraction temp int)
-0:61                  Constant:
-0:61                    0 (const int)
-0:61              Loop with condition tested first
-0:61                Loop Condition
-0:61                Compare Less Than (temp bool)
-0:61                  'j' (temp int)
-0:61                  Constant:
-0:61                    6 (const int)
-0:61                Loop Body
-0:62                Sequence
-0:62                  Sequence
-0:62                    Sequence
-0:62                      move second child to first child (temp int)
-0:62                        'k' (noContraction temp int)
-0:62                        Constant:
-0:62                          0 (const int)
-0:62                    Loop with condition tested first
-0:62                      Loop Condition
-0:62                      Compare Less Than (temp bool)
-0:62                        'k' (temp int)
-0:62                        Constant:
-0:62                          3 (const int)
-0:62                      Loop Body
-0:63                      Sequence
-0:63                        move second child to first child (temp float)
-0:63                          indirect index (noContraction temp float)
-0:63                            t1_array: direct index for structure (noContraction temp 3-element array of float)
-0:63                              indirect index (temp structure{temp 3-element array of float t1_array, temp float t1_scalar})
-0:63                                t1c: direct index for structure (temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar})
-0:63                                  t2: direct index for structure (temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c})
-0:63                                    indirect index (temp structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:63                                      't3' (temp 10-element array of structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:63                                      'i' (temp int)
-0:63                                    Constant:
-0:63                                      1 (const int)
-0:63                                  Constant:
-0:63                                    2 (const int)
-0:63                                'j' (temp int)
-0:63                              Constant:
-0:63                                0 (const int)
-0:63                            'k' (temp int)
-0:63                          Convert int to float (temp float)
-0:63                            add (temp int)
-0:63                              component-wise multiply (temp int)
-0:63                                'i' (noContraction temp int)
-0:63                                'j' (noContraction temp int)
-0:63                              'k' (noContraction temp int)
-0:62                      Loop Terminal Expression
-0:62                      Post-Increment (noContraction temp int)
-0:62                        'k' (noContraction temp int)
-0:65                  move second child to first child (temp float)
-0:65                    t1_scalar: direct index for structure (temp float)
-0:65                      indirect index (temp structure{temp 3-element array of float t1_array, temp float t1_scalar})
-0:65                        t1c: direct index for structure (temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar})
-0:65                          t2: direct index for structure (temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c})
-0:65                            indirect index (temp structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:65                              't3' (temp 10-element array of structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:65                              'i' (temp int)
-0:65                            Constant:
-0:65                              1 (const int)
-0:65                          Constant:
-0:65                            2 (const int)
-0:65                        'j' (temp int)
-0:65                      Constant:
-0:65                        1 (const int)
-0:65                    divide (temp float)
-0:65                      component-wise multiply (temp float)
-0:65                        Convert int to float (temp float)
-0:65                          'j' (temp int)
-0:65                        Constant:
-0:65                          2.000000
-0:65                      Convert int to float (temp float)
-0:65                        'i' (temp int)
-0:61                Loop Terminal Expression
-0:61                Post-Increment (noContraction temp int)
-0:61                  'j' (noContraction temp int)
-0:43          Loop Terminal Expression
-0:43          Post-Increment (noContraction temp int)
-0:43            'i' (noContraction temp int)
-0:68      Sequence
-0:68        move second child to first child (temp int)
-0:68          'i' (temp int)
-0:68          Constant:
-0:68            2 (const int)
-0:69      move second child to first child (temp float)
-0:69        'result' (noContraction temp float)
-0:71        add (noContraction temp float)
-0:70          add (noContraction temp float)
-0:69            direct index (noContraction temp float)
-0:69              t1_array: direct index for structure (temp 3-element array of float)
-0:69                direct index (temp structure{temp 3-element array of float t1_array, temp float t1_scalar})
-0:69                  t1c: direct index for structure (temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar})
-0:69                    t2: direct index for structure (temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c})
-0:69                      direct index (temp structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:69                        't3' (temp 10-element array of structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:69                        Constant:
-0:69                          5 (const int)
-0:69                      Constant:
-0:69                        1 (const int)
-0:69                    Constant:
-0:69                      2 (const int)
-0:69                  Constant:
-0:69                    6 (const int)
-0:69                Constant:
-0:69                  0 (const int)
-0:69              Constant:
-0:69                1 (const int)
-0:70            t1_scalar: direct index for structure (noContraction temp float)
-0:70              direct index (temp structure{temp 3-element array of float t1_array, temp float t1_scalar})
-0:70                t1b: direct index for structure (temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar})
-0:70                  t2: direct index for structure (temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c})
-0:70                    direct index (temp structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:70                      't3' (temp 10-element array of structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:70                      Constant:
-0:70                        2 (const int)
-0:70                    Constant:
-0:70                      1 (const int)
-0:70                  Constant:
-0:70                    1 (const int)
-0:70                Constant:
-0:70                  1 (const int)
-0:70              Constant:
-0:70                1 (const int)
-0:71          direct index (noContraction temp float)
-0:71            vector swizzle (temp 2-component vector of float)
-0:71              v: direct index for structure (temp 4-component vector of float)
-0:71                indirect index (temp structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:71                  't3' (temp 10-element array of structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:71                  subtract (temp int)
-0:71                    'i' (temp int)
-0:71                    Constant:
-0:71                      1 (const int)
-0:71                Constant:
-0:71                  2 (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              0 (const int)
-0:72      Branch: Return with expression
-0:72        'result' (noContraction temp float)
-0:75  Function Definition: out_block( (global float)
-0:75    Function Parameters: 
-0:76    Sequence
-0:76      Sequence
-0:76        move second child to first child (temp float)
-0:76          'a' (noContraction temp float)
-0:76          Constant:
-0:76            0.100000
-0:77      Sequence
-0:77        move second child to first child (temp float)
-0:77          'b' (noContraction temp float)
-0:77          Constant:
-0:77            0.200000
-0:78      move second child to first child (temp float)
-0:78        f1: direct index for structure (noContraction global float)
-0:78          s: direct index for structure (noContraction out structure{global float f1, global float f2})
-0:78            'partial_precise_block' (out block{noContraction out structure{global float f1, global float f2} s, out float x})
-0:78            Constant:
-0:78              0 (const int)
-0:78          Constant:
-0:78            0 (const int)
-0:78        add (noContraction temp float)
-0:78          'a' (noContraction temp float)
-0:78          'b' (noContraction temp float)
-0:79      move second child to first child (temp float)
-0:79        f2: direct index for structure (noContraction global float)
-0:79          s: direct index for structure (noContraction out structure{global float f1, global float f2})
-0:79            'partial_precise_block' (out block{noContraction out structure{global float f1, global float f2} s, out float x})
-0:79            Constant:
-0:79              0 (const int)
-0:79          Constant:
-0:79            1 (const int)
-0:79        subtract (noContraction temp float)
-0:79          'a' (noContraction temp float)
-0:79          'b' (noContraction temp float)
-0:80      move second child to first child (temp float)
-0:80        x: direct index for structure (out float)
-0:80          'partial_precise_block' (out block{noContraction out structure{global float f1, global float f2} s, out float x})
-0:80          Constant:
-0:80            1 (const int)
-0:80        component-wise multiply (temp float)
-0:80          'a' (temp float)
-0:80          'b' (temp float)
-0:82      move second child to first child (temp float)
-0:82        f1: direct index for structure (noContraction global float)
-0:82          s: direct index for structure (noContraction out structure{global float f1, global float f2})
-0:82            'all_precise_block' (noContraction out block{out structure{global float f1, global float f2} s, out float x})
-0:82            Constant:
-0:82              0 (const int)
-0:82          Constant:
-0:82            0 (const int)
-0:82        add (noContraction temp float)
-0:82          add (noContraction temp float)
-0:82            'a' (noContraction temp float)
-0:82            'b' (noContraction temp float)
-0:82          Constant:
-0:82            1.000000
-0:83      move second child to first child (temp float)
-0:83        f2: direct index for structure (noContraction global float)
-0:83          s: direct index for structure (noContraction out structure{global float f1, global float f2})
-0:83            'all_precise_block' (noContraction out block{out structure{global float f1, global float f2} s, out float x})
-0:83            Constant:
-0:83              0 (const int)
-0:83          Constant:
-0:83            1 (const int)
-0:83        subtract (noContraction temp float)
-0:83          subtract (noContraction temp float)
-0:83            'a' (noContraction temp float)
-0:83            'b' (noContraction temp float)
-0:83          Constant:
-0:83            1.000000
-0:84      move second child to first child (temp float)
-0:84        x: direct index for structure (noContraction out float)
-0:84          'all_precise_block' (noContraction out block{out structure{global float f1, global float f2} s, out float x})
-0:84          Constant:
-0:84            1 (const int)
-0:84        component-wise multiply (noContraction temp float)
-0:84          component-wise multiply (noContraction temp float)
-0:84            'a' (noContraction temp float)
-0:84            'b' (noContraction temp float)
-0:84          Constant:
-0:84            2.000000
-0:86      Branch: Return with expression
-0:86        add (temp float)
-0:86          'a' (temp float)
-0:86          'b' (temp float)
 0:89  Function Definition: main( (global void)
 0:89    Function Parameters: 
 0:?   Linker Objects
diff --git a/Test/baseResults/precision.frag.out b/Test/baseResults/precision.frag.out
index 79485b4..5ab99e9 100644
--- a/Test/baseResults/precision.frag.out
+++ b/Test/baseResults/precision.frag.out
@@ -130,18 +130,6 @@
 
 Shader version: 100
 ERROR: node is still EOpNull!
-0:5  Function Definition: foo(vf3; (global lowp 2-component vector of float)
-0:5    Function Parameters: 
-0:5      'mv3' (in mediump 3-component vector of float)
-0:?     Sequence
-0:8      Branch: Return with expression
-0:8        vector swizzle (temp highp 2-component vector of float)
-0:8          'hv4' (temp highp 4-component vector of float)
-0:8          Sequence
-0:8            Constant:
-0:8              0 (const int)
-0:8            Constant:
-0:8              1 (const int)
 0:25  Function Definition: main( (global void)
 0:25    Function Parameters: 
 0:27    Sequence
diff --git a/Test/baseResults/recurse1.vert.out b/Test/baseResults/recurse1.vert.out
index c2ae014..4274eb3 100644
--- a/Test/baseResults/recurse1.vert.out
+++ b/Test/baseResults/recurse1.vert.out
@@ -218,66 +218,6 @@
 0:? Sequence
 0:3  Function Definition: main( (global void)
 0:3    Function Parameters: 
-0:9  Function Definition: self( (global void)
-0:9    Function Parameters: 
-0:11    Sequence
-0:11      Function Call: self( (global void)
-0:16  Function Definition: foo(f1; (global void)
-0:16    Function Parameters: 
-0:16      '' (in float)
-0:18    Sequence
-0:18      Function Call: bar(i1; (global float)
-0:18        Constant:
-0:18          2 (const int)
-0:21  Function Definition: bar(i1; (global float)
-0:21    Function Parameters: 
-0:21      '' (in int)
-0:23    Sequence
-0:23      Function Call: foo(f1; (global void)
-0:23        Constant:
-0:23          4.200000
-0:25      Branch: Return with expression
-0:25        Constant:
-0:25          3.200000
-0:32  Function Definition: A( (global void)
-0:32    Function Parameters: 
-0:32    Sequence
-0:32      Function Call: B( (global void)
-0:33  Function Definition: C( (global void)
-0:33    Function Parameters: 
-0:33    Sequence
-0:33      Function Call: D( (global void)
-0:34  Function Definition: B( (global void)
-0:34    Function Parameters: 
-0:34    Sequence
-0:34      Function Call: C( (global void)
-0:35  Function Definition: D( (global void)
-0:35    Function Parameters: 
-0:35    Sequence
-0:35      Function Call: A( (global void)
-0:41  Function Definition: AT( (global void)
-0:41    Function Parameters: 
-0:41    Sequence
-0:41      Function Call: BT( (global void)
-0:41      Function Call: BT( (global void)
-0:41      Function Call: BT( (global void)
-0:42  Function Definition: CT( (global void)
-0:42    Function Parameters: 
-0:42    Sequence
-0:42      Function Call: DT( (global void)
-0:42      Function Call: AT( (global void)
-0:42      Function Call: DT( (global void)
-0:42      Function Call: BT( (global void)
-0:43  Function Definition: BT( (global void)
-0:43    Function Parameters: 
-0:43    Sequence
-0:43      Function Call: CT( (global void)
-0:43      Function Call: CT( (global void)
-0:43      Function Call: CT( (global void)
-0:44  Function Definition: DT( (global void)
-0:44    Function Parameters: 
-0:44    Sequence
-0:44      Function Call: AT( (global void)
 0:?   Linker Objects
 0:?     'gl_VertexID' (gl_VertexId int VertexId)
 0:?     'gl_InstanceID' (gl_InstanceId int InstanceId)
@@ -285,113 +225,5 @@
 0:? Sequence
 0:5  Function Definition: main( (global void)
 0:5    Function Parameters: 
-0:11  Function Definition: cfoo(f1; (global void)
-0:11    Function Parameters: 
-0:11      '' (in float)
-0:13    Sequence
-0:13      Function Call: cbar(i1; (global float)
-0:13        Constant:
-0:13          2 (const int)
-0:20  Function Definition: CA( (global void)
-0:20    Function Parameters: 
-0:20    Sequence
-0:20      Function Call: CB( (global void)
-0:21  Function Definition: CC( (global void)
-0:21    Function Parameters: 
-0:21    Sequence
-0:21      Function Call: CD( (global void)
-0:27  Function Definition: CAT( (global void)
-0:27    Function Parameters: 
-0:27    Sequence
-0:27      Function Call: CBT( (global void)
-0:27      Function Call: CBT( (global void)
-0:27      Function Call: CBT( (global void)
-0:28  Function Definition: CCT( (global void)
-0:28    Function Parameters: 
-0:28    Sequence
-0:28      Function Call: CDT( (global void)
-0:28      Function Call: CDT( (global void)
-0:28      Function Call: CBT( (global void)
-0:32  Function Definition: norA( (global void)
-0:32    Function Parameters: 
-0:33  Function Definition: norB( (global void)
-0:33    Function Parameters: 
-0:33    Sequence
-0:33      Function Call: norA( (global void)
-0:34  Function Definition: norC( (global void)
-0:34    Function Parameters: 
-0:34    Sequence
-0:34      Function Call: norA( (global void)
-0:35  Function Definition: norD( (global void)
-0:35    Function Parameters: 
-0:35    Sequence
-0:35      Function Call: norA( (global void)
-0:36  Function Definition: norE( (global void)
-0:36    Function Parameters: 
-0:36    Sequence
-0:36      Function Call: norB( (global void)
-0:37  Function Definition: norF( (global void)
-0:37    Function Parameters: 
-0:37    Sequence
-0:37      Function Call: norB( (global void)
-0:38  Function Definition: norG( (global void)
-0:38    Function Parameters: 
-0:38    Sequence
-0:38      Function Call: norE( (global void)
-0:39  Function Definition: norH( (global void)
-0:39    Function Parameters: 
-0:39    Sequence
-0:39      Function Call: norE( (global void)
-0:40  Function Definition: norI( (global void)
-0:40    Function Parameters: 
-0:40    Sequence
-0:40      Function Call: norE( (global void)
-0:44  Function Definition: norcA( (global void)
-0:44    Function Parameters: 
-0:45  Function Definition: norcB( (global void)
-0:45    Function Parameters: 
-0:45    Sequence
-0:45      Function Call: norcA( (global void)
-0:46  Function Definition: norcC( (global void)
-0:46    Function Parameters: 
-0:46    Sequence
-0:46      Function Call: norcB( (global void)
-0:47  Function Definition: norcD( (global void)
-0:47    Function Parameters: 
-0:47    Sequence
-0:47      Function Call: norcC( (global void)
-0:47      Function Call: norcB( (global void)
-0:48  Function Definition: norcE( (global void)
-0:48    Function Parameters: 
-0:48    Sequence
-0:48      Function Call: norcD( (global void)
-0:9  Function Definition: cbar(i1; (global float)
-0:9    Function Parameters: 
-0:9      '' (in int)
-0:11    Sequence
-0:11      Function Call: cfoo(f1; (global void)
-0:11        Constant:
-0:11          4.200000
-0:13      Branch: Return with expression
-0:13        Constant:
-0:13          3.200000
-0:20  Function Definition: CB( (global void)
-0:20    Function Parameters: 
-0:20    Sequence
-0:20      Function Call: CC( (global void)
-0:21  Function Definition: CD( (global void)
-0:21    Function Parameters: 
-0:21    Sequence
-0:21      Function Call: CA( (global void)
-0:27  Function Definition: CBT( (global void)
-0:27    Function Parameters: 
-0:27    Sequence
-0:27      Function Call: CCT( (global void)
-0:27      Function Call: CCT( (global void)
-0:27      Function Call: CCT( (global void)
-0:28  Function Definition: CDT( (global void)
-0:28    Function Parameters: 
-0:28    Sequence
-0:28      Function Call: CAT( (global void)
 0:?   Linker Objects
 
diff --git a/Test/baseResults/reflection.vert.out b/Test/baseResults/reflection.vert.out
index 1e4c24f..ba3e0e6 100644
--- a/Test/baseResults/reflection.vert.out
+++ b/Test/baseResults/reflection.vert.out
@@ -1,10 +1,6 @@
 reflection.vert
 Warning, version 440 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 Uniform reflection:
 image_ui2D: offset -1, type 9063, size 1, index -1, binding -1
 sampler_2D: offset -1, type 8b5e, size 1, index -1, binding -1
diff --git a/Test/baseResults/remap.basic.dcefunc.frag.out b/Test/baseResults/remap.basic.dcefunc.frag.out
index 0f367c9..99b4d55 100644
--- a/Test/baseResults/remap.basic.dcefunc.frag.out
+++ b/Test/baseResults/remap.basic.dcefunc.frag.out
@@ -1,10 +1,6 @@
 remap.basic.dcefunc.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 19
diff --git a/Test/baseResults/remap.basic.everything.frag.out b/Test/baseResults/remap.basic.everything.frag.out
index f6d6ed4..357a8d2 100644
--- a/Test/baseResults/remap.basic.everything.frag.out
+++ b/Test/baseResults/remap.basic.everything.frag.out
@@ -1,10 +1,6 @@
 remap.basic.everything.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 24969
diff --git a/Test/baseResults/remap.basic.none.frag.out b/Test/baseResults/remap.basic.none.frag.out
index 3632309..39e56b2 100644
--- a/Test/baseResults/remap.basic.none.frag.out
+++ b/Test/baseResults/remap.basic.none.frag.out
@@ -1,10 +1,6 @@
 remap.basic.none.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 20
diff --git a/Test/baseResults/remap.basic.strip.frag.out b/Test/baseResults/remap.basic.strip.frag.out
index d34ce8f..27c0874 100644
--- a/Test/baseResults/remap.basic.strip.frag.out
+++ b/Test/baseResults/remap.basic.strip.frag.out
@@ -1,10 +1,6 @@
 remap.basic.strip.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 20
diff --git a/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out b/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out
index bd1fa7e..b49a10b 100644
--- a/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out
+++ b/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out
@@ -1,10 +1,6 @@
 remap.hlsl.sample.basic.everything.frag
 WARNING: 0:4: 'immediate sampler state' : unimplemented 
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 24916
diff --git a/Test/baseResults/remap.hlsl.sample.basic.none.frag.out b/Test/baseResults/remap.hlsl.sample.basic.none.frag.out
index b149718..28c384c 100644
--- a/Test/baseResults/remap.hlsl.sample.basic.none.frag.out
+++ b/Test/baseResults/remap.hlsl.sample.basic.none.frag.out
@@ -1,10 +1,6 @@
 remap.hlsl.sample.basic.none.frag
 WARNING: 0:4: 'immediate sampler state' : unimplemented 
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 190
diff --git a/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out b/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out
index 5340767..10a8938 100644
--- a/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out
+++ b/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out
@@ -1,10 +1,6 @@
 remap.hlsl.sample.basic.strip.frag
 WARNING: 0:4: 'immediate sampler state' : unimplemented 
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 190
diff --git a/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out b/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out
index 63eb6cb..c42a037 100644
--- a/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out
+++ b/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out
@@ -1,8 +1,4 @@
 remap.hlsl.templatetypes.everything.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 9012
diff --git a/Test/baseResults/remap.hlsl.templatetypes.none.frag.out b/Test/baseResults/remap.hlsl.templatetypes.none.frag.out
index df0dcf5..c3fab1a 100644
--- a/Test/baseResults/remap.hlsl.templatetypes.none.frag.out
+++ b/Test/baseResults/remap.hlsl.templatetypes.none.frag.out
@@ -1,8 +1,4 @@
 remap.hlsl.templatetypes.none.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 149
diff --git a/Test/baseResults/remap.if.everything.frag.out b/Test/baseResults/remap.if.everything.frag.out
index 9f98c18..d20564c 100644
--- a/Test/baseResults/remap.if.everything.frag.out
+++ b/Test/baseResults/remap.if.everything.frag.out
@@ -1,10 +1,6 @@
 remap.if.everything.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 22855
diff --git a/Test/baseResults/remap.if.none.frag.out b/Test/baseResults/remap.if.none.frag.out
index f3113a3..081d5cd 100644
--- a/Test/baseResults/remap.if.none.frag.out
+++ b/Test/baseResults/remap.if.none.frag.out
@@ -1,10 +1,6 @@
 remap.if.none.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 25
diff --git a/Test/baseResults/remap.similar_1a.everything.frag.out b/Test/baseResults/remap.similar_1a.everything.frag.out
index 09589f5..384b8e8 100644
--- a/Test/baseResults/remap.similar_1a.everything.frag.out
+++ b/Test/baseResults/remap.similar_1a.everything.frag.out
@@ -1,10 +1,6 @@
 remap.similar_1a.everything.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 24916
diff --git a/Test/baseResults/remap.similar_1a.none.frag.out b/Test/baseResults/remap.similar_1a.none.frag.out
index 1748451..ad1273a 100644
--- a/Test/baseResults/remap.similar_1a.none.frag.out
+++ b/Test/baseResults/remap.similar_1a.none.frag.out
@@ -1,10 +1,6 @@
 remap.similar_1a.none.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 82
diff --git a/Test/baseResults/remap.similar_1b.everything.frag.out b/Test/baseResults/remap.similar_1b.everything.frag.out
index d05be11..0ce4544 100644
--- a/Test/baseResults/remap.similar_1b.everything.frag.out
+++ b/Test/baseResults/remap.similar_1b.everything.frag.out
@@ -1,10 +1,6 @@
 remap.similar_1b.everything.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 24916
diff --git a/Test/baseResults/remap.similar_1b.none.frag.out b/Test/baseResults/remap.similar_1b.none.frag.out
index f9bf084..b86fd4b 100644
--- a/Test/baseResults/remap.similar_1b.none.frag.out
+++ b/Test/baseResults/remap.similar_1b.none.frag.out
@@ -1,10 +1,6 @@
 remap.similar_1b.none.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 87
diff --git a/Test/baseResults/remap.switch.everything.frag.out b/Test/baseResults/remap.switch.everything.frag.out
index a1d9b0d..e5a7ef7 100644
--- a/Test/baseResults/remap.switch.everything.frag.out
+++ b/Test/baseResults/remap.switch.everything.frag.out
@@ -3,10 +3,6 @@
 WARNING: 0:5: '' : all default precisions are highp; use precision statements to quiet warning, e.g.:
          "precision mediump int; precision highp float;" 
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 23990
diff --git a/Test/baseResults/remap.switch.none.frag.out b/Test/baseResults/remap.switch.none.frag.out
index 7fc8f04..5d373cc 100644
--- a/Test/baseResults/remap.switch.none.frag.out
+++ b/Test/baseResults/remap.switch.none.frag.out
@@ -3,10 +3,6 @@
 WARNING: 0:5: '' : all default precisions are highp; use precision statements to quiet warning, e.g.:
          "precision mediump int; precision highp float;" 
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 44
diff --git a/Test/baseResults/remap.uniformarray.everything.frag.out b/Test/baseResults/remap.uniformarray.everything.frag.out
index 18defec..ed906d5 100644
--- a/Test/baseResults/remap.uniformarray.everything.frag.out
+++ b/Test/baseResults/remap.uniformarray.everything.frag.out
@@ -1,8 +1,4 @@
 remap.uniformarray.everything.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 25030
diff --git a/Test/baseResults/remap.uniformarray.none.frag.out b/Test/baseResults/remap.uniformarray.none.frag.out
index ff2489e..526b9e4 100644
--- a/Test/baseResults/remap.uniformarray.none.frag.out
+++ b/Test/baseResults/remap.uniformarray.none.frag.out
@@ -1,8 +1,4 @@
 remap.uniformarray.none.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 53
diff --git a/Test/baseResults/specExamples.frag.out b/Test/baseResults/specExamples.frag.out
index 711c529..a66144a 100644
--- a/Test/baseResults/specExamples.frag.out
+++ b/Test/baseResults/specExamples.frag.out
@@ -399,17 +399,6 @@
 0:26      'fd' (global double)
 0:26      Constant:
 0:26        2.000000
-0:127  Function Definition: foo(f1[5]; (global 5-element array of float)
-0:127    Function Parameters: 
-0:127      '' (in 5-element array of float)
-0:129    Sequence
-0:129      Branch: Return with expression
-0:129        Constant:
-0:129          3.400000
-0:129          4.200000
-0:129          5.000000
-0:129          5.200000
-0:129          1.100000
 0:137  Function Definition: main( (global void)
 0:137    Function Parameters: 
 0:140    Sequence
diff --git a/Test/baseResults/spv.100ops.frag.out b/Test/baseResults/spv.100ops.frag.out
index 9b40c92..efd8201 100755
--- a/Test/baseResults/spv.100ops.frag.out
+++ b/Test/baseResults/spv.100ops.frag.out
@@ -1,10 +1,6 @@
 spv.100ops.frag
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 49
diff --git a/Test/baseResults/spv.130.frag.out b/Test/baseResults/spv.130.frag.out
index 8d881f5..19c6db0 100644
--- a/Test/baseResults/spv.130.frag.out
+++ b/Test/baseResults/spv.130.frag.out
@@ -1,10 +1,6 @@
 spv.130.frag
 WARNING: 0:31: '#extension' : extension is only partially supported: GL_ARB_gpu_shader5
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 205
diff --git a/Test/baseResults/spv.140.frag.out b/Test/baseResults/spv.140.frag.out
index f302478..f8e75eb 100755
--- a/Test/baseResults/spv.140.frag.out
+++ b/Test/baseResults/spv.140.frag.out
@@ -1,8 +1,4 @@
 spv.140.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 101
diff --git a/Test/baseResults/spv.150.geom.out b/Test/baseResults/spv.150.geom.out
index 8b021ff..1c98c70 100755
--- a/Test/baseResults/spv.150.geom.out
+++ b/Test/baseResults/spv.150.geom.out
@@ -1,8 +1,4 @@
 spv.150.geom
-
-Linked geometry stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 71
diff --git a/Test/baseResults/spv.150.vert.out b/Test/baseResults/spv.150.vert.out
index 5ccf1a8..2843139 100755
--- a/Test/baseResults/spv.150.vert.out
+++ b/Test/baseResults/spv.150.vert.out
@@ -1,8 +1,4 @@
 spv.150.vert
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 63
diff --git a/Test/baseResults/spv.300BuiltIns.vert.out b/Test/baseResults/spv.300BuiltIns.vert.out
index ab07f4a..7dc949d 100755
--- a/Test/baseResults/spv.300BuiltIns.vert.out
+++ b/Test/baseResults/spv.300BuiltIns.vert.out
@@ -1,10 +1,6 @@
 spv.300BuiltIns.vert
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 42
diff --git a/Test/baseResults/spv.300layout.frag.out b/Test/baseResults/spv.300layout.frag.out
index e340c1b..7ce08d8 100755
--- a/Test/baseResults/spv.300layout.frag.out
+++ b/Test/baseResults/spv.300layout.frag.out
@@ -1,10 +1,6 @@
 spv.300layout.frag
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 37
diff --git a/Test/baseResults/spv.300layout.vert.out b/Test/baseResults/spv.300layout.vert.out
index 859794a..20eb8e7 100644
--- a/Test/baseResults/spv.300layout.vert.out
+++ b/Test/baseResults/spv.300layout.vert.out
@@ -1,10 +1,6 @@
 spv.300layout.vert
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 163
diff --git a/Test/baseResults/spv.300layoutp.vert.out b/Test/baseResults/spv.300layoutp.vert.out
index ebad963..5924137 100755
--- a/Test/baseResults/spv.300layoutp.vert.out
+++ b/Test/baseResults/spv.300layoutp.vert.out
@@ -1,10 +1,6 @@
 spv.300layoutp.vert
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 115
diff --git a/Test/baseResults/spv.310.bitcast.frag.out b/Test/baseResults/spv.310.bitcast.frag.out
index 80df3b1..14e184a 100755
--- a/Test/baseResults/spv.310.bitcast.frag.out
+++ b/Test/baseResults/spv.310.bitcast.frag.out
@@ -1,10 +1,6 @@
 spv.310.bitcast.frag
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 153
diff --git a/Test/baseResults/spv.310.comp.out b/Test/baseResults/spv.310.comp.out
index bd1f346..095bf39 100644
--- a/Test/baseResults/spv.310.comp.out
+++ b/Test/baseResults/spv.310.comp.out
@@ -1,10 +1,6 @@
 spv.310.comp
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked compute stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 67
diff --git a/Test/baseResults/spv.330.geom.out b/Test/baseResults/spv.330.geom.out
index 3077769..3e81dcb 100644
--- a/Test/baseResults/spv.330.geom.out
+++ b/Test/baseResults/spv.330.geom.out
@@ -1,8 +1,4 @@
 spv.330.geom
-
-Linked geometry stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 32
diff --git a/Test/baseResults/spv.400.frag.out b/Test/baseResults/spv.400.frag.out
index 7858845..cb2de96 100644
--- a/Test/baseResults/spv.400.frag.out
+++ b/Test/baseResults/spv.400.frag.out
@@ -1,10 +1,6 @@
 spv.400.frag
 Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 1118
diff --git a/Test/baseResults/spv.400.tesc.out b/Test/baseResults/spv.400.tesc.out
index ae469aa..68b142e 100644
--- a/Test/baseResults/spv.400.tesc.out
+++ b/Test/baseResults/spv.400.tesc.out
@@ -1,10 +1,6 @@
 spv.400.tesc
 Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked tessellation control stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 93
diff --git a/Test/baseResults/spv.400.tese.out b/Test/baseResults/spv.400.tese.out
index 51534b1..0c62bed 100755
--- a/Test/baseResults/spv.400.tese.out
+++ b/Test/baseResults/spv.400.tese.out
@@ -1,10 +1,6 @@
 spv.400.tese
 Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked tessellation evaluation stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 96
diff --git a/Test/baseResults/spv.420.geom.out b/Test/baseResults/spv.420.geom.out
index 78e3aaa..6413d5a 100644
--- a/Test/baseResults/spv.420.geom.out
+++ b/Test/baseResults/spv.420.geom.out
@@ -1,10 +1,6 @@
 spv.420.geom
 Warning, version 420 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked geometry stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 72
diff --git a/Test/baseResults/spv.430.frag.out b/Test/baseResults/spv.430.frag.out
index 0058e9c..abe2a58 100755
--- a/Test/baseResults/spv.430.frag.out
+++ b/Test/baseResults/spv.430.frag.out
@@ -1,10 +1,6 @@
 spv.430.frag
 Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 24
diff --git a/Test/baseResults/spv.430.vert.out b/Test/baseResults/spv.430.vert.out
index c3ad2b9..8ea95d1 100755
--- a/Test/baseResults/spv.430.vert.out
+++ b/Test/baseResults/spv.430.vert.out
@@ -1,10 +1,6 @@
 spv.430.vert
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 66
diff --git a/Test/baseResults/spv.450.tesc.out b/Test/baseResults/spv.450.tesc.out
index 2900fdf..a0bf3dd 100755
--- a/Test/baseResults/spv.450.tesc.out
+++ b/Test/baseResults/spv.450.tesc.out
@@ -1,10 +1,6 @@
 spv.450.tesc
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked tessellation control stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 23
diff --git a/Test/baseResults/spv.AofA.frag.out b/Test/baseResults/spv.AofA.frag.out
index 0dbf69c..4eb7563 100644
--- a/Test/baseResults/spv.AofA.frag.out
+++ b/Test/baseResults/spv.AofA.frag.out
@@ -1,10 +1,6 @@
 spv.AofA.frag
 Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 104
diff --git a/Test/baseResults/spv.Operations.frag.out b/Test/baseResults/spv.Operations.frag.out
index f8b666d..1a74192 100755
--- a/Test/baseResults/spv.Operations.frag.out
+++ b/Test/baseResults/spv.Operations.frag.out
@@ -1,10 +1,6 @@
 spv.Operations.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 509
diff --git a/Test/baseResults/spv.accessChain.frag.out b/Test/baseResults/spv.accessChain.frag.out
index 3d391c3..b319cfd 100755
--- a/Test/baseResults/spv.accessChain.frag.out
+++ b/Test/baseResults/spv.accessChain.frag.out
@@ -1,10 +1,6 @@
 spv.accessChain.frag
 Warning, version 420 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 206
diff --git a/Test/baseResults/spv.aggOps.frag.out b/Test/baseResults/spv.aggOps.frag.out
index 5a19d2f..c3ceb9a 100644
--- a/Test/baseResults/spv.aggOps.frag.out
+++ b/Test/baseResults/spv.aggOps.frag.out
@@ -3,10 +3,6 @@
 WARNING: 0:4: '' : all default precisions are highp; use precision statements to quiet warning, e.g.:
          "precision mediump int; precision highp float;" 
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 215
diff --git a/Test/baseResults/spv.always-discard.frag.out b/Test/baseResults/spv.always-discard.frag.out
index 9102b3b..652d45c 100644
--- a/Test/baseResults/spv.always-discard.frag.out
+++ b/Test/baseResults/spv.always-discard.frag.out
@@ -1,8 +1,4 @@
 spv.always-discard.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 84
diff --git a/Test/baseResults/spv.always-discard2.frag.out b/Test/baseResults/spv.always-discard2.frag.out
index 7984c83..0bbb9ee 100755
--- a/Test/baseResults/spv.always-discard2.frag.out
+++ b/Test/baseResults/spv.always-discard2.frag.out
@@ -1,8 +1,4 @@
 spv.always-discard2.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 40
diff --git a/Test/baseResults/spv.atomic.comp.out b/Test/baseResults/spv.atomic.comp.out
index 01e0932..97c7f6e 100755
--- a/Test/baseResults/spv.atomic.comp.out
+++ b/Test/baseResults/spv.atomic.comp.out
@@ -1,10 +1,6 @@
 spv.atomic.comp
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked compute stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 73
diff --git a/Test/baseResults/spv.bitCast.frag.out b/Test/baseResults/spv.bitCast.frag.out
index b0dc810..07dd729 100644
--- a/Test/baseResults/spv.bitCast.frag.out
+++ b/Test/baseResults/spv.bitCast.frag.out
@@ -1,10 +1,6 @@
 spv.bitCast.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 172
diff --git a/Test/baseResults/spv.bool.vert.out b/Test/baseResults/spv.bool.vert.out
index 49a69a0..f84687a 100644
--- a/Test/baseResults/spv.bool.vert.out
+++ b/Test/baseResults/spv.bool.vert.out
@@ -1,10 +1,6 @@
 spv.bool.vert
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 49
diff --git a/Test/baseResults/spv.boolInBlock.frag.out b/Test/baseResults/spv.boolInBlock.frag.out
index 6e7cf40..2181f26 100644
--- a/Test/baseResults/spv.boolInBlock.frag.out
+++ b/Test/baseResults/spv.boolInBlock.frag.out
@@ -1,10 +1,6 @@
 spv.boolInBlock.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 107
diff --git a/Test/baseResults/spv.branch-return.vert.out b/Test/baseResults/spv.branch-return.vert.out
index 217a863..9093135 100644
--- a/Test/baseResults/spv.branch-return.vert.out
+++ b/Test/baseResults/spv.branch-return.vert.out
@@ -1,10 +1,6 @@
 spv.branch-return.vert
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 38
diff --git a/Test/baseResults/spv.buffer.autoassign.frag.out b/Test/baseResults/spv.buffer.autoassign.frag.out
index 1d94707..f2c8d6d 100644
--- a/Test/baseResults/spv.buffer.autoassign.frag.out
+++ b/Test/baseResults/spv.buffer.autoassign.frag.out
@@ -1,8 +1,4 @@
 spv.buffer.autoassign.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 45
diff --git a/Test/baseResults/spv.conditionalDiscard.frag.out b/Test/baseResults/spv.conditionalDiscard.frag.out
index ef7e3b4..b3cb8e8 100755
--- a/Test/baseResults/spv.conditionalDiscard.frag.out
+++ b/Test/baseResults/spv.conditionalDiscard.frag.out
@@ -1,10 +1,6 @@
 spv.conditionalDiscard.frag
 Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 36
diff --git a/Test/baseResults/spv.conversion.frag.out b/Test/baseResults/spv.conversion.frag.out
index bc91569..b38d84e 100755
--- a/Test/baseResults/spv.conversion.frag.out
+++ b/Test/baseResults/spv.conversion.frag.out
@@ -1,8 +1,4 @@
 spv.conversion.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 455
diff --git a/Test/baseResults/spv.dataOut.frag.out b/Test/baseResults/spv.dataOut.frag.out
index 651c96e..9dbe5d1 100755
--- a/Test/baseResults/spv.dataOut.frag.out
+++ b/Test/baseResults/spv.dataOut.frag.out
@@ -1,8 +1,4 @@
 spv.dataOut.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 20
diff --git a/Test/baseResults/spv.dataOutIndirect.frag.out b/Test/baseResults/spv.dataOutIndirect.frag.out
index d1227a5..663092f 100755
--- a/Test/baseResults/spv.dataOutIndirect.frag.out
+++ b/Test/baseResults/spv.dataOutIndirect.frag.out
@@ -1,8 +1,4 @@
 spv.dataOutIndirect.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 26
diff --git a/Test/baseResults/spv.dataOutIndirect.vert.out b/Test/baseResults/spv.dataOutIndirect.vert.out
index 797c651..1523fab 100755
--- a/Test/baseResults/spv.dataOutIndirect.vert.out
+++ b/Test/baseResults/spv.dataOutIndirect.vert.out
@@ -1,10 +1,6 @@
 spv.dataOutIndirect.vert
 WARNING: 0:3: attribute deprecated in version 130; may be removed in future release
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 38
diff --git a/Test/baseResults/spv.deepRvalue.frag.out b/Test/baseResults/spv.deepRvalue.frag.out
index b489438..29cf848 100644
--- a/Test/baseResults/spv.deepRvalue.frag.out
+++ b/Test/baseResults/spv.deepRvalue.frag.out
@@ -1,8 +1,4 @@
 spv.deepRvalue.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 155
diff --git a/Test/baseResults/spv.depthOut.frag.out b/Test/baseResults/spv.depthOut.frag.out
index 6242391..247b2f3 100755
--- a/Test/baseResults/spv.depthOut.frag.out
+++ b/Test/baseResults/spv.depthOut.frag.out
@@ -1,10 +1,6 @@
 spv.depthOut.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 15
diff --git a/Test/baseResults/spv.discard-dce.frag.out b/Test/baseResults/spv.discard-dce.frag.out
index 7668233..173ea26 100755
--- a/Test/baseResults/spv.discard-dce.frag.out
+++ b/Test/baseResults/spv.discard-dce.frag.out
@@ -1,8 +1,4 @@
 spv.discard-dce.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 84
diff --git a/Test/baseResults/spv.do-simple.vert.out b/Test/baseResults/spv.do-simple.vert.out
index c0862d1..d6d4c28 100755
--- a/Test/baseResults/spv.do-simple.vert.out
+++ b/Test/baseResults/spv.do-simple.vert.out
@@ -1,10 +1,6 @@
 spv.do-simple.vert
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 21
diff --git a/Test/baseResults/spv.do-while-continue-break.vert.out b/Test/baseResults/spv.do-while-continue-break.vert.out
index ebfe85d..d1d0c85 100644
--- a/Test/baseResults/spv.do-while-continue-break.vert.out
+++ b/Test/baseResults/spv.do-while-continue-break.vert.out
@@ -1,10 +1,6 @@
 spv.do-while-continue-break.vert
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 43
diff --git a/Test/baseResults/spv.doWhileLoop.frag.out b/Test/baseResults/spv.doWhileLoop.frag.out
index 1d12af1..9b8cee7 100755
--- a/Test/baseResults/spv.doWhileLoop.frag.out
+++ b/Test/baseResults/spv.doWhileLoop.frag.out
@@ -1,8 +1,4 @@
 spv.doWhileLoop.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 34
diff --git a/Test/baseResults/spv.double.comp.out b/Test/baseResults/spv.double.comp.out
index 766f839..3b1bdc8 100755
--- a/Test/baseResults/spv.double.comp.out
+++ b/Test/baseResults/spv.double.comp.out
@@ -1,10 +1,6 @@
 spv.double.comp
 Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked compute stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 60
diff --git a/Test/baseResults/spv.earlyReturnDiscard.frag.out b/Test/baseResults/spv.earlyReturnDiscard.frag.out
index 7e6409e..41441b7 100755
--- a/Test/baseResults/spv.earlyReturnDiscard.frag.out
+++ b/Test/baseResults/spv.earlyReturnDiscard.frag.out
@@ -1,8 +1,4 @@
 spv.earlyReturnDiscard.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 110
diff --git a/Test/baseResults/spv.float16.frag.out b/Test/baseResults/spv.float16.frag.out
index f1fe6e4..5499b7e 100644
--- a/Test/baseResults/spv.float16.frag.out
+++ b/Test/baseResults/spv.float16.frag.out
@@ -1,10 +1,6 @@
 spv.float16.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 534
diff --git a/Test/baseResults/spv.flowControl.frag.out b/Test/baseResults/spv.flowControl.frag.out
index 7ca61b7..274cb74 100755
--- a/Test/baseResults/spv.flowControl.frag.out
+++ b/Test/baseResults/spv.flowControl.frag.out
@@ -1,8 +1,4 @@
 spv.flowControl.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 39
diff --git a/Test/baseResults/spv.for-complex-condition.vert.out b/Test/baseResults/spv.for-complex-condition.vert.out
index c5fe438..bb3bc2a 100644
--- a/Test/baseResults/spv.for-complex-condition.vert.out
+++ b/Test/baseResults/spv.for-complex-condition.vert.out
@@ -1,10 +1,6 @@
 spv.for-complex-condition.vert
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 35
diff --git a/Test/baseResults/spv.for-continue-break.vert.out b/Test/baseResults/spv.for-continue-break.vert.out
index 0ea2f14..764001d 100644
--- a/Test/baseResults/spv.for-continue-break.vert.out
+++ b/Test/baseResults/spv.for-continue-break.vert.out
@@ -1,10 +1,6 @@
 spv.for-continue-break.vert
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 45
diff --git a/Test/baseResults/spv.for-nobody.vert.out b/Test/baseResults/spv.for-nobody.vert.out
index a127b70..0ec3584 100644
--- a/Test/baseResults/spv.for-nobody.vert.out
+++ b/Test/baseResults/spv.for-nobody.vert.out
@@ -1,10 +1,6 @@
 spv.for-nobody.vert
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 25
diff --git a/Test/baseResults/spv.for-notest.vert.out b/Test/baseResults/spv.for-notest.vert.out
index 6770670..c7346f9 100644
--- a/Test/baseResults/spv.for-notest.vert.out
+++ b/Test/baseResults/spv.for-notest.vert.out
@@ -1,10 +1,6 @@
 spv.for-notest.vert
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 20
diff --git a/Test/baseResults/spv.for-simple.vert.out b/Test/baseResults/spv.for-simple.vert.out
index 52a047f..996b65a 100755
--- a/Test/baseResults/spv.for-simple.vert.out
+++ b/Test/baseResults/spv.for-simple.vert.out
@@ -1,10 +1,6 @@
 spv.for-simple.vert
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 24
diff --git a/Test/baseResults/spv.forLoop.frag.out b/Test/baseResults/spv.forLoop.frag.out
index e606f9c..628c791 100755
--- a/Test/baseResults/spv.forLoop.frag.out
+++ b/Test/baseResults/spv.forLoop.frag.out
@@ -1,8 +1,4 @@
 spv.forLoop.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 131
diff --git a/Test/baseResults/spv.forwardFun.frag.out b/Test/baseResults/spv.forwardFun.frag.out
index a804e1d..6575953 100755
--- a/Test/baseResults/spv.forwardFun.frag.out
+++ b/Test/baseResults/spv.forwardFun.frag.out
@@ -1,8 +1,4 @@
 spv.forwardFun.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 60
diff --git a/Test/baseResults/spv.functionCall.frag.out b/Test/baseResults/spv.functionCall.frag.out
index db40dd5..69a525f 100755
--- a/Test/baseResults/spv.functionCall.frag.out
+++ b/Test/baseResults/spv.functionCall.frag.out
@@ -3,10 +3,6 @@
 WARNING: 0:4: varying deprecated in version 130; may be removed in future release
 WARNING: 0:5: varying deprecated in version 130; may be removed in future release
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 76
diff --git a/Test/baseResults/spv.functionSemantics.frag.out b/Test/baseResults/spv.functionSemantics.frag.out
index aa2abd8..005a315 100755
--- a/Test/baseResults/spv.functionSemantics.frag.out
+++ b/Test/baseResults/spv.functionSemantics.frag.out
@@ -1,10 +1,6 @@
 spv.functionSemantics.frag
 Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 156
diff --git a/Test/baseResults/spv.glFragColor.frag.out b/Test/baseResults/spv.glFragColor.frag.out
index df825a0..febbdf4 100755
--- a/Test/baseResults/spv.glFragColor.frag.out
+++ b/Test/baseResults/spv.glFragColor.frag.out
@@ -1,8 +1,4 @@
 spv.glFragColor.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 12
diff --git a/Test/baseResults/spv.glsl.register.autoassign.frag.out b/Test/baseResults/spv.glsl.register.autoassign.frag.out
index a9c1bda..11818f6 100644
--- a/Test/baseResults/spv.glsl.register.autoassign.frag.out
+++ b/Test/baseResults/spv.glsl.register.autoassign.frag.out
@@ -1,10 +1,6 @@
 spv.glsl.register.autoassign.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 142
diff --git a/Test/baseResults/spv.glsl.register.noautoassign.frag.out b/Test/baseResults/spv.glsl.register.noautoassign.frag.out
index 05bf3cf..327ac04 100644
--- a/Test/baseResults/spv.glsl.register.noautoassign.frag.out
+++ b/Test/baseResults/spv.glsl.register.noautoassign.frag.out
@@ -1,10 +1,6 @@
 spv.glsl.register.noautoassign.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 142
diff --git a/Test/baseResults/spv.image.frag.out b/Test/baseResults/spv.image.frag.out
index 2bd26f7..2dd7d4b 100644
--- a/Test/baseResults/spv.image.frag.out
+++ b/Test/baseResults/spv.image.frag.out
@@ -1,10 +1,6 @@
 spv.image.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 378
diff --git a/Test/baseResults/spv.int64.frag.out b/Test/baseResults/spv.int64.frag.out
index acfee73..cb5433e 100644
--- a/Test/baseResults/spv.int64.frag.out
+++ b/Test/baseResults/spv.int64.frag.out
@@ -1,10 +1,6 @@
 spv.int64.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 480
diff --git a/Test/baseResults/spv.intOps.vert.out b/Test/baseResults/spv.intOps.vert.out
index 22451b9..93d2dfd 100644
--- a/Test/baseResults/spv.intOps.vert.out
+++ b/Test/baseResults/spv.intOps.vert.out
@@ -1,10 +1,6 @@
 spv.intOps.vert
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 268
diff --git a/Test/baseResults/spv.interpOps.frag.out b/Test/baseResults/spv.interpOps.frag.out
index a507642..88d8e53 100644
--- a/Test/baseResults/spv.interpOps.frag.out
+++ b/Test/baseResults/spv.interpOps.frag.out
@@ -1,10 +1,6 @@
 spv.interpOps.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 100
diff --git a/Test/baseResults/spv.layoutNested.vert.out b/Test/baseResults/spv.layoutNested.vert.out
index fd785ab..0d0b28b 100644
--- a/Test/baseResults/spv.layoutNested.vert.out
+++ b/Test/baseResults/spv.layoutNested.vert.out
@@ -1,10 +1,6 @@
 spv.layoutNested.vert
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 66
diff --git a/Test/baseResults/spv.length.frag.out b/Test/baseResults/spv.length.frag.out
index 81f98a6..76f6ca6 100755
--- a/Test/baseResults/spv.length.frag.out
+++ b/Test/baseResults/spv.length.frag.out
@@ -1,8 +1,4 @@
 spv.length.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 33
diff --git a/Test/baseResults/spv.localAggregates.frag.out b/Test/baseResults/spv.localAggregates.frag.out
index 21c389a..7ffa874 100755
--- a/Test/baseResults/spv.localAggregates.frag.out
+++ b/Test/baseResults/spv.localAggregates.frag.out
@@ -1,10 +1,6 @@
 spv.localAggregates.frag
 Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 136
diff --git a/Test/baseResults/spv.loops.frag.out b/Test/baseResults/spv.loops.frag.out
index 952f794..8b1b480 100755
--- a/Test/baseResults/spv.loops.frag.out
+++ b/Test/baseResults/spv.loops.frag.out
@@ -1,8 +1,4 @@
 spv.loops.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 725
diff --git a/Test/baseResults/spv.loopsArtificial.frag.out b/Test/baseResults/spv.loopsArtificial.frag.out
index 5f10bd3..707a78d 100755
--- a/Test/baseResults/spv.loopsArtificial.frag.out
+++ b/Test/baseResults/spv.loopsArtificial.frag.out
@@ -1,8 +1,4 @@
 spv.loopsArtificial.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 158
diff --git a/Test/baseResults/spv.matFun.vert.out b/Test/baseResults/spv.matFun.vert.out
index 0aa0a52..38d9d2c 100755
--- a/Test/baseResults/spv.matFun.vert.out
+++ b/Test/baseResults/spv.matFun.vert.out
@@ -1,10 +1,6 @@
 spv.matFun.vert
 Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 103
diff --git a/Test/baseResults/spv.matrix.frag.out b/Test/baseResults/spv.matrix.frag.out
index 7b34fca..700e90e 100644
--- a/Test/baseResults/spv.matrix.frag.out
+++ b/Test/baseResults/spv.matrix.frag.out
@@ -1,10 +1,6 @@
 spv.matrix.frag
 Warning, version 420 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 261
diff --git a/Test/baseResults/spv.matrix2.frag.out b/Test/baseResults/spv.matrix2.frag.out
index e0497b0..78facff 100644
--- a/Test/baseResults/spv.matrix2.frag.out
+++ b/Test/baseResults/spv.matrix2.frag.out
@@ -1,8 +1,4 @@
 spv.matrix2.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 221
diff --git a/Test/baseResults/spv.memoryQualifier.frag.out b/Test/baseResults/spv.memoryQualifier.frag.out
index e2bfb39..a990e47 100644
--- a/Test/baseResults/spv.memoryQualifier.frag.out
+++ b/Test/baseResults/spv.memoryQualifier.frag.out
@@ -1,10 +1,6 @@
 spv.memoryQualifier.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 97
diff --git a/Test/baseResults/spv.merge-unreachable.frag.out b/Test/baseResults/spv.merge-unreachable.frag.out
index 6e32618..58bbb06 100644
--- a/Test/baseResults/spv.merge-unreachable.frag.out
+++ b/Test/baseResults/spv.merge-unreachable.frag.out
@@ -1,10 +1,6 @@
 spv.merge-unreachable.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 25
diff --git a/Test/baseResults/spv.multiStruct.comp.out b/Test/baseResults/spv.multiStruct.comp.out
index 28402ce..f8c0eea 100755
--- a/Test/baseResults/spv.multiStruct.comp.out
+++ b/Test/baseResults/spv.multiStruct.comp.out
@@ -1,10 +1,6 @@
 spv.multiStruct.comp
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked compute stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 157
diff --git a/Test/baseResults/spv.multiStructFuncall.frag.out b/Test/baseResults/spv.multiStructFuncall.frag.out
index dcbcfa0..b9b0cb2 100755
--- a/Test/baseResults/spv.multiStructFuncall.frag.out
+++ b/Test/baseResults/spv.multiStructFuncall.frag.out
@@ -1,10 +1,6 @@
 spv.multiStructFuncall.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 63
diff --git a/Test/baseResults/spv.newTexture.frag.out b/Test/baseResults/spv.newTexture.frag.out
index 3206faa..ea694ee 100755
--- a/Test/baseResults/spv.newTexture.frag.out
+++ b/Test/baseResults/spv.newTexture.frag.out
@@ -1,10 +1,6 @@
 spv.newTexture.frag
 Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 284
diff --git a/Test/baseResults/spv.noDeadDecorations.vert.out b/Test/baseResults/spv.noDeadDecorations.vert.out
index e9b2356..41d2a43 100644
--- a/Test/baseResults/spv.noDeadDecorations.vert.out
+++ b/Test/baseResults/spv.noDeadDecorations.vert.out
@@ -1,10 +1,6 @@
 spv.noDeadDecorations.vert
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 32
diff --git a/Test/baseResults/spv.noWorkgroup.comp.out b/Test/baseResults/spv.noWorkgroup.comp.out
index f12e620..0f88436 100755
--- a/Test/baseResults/spv.noWorkgroup.comp.out
+++ b/Test/baseResults/spv.noWorkgroup.comp.out
@@ -1,10 +1,6 @@
 spv.noWorkgroup.comp
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked compute stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 12
diff --git a/Test/baseResults/spv.nonSquare.vert.out b/Test/baseResults/spv.nonSquare.vert.out
index 329a71c..684d4f1 100755
--- a/Test/baseResults/spv.nonSquare.vert.out
+++ b/Test/baseResults/spv.nonSquare.vert.out
@@ -1,8 +1,4 @@
 spv.nonSquare.vert
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 90
diff --git a/Test/baseResults/spv.offsets.frag.out b/Test/baseResults/spv.offsets.frag.out
index b0091ea..ea4be8f 100755
--- a/Test/baseResults/spv.offsets.frag.out
+++ b/Test/baseResults/spv.offsets.frag.out
@@ -1,10 +1,6 @@
 spv.offsets.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 15
diff --git a/Test/baseResults/spv.precise.tesc.out b/Test/baseResults/spv.precise.tesc.out
index 0331a14..4bae395 100644
--- a/Test/baseResults/spv.precise.tesc.out
+++ b/Test/baseResults/spv.precise.tesc.out
@@ -1,10 +1,6 @@
 spv.precise.tesc
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked tessellation control stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 72
diff --git a/Test/baseResults/spv.precise.tese.out b/Test/baseResults/spv.precise.tese.out
index 4033981..4f1839c 100644
--- a/Test/baseResults/spv.precise.tese.out
+++ b/Test/baseResults/spv.precise.tese.out
@@ -1,10 +1,6 @@
 spv.precise.tese
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked tessellation evaluation stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 119
diff --git a/Test/baseResults/spv.precision.frag.out b/Test/baseResults/spv.precision.frag.out
index 33e4fb2..f49b356 100755
--- a/Test/baseResults/spv.precision.frag.out
+++ b/Test/baseResults/spv.precision.frag.out
@@ -1,10 +1,6 @@
 spv.precision.frag
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 127
diff --git a/Test/baseResults/spv.prepost.frag.out b/Test/baseResults/spv.prepost.frag.out
index 9581267..410286c 100755
--- a/Test/baseResults/spv.prepost.frag.out
+++ b/Test/baseResults/spv.prepost.frag.out
@@ -1,8 +1,4 @@
 spv.prepost.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 94
diff --git a/Test/baseResults/spv.pushConstant.vert.out b/Test/baseResults/spv.pushConstant.vert.out
index 6b314e0..bdefd63 100644
--- a/Test/baseResults/spv.pushConstant.vert.out
+++ b/Test/baseResults/spv.pushConstant.vert.out
@@ -1,10 +1,6 @@
 spv.pushConstant.vert
 Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 35
diff --git a/Test/baseResults/spv.qualifiers.vert.out b/Test/baseResults/spv.qualifiers.vert.out
index d2baf72..37f474c 100755
--- a/Test/baseResults/spv.qualifiers.vert.out
+++ b/Test/baseResults/spv.qualifiers.vert.out
@@ -1,10 +1,6 @@
 spv.qualifiers.vert
 Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 21
diff --git a/Test/baseResults/spv.queryL.frag.out b/Test/baseResults/spv.queryL.frag.out
index 2236c66..fbdcbc8 100755
--- a/Test/baseResults/spv.queryL.frag.out
+++ b/Test/baseResults/spv.queryL.frag.out
@@ -1,10 +1,6 @@
 spv.queryL.frag
 Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 224
diff --git a/Test/baseResults/spv.register.autoassign-2.frag.out b/Test/baseResults/spv.register.autoassign-2.frag.out
index 038c7f0..6d2ad36 100644
--- a/Test/baseResults/spv.register.autoassign-2.frag.out
+++ b/Test/baseResults/spv.register.autoassign-2.frag.out
@@ -1,11 +1,7 @@
 spv.register.autoassign-2.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 30
+// Id's are bound by 31
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
@@ -16,14 +12,14 @@
                               Name 9  "Color"
                               Name 12  "g_tScene[0]"
                               Name 16  "g_tSamp"
-                              Name 24  "g_tScene[1]"
+                              Name 25  "g_tScene[1]"
                               Decorate 9(Color) Location 0
                               Decorate 12(g_tScene[0]) DescriptorSet 0
                               Decorate 12(g_tScene[0]) Binding 10
                               Decorate 16(g_tSamp) DescriptorSet 0
                               Decorate 16(g_tSamp) Binding 5
-                              Decorate 24(g_tScene[1]) DescriptorSet 0
-                              Decorate 24(g_tScene[1]) Binding 11
+                              Decorate 25(g_tScene[1]) DescriptorSet 0
+                              Decorate 25(g_tScene[1]) Binding 11
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -39,19 +35,20 @@
               18:             TypeSampledImage 10
               20:             TypeVector 6(float) 2
               21:    6(float) Constant 1050253722
-              22:   20(fvec2) ConstantComposite 21 21
- 24(g_tScene[1]):     11(ptr) Variable UniformConstant
+              22:    6(float) Constant 1053609165
+              23:   20(fvec2) ConstantComposite 21 22
+ 25(g_tScene[1]):     11(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
               13:          10 Load 12(g_tScene[0])
               17:          14 Load 16(g_tSamp)
               19:          18 SampledImage 13 17
-              23:    7(fvec4) ImageSampleImplicitLod 19 22
-              25:          10 Load 24(g_tScene[1])
-              26:          14 Load 16(g_tSamp)
-              27:          18 SampledImage 25 26
-              28:    7(fvec4) ImageSampleImplicitLod 27 22
-              29:    7(fvec4) FAdd 23 28
-                              Store 9(Color) 29
+              24:    7(fvec4) ImageSampleImplicitLod 19 23
+              26:          10 Load 25(g_tScene[1])
+              27:          14 Load 16(g_tSamp)
+              28:          18 SampledImage 26 27
+              29:    7(fvec4) ImageSampleImplicitLod 28 23
+              30:    7(fvec4) FAdd 24 29
+                              Store 9(Color) 30
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.register.autoassign.frag.out b/Test/baseResults/spv.register.autoassign.frag.out
index 708f475..4b4655e 100644
--- a/Test/baseResults/spv.register.autoassign.frag.out
+++ b/Test/baseResults/spv.register.autoassign.frag.out
@@ -1,8 +1,4 @@
 spv.register.autoassign.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 150
diff --git a/Test/baseResults/spv.register.autoassign.rangetest.frag.out b/Test/baseResults/spv.register.autoassign.rangetest.frag.out
index 94933fb..8eb76c9 100644
--- a/Test/baseResults/spv.register.autoassign.rangetest.frag.out
+++ b/Test/baseResults/spv.register.autoassign.rangetest.frag.out
@@ -1,7 +1,4 @@
 spv.register.autoassign.rangetest.frag
-
-Linked fragment stage:
-
 INTERNAL ERROR: mapped binding out of range: g_tSamp
 INTERNAL ERROR: mapped binding out of range: g_tScene
 
diff --git a/Test/baseResults/spv.register.noautoassign.frag.out b/Test/baseResults/spv.register.noautoassign.frag.out
index ad476ee..71140dc 100644
--- a/Test/baseResults/spv.register.noautoassign.frag.out
+++ b/Test/baseResults/spv.register.noautoassign.frag.out
@@ -1,8 +1,4 @@
 spv.register.noautoassign.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 150
diff --git a/Test/baseResults/spv.rw.autoassign.frag.out b/Test/baseResults/spv.rw.autoassign.frag.out
index 851ef46..d6b75ba 100644
--- a/Test/baseResults/spv.rw.autoassign.frag.out
+++ b/Test/baseResults/spv.rw.autoassign.frag.out
@@ -1,8 +1,4 @@
 spv.rw.autoassign.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 37
diff --git a/Test/baseResults/spv.separate.frag.out b/Test/baseResults/spv.separate.frag.out
index 2a71a01..c654117 100644
--- a/Test/baseResults/spv.separate.frag.out
+++ b/Test/baseResults/spv.separate.frag.out
@@ -1,10 +1,6 @@
 spv.separate.frag
 Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 319
diff --git a/Test/baseResults/spv.set.vert.out b/Test/baseResults/spv.set.vert.out
index 72fbaa7..38cb669 100755
--- a/Test/baseResults/spv.set.vert.out
+++ b/Test/baseResults/spv.set.vert.out
@@ -1,10 +1,6 @@
 spv.set.vert
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 22
diff --git a/Test/baseResults/spv.shaderBallot.comp.out b/Test/baseResults/spv.shaderBallot.comp.out
index b837b8b..4f03312 100644
--- a/Test/baseResults/spv.shaderBallot.comp.out
+++ b/Test/baseResults/spv.shaderBallot.comp.out
@@ -1,10 +1,6 @@
 spv.shaderBallot.comp
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked compute stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 299
diff --git a/Test/baseResults/spv.shaderDrawParams.vert.out b/Test/baseResults/spv.shaderDrawParams.vert.out
index ad53810..41ad78d 100644
--- a/Test/baseResults/spv.shaderDrawParams.vert.out
+++ b/Test/baseResults/spv.shaderDrawParams.vert.out
@@ -1,10 +1,6 @@
 spv.shaderDrawParams.vert
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 53
diff --git a/Test/baseResults/spv.shaderGroupVote.comp.out b/Test/baseResults/spv.shaderGroupVote.comp.out
index e63164d..f8bfae8 100644
--- a/Test/baseResults/spv.shaderGroupVote.comp.out
+++ b/Test/baseResults/spv.shaderGroupVote.comp.out
@@ -1,10 +1,6 @@
 spv.shaderGroupVote.comp
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked compute stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 37
diff --git a/Test/baseResults/spv.shiftOps.frag.out b/Test/baseResults/spv.shiftOps.frag.out
index 39e40ec..498c287 100644
--- a/Test/baseResults/spv.shiftOps.frag.out
+++ b/Test/baseResults/spv.shiftOps.frag.out
@@ -1,10 +1,6 @@
 spv.shiftOps.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 38
diff --git a/Test/baseResults/spv.shortCircuit.frag.out b/Test/baseResults/spv.shortCircuit.frag.out
index 5b39b1c..7d5189a 100644
--- a/Test/baseResults/spv.shortCircuit.frag.out
+++ b/Test/baseResults/spv.shortCircuit.frag.out
@@ -1,10 +1,6 @@
 spv.shortCircuit.frag
 Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 147
diff --git a/Test/baseResults/spv.simpleFunctionCall.frag.out b/Test/baseResults/spv.simpleFunctionCall.frag.out
index 458a90d..2e6b671 100755
--- a/Test/baseResults/spv.simpleFunctionCall.frag.out
+++ b/Test/baseResults/spv.simpleFunctionCall.frag.out
@@ -1,8 +1,4 @@
 spv.simpleFunctionCall.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 19
diff --git a/Test/baseResults/spv.simpleMat.vert.out b/Test/baseResults/spv.simpleMat.vert.out
index 3e0f05e..2cad631 100755
--- a/Test/baseResults/spv.simpleMat.vert.out
+++ b/Test/baseResults/spv.simpleMat.vert.out
@@ -1,10 +1,6 @@
 spv.simpleMat.vert
 WARNING: 0:3: varying deprecated in version 130; may be removed in future release
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 39
diff --git a/Test/baseResults/spv.sparseTexture.frag.out b/Test/baseResults/spv.sparseTexture.frag.out
index ae48f41..431ef15 100644
--- a/Test/baseResults/spv.sparseTexture.frag.out
+++ b/Test/baseResults/spv.sparseTexture.frag.out
@@ -1,10 +1,6 @@
 spv.sparseTexture.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 438
diff --git a/Test/baseResults/spv.sparseTextureClamp.frag.out b/Test/baseResults/spv.sparseTextureClamp.frag.out
index 1922ac1..175dc35 100644
--- a/Test/baseResults/spv.sparseTextureClamp.frag.out
+++ b/Test/baseResults/spv.sparseTextureClamp.frag.out
@@ -1,10 +1,6 @@
 spv.sparseTextureClamp.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 360
diff --git a/Test/baseResults/spv.specConst.vert.out b/Test/baseResults/spv.specConst.vert.out
index db5a417..5a7de46 100755
--- a/Test/baseResults/spv.specConst.vert.out
+++ b/Test/baseResults/spv.specConst.vert.out
@@ -1,10 +1,6 @@
 spv.specConst.vert
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 27
diff --git a/Test/baseResults/spv.specConstant.comp.out b/Test/baseResults/spv.specConstant.comp.out
index 2f16f04..481ed68 100644
--- a/Test/baseResults/spv.specConstant.comp.out
+++ b/Test/baseResults/spv.specConstant.comp.out
@@ -1,10 +1,6 @@
 spv.specConstant.comp
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked compute stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 27
diff --git a/Test/baseResults/spv.specConstant.vert.out b/Test/baseResults/spv.specConstant.vert.out
index edda4a7..dc10e23 100644
--- a/Test/baseResults/spv.specConstant.vert.out
+++ b/Test/baseResults/spv.specConstant.vert.out
@@ -1,10 +1,6 @@
 spv.specConstant.vert
 Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 81
diff --git a/Test/baseResults/spv.specConstantComposite.vert.out b/Test/baseResults/spv.specConstantComposite.vert.out
index c4585e4..f8c556e 100644
--- a/Test/baseResults/spv.specConstantComposite.vert.out
+++ b/Test/baseResults/spv.specConstantComposite.vert.out
@@ -1,10 +1,6 @@
 spv.specConstantComposite.vert
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 43
diff --git a/Test/baseResults/spv.specConstantOperations.vert.out b/Test/baseResults/spv.specConstantOperations.vert.out
index ab42558..e2395c8 100644
--- a/Test/baseResults/spv.specConstantOperations.vert.out
+++ b/Test/baseResults/spv.specConstantOperations.vert.out
@@ -1,10 +1,6 @@
 spv.specConstantOperations.vert
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 135
diff --git a/Test/baseResults/spv.structAssignment.frag.out b/Test/baseResults/spv.structAssignment.frag.out
index abff683..eb796f7 100755
--- a/Test/baseResults/spv.structAssignment.frag.out
+++ b/Test/baseResults/spv.structAssignment.frag.out
@@ -2,10 +2,6 @@
 WARNING: 0:6: '' : all default precisions are highp; use precision statements to quiet warning, e.g.:
          "precision mediump int; precision highp float;" 
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 50
diff --git a/Test/baseResults/spv.structDeref.frag.out b/Test/baseResults/spv.structDeref.frag.out
index 78ebdc6..e60159f 100755
--- a/Test/baseResults/spv.structDeref.frag.out
+++ b/Test/baseResults/spv.structDeref.frag.out
@@ -1,8 +1,4 @@
 spv.structDeref.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 123
diff --git a/Test/baseResults/spv.structure.frag.out b/Test/baseResults/spv.structure.frag.out
index 8d91ed0..f7cb2d2 100755
--- a/Test/baseResults/spv.structure.frag.out
+++ b/Test/baseResults/spv.structure.frag.out
@@ -1,8 +1,4 @@
 spv.structure.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 60
diff --git a/Test/baseResults/spv.subpass.frag.out b/Test/baseResults/spv.subpass.frag.out
index 93d680c..c242111 100644
--- a/Test/baseResults/spv.subpass.frag.out
+++ b/Test/baseResults/spv.subpass.frag.out
@@ -1,10 +1,6 @@
 spv.subpass.frag
 Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 67
diff --git a/Test/baseResults/spv.switch.frag.out b/Test/baseResults/spv.switch.frag.out
index 87ea4c8..86acb6c 100755
--- a/Test/baseResults/spv.switch.frag.out
+++ b/Test/baseResults/spv.switch.frag.out
@@ -4,10 +4,6 @@
 WARNING: 0:134: 'switch' : last case/default label not followed by statements 
 WARNING: 0:139: 'switch' : last case/default label not followed by statements 
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 269
diff --git a/Test/baseResults/spv.swizzle.frag.out b/Test/baseResults/spv.swizzle.frag.out
index 471fed1..46978f8 100755
--- a/Test/baseResults/spv.swizzle.frag.out
+++ b/Test/baseResults/spv.swizzle.frag.out
@@ -1,8 +1,4 @@
 spv.swizzle.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 108
diff --git a/Test/baseResults/spv.swizzleInversion.frag.out b/Test/baseResults/spv.swizzleInversion.frag.out
index 6b92206..bf0699a 100755
--- a/Test/baseResults/spv.swizzleInversion.frag.out
+++ b/Test/baseResults/spv.swizzleInversion.frag.out
@@ -1,10 +1,6 @@
 spv.swizzleInversion.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 46
diff --git a/Test/baseResults/spv.test.frag.out b/Test/baseResults/spv.test.frag.out
index 8f1c526..bf0135a 100644
--- a/Test/baseResults/spv.test.frag.out
+++ b/Test/baseResults/spv.test.frag.out
@@ -1,10 +1,6 @@
 spv.test.frag
 Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 55
diff --git a/Test/baseResults/spv.test.vert.out b/Test/baseResults/spv.test.vert.out
index 697e468..623d16b 100644
--- a/Test/baseResults/spv.test.vert.out
+++ b/Test/baseResults/spv.test.vert.out
@@ -1,10 +1,6 @@
 spv.test.vert
 WARNING: 0:5: attribute deprecated in version 130; may be removed in future release
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 24
diff --git a/Test/baseResults/spv.texture.frag.out b/Test/baseResults/spv.texture.frag.out
index 30f3f28..467f254 100755
--- a/Test/baseResults/spv.texture.frag.out
+++ b/Test/baseResults/spv.texture.frag.out
@@ -3,10 +3,6 @@
 WARNING: 0:11: varying deprecated in version 130; may be removed in future release
 WARNING: 0:12: varying deprecated in version 130; may be removed in future release
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 305
diff --git a/Test/baseResults/spv.texture.vert.out b/Test/baseResults/spv.texture.vert.out
index cc3d3da..c361549 100755
--- a/Test/baseResults/spv.texture.vert.out
+++ b/Test/baseResults/spv.texture.vert.out
@@ -1,8 +1,4 @@
 spv.texture.vert
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 150
diff --git a/Test/baseResults/spv.types.frag.out b/Test/baseResults/spv.types.frag.out
index 4295370..9a2d8e3 100755
--- a/Test/baseResults/spv.types.frag.out
+++ b/Test/baseResults/spv.types.frag.out
@@ -1,8 +1,4 @@
 spv.types.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 260
diff --git a/Test/baseResults/spv.uint.frag.out b/Test/baseResults/spv.uint.frag.out
index 6682e7c..e9ba0ce 100755
--- a/Test/baseResults/spv.uint.frag.out
+++ b/Test/baseResults/spv.uint.frag.out
@@ -1,10 +1,6 @@
 spv.uint.frag
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 213
diff --git a/Test/baseResults/spv.uniformArray.frag.out b/Test/baseResults/spv.uniformArray.frag.out
index e66eda6..447ad4f 100644
--- a/Test/baseResults/spv.uniformArray.frag.out
+++ b/Test/baseResults/spv.uniformArray.frag.out
@@ -1,8 +1,4 @@
 spv.uniformArray.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 53
diff --git a/Test/baseResults/spv.variableArrayIndex.frag.out b/Test/baseResults/spv.variableArrayIndex.frag.out
index 1f8ee96..b4d3fe0 100755
--- a/Test/baseResults/spv.variableArrayIndex.frag.out
+++ b/Test/baseResults/spv.variableArrayIndex.frag.out
@@ -1,10 +1,6 @@
 spv.variableArrayIndex.frag
 Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 93
diff --git a/Test/baseResults/spv.varyingArray.frag.out b/Test/baseResults/spv.varyingArray.frag.out
index 4a7d2ee..58833ea 100755
--- a/Test/baseResults/spv.varyingArray.frag.out
+++ b/Test/baseResults/spv.varyingArray.frag.out
@@ -1,8 +1,4 @@
 spv.varyingArray.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 61
diff --git a/Test/baseResults/spv.varyingArrayIndirect.frag.out b/Test/baseResults/spv.varyingArrayIndirect.frag.out
index 410fd3c..9c01840 100755
--- a/Test/baseResults/spv.varyingArrayIndirect.frag.out
+++ b/Test/baseResults/spv.varyingArrayIndirect.frag.out
@@ -1,8 +1,4 @@
 spv.varyingArrayIndirect.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 70
diff --git a/Test/baseResults/spv.voidFunction.frag.out b/Test/baseResults/spv.voidFunction.frag.out
index 1d4b694..4434861 100755
--- a/Test/baseResults/spv.voidFunction.frag.out
+++ b/Test/baseResults/spv.voidFunction.frag.out
@@ -1,10 +1,6 @@
 spv.voidFunction.frag
 Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 43
diff --git a/Test/baseResults/spv.while-continue-break.vert.out b/Test/baseResults/spv.while-continue-break.vert.out
index 2ec3310..73dc35c 100644
--- a/Test/baseResults/spv.while-continue-break.vert.out
+++ b/Test/baseResults/spv.while-continue-break.vert.out
@@ -1,10 +1,6 @@
 spv.while-continue-break.vert
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 41
diff --git a/Test/baseResults/spv.while-simple.vert.out b/Test/baseResults/spv.while-simple.vert.out
index 0c1c822..82121dd 100755
--- a/Test/baseResults/spv.while-simple.vert.out
+++ b/Test/baseResults/spv.while-simple.vert.out
@@ -1,10 +1,6 @@
 spv.while-simple.vert
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 22
diff --git a/Test/baseResults/spv.whileLoop.frag.out b/Test/baseResults/spv.whileLoop.frag.out
index 8de5e95..ce1e195 100755
--- a/Test/baseResults/spv.whileLoop.frag.out
+++ b/Test/baseResults/spv.whileLoop.frag.out
@@ -1,8 +1,4 @@
 spv.whileLoop.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 35
diff --git a/Test/baseResults/vulkan.comp.out b/Test/baseResults/vulkan.comp.out
index 7f1fd18..5eb4c5b 100644
--- a/Test/baseResults/vulkan.comp.out
+++ b/Test/baseResults/vulkan.comp.out
@@ -4,8 +4,4 @@
 ERROR: 1 compilation errors.  No code generated.
 
 
-
-Linked compute stage:
-
-
 SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/vulkan.frag.out b/Test/baseResults/vulkan.frag.out
index d4da919..1df2c3e 100644
--- a/Test/baseResults/vulkan.frag.out
+++ b/Test/baseResults/vulkan.frag.out
@@ -43,9 +43,6 @@
 ERROR: 38 compilation errors.  No code generated.
 
 
-
-Linked fragment stage:
-
 ERROR: Linking fragment stage: Only one push_constant block is allowed per stage
 
 SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/vulkan.vert.out b/Test/baseResults/vulkan.vert.out
index 5aeaa74..7111a2d 100644
--- a/Test/baseResults/vulkan.vert.out
+++ b/Test/baseResults/vulkan.vert.out
@@ -26,8 +26,4 @@
 ERROR: 23 compilation errors.  No code generated.
 
 
-
-Linked vertex stage:
-
-
 SPIR-V is not generated for failed compile or link
diff --git a/Test/hlsl.deadFunctionMissingBody.vert b/Test/hlsl.deadFunctionMissingBody.vert
new file mode 100644
index 0000000..a5f965a
--- /dev/null
+++ b/Test/hlsl.deadFunctionMissingBody.vert
@@ -0,0 +1,8 @@
+float4 main(): SV_Target0 { return 0; }

+struct Surface { float3 albedo; };

+Surface surfaceShader(float fade);

+Surface surfaceShaderExec()

+{

+    float fade = 0;

+    return surfaceShader(0);

+}

diff --git a/Test/hlsl.entry.rename.frag b/Test/hlsl.entry.rename.frag
new file mode 100644
index 0000000..188dfc5
--- /dev/null
+++ b/Test/hlsl.entry.rename.frag
@@ -0,0 +1,15 @@
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+};
+
+void not_the_entry_point() { }
+int also_not_the_entry_point;
+
+PS_OUTPUT main()
+{
+    PS_OUTPUT psout;
+    psout.Color = 0;
+    return psout;
+}
diff --git a/Test/hlsl.intrinsics.frag b/Test/hlsl.intrinsics.frag
index 03e7ed3..15db637 100644
--- a/Test/hlsl.intrinsics.frag
+++ b/Test/hlsl.intrinsics.frag
@@ -33,7 +33,7 @@
     clip(inF0);
     float r014 = cos(inF0);
     float r015 = cosh(inF0);
-    uint r016 = countbits(7);
+    int r016 = countbits(7);
     float r017 = ddx(inF0);
     float r018 = ddx_coarse(inF0);
     float r019 = ddx_fine(inF0);
@@ -111,7 +111,7 @@
     clip(inF0);
     float2 r013 = cos(inF0);
     float2 r015 = cosh(inF0);
-    uint2 r016 = countbits(int2(7,3));
+    int2 r016 = countbits(int2(7,3));
     float2 r017 = ddx(inF0);
     float2 r018 = ddx_coarse(inF0);
     float2 r019 = ddx_fine(inF0);
diff --git a/Test/hlsl.intrinsics.promote.down.frag b/Test/hlsl.intrinsics.promote.down.frag
new file mode 100644
index 0000000..5f4882b
--- /dev/null
+++ b/Test/hlsl.intrinsics.promote.down.frag
@@ -0,0 +1,22 @@
+
+struct PS_OUTPUT { float4 color : SV_Target0; };
+
+int    i;
+uint   u;
+float  f;
+bool   b;
+
+int2   i2;
+uint2  u2;
+float2 f2;
+bool2  b2;
+
+PS_OUTPUT main()
+{
+    uint r00  = countbits(f);
+    uint2 r01 = reversebits(f2);
+
+    PS_OUTPUT ps_output;
+    ps_output.color = float4(0,0,0,0);
+    return ps_output;
+};
diff --git a/Test/hlsl.intrinsics.promote.frag b/Test/hlsl.intrinsics.promote.frag
new file mode 100644
index 0000000..89d3e68
--- /dev/null
+++ b/Test/hlsl.intrinsics.promote.frag
@@ -0,0 +1,79 @@
+
+struct PS_OUTPUT { float4 color : SV_Target0; };
+
+int    i;
+uint   u;
+float  f;
+bool   b;
+
+int2   i2;
+uint2  u2;
+float2 f2;
+bool2  b2;
+
+Buffer    <float>  g_tTexbfs;
+Texture1D <float4> g_tTex1df4;
+uint  upos;
+float fpos;
+
+PS_OUTPUT main()
+{
+    // Same shapes:
+
+    float r00 = max(b,  f);
+    uint  r01 = max(b,  u);
+    int   r02 = max(b,  i);
+    float r03 = max(i,  f);
+    float r04 = max(u,  f);
+
+    float2 r10 = max(b2,  f2);
+    uint2  r11 = max(b2,  u2);
+    int2   r12 = max(b2,  i2);
+    float2 r13 = max(i2,  f2);
+    float2 r14 = max(u2,  f2);
+
+    float2 r20 = clamp(i2, u2, f2);  // 3 args, converts all to best type.
+    uint2  r21 = clamp(b2, u2, b2);
+    float2 r22 = clamp(b2, f2, b2);
+
+    // Mixed shapes:
+    float2 r30 = max(b,  f2);
+    uint2  r31 = max(b,  u2);
+    int2   r32 = max(b,  i2);
+    float2 r33 = max(i,  f2);
+    float2 r34 = max(u,  f2);
+
+    float2 r40 = clamp(i, u2, f2);  // 3 args, converts all to best type.
+    uint2  r41 = clamp(b2, u, b2);
+    float2 r42 = clamp(b2, f, b);
+    int2   r43 = clamp(i, i2, u2);
+
+    float r50 = g_tTexbfs.Load(upos);
+    float r51 = g_tTexbfs.Load(fpos);
+
+    int MipLevel;
+
+    uint WidthU;
+    uint HeightU;
+    uint ElementsU;
+    uint DepthU;
+    uint NumberOfLevelsU;
+    uint NumberOfSamplesU;
+
+    int  WidthI;
+    int  HeightI;
+    int  ElementsI;
+    int  DepthI;
+    int  NumberOfLevelsI;
+    int  NumberOfSamplesI;
+
+    g_tTex1df4 . GetDimensions(WidthI);
+    g_tTex1df4 . GetDimensions(6, WidthI, NumberOfLevelsU);
+    g_tTex1df4 . GetDimensions(6, WidthU, NumberOfLevelsI);
+    g_tTex1df4 . GetDimensions(6, WidthI, NumberOfLevelsI);
+
+    // max(i2, f2);
+    PS_OUTPUT ps_output;
+    ps_output.color = r00;
+    return ps_output;
+};
diff --git a/Test/hlsl.intrinsics.promote.outputs.frag b/Test/hlsl.intrinsics.promote.outputs.frag
new file mode 100644
index 0000000..42fa3e8
--- /dev/null
+++ b/Test/hlsl.intrinsics.promote.outputs.frag
@@ -0,0 +1,49 @@
+
+struct PS_OUTPUT { float4 color : SV_Target0; };
+
+int    i;
+uint   u;
+float  f;
+bool   b;
+
+int2   i2;
+uint2  u2;
+float2 f2;
+bool2  b2;
+
+Buffer    <float>  g_tTexbfs;
+Texture1D <float4> g_tTex1df4;
+uint  upos;
+float fpos;
+
+PS_OUTPUT main()
+{
+    int MipLevel;
+
+    uint WidthU;
+    uint HeightU;
+    uint ElementsU;
+    uint DepthU;
+    uint NumberOfLevelsU;
+    uint NumberOfSamplesU;
+
+    int  WidthI;
+    int  HeightI;
+    int  ElementsI;
+    int  DepthI;
+    int  NumberOfLevelsI;
+    int  NumberOfSamplesI;
+
+    saturate(fpos);
+
+    // Test output promotions
+    g_tTex1df4 . GetDimensions(WidthI);
+    g_tTex1df4 . GetDimensions(6, WidthI, NumberOfLevelsU);
+    g_tTex1df4 . GetDimensions(6, WidthU, NumberOfLevelsI);
+    g_tTex1df4 . GetDimensions(6, WidthI, NumberOfLevelsI);
+
+    // max(i2, f2);
+    PS_OUTPUT ps_output;
+    ps_output.color = 0;
+    return ps_output;
+};
diff --git a/Test/hlsl.promote.atomic.frag b/Test/hlsl.promote.atomic.frag
new file mode 100644
index 0000000..2b46225
--- /dev/null
+++ b/Test/hlsl.promote.atomic.frag
@@ -0,0 +1,17 @@
+
+RWBuffer<uint> s_uintbuff;  // UINT RWBuffer ...
+
+float4 main() : SV_Target
+{
+    int Loc;  // ... with INT variables
+    int Inc;
+    int Orig;
+
+    // This must select the uint flavor of SPIR-V atomic op, and promote
+    // the other arguments as required.  The output value from the
+    // imageAtomicAdd AST will be converted to an int for 'Orig'.
+    InterlockedAdd(s_uintbuff[Loc], Inc, Orig);
+
+    return float4(0,0,0,0);
+}
+
diff --git a/Test/hlsl.structarray.flatten.frag b/Test/hlsl.structarray.flatten.frag
new file mode 100644
index 0000000..eedb931
--- /dev/null
+++ b/Test/hlsl.structarray.flatten.frag
@@ -0,0 +1,28 @@
+SamplerState g_samp;
+Texture1D    g_tex;
+
+struct tex_t {
+    SamplerState samp;
+    Texture1D tex;
+    int nonopaque_thing;
+};
+
+struct tex_with_arrays_t {
+    SamplerState samp[2];
+    Texture1D tex[2];
+    int nonopaque_thing;
+};
+
+uniform tex_t g_texdata;
+uniform tex_t g_texdata_array[3];
+uniform tex_with_arrays_t g_texdata_array2[3];
+
+struct PS_OUTPUT { float4 color : SV_Target0; };
+
+void main(out PS_OUTPUT ps_output)
+{
+    ps_output.color =
+        g_texdata.tex.Sample(g_texdata.samp, 0.5) +
+        g_texdata_array[1].tex.Sample(g_texdata_array[1].samp, 0.4) +
+        g_texdata_array2[1].tex[0].Sample(g_texdata_array2[1].samp[0], 0.3);
+}
diff --git a/Test/hlsl.structarray.flatten.geom b/Test/hlsl.structarray.flatten.geom
new file mode 100644
index 0000000..1b05dc1
--- /dev/null
+++ b/Test/hlsl.structarray.flatten.geom
@@ -0,0 +1,17 @@
+
+struct VertexData {
+	float4 position : POSITION;
+	float4 color    : COLOR0;
+	float2 uv       : TEXCOORD0;
+};
+
+[maxvertexcount(4)]
+void main(line VertexData vin[2], inout TriangleStream<VertexData> outStream)
+{
+    VertexData vout;
+
+    vout.color = vin[0].color;
+    vout.uv = vin[0].uv;
+    vout.position = vin[0].position;
+    outStream.Append(vout);
+}
diff --git a/Test/hlsl.structin.vert b/Test/hlsl.structin.vert
index 7eba552..43d0cfd 100644
--- a/Test/hlsl.structin.vert
+++ b/Test/hlsl.structin.vert
@@ -11,4 +11,4 @@
     local.b = vi.m[1] + vi.m[0] + float4(vi.coord.x) + d + e;
 
     return local;
-}
\ No newline at end of file
+}
diff --git a/Test/missingBodies.vert b/Test/missingBodies.vert
new file mode 100644
index 0000000..04b7181
--- /dev/null
+++ b/Test/missingBodies.vert
@@ -0,0 +1,24 @@
+#version 450

+

+void bar();

+void foo() { bar(); }

+

+void B();

+void C(int);

+void C(int, int) { }

+void C(bool);

+void A() { B(); C(1); C(true); C(1, 2); }

+

+void main()

+{

+    foo();

+    C(true);

+}

+

+int ret1();

+

+int f1 = ret1();

+

+int ret2() { return 3; }

+

+int f2 = ret2();

diff --git a/Test/runtests b/Test/runtests
index 0640391..a17848b 100755
--- a/Test/runtests
+++ b/Test/runtests
@@ -45,6 +45,20 @@
 $EXE -i -C *.vert *.geom *.frag *.tes* *.comp -t > multiThread.out
 diff singleThread.out multiThread.out || HASERROR=1
 
+#
+# entry point renaming tests
+#
+echo Running entry-point renaming tests
+$EXE -i -H -V -D -e main_in_spv --ku --source-entrypoint main hlsl.entry.rename.frag > $TARGETDIR/hlsl.entry.rename.frag.out
+diff -b $BASEDIR/hlsl.entry.rename.frag.out $TARGETDIR/hlsl.entry.rename.frag.out || HASERROR=1
+
+#
+# Testing ill-defined uncalled function
+#
+echo Running ill-defined uncalled function
+$EXE -D -e main -H hlsl.deadFunctionMissingBody.vert > $TARGETDIR/hlsl.deadFunctionMissingBody.vert.out
+diff -b $BASEDIR/hlsl.deadFunctionMissingBody.vert.out $TARGETDIR/hlsl.deadFunctionMissingBody.vert.out || HASERROR=1
+
 if [ $HASERROR -eq 0 ]
 then
     echo Tests Succeeded.
diff --git a/Test/spv.register.autoassign-2.frag b/Test/spv.register.autoassign-2.frag
index b943791..05c4925 100644
--- a/Test/spv.register.autoassign-2.frag
+++ b/Test/spv.register.autoassign-2.frag
@@ -10,6 +10,6 @@
 
 void main(out PS_OUTPUT psout)
 {
-    psout.Color = g_tScene[0].Sample(g_tSamp, 0.3) +
-                  g_tScene[1].Sample(g_tSamp, 0.3);
+    psout.Color = g_tScene[0].Sample(g_tSamp, float2(0.3,0.4)) +
+                  g_tScene[1].Sample(g_tSamp, float2(0.3,0.4));
 }
diff --git a/Test/spv.register.autoassign.rangetest.frag b/Test/spv.register.autoassign.rangetest.frag
index c81c395..314c8e9 100644
--- a/Test/spv.register.autoassign.rangetest.frag
+++ b/Test/spv.register.autoassign.rangetest.frag
@@ -10,6 +10,6 @@
 
 void main(out PS_OUTPUT psout)
 {
-    psout.Color = g_tScene[0].Sample(g_tSamp, 0.3) +
-                  g_tScene[1].Sample(g_tSamp, 0.3);
+    psout.Color = g_tScene[0].Sample(g_tSamp, float2(0.3, 0.3)) +
+                  g_tScene[1].Sample(g_tSamp, float2(0.3, 0.3));
 }
diff --git a/glslang/Include/revision.h b/glslang/Include/revision.h
index 5445009..5fda0eb 100644
--- a/glslang/Include/revision.h
+++ b/glslang/Include/revision.h
@@ -2,5 +2,5 @@
 // For the version, it uses the latest git tag followed by the number of commits.
 // For the date, it uses the current date (when then script is run).
 
-#define GLSLANG_REVISION "Overload400-PrecQual.1667"
-#define GLSLANG_DATE "27-Nov-2016"
+#define GLSLANG_REVISION "Overload400-PrecQual.1689"
+#define GLSLANG_DATE "12-Dec-2016"
diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp
index 71b4b71..9b6d4c6 100644
--- a/glslang/MachineIndependent/Intermediate.cpp
+++ b/glslang/MachineIndependent/Intermediate.cpp
@@ -45,6 +45,7 @@
 #include "propagateNoContraction.h"
 
 #include <cfloat>
+#include <utility>
 
 namespace glslang {
 
@@ -575,6 +576,27 @@
     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:
 
@@ -833,6 +855,9 @@
     if (profile == EEsProfile || version == 110)
         return false;
 
+    if (from == to)
+        return true;
+
     // TODO: Move more policies into language-specific handlers.
     // Some languages allow more general (or potentially, more specific) conversions under some conditions.
     if (source == EShSourceHlsl) {
@@ -902,6 +927,8 @@
             return version >= 400;
         case EbtUint:
             return true;
+        case EbtBool:
+            return (source == EShSourceHlsl);
         default:
             return false;
         }
@@ -909,6 +936,8 @@
         switch (from) {
         case EbtInt:
             return true;
+        case EbtBool:
+            return (source == EShSourceHlsl);
         default:
             return false;
         }
@@ -1759,6 +1788,9 @@
     if (node->getAsBinaryNode())
         return promoteBinary(*node->getAsBinaryNode());
 
+    if (node->getAsAggregate())
+        return promoteAggregate(*node->getAsAggregate());
+
     return false;
 }
 
@@ -2202,6 +2234,77 @@
     return true;
 }
 
+//
+// See TIntermediate::promote
+//
+bool TIntermediate::promoteAggregate(TIntermAggregate& node)
+{
+    TOperator op = node.getOp();
+    TIntermSequence& args = node.getSequence();
+    const int numArgs = args.size();
+
+    // Presently, only hlsl does intrinsic promotions.
+    if (getSource() != EShSourceHlsl)
+        return true;
+
+    // set of opcodes that can be promoted in this manner.
+    switch (op) {
+    case EOpAtan:
+    case EOpClamp:
+    case EOpCross:
+    case EOpDistance:
+    case EOpDot:
+    case EOpDst:
+    case EOpFaceForward:
+        // case EOpFindMSB: TODO: ?? 
+        // case EOpFindLSB: TODO: ??
+    case EOpFma:
+    case EOpMod:
+    case EOpFrexp:
+    case EOpLdexp:
+    case EOpMix:
+    case EOpLit:
+    case EOpMax:
+    case EOpMin:
+    case EOpModf:
+        // case EOpGenMul: TODO: ??
+    case EOpPow:
+    case EOpReflect:
+    case EOpRefract:
+    // case EOpSinCos: TODO: ??
+    case EOpSmoothStep:
+    case EOpStep:
+        break;
+    default:
+        return true;
+    }
+
+    // TODO: array and struct behavior
+
+    // Try converting all nodes to the given node's type
+    TIntermSequence convertedArgs(numArgs, nullptr);
+
+    // Try to convert all types to the nonConvArg type.
+    for (int nonConvArg = 0; nonConvArg < numArgs; ++nonConvArg) {
+        // Try converting all args to this arg's type
+        for (int convArg = 0; convArg < numArgs; ++convArg) {
+            convertedArgs[convArg] = addConversion(op, args[nonConvArg]->getAsTyped()->getType(),
+                                                   args[convArg]->getAsTyped());
+        }
+
+        // If we successfully converted all the args, use the result.
+        if (std::all_of(convertedArgs.begin(), convertedArgs.end(),
+                        [](const TIntermNode* node) { return node != nullptr; })) {
+
+            std::swap(args, convertedArgs);
+            return true;
+        }
+    }
+
+    return false;
+}
+
+
 void TIntermBinary::updatePrecision()
 {
 #ifdef AMD_EXTENSIONS
diff --git a/glslang/MachineIndependent/ParseContextBase.cpp b/glslang/MachineIndependent/ParseContextBase.cpp
index dc8c61d..d084af8 100644
--- a/glslang/MachineIndependent/ParseContextBase.cpp
+++ b/glslang/MachineIndependent/ParseContextBase.cpp
@@ -304,7 +304,7 @@
 const TFunction* TParseContextBase::selectFunction(
     const TVector<const TFunction*> candidateList,
     const TFunction& call,
-    std::function<bool(const TType& from, const TType& to)> convertible,
+    std::function<bool(const TType& from, const TType& to, TOperator op, int arg)> convertible,
     std::function<bool(const TType& from, const TType& to1, const TType& to2)> better,
     /* output */ bool& tie)
 {
@@ -356,13 +356,13 @@
         bool viable = true;
         for (int param = 0; param < candidate.getParamCount(); ++param) {
             if (candidate[param].type->getQualifier().isParamInput()) {
-                if (! convertible(*call[param].type, *candidate[param].type)) {
+                if (! convertible(*call[param].type, *candidate[param].type, candidate.getBuiltInOp(), param)) {
                     viable = false;
                     break;
                 }
             }
             if (candidate[param].type->getQualifier().isParamOutput()) {
-                if (! convertible(*candidate[param].type, *call[param].type)) {
+                if (! convertible(*candidate[param].type, *call[param].type, candidate.getBuiltInOp(), param)) {
                     viable = false;
                     break;
                 }
diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp
index 831e3ac..ed043e0 100644
--- a/glslang/MachineIndependent/ParseHelper.cpp
+++ b/glslang/MachineIndependent/ParseHelper.cpp
@@ -1109,9 +1109,10 @@
                 // if builtIn == true, it's definitely a built-in function with EOpNull
                 if (! builtIn) {
                     call->setUserDefined();
-                    if (symbolTable.atGlobalLevel())
-                        error(loc, "can't call user function from global scope", fnCandidate->getName().c_str(), "");
-                    else
+                    if (symbolTable.atGlobalLevel()) {
+                        requireProfile(loc, ~EEsProfile, "calling user function from global scope");
+                        intermediate.addToCallGraph(infoSink, "main(", fnCandidate->getMangledName());
+                    } else
                         intermediate.addToCallGraph(infoSink, currentCaller, fnCandidate->getMangledName());
                 }
 
@@ -4874,7 +4875,7 @@
     symbolTable.findFunctionNameList(call.getMangledName(), candidateList, builtIn);
     
     // can 'from' convert to 'to'?
-    const auto convertible = [this](const TType& from, const TType& to) -> bool {
+    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))
diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h
index 165601d..6234db6 100644
--- a/glslang/MachineIndependent/ParseHelper.h
+++ b/glslang/MachineIndependent/ParseHelper.h
@@ -167,7 +167,7 @@
 
     // see implementation for detail
     const TFunction* selectFunction(const TVector<const TFunction*>, const TFunction&,
-        std::function<bool(const TType&, const TType&)>,
+        std::function<bool(const TType&, const TType&, TOperator, int arg)>,
         std::function<bool(const TType&, const TType&, const TType&)>,
         /* output */ bool& tie);
 
diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp
index cc21b2e..e50b12f 100644
--- a/glslang/MachineIndependent/ShaderLang.cpp
+++ b/glslang/MachineIndependent/ShaderLang.cpp
@@ -86,7 +86,7 @@
                                       int version, EProfile profile, EShSource source,
                                       EShLanguage language, TInfoSink& infoSink,
                                       SpvVersion spvVersion, bool forwardCompatible, EShMessages messages,
-                                      bool parsingBuiltIns)
+                                      bool parsingBuiltIns, const std::string sourceEntryPointName = "")
 {
     switch (source) {
     case EShSourceGlsl:
@@ -96,7 +96,7 @@
 
     case EShSourceHlsl:
         return new HlslParseContext(symbolTable, intermediate, parsingBuiltIns, version, profile, spvVersion,
-                                    language, infoSink, forwardCompatible, messages);
+                                    language, infoSink, sourceEntryPointName.c_str(), forwardCompatible, messages);
     default:
         infoSink.info.message(EPrefixInternalError, "Unable to determine source language");
         return nullptr;
@@ -616,7 +616,8 @@
     TIntermediate& intermediate, // returned tree, etc.
     ProcessingContext& processingContext,
     bool requireNonempty,
-    TShader::Includer& includer
+    TShader::Includer& includer,
+    const std::string sourceEntryPointName = ""
     )
 {
     if (! InitThread())
@@ -733,7 +734,7 @@
 
     TParseContextBase* parseContext = CreateParseContext(symbolTable, intermediate, version, profile, source,
                                                          compiler->getLanguage(), compiler->infoSink,
-                                                         spvVersion, forwardCompatible, messages, false);
+                                                         spvVersion, forwardCompatible, messages, false, sourceEntryPointName);
 
     TPpContext ppContext(*parseContext, names[numPre]? names[numPre]: "", includer);
 
@@ -1054,14 +1055,15 @@
     bool forwardCompatible,     // give errors for use of deprecated features
     EShMessages messages,       // warnings/errors/AST; things to print out
     TIntermediate& intermediate,// returned tree, etc.
-    TShader::Includer& includer)
+    TShader::Includer& includer,
+    const std::string sourceEntryPointName = "")
 {
     DoFullParse parser;
     return ProcessDeferred(compiler, shaderStrings, numStrings, inputLengths, stringNames,
                            preamble, optLevel, resources, defaultVersion,
                            defaultProfile, forceDefaultVersionAndProfile,
                            forwardCompatible, messages, intermediate, parser,
-                           true, includer);
+                           true, includer, sourceEntryPointName);
 }
 
 } // end anonymous namespace for local functions
@@ -1479,7 +1481,7 @@
     virtual bool compile(TIntermNode*, int = 0, EProfile = ENoProfile) { return true; }
 };
 
-TShader::TShader(EShLanguage s) 
+TShader::TShader(EShLanguage s)
     : pool(0), stage(s), lengths(nullptr), stringNames(nullptr), preamble("")
 {
     infoSink = new TInfoSink;
@@ -1523,6 +1525,11 @@
     intermediate->setEntryPointName(entryPoint);
 }
 
+void TShader::setSourceEntryPoint(const char* name)
+{
+    sourceEntryPointName = name;
+}
+
 void TShader::setShiftSamplerBinding(unsigned int base) { intermediate->setShiftSamplerBinding(base); }
 void TShader::setShiftTextureBinding(unsigned int base) { intermediate->setShiftTextureBinding(base); }
 void TShader::setShiftImageBinding(unsigned int base)   { intermediate->setShiftImageBinding(base); }
@@ -1550,7 +1557,7 @@
     return CompileDeferred(compiler, strings, numStrings, lengths, stringNames,
                            preamble, EShOptNone, builtInResources, defaultVersion,
                            defaultProfile, forceDefaultVersionAndProfile,
-                           forwardCompatible, messages, *intermediate, includer);
+                           forwardCompatible, messages, *intermediate, includer, sourceEntryPointName);
 }
 
 bool TShader::parse(const TBuiltInResource* builtInResources, int defaultVersion, bool forwardCompatible, EShMessages messages)
@@ -1680,7 +1687,8 @@
         newedIntermediate[stage] = true;
     }
 
-    infoSink->info << "\nLinked " << StageName(stage) << " stage:\n\n";
+    if (messages & EShMsgAST)
+        infoSink->info << "\nLinked " << StageName(stage) << " stage:\n\n";
 
     if (stages[stage].size() > 1) {
         std::list<TShader*>::const_iterator it;
@@ -1688,7 +1696,7 @@
             intermediate[stage]->merge(*infoSink, *(*it)->intermediate);
     }
 
-    intermediate[stage]->finalCheck(*infoSink);
+    intermediate[stage]->finalCheck(*infoSink, (messages & EShMsgKeepUncalled) != 0);
 
     if (messages & EShMsgAST)
         intermediate[stage]->output(*infoSink, true);
diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp
index 050fdae..3834fde 100644
--- a/glslang/MachineIndependent/linkValidate.cpp
+++ b/glslang/MachineIndependent/linkValidate.cpp
@@ -82,19 +82,21 @@
     if (source != unit.source)
         error(infoSink, "can't link compilation units from different source languages");
 
-    if (source == EShSourceHlsl && unit.getNumEntryPoints() > 0) {
+    if (unit.getNumEntryPoints() > 0) {
         if (getNumEntryPoints() > 0)
             error(infoSink, "can't handle multiple entry points per stage");
-        else
-            entryPointName = unit.entryPointName;
+        else {
+            entryPointName = unit.getEntryPointName();
+            entryPointMangledName = unit.getEntryPointMangledName();
+        }
     }
-    numEntryPoints += unit.numEntryPoints;
-    numErrors += unit.numErrors;
+    numEntryPoints += unit.getNumEntryPoints();
+    numErrors += unit.getNumErrors();
     numPushConstants += unit.numPushConstants;
     callGraph.insert(callGraph.end(), unit.callGraph.begin(), unit.callGraph.end());
 
     if (originUpperLeft != unit.originUpperLeft || pixelCenterInteger != unit.pixelCenterInteger)
-        error(infoSink, "gl_FragCoord redeclarations must match across shaders\n");
+        error(infoSink, "gl_FragCoord redeclarations must match across shaders");
 
     if (! earlyFragmentTests)
         earlyFragmentTests = unit.earlyFragmentTests;
@@ -375,7 +377,7 @@
 //
 // Also, lock in defaults of things not set, including array sizes.
 //
-void TIntermediate::finalCheck(TInfoSink& infoSink)
+void TIntermediate::finalCheck(TInfoSink& infoSink, bool keepUncalled)
 {
     if (getTreeRoot() == nullptr)
         return;
@@ -390,8 +392,9 @@
     if (numPushConstants > 1)
         error(infoSink, "Only one push_constant block is allowed per stage");
 
-    // recursion checking
+    // recursion and missing body checking
     checkCallGraphCycles(infoSink);
+    checkCallGraphBodies(infoSink, keepUncalled);
 
     // overlap/alias/missing I/O, etc.
     inOutLocationCheck(infoSink);
@@ -502,7 +505,7 @@
 //
 void TIntermediate::checkCallGraphCycles(TInfoSink& infoSink)
 {
-    // Reset everything, once.
+    // Clear fields we'll use for this.
     for (TGraph::iterator call = callGraph.begin(); call != callGraph.end(); ++call) {
         call->visited = false;
         call->currentPath = false;
@@ -578,6 +581,85 @@
 }
 
 //
+// See which functions are reachable from the entry point and which have bodies.
+// Reachable ones with missing bodies are errors.
+// Unreachable bodies are dead code.
+//
+void TIntermediate::checkCallGraphBodies(TInfoSink& infoSink, bool keepUncalled)
+{
+    // Clear fields we'll use for this.
+    for (TGraph::iterator call = callGraph.begin(); call != callGraph.end(); ++call) {
+        call->visited = false;
+        call->calleeBodyPosition = -1;
+    }
+
+    // The top level of the AST includes function definitions (bodies).
+    // Compare these to function calls in the call graph.
+    // We'll end up knowing which have bodies, and if so,
+    // how to map the call-graph node to the location in the AST.
+    TIntermSequence &functionSequence = getTreeRoot()->getAsAggregate()->getSequence();
+    std::vector<bool> reachable(functionSequence.size(), true); // so that non-functions are reachable
+    for (int f = 0; f < (int)functionSequence.size(); ++f) {
+        glslang::TIntermAggregate* node = functionSequence[f]->getAsAggregate();
+        if (node && (node->getOp() == glslang::EOpFunction)) {
+            if (node->getName().compare(getEntryPointMangledName().c_str()) != 0)
+                reachable[f] = false; // so that function bodies are unreachable, until proven otherwise
+            for (TGraph::iterator call = callGraph.begin(); call != callGraph.end(); ++call) {
+                if (call->callee == node->getName())
+                    call->calleeBodyPosition = f;
+            }
+        }
+    }
+
+    // Start call-graph traversal by visiting the entry point nodes.
+    for (TGraph::iterator call = callGraph.begin(); call != callGraph.end(); ++call) {
+        if (call->caller.compare(getEntryPointMangledName().c_str()) == 0)
+            call->visited = true;
+    }
+
+    // Propagate 'visited' through the call-graph to every part of the graph it
+    // can reach (seeded with the entry-point setting above).
+    bool changed;
+    do {
+        changed = false;
+        for (auto call1 = callGraph.begin(); call1 != callGraph.end(); ++call1) {
+            if (call1->visited) {
+                for (TGraph::iterator call2 = callGraph.begin(); call2 != callGraph.end(); ++call2) {
+                    if (! call2->visited) {
+                        if (call1->callee == call2->caller) {
+                            changed = true;
+                            call2->visited = true;
+                        }
+                    }
+                }
+            }
+        }
+    } while (changed);
+
+    // Any call-graph node set to visited but without a callee body is an error.
+    for (TGraph::iterator call = callGraph.begin(); call != callGraph.end(); ++call) {
+        if (call->visited) {
+            if (call->calleeBodyPosition == -1) {
+                error(infoSink, "No function definition (body) found: ");
+                infoSink.info << "    " << call->callee << "\n";
+            } else
+                reachable[call->calleeBodyPosition] = true;
+        }
+    }
+
+    // Bodies in the AST not reached by the call graph are dead;
+    // clear them out, since they can't be reached and also can't
+    // be translated further due to possibility of being ill defined.
+    if (! keepUncalled) {
+        for (int f = 0; f < (int)functionSequence.size(); ++f) {
+            if (! reachable[f])
+                functionSequence[f] = nullptr;
+        }
+        functionSequence.erase(std::remove(functionSequence.begin(), functionSequence.end(), nullptr), functionSequence.end());
+    }
+}
+
+//
 // Satisfy rules for location qualifiers on inputs and outputs
 //
 void TIntermediate::inOutLocationCheck(TInfoSink& infoSink)
diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h
index 9ad50c7..6f6db92 100644
--- a/glslang/MachineIndependent/localintermediate.h
+++ b/glslang/MachineIndependent/localintermediate.h
@@ -67,7 +67,9 @@
 // by TIntermediate.
 //
 
-// Used for detecting recursion:  A "call" is a pair: <caller, callee>.
+// Used for call-graph algorithms for detecting recursion, missing bodies, and dead bodies.
+// A "call" is a pair: <caller, callee>.
+// There can be duplicates. General assumption is the list is small.
 struct TCall {
     TCall(const TString& pCaller, const TString& pCallee) : caller(pCaller), callee(pCallee) { }
     TString caller;
@@ -75,6 +77,7 @@
     bool visited;
     bool currentPath;
     bool errorGiven;
+    int calleeBodyPosition;
 };
 
 // A generic 1-D range.
@@ -361,7 +364,7 @@
 
     void addToCallGraph(TInfoSink&, const TString& caller, const TString& callee);
     void merge(TInfoSink&, TIntermediate&);
-    void finalCheck(TInfoSink&);
+    void finalCheck(TInfoSink&, bool keepUncalled);
 
     void addIoAccessed(const TString& name) { ioAccessed.insert(name); }
     bool inIoAccessed(const TString& name) const { return ioAccessed.find(name) != ioAccessed.end(); }
@@ -382,6 +385,7 @@
     int addXfbBufferOffset(const TType&);
     unsigned int computeTypeXfbSize(const TType&, bool& containsDouble) const;
     static int getBaseAlignment(const TType&, int& size, int& stride, bool std140, bool rowMajor);
+    bool promote(TIntermOperator*);
 
 protected:
     TIntermSymbol* addSymbol(int Id, const TString&, const TType&, const TConstUnionArray&, TIntermTyped* subtree, const TSourceLoc&);
@@ -392,15 +396,16 @@
     void mergeImplicitArraySizes(TType&, const TType&);
     void mergeErrorCheck(TInfoSink&, const TIntermSymbol&, const TIntermSymbol&, bool crossStage);
     void checkCallGraphCycles(TInfoSink&);
+    void checkCallGraphBodies(TInfoSink&, bool keepUncalled);
     void inOutLocationCheck(TInfoSink&);
     TIntermSequence& findLinkerObjects() const;
     bool userOutputUsed() const;
     static int getBaseAlignmentScalar(const TType&, int& size);
     bool isSpecializationOperation(const TIntermOperator&) const;
-    bool promote(TIntermOperator*);
     bool promoteUnary(TIntermUnary&);
     bool promoteBinary(TIntermBinary&);
     void addSymbolLinkageNode(TIntermAggregate*& linkage, TSymbolTable&, const TString&);
+    bool promoteAggregate(TIntermAggregate&);
     
     const EShLanguage language;  // stage, known at construction time
     EShSource source;            // source language, known a bit later
diff --git a/glslang/MachineIndependent/parseVersions.h b/glslang/MachineIndependent/parseVersions.h
index 967d352..acb5750 100755
--- a/glslang/MachineIndependent/parseVersions.h
+++ b/glslang/MachineIndependent/parseVersions.h
@@ -110,6 +110,7 @@
     void getPreamble(std::string&);
     bool relaxedErrors()    const { return (messages & EShMsgRelaxedErrors) != 0; }
     bool suppressWarnings() const { return (messages & EShMsgSuppressWarnings) != 0; }
+    bool isReadingHLSL()    const { return (messages & EShMsgReadHlsl) == EShMsgReadHlsl; }
 
     TInfoSink& infoSink;
 
diff --git a/glslang/MachineIndependent/preprocessor/Pp.cpp b/glslang/MachineIndependent/preprocessor/Pp.cpp
index 3c6d012..824a69a 100644
--- a/glslang/MachineIndependent/preprocessor/Pp.cpp
+++ b/glslang/MachineIndependent/preprocessor/Pp.cpp
@@ -897,7 +897,9 @@
             token = CPPifdef(0, ppToken);
             break;
         case PpAtomInclude:
-            parseContext.ppRequireExtensions(ppToken->loc, 1, &E_GL_GOOGLE_include_directive, "#include");
+            if(!parseContext.isReadingHLSL()) {
+                parseContext.ppRequireExtensions(ppToken->loc, 1, &E_GL_GOOGLE_include_directive, "#include");
+            }
             token = CPPinclude(ppToken);
             break;
         case PpAtomLine:
diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h
index 6793cdd..afdc7d1 100644
--- a/glslang/Public/ShaderLang.h
+++ b/glslang/Public/ShaderLang.h
@@ -146,6 +146,7 @@
     EShMsgOnlyPreprocessor = (1 << 5),  // only print out errors produced by the preprocessor
     EShMsgReadHlsl         = (1 << 6),  // use HLSL parsing rules and semantics
     EShMsgCascadingErrors  = (1 << 7),  // get cascading errors; risks error-recovery issues, instead of an early exit
+    EShMsgKeepUncalled     = (1 << 8),  // for testing, don't eliminate uncalled functions
 };
 
 //
@@ -304,6 +305,7 @@
         const char* const* s, const int* l, const char* const* names, int n);
     void setPreamble(const char* s) { preamble = s; }
     void setEntryPoint(const char* entryPoint);
+    void setSourceEntryPoint(const char* sourceEntryPointName);
     void setShiftSamplerBinding(unsigned int base);
     void setShiftTextureBinding(unsigned int base);
     void setShiftImageBinding(unsigned int base);
@@ -374,9 +376,7 @@
         // Signals that the parser will no longer use the contents of the
         // specified IncludeResult.
         virtual void releaseInclude(IncludeResult* result) = 0;
-#ifdef __ANDROID__
-        virtual ~Includer() {} // Pacify -Werror=non-virtual-dtor
-#endif
+        virtual ~Includer() {}
     };
 
     // Returns an error message for any #include directive.
@@ -437,6 +437,9 @@
     const char* preamble;
     int numStrings;
 
+    // a function in the source string can be renamed FROM this TO the name given in setEntryPoint.
+    std::string sourceEntryPointName;
+
     friend class TProgram;
 
 private:
diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp
index 429f445..f0332aa 100644
--- a/gtests/Hlsl.FromFile.cpp
+++ b/gtests/Hlsl.FromFile.cpp
@@ -134,6 +134,9 @@
         {"hlsl.intrinsics.negative.comp", "ComputeShaderFunction"},
         {"hlsl.intrinsics.negative.frag", "PixelShaderFunction"},
         {"hlsl.intrinsics.negative.vert", "VertexShaderFunction"},
+        {"hlsl.intrinsics.promote.frag", "main"},
+        {"hlsl.intrinsics.promote.down.frag", "main"},
+        {"hlsl.intrinsics.promote.outputs.frag", "main"},
         {"hlsl.layout.frag", "main"},
         {"hlsl.load.2dms.dx10.frag", "main"},
         {"hlsl.load.array.dx10.frag", "main"},
@@ -160,6 +163,7 @@
         {"hlsl.partialInit.frag", "PixelShaderFunction"},
         {"hlsl.pp.line.frag", "main"},
         {"hlsl.precise.frag", "main"},
+        {"hlsl.promote.atomic.frag", "main"},
         {"hlsl.promote.binary.frag", "main"},
         {"hlsl.promote.vec1.frag", "main"},
         {"hlsl.promotions.frag", "main"},
@@ -200,6 +204,8 @@
         {"hlsl.shapeConvRet.frag", "main"},
         {"hlsl.stringtoken.frag", "main"},
         {"hlsl.string.frag", "main"},
+        {"hlsl.structarray.flatten.frag", "main"},
+        {"hlsl.structarray.flatten.geom", "main"},
         {"hlsl.structin.vert", "main"},
         {"hlsl.intrinsics.vert", "VertexShaderFunction"},
         {"hlsl.matType.frag", "PixelShaderFunction"},
diff --git a/gtests/Link.FromFile.cpp b/gtests/Link.FromFile.cpp
index 2651a1e..ab845bf 100644
--- a/gtests/Link.FromFile.cpp
+++ b/gtests/Link.FromFile.cpp
@@ -99,6 +99,7 @@
         {"150.tesc", "150.tese", "400.tesc", "400.tese", "410.tesc", "420.tesc", "420.tese"},
         {"max_vertices_0.geom"},
         {"es-link1.frag", "es-link2.frag"},
+        {"missingBodies.vert"}
     })),
 );
 // clang-format on
diff --git a/gtests/TestFixture.cpp b/gtests/TestFixture.cpp
index 7d27b3b..db2b81d 100644
--- a/gtests/TestFixture.cpp
+++ b/gtests/TestFixture.cpp
@@ -84,9 +84,11 @@
             break;
         case Target::Spv:
             result = static_cast<EShMessages>(result | EShMsgSpvRules);
+            result = static_cast<EShMessages>(result | EShMsgKeepUncalled);
             break;
         case Target::BothASTAndSpv:
             result = static_cast<EShMessages>(result | EShMsgSpvRules | EShMsgAST);
+            result = static_cast<EShMessages>(result | EShMsgKeepUncalled);
             break;
     };
 
diff --git a/hlsl/hlslGrammar.cpp b/hlsl/hlslGrammar.cpp
index 10dfcc8..e676e95 100755
--- a/hlsl/hlslGrammar.cpp
+++ b/hlsl/hlslGrammar.cpp
@@ -308,8 +308,13 @@
     // identifier
     HlslToken idToken;
     while (acceptIdentifier(idToken)) {
+        TString* fnName = idToken.string;
+
+        // Potentially rename shader entry point function.  No-op most of the time.
+        parseContext.renameShaderFunction(fnName);
+
         // function_parameters
-        TFunction& function = *new TFunction(idToken.string, declaredType);
+        TFunction& function = *new TFunction(fnName, declaredType);
         if (acceptFunctionParameters(function)) {
             // post_decls
             acceptPostDecls(function.getWritableType().getQualifier());
@@ -384,7 +389,7 @@
                 else if (variableType.getBasicType() == EbtBlock)
                     parseContext.declareBlock(idToken.loc, variableType, idToken.string);
                 else {
-                    if (variableType.getQualifier().storage == EvqUniform && ! variableType.isOpaque()) {
+                    if (variableType.getQualifier().storage == EvqUniform && ! variableType.containsOpaque()) {
                         // this isn't really an individual variable, but a member of the $Global buffer
                         parseContext.growGlobalUniformBlock(idToken.loc, variableType, *idToken.string);
                     } else {
@@ -2210,6 +2215,20 @@
         return false;
     }
 
+    // This is to guarantee we do this no matter how we get out of the stack frame.
+    // This way there's no bug if an early return forgets to do it.
+    struct tFinalize {
+        tFinalize(HlslParseContext& p) : parseContext(p) { }
+        ~tFinalize() { parseContext.finalizeFlattening(); }
+       HlslParseContext& parseContext;
+    } finalize(parseContext);
+
+    // Initialize the flattening accumulation data, so we can track data across multiple bracket or
+    // dot operators.  This can also be nested, e.g, for [], so we have to track each nesting
+    // level: hence the init and finalize.  Even though in practice these must be
+    // constants, they are parsed no matter what.
+    parseContext.initFlattening();
+
     // Something was found, chain as many postfix operations as exist.
     do {
         TSourceLoc loc = token.loc;
@@ -2243,7 +2262,7 @@
             node = parseContext.handleDotDereference(field.loc, node, *field.string);
 
             // In the event of a method node, we look for an open paren and accept the function call.
-            if (node->getAsMethodNode() != nullptr && peekTokenClass(EHTokLeftParen)) {
+            if (node != nullptr && node->getAsMethodNode() != nullptr && peekTokenClass(EHTokLeftParen)) {
                 if (! acceptFunctionCall(field, node, base)) {
                     expected("function parameters");
                     return false;
diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp
index 8685dcd..54cd10f 100755
--- a/hlsl/hlslParseHelper.cpp
+++ b/hlsl/hlslParseHelper.cpp
@@ -45,12 +45,14 @@
 #include "../glslang/OSDependent/osinclude.h"
 
 #include <algorithm>
+#include <functional>
 #include <cctype>
 
 namespace glslang {
 
 HlslParseContext::HlslParseContext(TSymbolTable& symbolTable, TIntermediate& interm, bool parsingBuiltins,
                                    int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TInfoSink& infoSink,
+                                   const TString sourceEntryPointName,
                                    bool forwardCompatible, EShMessages messages) :
     TParseContextBase(symbolTable, interm, parsingBuiltins, version, profile, spvVersion, language, infoSink, forwardCompatible, messages),
     contextPragma(true, false),
@@ -58,7 +60,8 @@
     postEntryPointReturn(false),
     limits(resources.limits),
     entryPointOutput(nullptr),
-    nextInLocation(0), nextOutLocation(0)
+    nextInLocation(0), nextOutLocation(0),
+    sourceEntryPointName(sourceEntryPointName)
 {
     globalUniformDefaults.clear();
     globalUniformDefaults.layoutMatrix = ElmRowMajor;
@@ -649,11 +652,11 @@
     else {
         // at least one of base and index is variable...
 
-        if (base->getAsSymbolNode() && shouldFlatten(base->getType())) {
+        if (base->getAsSymbolNode() && (wasFlattened(base) || shouldFlatten(base->getType()))) {
             if (index->getQualifier().storage != EvqConst)
                 error(loc, "Invalid variable index to flattened uniform array", base->getAsSymbolNode()->getName().c_str(), "");
 
-            result = flattenAccess(base, indexValue);
+            result = flattenAccess(loc, base, indexValue);
             flattened = (result != base);
         } else {
             if (index->getQualifier().storage == EvqConst) {
@@ -829,8 +832,8 @@
             }
         }
         if (fieldFound) {
-            if (base->getAsSymbolNode() && shouldFlatten(base->getType()))
-                result = flattenAccess(base, member);
+            if (base->getAsSymbolNode() && (wasFlattened(base) || shouldFlatten(base->getType())))
+                result = flattenAccess(loc, base, member);
             else {
                 if (base->getType().getQualifier().storage == EvqConst)
                     result = intermediate.foldDereference(base, member, loc);
@@ -848,6 +851,12 @@
     return result;
 }
 
+// Determine whether we should flatten an arbitrary type.
+bool HlslParseContext::shouldFlatten(const TType& type) const
+{
+    return shouldFlattenIO(type) || shouldFlattenUniform(type); 
+}
+
 // Is this an IO variable that can't be passed down the stack?
 // E.g., pipeline inputs to the vertex stage and outputs from the fragment stage.
 bool HlslParseContext::shouldFlattenIO(const TType& type) const
@@ -867,27 +876,98 @@
 {
     const TStorageQualifier qualifier = type.getQualifier().storage;
 
-    return type.isArray() &&
-        intermediate.getFlattenUniformArrays() &&
+    return ((type.isArray() && intermediate.getFlattenUniformArrays()) || type.isStruct()) &&
         qualifier == EvqUniform &&
-        type.isOpaque();
+        type.containsOpaque();
 }
 
+// Top level variable flattening: construct data
 void HlslParseContext::flatten(const TSourceLoc& loc, const TVariable& variable)
 {
     const TType& type = variable.getType();
 
-    // Presently, flattening of structure arrays is unimplemented.
-    // We handle one, or the other.
-    if (type.isArray() && type.isStruct()) {
-        error(loc, "cannot flatten structure array", variable.getName().c_str(), "");
+    // emplace gives back a pair whose .first is an iterator to the item...
+    auto entry = flattenMap.emplace(variable.getUniqueId(), 
+                                    TFlattenData(type.getQualifier().layoutBinding));
+        
+    // ... and the item is a map pair, so first->second is the TFlattenData itself.
+    flatten(loc, variable, type, entry.first->second, "");
+}
+    
+// Recursively flatten the given variable at the provided type, building the flattenData as we go.
+//
+// This is mutually recursive with flattenStruct and flattenArray.
+// We are going to flatten an arbitrarily nested composite structure into a linear sequence of
+// members, and later on, we want to turn a path through the tree structure into a final
+// location in this linear sequence.
+//
+// If the tree was N-ary, that can be directly calculated.  However, we are dealing with
+// arbitrary numbers - peraps a struct of 7 members containing an array of 3.  Thus, we must
+// build a data structure to allow the sequence of bracket and dot operators on arrays and
+// structs to arrive at the proper member.
+//
+// To avoid storing a tree with pointers, we are going to flatten the tree into a vector of integers.
+// The leaves are the indexes into the flattened member array.
+// Each level will have the next location for the Nth item stored sequentially, so for instance:
+//
+// struct { float2 a[2]; int b; float4 c[3] };
+//
+// This will produce the following flattened tree:
+// Pos: 0  1   2    3  4    5  6   7     8   9  10   11  12 13
+//     (3, 7,  8,   5, 6,   0, 1,  2,   11, 12, 13,   3,  4, 5}
+//
+// Given a reference to mystruct.c[1], the access chain is (2,1), so we traverse:
+//   (0+2) = 8  -->  (8+1) = 12 -->   12 = 4
+//
+// so the 4th flattened member in traversal order is ours.
+//
+int HlslParseContext::flatten(const TSourceLoc& loc, const TVariable& variable, const TType& type,
+                              TFlattenData& flattenData, TString name)
+{
+    // TODO: when struct splitting is in place we can remove this restriction.
+    if (language == EShLangGeometry) {
+        const TType derefType(type, 0);
+        if (!isFinalFlattening(derefType) && type.getQualifier().storage == EvqVaryingIn)
+            error(loc, "recursive type not yet supported in GS input", variable.getName().c_str(), "");
     }
 
-    if (type.isStruct())
-        flattenStruct(variable);
-    
+    // If something is an arrayed struct, the array flattener will recursively call flatten()
+    // to then flatten the struct, so this is an "if else": we don't do both.
     if (type.isArray())
-        flattenArray(loc, variable);
+        return flattenArray(loc, variable, type, flattenData, name);
+    else if (type.isStruct())
+        return flattenStruct(loc, variable, type, flattenData, name);
+    else {
+        assert(0); // should never happen
+        return -1;
+    }
+}
+
+// Add a single flattened member to the flattened data being tracked for the composite
+// Returns true for the final flattening level.
+int HlslParseContext::addFlattenedMember(const TSourceLoc& loc, 
+                                          const TVariable& variable, const TType& type, TFlattenData& flattenData, 
+                                          const TString& memberName, bool track)
+{
+    if (isFinalFlattening(type)) {
+        // This is as far as we flatten.  Insert the variable.
+        TVariable* memberVariable = makeInternalVariable(memberName.c_str(), type);
+        mergeQualifiers(memberVariable->getWritableType().getQualifier(), variable.getType().getQualifier());
+
+        if (flattenData.nextBinding != TQualifier::layoutBindingEnd)
+            memberVariable->getWritableType().getQualifier().layoutBinding = flattenData.nextBinding++;
+
+        flattenData.offsets.push_back(flattenData.members.size());
+        flattenData.members.push_back(memberVariable);
+
+        if (track)
+            trackLinkageDeferred(*memberVariable);
+
+        return flattenData.offsets.size()-1; // location of the member reference
+    } else {
+        // Further recursion required
+        return flatten(loc, variable, type, flattenData, memberName);
+    }
 }
 
 // Figure out the mapping between an aggregate's top members and an
@@ -897,84 +977,103 @@
 //      effecting a transfer of this information to the flattened variable form.
 //
 // Assumes shouldFlatten() or equivalent was called first.
-//
-// TODO: generalize this to arbitrary nesting?
-void HlslParseContext::flattenStruct(const TVariable& variable)
+int HlslParseContext::flattenStruct(const TSourceLoc& loc, const TVariable& variable, const TType& type, 
+                                     TFlattenData& flattenData, TString name)
 {
-    TVector<TVariable*> memberVariables;
+    assert(type.isStruct());
 
-    auto members = *variable.getType().getStruct();
+    auto members = *type.getStruct();
+
+    // Reserve space for this tree level.
+    int start = flattenData.offsets.size();
+    int pos   = start;
+    flattenData.offsets.resize(int(pos + members.size()), -1);
+
     for (int member = 0; member < (int)members.size(); ++member) {
-        TVariable* memberVariable = makeInternalVariable(members[member].type->getFieldName().c_str(),
-                                                         *members[member].type);
-        mergeQualifiers(memberVariable->getWritableType().getQualifier(), variable.getType().getQualifier());
-        memberVariables.push_back(memberVariable);
+        TType& dereferencedType = *members[member].type;
+        const TString memberName = name + (name.empty() ? "" : ".") + dereferencedType.getFieldName();
+
+        const int mpos = addFlattenedMember(loc, variable, dereferencedType, flattenData, memberName, false);
+        flattenData.offsets[pos++] = mpos;
 
         // N.B. Erase I/O-related annotations from the source-type member.
-        members[member].type->getQualifier().makeTemporary();
+        dereferencedType.getQualifier().makeTemporary();
     }
 
-    flattenMap[variable.getUniqueId()] = memberVariables;
+    return start;
 }
 
 // Figure out mapping between an array's members and an
 // equivalent set of individual variables.
 //
 // Assumes shouldFlatten() or equivalent was called first.
-void HlslParseContext::flattenArray(const TSourceLoc& loc, const TVariable& variable)
+int HlslParseContext::flattenArray(const TSourceLoc& loc, const TVariable& variable, const TType& type, 
+                                   TFlattenData& flattenData, TString name)
 {
-    const TType& type = variable.getType();
     assert(type.isArray());
 
     if (type.isImplicitlySizedArray())
         error(loc, "cannot flatten implicitly sized array", variable.getName().c_str(), "");
 
-    if (type.getArraySizes()->getNumDims() != 1)
-        error(loc, "cannot flatten multi-dimensional array", variable.getName().c_str(), "");
-
-    const int size = type.getCumulativeArraySize();
-
-    TVector<TVariable*> memberVariables;
-
+    const int size = type.getOuterArraySize();
     const TType dereferencedType(type, 0);
-    int binding = type.getQualifier().layoutBinding;
 
-    if (dereferencedType.isStruct() || dereferencedType.isArray()) {
-        error(loc, "cannot flatten array of aggregate types", variable.getName().c_str(), "");
-    }
+    if (name.empty())
+        name = variable.getName();
 
-    for (int element=0; element < size; ++element) {
+    // Reserve space for this tree level.
+    int start = flattenData.offsets.size();
+    int pos   = start;
+    flattenData.offsets.resize(int(pos + size), -1);
+
+    for (int element=0; element < size; ++element) {      
         char elementNumBuf[20];  // sufficient for MAXINT
         snprintf(elementNumBuf, sizeof(elementNumBuf)-1, "[%d]", element);
-        const TString memberName = variable.getName() + elementNumBuf;
+        const int mpos = addFlattenedMember(loc, variable, dereferencedType, flattenData,
+                                            name + elementNumBuf, true);
 
-        TVariable* memberVariable = makeInternalVariable(memberName.c_str(), dereferencedType);
-        memberVariable->getWritableType().getQualifier() = variable.getType().getQualifier();
-
-        memberVariable->getWritableType().getQualifier().layoutBinding = binding;
-
-        if (binding != TQualifier::layoutBindingEnd)
-            ++binding;
-
-        memberVariables.push_back(memberVariable);
-        trackLinkageDeferred(*memberVariable);
+        flattenData.offsets[pos++] = mpos;
     }
 
-    flattenMap[variable.getUniqueId()] = memberVariables;
+    return start;
 }
 
+// Return true if we have flattened this node.
+bool HlslParseContext::wasFlattened(const TIntermTyped* node) const
+{
+    return node != nullptr &&
+        node->getAsSymbolNode() != nullptr &&
+        wasFlattened(node->getAsSymbolNode()->getId());
+}
+
+
 // Turn an access into an aggregate that was flattened to instead be
 // an access to the individual variable the member was flattened to.
 // Assumes shouldFlatten() or equivalent was called first.
-TIntermTyped* HlslParseContext::flattenAccess(TIntermTyped* base, int member)
+TIntermTyped* HlslParseContext::flattenAccess(const TSourceLoc&, TIntermTyped* base, int member)
 {
+    const TType dereferencedType(base->getType(), member);  // dereferenced type
+
     const TIntermSymbol& symbolNode = *base->getAsSymbolNode();
 
-    if (flattenMap.find(symbolNode.getId()) == flattenMap.end())
+    const auto flattenData = flattenMap.find(symbolNode.getId());
+
+    if (flattenData == flattenMap.end())
         return base;
 
-    const TVariable* memberVariable = flattenMap[symbolNode.getId()][member];
-    return intermediate.addSymbol(*memberVariable);
+    // Calculate new cumulative offset from the packed tree
+    flattenOffset.back() = flattenData->second.offsets[flattenOffset.back() + member];
+
+    if (isFinalFlattening(dereferencedType)) {
+        // Finished flattening: create symbol for variable
+        member = flattenData->second.offsets[flattenOffset.back()];
+        const TVariable* memberVariable = flattenData->second.members[member];
+        return intermediate.addSymbol(*memberVariable);
+    } else {
+        // If this is not the final flattening, accumulate the position and return
+        // an object of the partially dereferenced type.
+        return new TIntermSymbol(symbolNode.getId(), "flattenShadow", dereferencedType);
+    }
 }
 
 // Variables that correspond to the user-interface in and out of a stage
@@ -1000,8 +1099,8 @@
         }
     };
 
-    if (shouldFlatten(variable.getType())) {
-        auto& memberList = flattenMap[variable.getUniqueId()];
+    if (wasFlattened(variable.getUniqueId())) {
+        auto& memberList = flattenMap[variable.getUniqueId()].members;
         for (auto member = memberList.begin(); member != memberList.end(); ++member)
             assignLocation(**member);
     } else
@@ -1292,7 +1391,7 @@
         return nullptr;
 
     const auto mustFlatten = [&](const TIntermTyped& node) {
-        return shouldFlatten(node.getType()) && node.getAsSymbolNode() &&
+        return wasFlattened(&node) && node.getAsSymbolNode() &&
                flattenMap.find(node.getAsSymbolNode()->getId()) != flattenMap.end();
     };
 
@@ -1325,10 +1424,10 @@
         memberCount = left->getType().getCumulativeArraySize();
 
     if (flattenLeft)
-        leftVariables = &flattenMap.find(left->getAsSymbolNode()->getId())->second;
+        leftVariables = &flattenMap.find(left->getAsSymbolNode()->getId())->second.members;
 
     if (flattenRight) {
-        rightVariables = &flattenMap.find(right->getAsSymbolNode()->getId())->second;
+        rightVariables = &flattenMap.find(right->getAsSymbolNode()->getId())->second.members;
     } else {
         // The RHS is not flattened.  There are several cases:
         // 1. 1 item to copy:  Use the RHS directly.
@@ -1353,13 +1452,15 @@
         }
     }
 
+    int memberIdx = 0;
+
     const auto getMember = [&](bool flatten, TIntermTyped* node,
                                const TVector<TVariable*>& memberVariables, int member,
                                TOperator op, const TType& memberType) -> TIntermTyped * {
         TIntermTyped* subTree;
-        if (flatten)
-            subTree = intermediate.addSymbol(*memberVariables[member]);
-        else {
+        if (flatten && isFinalFlattening(memberType)) {
+            subTree = intermediate.addSymbol(*memberVariables[memberIdx++]);
+        } else {
             subTree = intermediate.addIndex(op, node, intermediate.addConstantUnion(member, loc), loc);
             subTree->setType(memberType);
         }
@@ -1367,46 +1468,59 @@
         return subTree;
     };
 
-    // Return the proper RHS node: a new symbol from a TVariable, copy
-    // of an TIntermSymbol node, or sometimes the right node directly.
-    const auto getRHS = [&]() {
-        return rhsTempVar   ? intermediate.addSymbol(*rhsTempVar, loc) :
-               cloneSymNode ? intermediate.addSymbol(*cloneSymNode) :
-                              right;
+    // Cannot use auto here, because this is recursive, and auto can't work out the type without seeing the
+    // whole thing.  So, we'll resort to an explicit type via std::function.
+    const std::function<void(TIntermTyped* left, TIntermTyped* right)>
+    traverse = [&](TIntermTyped* left, TIntermTyped* right) -> void {
+        // If we get here, we are assigning to or from a whole array or struct that must be
+        // flattened, so have to do member-by-member assignment:
+
+        if (left->getType().isArray()) {
+            // array case
+            const TType dereferencedType(left->getType(), 0);
+
+            for (int element=0; element < left->getType().getOuterArraySize(); ++element) {
+                    // Add a new AST symbol node if we have a temp variable holding a complex RHS.
+                TIntermTyped* subRight = getMember(flattenRight, right, *rightVariables, element,
+                                                   EOpIndexDirect, dereferencedType);
+                TIntermTyped* subLeft = getMember(flattenLeft, left, *leftVariables, element,
+                                                  EOpIndexDirect, dereferencedType);
+
+                if (isFinalFlattening(dereferencedType))
+                    assignList = intermediate.growAggregate(assignList, intermediate.addAssign(op, subLeft, subRight, loc), loc);
+                else
+                    traverse(subLeft, subRight);
+            }
+        } else if (left->getType().isStruct()) {
+            // struct case
+            const auto& members = *left->getType().getStruct();
+
+            for (int member = 0; member < (int)members.size(); ++member) {
+                TIntermTyped* subRight = getMember(flattenRight, right, *rightVariables, member,
+                                                   EOpIndexDirectStruct, *members[member].type);
+                TIntermTyped* subLeft = getMember(flattenLeft, left, *leftVariables, member,
+                                                  EOpIndexDirectStruct, *members[member].type);
+
+                if (isFinalFlattening(*members[member].type))
+                    assignList = intermediate.growAggregate(assignList, intermediate.addAssign(op, subLeft, subRight, loc), loc);
+                else
+                    traverse(subLeft, subRight);
+            }
+        } else {
+            assert(0);  // we should never be called on a non-flattenable thing, because
+                        // that case bails out above to a simple copy.
+        }
+
     };
 
-    // Handle struct assignment
-    if (left->getType().isStruct()) {
-        // If we get here, we are assigning to or from a whole struct that must be
-        // flattened, so have to do member-by-member assignment:
-        const auto& members = *left->getType().getStruct();
+    // Use the proper RHS node: a new symbol from a TVariable, copy
+    // of an TIntermSymbol node, or sometimes the right node directly.
+    right = rhsTempVar   ? intermediate.addSymbol(*rhsTempVar, loc) :
+            cloneSymNode ? intermediate.addSymbol(*cloneSymNode) :
+            right;
 
-        for (int member = 0; member < (int)members.size(); ++member) {
-            TIntermTyped* subRight = getMember(flattenRight, getRHS(), *rightVariables, member,
-                                               EOpIndexDirectStruct, *members[member].type);
-            TIntermTyped* subLeft = getMember(flattenLeft, left, *leftVariables, member,
-                                              EOpIndexDirectStruct, *members[member].type);
-            assignList = intermediate.growAggregate(assignList, intermediate.addAssign(op, subLeft, subRight, loc), loc);
-        }
-    }
-
-    // Handle array assignment
-    if (left->getType().isArray()) {
-        // If we get here, we are assigning to or from a whole array that must be
-        // flattened, so have to do member-by-member assignment:
-
-        const TType dereferencedType(left->getType(), 0);
-        
-        for (int element=0; element < memberCount; ++element) {
-            // Add a new AST symbol node if we have a temp variable holding a complex RHS.
-            TIntermTyped* subRight = getMember(flattenRight, getRHS(), *rightVariables, element,
-                                               EOpIndexDirect, dereferencedType);
-            TIntermTyped* subLeft = getMember(flattenLeft, left, *leftVariables, element,
-                                              EOpIndexDirect, dereferencedType);
-
-            assignList = intermediate.growAggregate(assignList, intermediate.addAssign(op, subLeft, subRight, loc), loc);
-        }
-    }
+    // This makes the whole assignment, recursing through subtypes as needed.
+    traverse(left, right);
 
     assert(assignList != nullptr);
     assignList->setOperator(EOpSequence);
@@ -2555,7 +2669,7 @@
         //
         const TFunction* fnCandidate;
         bool builtIn;
-        fnCandidate = findFunction(loc, *function, builtIn);
+        fnCandidate = findFunction(loc, *function, builtIn, arguments);
         if (fnCandidate) {
             // This is a declared function that might map to
             //  - a built-in operator,
@@ -2597,21 +2711,27 @@
                 }
             }
 
+            // for decompositions, since we want to operate on the function node, not the aggregate holding
+            // output conversions.
+            const TIntermTyped* fnNode = result; 
+
+            decomposeIntrinsic(loc, result, arguments);       // HLSL->AST intrinsic decompositions
+            decomposeSampleMethods(loc, result, arguments);   // HLSL->AST sample method decompositions
+            decomposeGeometryMethods(loc, result, arguments); // HLSL->AST geometry method decompositions
+
             // Convert 'out' arguments.  If it was a constant folded built-in, it won't be an aggregate anymore.
             // Built-ins with a single argument aren't called with an aggregate, but they also don't have an output.
             // Also, build the qualifier list for user function calls, which are always called with an aggregate.
-            if (result->getAsAggregate()) {
+            // We don't do this is if there has been a decomposition, which will have added its own conversions
+            // for output parameters.
+            if (result == fnNode && result->getAsAggregate()) {
                 TQualifierList& qualifierList = result->getAsAggregate()->getQualifierList();
                 for (int i = 0; i < fnCandidate->getParamCount(); ++i) {
                     TStorageQualifier qual = (*fnCandidate)[i].type->getQualifier().storage;
                     qualifierList.push_back(qual);
                 }
-                result = addOutputArgumentConversions(*fnCandidate, *result->getAsAggregate());
+                result = addOutputArgumentConversions(*fnCandidate, *result->getAsOperator());
             }
-
-            decomposeIntrinsic(loc, result, arguments);       // HLSL->AST intrinsic decompositions
-            decomposeSampleMethods(loc, result, arguments);   // HLSL->AST sample method decompositions
-            decomposeGeometryMethods(loc, result, arguments); // HLSL->AST geometry method decompositions
         }
     }
 
@@ -2693,7 +2813,7 @@
             arg = intermediate.addShapeConversion(EOpFunctionCall, *function[i].type, arg);
             setArg(i, arg);
         } else {
-            if (shouldFlatten(arg->getType())) {
+            if (wasFlattened(arg)) {
                 // Will make a two-level subtree.
                 // The deepest will copy member-by-member to build the structure to pass.
                 // The level above that will be a two-operand EOpComma sequence that follows the copy by the
@@ -2724,14 +2844,24 @@
 //
 // Returns a node of a subtree that evaluates to the return value of the function.
 //
-TIntermTyped* HlslParseContext::addOutputArgumentConversions(const TFunction& function, TIntermAggregate& intermNode)
+TIntermTyped* HlslParseContext::addOutputArgumentConversions(const TFunction& function, TIntermOperator& intermNode)
 {
-    TIntermSequence& arguments = intermNode.getSequence();
+    assert (intermNode.getAsAggregate() != nullptr || intermNode.getAsUnaryNode() != nullptr);
+
+    const TSourceLoc& loc = intermNode.getLoc();
+
+    TIntermSequence argSequence; // temp sequence for unary node args
+
+    if (intermNode.getAsUnaryNode())
+        argSequence.push_back(intermNode.getAsUnaryNode()->getOperand());
+
+    TIntermSequence& arguments = argSequence.empty() ? intermNode.getAsAggregate()->getSequence() : argSequence;
+
     const auto needsConversion = [&](int argNum) {
         return function[argNum].type->getQualifier().isParamOutput() &&
                (*function[argNum].type != arguments[argNum]->getAsTyped()->getType() ||
                 shouldConvertLValue(arguments[argNum]) ||
-                shouldFlatten(arguments[argNum]->getAsTyped()->getType()));
+                wasFlattened(arguments[argNum]->getAsTyped()));
     };
 
     // Will there be any output conversions?
@@ -2759,8 +2889,8 @@
     if (intermNode.getBasicType() != EbtVoid) {
         // do the "tempRet = function(...), " bit from above
         tempRet = makeInternalVariable("tempReturn", intermNode.getType());
-        TIntermSymbol* tempRetNode = intermediate.addSymbol(*tempRet, intermNode.getLoc());
-        conversionTree = intermediate.addAssign(EOpAssign, tempRetNode, &intermNode, intermNode.getLoc());
+        TIntermSymbol* tempRetNode = intermediate.addSymbol(*tempRet, loc);
+        conversionTree = intermediate.addAssign(EOpAssign, tempRetNode, &intermNode, loc);
     } else
         conversionTree = &intermNode;
 
@@ -2775,7 +2905,7 @@
             // Make a temporary for what the function expects the argument to look like.
             TVariable* tempArg = makeInternalVariable("tempArg", *function[i].type);
             tempArg->getWritableType().getQualifier().makeTemporary();
-            TIntermSymbol* tempArgNode = intermediate.addSymbol(*tempArg, intermNode.getLoc());
+            TIntermSymbol* tempArgNode = intermediate.addSymbol(*tempArg, loc);
 
             // This makes the deepest level, the member-wise copy
             TIntermTyped* tempAssign = handleAssign(arguments[i]->getLoc(), EOpAssign, arguments[i]->getAsTyped(), tempArgNode);
@@ -2783,17 +2913,18 @@
             conversionTree = intermediate.growAggregate(conversionTree, tempAssign, arguments[i]->getLoc());
 
             // replace the argument with another node for the same tempArg variable
-            arguments[i] = intermediate.addSymbol(*tempArg, intermNode.getLoc());
+            arguments[i] = intermediate.addSymbol(*tempArg, loc);
         }
     }
 
     // Finalize the tree topology (see bigger comment above).
     if (tempRet) {
         // do the "..., tempRet" bit from above
-        TIntermSymbol* tempRetNode = intermediate.addSymbol(*tempRet, intermNode.getLoc());
-        conversionTree = intermediate.growAggregate(conversionTree, tempRetNode, intermNode.getLoc());
+        TIntermSymbol* tempRetNode = intermediate.addSymbol(*tempRet, loc);
+        conversionTree = intermediate.growAggregate(conversionTree, tempRetNode, loc);
     }
-    conversionTree = intermediate.setAggregateOperator(conversionTree, EOpComma, intermNode.getType(), intermNode.getLoc());
+
+    conversionTree = intermediate.setAggregateOperator(conversionTree, EOpComma, intermNode.getType(), loc);
 
     return conversionTree;
 }
@@ -4346,7 +4477,8 @@
 //
 // Return the function symbol if found, otherwise nullptr.
 //
-const TFunction* HlslParseContext::findFunction(const TSourceLoc& loc, const TFunction& call, bool& builtIn)
+const TFunction* HlslParseContext::findFunction(const TSourceLoc& loc, const TFunction& call, bool& builtIn,
+                                                TIntermNode* args)
 {
     // const TFunction* function = nullptr;
 
@@ -4374,8 +4506,10 @@
         return candidateList[0];
     }
 
+    bool allowOnlyUpConversions = true;
+
     // can 'from' convert to 'to'?
-    const auto convertible = [this](const TType& from, const TType& to) -> bool {
+    const auto convertible = [&](const TType& from, const TType& to, TOperator op, int arg) -> bool {
         if (from == to)
             return true;
 
@@ -4384,9 +4518,33 @@
             from.isStruct() || to.isStruct())
             return false;
 
+        switch (op) {
+        case EOpInterlockedAdd:
+        case EOpInterlockedAnd:
+        case EOpInterlockedCompareExchange:
+        case EOpInterlockedCompareStore:
+        case EOpInterlockedExchange:
+        case EOpInterlockedMax:
+        case EOpInterlockedMin:
+        case EOpInterlockedOr:
+        case EOpInterlockedXor:
+            // We do not promote the texture or image type for these ocodes.  Normally that would not
+            // be an issue because it's a buffer, but we haven't decomposed the opcode yet, and at this
+            // stage it's merely e.g, a basic integer type.
+            // 
+            // Instead, we want to promote other arguments, but stay within the same family.  In other
+            // words, InterlockedAdd(RWBuffer<int>, ...) will always use the int flavor, never the uint flavor,
+            // but it is allowed to promote its other arguments.
+            if (arg == 0)
+                return false;
+        default:
+            break;
+        }
+
         // basic types have to be convertible
-        if (! intermediate.canImplicitlyPromote(from.getBasicType(), to.getBasicType(), EOpFunctionCall))
-            return false;
+        if (allowOnlyUpConversions)
+            if (! intermediate.canImplicitlyPromote(from.getBasicType(), to.getBasicType(), EOpFunctionCall))
+                return false;
 
         // shapes have to be convertible
         if ((from.isScalarOrVec1() && to.isScalarOrVec1()) ||
@@ -4452,9 +4610,89 @@
     // send to the generic selector
     const TFunction* bestMatch = selectFunction(candidateList, call, convertible, better, tie);
 
-    if (bestMatch == nullptr)
+    if (bestMatch == nullptr) {
+        // If there is nothing selected by allowing only up-conversions (to a larger linearize() value),
+        // we instead try down-conversions, which are valid in HLSL, but not preferred if there are any
+        // upconversions possible.
+        allowOnlyUpConversions = false;
+        bestMatch = selectFunction(candidateList, call, convertible, better, tie);
+    }
+
+    if (bestMatch == nullptr) {
         error(loc, "no matching overloaded function found", call.getName().c_str(), "");
-    else if (tie)
+        return nullptr;
+    }
+
+    // For builtins, we can convert across the arguments.  This will happen in several steps:
+    // Step 1:  If there's an exact match, use it.
+    // Step 2a: Otherwise, get the operator from the best match and promote arguments:
+    // Step 2b: reconstruct the TFunction based on the new arg types
+    // Step 3:  Re-select after type promotion is applied, to find proper candidate.
+    if (builtIn) {
+        // Step 1: If there's an exact match, use it.
+        if (call.getMangledName() == bestMatch->getMangledName())
+            return bestMatch;
+
+        // Step 2a: Otherwise, get the operator from the best match and promote arguments as if we
+        // are that kind of operator.
+        if (args != nullptr) {
+            // The arg list can be a unary node, or an aggregate.  We have to handle both.
+            // We will use the normal promote() facilities, which require an interm node.
+            TIntermOperator* promote = nullptr;
+
+            if (call.getParamCount() == 1) {
+                promote = new TIntermUnary(bestMatch->getBuiltInOp());
+                promote->getAsUnaryNode()->setOperand(args->getAsTyped());
+            } else {
+                promote = new TIntermAggregate(bestMatch->getBuiltInOp());
+                promote->getAsAggregate()->getSequence().swap(args->getAsAggregate()->getSequence());
+            }
+
+            if (! intermediate.promote(promote))
+                return nullptr;
+
+            // Obtain the promoted arg list.
+            if (call.getParamCount() == 1) {
+                args = promote->getAsUnaryNode()->getOperand();
+            } else {
+                promote->getAsAggregate()->getSequence().swap(args->getAsAggregate()->getSequence());
+            }
+        }
+
+        // Step 2b: reconstruct the TFunction based on the new arg types
+        TFunction convertedCall(&call.getName(), call.getType(), call.getBuiltInOp());
+
+        if (args->getAsAggregate()) {
+            // Handle aggregates: put all args into the new function call
+            for (int arg=0; arg<int(args->getAsAggregate()->getSequence().size()); ++arg) {
+                // TODO: But for constness, we could avoid the new & shallowCopy, and use the pointer directly.
+                TParameter param = { 0, new TType };
+                param.type->shallowCopy(args->getAsAggregate()->getSequence()[arg]->getAsTyped()->getType());
+                convertedCall.addParameter(param);
+            }
+        } else if (args->getAsUnaryNode()) {
+            // Handle unaries: put all args into the new function call
+            TParameter param = { 0, new TType };
+            param.type->shallowCopy(args->getAsUnaryNode()->getOperand()->getAsTyped()->getType());
+            convertedCall.addParameter(param);
+        } else if (args->getAsTyped()) {
+            // Handle bare e.g, floats, not in an aggregate.
+            TParameter param = { 0, new TType };
+            param.type->shallowCopy(args->getAsTyped()->getType());
+            convertedCall.addParameter(param);
+        } else {
+            assert(0); // unknown argument list.
+            return nullptr;
+        }
+
+        // Step 3: Re-select after type promotion, to find proper candidate
+        // send to the generic selector
+        bestMatch = selectFunction(candidateList, convertedCall, convertible, better, tie);
+
+        // At this point, there should be no tie.
+    }
+
+    if (tie)
         error(loc, "ambiguous best function under implicit type conversion", call.getName().c_str(), "");
 
     return bestMatch;
@@ -4497,23 +4735,23 @@
 
     inheritGlobalDefaults(type.getQualifier());
 
-    bool flattenVar = false;
+    const bool flattenVar = shouldFlatten(type);
 
     // Declare the variable
     if (type.isArray()) {
         // array case
-        flattenVar = shouldFlatten(type);
         declareArray(loc, identifier, type, symbol, !flattenVar);
-        if (flattenVar)
-            flatten(loc, *symbol->getAsVariable());
     } else {
         // non-array case
         if (! symbol)
-            symbol = declareNonArray(loc, identifier, type);
+            symbol = declareNonArray(loc, identifier, type, !flattenVar);
         else if (type != symbol->getType())
             error(loc, "cannot change the type of", "redeclaration", symbol->getName().c_str());
     }
 
+    if (flattenVar)
+        flatten(loc, *symbol->getAsVariable());
+
     if (! symbol)
         return nullptr;
 
@@ -4566,14 +4804,14 @@
 //
 // Return the successfully declared variable.
 //
-TVariable* HlslParseContext::declareNonArray(const TSourceLoc& loc, TString& identifier, TType& type)
+TVariable* HlslParseContext::declareNonArray(const TSourceLoc& loc, TString& identifier, TType& type, bool track)
 {
     // make a new variable
     TVariable* variable = new TVariable(&identifier, type);
 
     // add variable to symbol table
     if (symbolTable.insert(*variable)) {
-        if (symbolTable.atGlobalLevel())
+        if (track && symbolTable.atGlobalLevel())
             trackLinkageDeferred(*variable);
         return variable;
     }
@@ -5539,4 +5777,13 @@
     return switchNode;
 }
 
+// Potentially rename shader entry point function
+void HlslParseContext::renameShaderFunction(TString*& name) const
+{
+    // Replace the entry point name given in the shader with the real entry point name,
+    // if there is a substitution.
+    if (name != nullptr && *name == sourceEntryPointName)
+        name = new TString(intermediate.getEntryPointName().c_str());
+}
+
 } // end namespace glslang
diff --git a/hlsl/hlslParseHelper.h b/hlsl/hlslParseHelper.h
index 246c7c4..206df9b 100755
--- a/hlsl/hlslParseHelper.h
+++ b/hlsl/hlslParseHelper.h
@@ -47,6 +47,7 @@
 public:
     HlslParseContext(TSymbolTable&, TIntermediate&, bool parsingBuiltins,
                      int version, EProfile, const SpvVersion& spvVersion, EShLanguage, TInfoSink&,
+                     const TString sourceEntryPointName,
                      bool forwardCompatible = false, EShMessages messages = EShMsgDefault);
     virtual ~HlslParseContext();
     void initializeExtensionBehavior();
@@ -84,7 +85,7 @@
     void decomposeGeometryMethods(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments);
     TIntermTyped* handleLengthMethod(const TSourceLoc&, TFunction*, TIntermNode*);
     void addInputArgumentConversions(const TFunction&, TIntermNode*&) const;
-    TIntermTyped* addOutputArgumentConversions(const TFunction&, TIntermAggregate&);
+    TIntermTyped* addOutputArgumentConversions(const TFunction&, TIntermOperator&);
     void builtInOpCheck(const TSourceLoc&, const TFunction&, TIntermOperator&);
     TFunction* handleConstructorCall(const TSourceLoc&, const TType&);
     void handleSemantic(TSourceLoc, TQualifier&, const TString& semantic);
@@ -125,7 +126,7 @@
     void mergeObjectLayoutQualifiers(TQualifier& dest, const TQualifier& src, bool inheritOnly);
     void checkNoShaderLayouts(const TSourceLoc&, const TShaderQualifiers&);
 
-    const TFunction* findFunction(const TSourceLoc& loc, const TFunction& call, bool& builtIn);
+    const TFunction* findFunction(const TSourceLoc& loc, const TFunction& call, bool& builtIn, TIntermNode* args);
     void declareTypedef(const TSourceLoc&, TString& identifier, const TType&, TArraySizes* typeArray = 0);
     TIntermNode* declareVariable(const TSourceLoc&, TString& identifier, TType&, TIntermTyped* initializer = 0);
     void lengthenList(const TSourceLoc&, TIntermSequence& list, int size);
@@ -165,10 +166,26 @@
     bool handleOutputGeometry(const TSourceLoc&, const TLayoutGeometry& geometry);
     bool handleInputGeometry(const TSourceLoc&, const TLayoutGeometry& geometry);
 
+    // Potentially rename shader entry point function
+    void renameShaderFunction(TString*& name) const;
+
+    // Reset data for incrementally built referencing of flattened composite structures
+    void initFlattening() { flattenLevel.push_back(0); flattenOffset.push_back(0); }
+    void finalizeFlattening() { flattenLevel.pop_back(); flattenOffset.pop_back(); }
+
 protected:
+    struct TFlattenData {
+        TFlattenData() : nextBinding(TQualifier::layoutBindingEnd) { }
+        TFlattenData(int nb) : nextBinding(nb) { }
+
+        TVector<TVariable*> members;     // individual flattened variables
+        TVector<int>        offsets;     // offset to next tree level
+        int                 nextBinding; // next binding to use.
+    };
+
     void inheritGlobalDefaults(TQualifier& dst) const;
     TVariable* makeInternalVariable(const char* name, const TType&) const;
-    TVariable* declareNonArray(const TSourceLoc&, TString& identifier, TType&);
+    TVariable* declareNonArray(const TSourceLoc&, TString& identifier, TType&, bool track);
     void declareArray(const TSourceLoc&, TString& identifier, const TType&, TSymbol*&, bool track);
     TIntermNode* executeInitializer(const TSourceLoc&, TIntermTyped* initializer, TVariable* variable);
     TIntermTyped* convertInitializerList(const TSourceLoc&, const TType&, TIntermTyped* initializer);
@@ -179,13 +196,19 @@
     bool shouldConvertLValue(const TIntermNode*) const;
 
     // Array and struct flattening
-    bool shouldFlatten(const TType& type) const { return shouldFlattenIO(type) || shouldFlattenUniform(type); }
-    TIntermTyped* flattenAccess(TIntermTyped* base, int member);
+    bool shouldFlatten(const TType& type) const;
+    TIntermTyped* flattenAccess(const TSourceLoc&, TIntermTyped* base, int member);
     bool shouldFlattenIO(const TType&) const;
     bool shouldFlattenUniform(const TType&) const;
+    bool wasFlattened(const TIntermTyped* node) const;
+    bool wasFlattened(int id) const { return flattenMap.find(id) != flattenMap.end(); }
+    int  addFlattenedMember(const TSourceLoc& loc, const TVariable&, const TType&, TFlattenData&, const TString& name, bool track);
+    bool isFinalFlattening(const TType& type) const { return !(type.isStruct() || type.isArray()); }
+
     void flatten(const TSourceLoc& loc, const TVariable& variable);
-    void flattenStruct(const TVariable& variable);
-    void flattenArray(const TSourceLoc& loc, const TVariable& variable);
+    int flatten(const TSourceLoc& loc, const TVariable& variable, const TType&, TFlattenData&, TString name);
+    int flattenStruct(const TSourceLoc& loc, const TVariable& variable, const TType&, TFlattenData&, TString name);
+    int flattenArray(const TSourceLoc& loc, const TVariable& variable, const TType&, TFlattenData&, TString name);
 
     // Current state of parsing
     struct TPragma contextPragma;
@@ -248,9 +271,14 @@
     //
     TVector<TSymbol*> ioArraySymbolResizeList;
 
-    TMap<int, TVector<TVariable*>> flattenMap;
+    TMap<int, TFlattenData> flattenMap;
+    TVector<int> flattenLevel;  // nested postfix operator level for flattening
+    TVector<int> flattenOffset; // cumulative offset for flattening
+
     unsigned int nextInLocation;
     unsigned int nextOutLocation;
+
+    TString sourceEntryPointName;
 };
 
 } // end namespace glslang
diff --git a/hlsl/hlslParseables.cpp b/hlsl/hlslParseables.cpp
index 05dc7cf..8ecaec9 100755
--- a/hlsl/hlslParseables.cpp
+++ b/hlsl/hlslParseables.cpp
@@ -558,8 +558,8 @@
         { "AllMemoryBarrier",                 nullptr, nullptr,   "-",              "-",             EShLangCS },
         { "AllMemoryBarrierWithGroupSync",    nullptr, nullptr,   "-",              "-",             EShLangCS },
         { "any",                              "S",     "B",       "SVM",            "BFIU",          EShLangAll },
-        { "asdouble",                         "S",     "D",       "S,",             "U,",            EShLangAll },
-        { "asdouble",                         "V2",    "D",       "V2,",            "U,",            EShLangAll },
+        { "asdouble",                         "S",     "D",       "S,",             "UI,",           EShLangAll },
+        { "asdouble",                         "V2",    "D",       "V2,",            "UI,",           EShLangAll },
         { "asfloat",                          nullptr, "F",       "SVM",            "BFIU",          EShLangAll },
         { "asin",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll },
         { "asint",                            nullptr, "I",       "SVM",            "FU",            EShLangAll },
@@ -572,7 +572,7 @@
         { "clip",                             "-",     "-",       "SVM",            "F",             EShLangPS },
         { "cos",                              nullptr, nullptr,   "SVM",            "F",             EShLangAll },
         { "cosh",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll },
-        { "countbits",                        nullptr, nullptr,   "SV",             "U",             EShLangAll },
+        { "countbits",                        nullptr, nullptr,   "SV",             "UI",            EShLangAll },
         { "cross",                            nullptr, nullptr,   "V3,",            "F,",            EShLangAll },
         { "D3DCOLORtoUBYTE4",                 "V4",    "I",       "V4",             "F",             EShLangAll },
         { "ddx",                              nullptr, nullptr,   "SVM",            "F",             EShLangPS },
@@ -636,9 +636,9 @@
         { "log10",                            nullptr, nullptr,   "SVM",            "F",             EShLangAll },
         { "log2",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll },
         { "mad",                              nullptr, nullptr,   "SVM,,",          "DFUI,,",        EShLangAll },
-        { "max",                              nullptr, nullptr,   "SVM,",           "FI,",           EShLangAll },
-        { "min",                              nullptr, nullptr,   "SVM,",           "FI,",           EShLangAll },
-        { "modf",                             nullptr, nullptr,   "SVM,>",          "FI,",           EShLangAll },
+        { "max",                              nullptr, nullptr,   "SVM,",           "FIU,",          EShLangAll },
+        { "min",                              nullptr, nullptr,   "SVM,",           "FIU,",          EShLangAll },
+        { "modf",                             nullptr, nullptr,   "SVM,>",          "FIU,",          EShLangAll },
         { "msad4",                            "V4",    "U",       "S,V2,V4",        "U,,",           EShLangAll },
         { "mul",                              "S",     nullptr,   "S,S",            "FI,",           EShLangAll },
         { "mul",                              "V",     nullptr,   "S,V",            "FI,",           EShLangAll },
@@ -665,7 +665,7 @@
         { "rcp",                              nullptr, nullptr,   "SVM",            "FD",            EShLangAll },
         { "reflect",                          nullptr, nullptr,   "V,",             "F,",            EShLangAll },
         { "refract",                          nullptr, nullptr,   "V,V,S",          "F,,",           EShLangAll },
-        { "reversebits",                      nullptr, nullptr,   "SV",             "U",             EShLangAll },
+        { "reversebits",                      nullptr, nullptr,   "SV",             "UI",            EShLangAll },
         { "round",                            nullptr, nullptr,   "SVM",            "F",             EShLangAll },
         { "rsqrt",                            nullptr, nullptr,   "SVM",            "F",             EShLangAll },
         { "saturate",                         nullptr, nullptr ,  "SVM",            "F",             EShLangAll },
@@ -735,7 +735,7 @@
         // RWTexture loads
         { "Load",                             "V4",    nullptr,   "!#,V",           "FIU,I",         EShLangAll },
         // (RW)Buffer loads
-        { "Load",                             "V4",    nullptr,   "~*1,V",           "FIU,I",         EShLangAll },
+        { "Load",                             "V4",    nullptr,   "~*1,V",          "FIU,I",         EShLangAll },
 
         { "Gather",             /*!O*/        "V4",    nullptr,   "%@,S,V",         "FIU,S,F",       EShLangAll },
         { "Gather",             /* O*/        "V4",    nullptr,   "%@,S,V,V",       "FIU,S,F,I",     EShLangAll },