From 39374dadb51aee9f4dcfa9f38d589259bb4f0d14 Mon Sep 17 00:00:00 2001
From: John Kessenich <cepheus@frii.com>
Date: Fri, 15 May 2015 21:32:46 +0000
Subject: [PATCH] glslang SPV tests: Add a set of SPV tests.

git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@31212 e7fa87d3-cd2b-0410-9028-fcbf551c1848
---
 Test/baseResults/spv.100ops.frag.out          |   89 ++
 Test/baseResults/spv.130.frag.out             |   10 +
 Test/baseResults/spv.140.frag.out             |  151 +++
 Test/baseResults/spv.140.vert.out             |   30 +
 Test/baseResults/spv.150.geom.out             |  146 +++
 Test/baseResults/spv.150.vert.out             |  108 ++
 Test/baseResults/spv.300BuiltIns.vert.out     |   85 ++
 Test/baseResults/spv.300layout.frag.out       |   76 ++
 Test/baseResults/spv.300layout.vert.out       |    9 +
 Test/baseResults/spv.300layoutp.vert.out      |  211 ++++
 Test/baseResults/spv.310.comp.out             |   10 +
 Test/baseResults/spv.330.geom.out             |   72 ++
 Test/baseResults/spv.400.frag.out             |   10 +
 Test/baseResults/spv.400.tesc.out             |  176 +++
 Test/baseResults/spv.400.tese.out             |  191 +++
 Test/baseResults/spv.420.geom.out             |   10 +
 Test/baseResults/spv.430.vert.out             |  135 ++
 Test/baseResults/spv.Operations.frag.out      |  516 ++++++++
 Test/baseResults/spv.aggOps.frag.out          |   11 +
 Test/baseResults/spv.always-discard.frag.out  |  133 ++
 Test/baseResults/spv.always-discard2.frag.out |   67 +
 .../spv.conditionalDiscard.frag.out           |   64 +
 Test/baseResults/spv.conversion.frag.out      |  580 +++++++++
 Test/baseResults/spv.dataOut.frag.out         |   45 +
 Test/baseResults/spv.dataOutIndirect.frag.out |   48 +
 Test/baseResults/spv.dataOutIndirect.vert.out |   76 ++
 Test/baseResults/spv.deepRvalue.frag.out      |    9 +
 Test/baseResults/spv.depthOut.frag.out        |   49 +
 Test/baseResults/spv.discard-dce.frag.out     |  131 ++
 Test/baseResults/spv.doWhileLoop.frag.out     |   68 +
 Test/baseResults/spv.double.comp.out          |  110 ++
 .../spv.earlyReturnDiscard.frag.out           |  181 +++
 Test/baseResults/spv.flowControl.frag.out     |   81 ++
 Test/baseResults/spv.forLoop.frag.out         |  200 +++
 Test/baseResults/spv.forwardFun.frag.out      |  109 ++
 Test/baseResults/spv.functionCall.frag.out    |  132 ++
 .../spv.functionSemantics.frag.out            |  240 ++++
 Test/baseResults/spv.length.frag.out          |   61 +
 Test/baseResults/spv.localAggregates.frag.out |  220 ++++
 Test/baseResults/spv.loops.frag.out           | 1113 +++++++++++++++++
 Test/baseResults/spv.loopsArtificial.frag.out |  352 ++++++
 Test/baseResults/spv.matFun.vert.out          |  142 +++
 Test/baseResults/spv.matrix.frag.out          |   12 +
 Test/baseResults/spv.matrix2.frag.out         |   12 +
 Test/baseResults/spv.newTexture.frag.out      |   10 +
 Test/baseResults/spv.nonSquare.vert.out       |  123 ++
 Test/baseResults/spv.precision.frag.out       |  182 +++
 Test/baseResults/spv.prepost.frag.out         |  153 +++
 Test/baseResults/spv.qualifiers.vert.out      |   67 +
 Test/baseResults/spv.set.vert.out             |   64 +
 .../spv.simpleFunctionCall.frag.out           |   53 +
 Test/baseResults/spv.simpleMat.vert.out       |   78 ++
 .../baseResults/spv.structAssignment.frag.out |   98 ++
 Test/baseResults/spv.structDeref.frag.out     |  193 +++
 Test/baseResults/spv.structure.frag.out       |  105 ++
 Test/baseResults/spv.switch.frag.out          |  382 ++++++
 Test/baseResults/spv.swizzle.frag.out         |  179 +++
 Test/baseResults/spv.test.frag.out            |   90 ++
 Test/baseResults/spv.test.vert.out            |   10 +
 Test/baseResults/spv.texture.frag.out         |   11 +
 Test/baseResults/spv.texture.vert.out         |  186 +++
 Test/baseResults/spv.types.frag.out           |  347 +++++
 Test/baseResults/spv.uint.frag.out            |  357 ++++++
 Test/baseResults/spv.uniformArray.frag.out    |   82 ++
 .../spv.variableArrayIndex.frag.out           |  147 +++
 Test/baseResults/spv.varyingArray.frag.out    |   99 ++
 .../spv.varyingArrayIndirect.frag.out         |  109 ++
 Test/baseResults/spv.voidFunction.frag.out    |   81 ++
 Test/baseResults/spv.whileLoop.frag.out       |   64 +
 Test/spv.100ops.frag                          |   25 +
 Test/spv.130.frag                             |  119 ++
 Test/spv.140.frag                             |   41 +
 Test/spv.150.geom                             |   39 +
 Test/spv.150.vert                             |   39 +
 Test/spv.300BuiltIns.vert                     |   17 +
 Test/spv.300layout.frag                       |   22 +
 Test/spv.300layout.vert                       |   49 +
 Test/spv.300layoutp.vert                      |   49 +
 Test/spv.310.comp                             |   37 +
 Test/spv.330.geom                             |   26 +
 Test/spv.400.frag                             |   42 +
 Test/spv.400.tesc                             |   43 +
 Test/spv.400.tese                             |   52 +
 Test/spv.420.geom                             |   43 +
 Test/spv.430.vert                             |   32 +
 Test/spv.Operations.frag                      |  166 +++
 Test/spv.aggOps.frag                          |   51 +
 Test/spv.always-discard.frag                  |   36 +
 Test/spv.always-discard2.frag                 |   19 +
 Test/spv.conditionalDiscard.frag              |   14 +
 Test/spv.conversion.frag                      |  112 ++
 Test/spv.dataOut.frag                         |    8 +
 Test/spv.dataOutIndirect.frag                 |   10 +
 Test/spv.dataOutIndirect.vert                 |   12 +
 Test/spv.deepRvalue.frag                      |   36 +
 Test/spv.depthOut.frag                        |   10 +
 Test/spv.discard-dce.frag                     |   35 +
 Test/spv.doWhileLoop.frag                     |   16 +
 Test/spv.earlyReturnDiscard.frag              |  102 ++
 Test/spv.flowControl.frag                     |   23 +
 Test/spv.forLoop.frag                         |   41 +
 Test/spv.forwardFun.frag                      |   39 +
 Test/spv.functionCall.frag                    |   44 +
 Test/spv.functionSemantics.frag               |   63 +
 Test/spv.length.frag                          |   18 +
 Test/spv.localAggregates.frag                 |   72 ++
 Test/spv.loops.frag                           |  320 +++++
 Test/spv.loopsArtificial.frag                 |   96 ++
 Test/spv.matFun.vert                          |   26 +
 Test/spv.matrix.frag                          |   55 +
 Test/spv.matrix2.frag                         |   50 +
 Test/spv.newTexture.frag                      |   68 +
 Test/spv.nonSquare.vert                       |   25 +
 Test/spv.precision.frag                       |   50 +
 Test/spv.prepost.frag                         |   38 +
 Test/spv.qualifiers.vert                      |   19 +
 Test/spv.simpleFunctionCall.frag              |   15 +
 Test/spv.simpleMat.vert                       |   19 +
 Test/spv.structAssignment.frag                |   39 +
 Test/spv.structDeref.frag                     |   71 ++
 Test/spv.structure.frag                       |   31 +
 Test/spv.switch.frag                          |  133 ++
 Test/spv.swizzle.frag                         |   52 +
 Test/spv.test.frag                            |   22 +
 Test/spv.test.vert                            |   14 +
 Test/spv.texture.frag                         |   73 ++
 Test/spv.texture.vert                         |   39 +
 Test/spv.types.frag                           |   81 ++
 Test/spv.uint.frag                            |   99 ++
 Test/spv.uniformArray.frag                    |   16 +
 Test/spv.variableArrayIndex.frag              |   48 +
 Test/spv.varyingArray.frag                    |   19 +
 Test/spv.varyingArrayIndirect.frag            |   21 +
 Test/spv.voidFunction.frag                    |   34 +
 Test/spv.whileLoop.frag                       |   16 +
 Test/test-spirv-list                          |   71 ++
 136 files changed, 12813 insertions(+)
 create mode 100644 Test/baseResults/spv.100ops.frag.out
 create mode 100644 Test/baseResults/spv.130.frag.out
 create mode 100644 Test/baseResults/spv.140.frag.out
 create mode 100644 Test/baseResults/spv.140.vert.out
 create mode 100644 Test/baseResults/spv.150.geom.out
 create mode 100644 Test/baseResults/spv.150.vert.out
 create mode 100644 Test/baseResults/spv.300BuiltIns.vert.out
 create mode 100644 Test/baseResults/spv.300layout.frag.out
 create mode 100644 Test/baseResults/spv.300layout.vert.out
 create mode 100644 Test/baseResults/spv.300layoutp.vert.out
 create mode 100644 Test/baseResults/spv.310.comp.out
 create mode 100644 Test/baseResults/spv.330.geom.out
 create mode 100644 Test/baseResults/spv.400.frag.out
 create mode 100644 Test/baseResults/spv.400.tesc.out
 create mode 100644 Test/baseResults/spv.400.tese.out
 create mode 100644 Test/baseResults/spv.420.geom.out
 create mode 100644 Test/baseResults/spv.430.vert.out
 create mode 100644 Test/baseResults/spv.Operations.frag.out
 create mode 100644 Test/baseResults/spv.aggOps.frag.out
 create mode 100644 Test/baseResults/spv.always-discard.frag.out
 create mode 100644 Test/baseResults/spv.always-discard2.frag.out
 create mode 100644 Test/baseResults/spv.conditionalDiscard.frag.out
 create mode 100644 Test/baseResults/spv.conversion.frag.out
 create mode 100644 Test/baseResults/spv.dataOut.frag.out
 create mode 100644 Test/baseResults/spv.dataOutIndirect.frag.out
 create mode 100644 Test/baseResults/spv.dataOutIndirect.vert.out
 create mode 100644 Test/baseResults/spv.deepRvalue.frag.out
 create mode 100644 Test/baseResults/spv.depthOut.frag.out
 create mode 100644 Test/baseResults/spv.discard-dce.frag.out
 create mode 100644 Test/baseResults/spv.doWhileLoop.frag.out
 create mode 100644 Test/baseResults/spv.double.comp.out
 create mode 100644 Test/baseResults/spv.earlyReturnDiscard.frag.out
 create mode 100644 Test/baseResults/spv.flowControl.frag.out
 create mode 100644 Test/baseResults/spv.forLoop.frag.out
 create mode 100644 Test/baseResults/spv.forwardFun.frag.out
 create mode 100644 Test/baseResults/spv.functionCall.frag.out
 create mode 100644 Test/baseResults/spv.functionSemantics.frag.out
 create mode 100644 Test/baseResults/spv.length.frag.out
 create mode 100644 Test/baseResults/spv.localAggregates.frag.out
 create mode 100644 Test/baseResults/spv.loops.frag.out
 create mode 100644 Test/baseResults/spv.loopsArtificial.frag.out
 create mode 100644 Test/baseResults/spv.matFun.vert.out
 create mode 100644 Test/baseResults/spv.matrix.frag.out
 create mode 100644 Test/baseResults/spv.matrix2.frag.out
 create mode 100644 Test/baseResults/spv.newTexture.frag.out
 create mode 100644 Test/baseResults/spv.nonSquare.vert.out
 create mode 100644 Test/baseResults/spv.precision.frag.out
 create mode 100644 Test/baseResults/spv.prepost.frag.out
 create mode 100644 Test/baseResults/spv.qualifiers.vert.out
 create mode 100644 Test/baseResults/spv.set.vert.out
 create mode 100644 Test/baseResults/spv.simpleFunctionCall.frag.out
 create mode 100644 Test/baseResults/spv.simpleMat.vert.out
 create mode 100644 Test/baseResults/spv.structAssignment.frag.out
 create mode 100644 Test/baseResults/spv.structDeref.frag.out
 create mode 100644 Test/baseResults/spv.structure.frag.out
 create mode 100644 Test/baseResults/spv.switch.frag.out
 create mode 100644 Test/baseResults/spv.swizzle.frag.out
 create mode 100644 Test/baseResults/spv.test.frag.out
 create mode 100644 Test/baseResults/spv.test.vert.out
 create mode 100644 Test/baseResults/spv.texture.frag.out
 create mode 100644 Test/baseResults/spv.texture.vert.out
 create mode 100644 Test/baseResults/spv.types.frag.out
 create mode 100644 Test/baseResults/spv.uint.frag.out
 create mode 100644 Test/baseResults/spv.uniformArray.frag.out
 create mode 100644 Test/baseResults/spv.variableArrayIndex.frag.out
 create mode 100644 Test/baseResults/spv.varyingArray.frag.out
 create mode 100644 Test/baseResults/spv.varyingArrayIndirect.frag.out
 create mode 100644 Test/baseResults/spv.voidFunction.frag.out
 create mode 100644 Test/baseResults/spv.whileLoop.frag.out
 create mode 100644 Test/spv.100ops.frag
 create mode 100644 Test/spv.130.frag
 create mode 100644 Test/spv.140.frag
 create mode 100644 Test/spv.150.geom
 create mode 100644 Test/spv.150.vert
 create mode 100644 Test/spv.300BuiltIns.vert
 create mode 100644 Test/spv.300layout.frag
 create mode 100644 Test/spv.300layout.vert
 create mode 100644 Test/spv.300layoutp.vert
 create mode 100644 Test/spv.310.comp
 create mode 100644 Test/spv.330.geom
 create mode 100644 Test/spv.400.frag
 create mode 100644 Test/spv.400.tesc
 create mode 100644 Test/spv.400.tese
 create mode 100644 Test/spv.420.geom
 create mode 100644 Test/spv.430.vert
 create mode 100644 Test/spv.Operations.frag
 create mode 100644 Test/spv.aggOps.frag
 create mode 100644 Test/spv.always-discard.frag
 create mode 100644 Test/spv.always-discard2.frag
 create mode 100644 Test/spv.conditionalDiscard.frag
 create mode 100644 Test/spv.conversion.frag
 create mode 100644 Test/spv.dataOut.frag
 create mode 100644 Test/spv.dataOutIndirect.frag
 create mode 100644 Test/spv.dataOutIndirect.vert
 create mode 100644 Test/spv.deepRvalue.frag
 create mode 100644 Test/spv.depthOut.frag
 create mode 100644 Test/spv.discard-dce.frag
 create mode 100644 Test/spv.doWhileLoop.frag
 create mode 100644 Test/spv.earlyReturnDiscard.frag
 create mode 100644 Test/spv.flowControl.frag
 create mode 100644 Test/spv.forLoop.frag
 create mode 100644 Test/spv.forwardFun.frag
 create mode 100644 Test/spv.functionCall.frag
 create mode 100644 Test/spv.functionSemantics.frag
 create mode 100644 Test/spv.length.frag
 create mode 100644 Test/spv.localAggregates.frag
 create mode 100644 Test/spv.loops.frag
 create mode 100644 Test/spv.loopsArtificial.frag
 create mode 100644 Test/spv.matFun.vert
 create mode 100644 Test/spv.matrix.frag
 create mode 100644 Test/spv.matrix2.frag
 create mode 100644 Test/spv.newTexture.frag
 create mode 100644 Test/spv.nonSquare.vert
 create mode 100644 Test/spv.precision.frag
 create mode 100644 Test/spv.prepost.frag
 create mode 100644 Test/spv.qualifiers.vert
 create mode 100644 Test/spv.simpleFunctionCall.frag
 create mode 100644 Test/spv.simpleMat.vert
 create mode 100644 Test/spv.structAssignment.frag
 create mode 100644 Test/spv.structDeref.frag
 create mode 100644 Test/spv.structure.frag
 create mode 100644 Test/spv.switch.frag
 create mode 100644 Test/spv.swizzle.frag
 create mode 100644 Test/spv.test.frag
 create mode 100644 Test/spv.test.vert
 create mode 100644 Test/spv.texture.frag
 create mode 100644 Test/spv.texture.vert
 create mode 100644 Test/spv.types.frag
 create mode 100644 Test/spv.uint.frag
 create mode 100644 Test/spv.uniformArray.frag
 create mode 100644 Test/spv.variableArrayIndex.frag
 create mode 100644 Test/spv.varyingArray.frag
 create mode 100644 Test/spv.varyingArrayIndirect.frag
 create mode 100644 Test/spv.voidFunction.frag
 create mode 100644 Test/spv.whileLoop.frag

diff --git a/Test/baseResults/spv.100ops.frag.out b/Test/baseResults/spv.100ops.frag.out
new file mode 100644
index 000000000..d000faab6
--- /dev/null
+++ b/Test/baseResults/spv.100ops.frag.out
@@ -0,0 +1,89 @@
+spv.100ops.frag
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 48
+
+                              Source GLSL 100
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 9  "foo("
+                              Name 12  "face1"
+                              Name 14  "face2"
+                              Name 18  "z"
+                              Name 22  "low"
+                              Name 27  "high"
+                              Name 37  "gl_FragColor"
+                              Decorate 12(face1) PrecisionLow 
+                              Decorate 14(face2) PrecisionLow 
+                              Decorate 18(z) PrecisionMedium 
+                              Decorate 22(low) PrecisionMedium 
+                              Decorate 27(high) PrecisionMedium 
+                              Decorate 37(gl_FragColor) PrecisionMedium 
+                              Decorate 37(gl_FragColor) BuiltIn FragColor
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeFunction 7(float) 
+              11:             TypePointer PrivateGlobal 7(float)
+       12(face1):     11(ptr) Variable PrivateGlobal 
+              13:    7(float) Constant 1093664768
+       14(face2):     11(ptr) Variable PrivateGlobal 
+              15:    7(float) Constant 3221225472
+              16:             TypeInt 32 1
+              17:             TypePointer Function 16(int)
+              19:     16(int) Constant 3
+              20:     16(int) Constant 2
+              21:             TypePointer UniformConstant 16(int)
+         22(low):     21(ptr) Variable UniformConstant 
+              25:     16(int) Constant 1
+        27(high):     21(ptr) Variable UniformConstant 
+              29:             TypeBool
+              35:             TypeVector 7(float) 4
+              36:             TypePointer Output 35(fvec4)
+37(gl_FragColor):     36(ptr) Variable Output 
+         4(main):           2 Function None 3
+               5:             Label
+           18(z):     17(ptr) Variable Function 
+                              Store 12(face1) 13 
+                              Store 14(face2) 15 
+                              Store 18(z) 19 
+              23:     16(int) Load 22(low) 
+              24:     16(int) IMul 20 23
+              26:     16(int) IAdd 24 25
+              28:     16(int) Load 27(high) 
+              30:    29(bool) SLessThan 26 28
+                              SelectionMerge 32 None
+                              BranchConditional 30 31 32 
+              31:               Label
+              33:     16(int)   Load 18(z) 
+              34:     16(int)   IAdd 33 25
+                                Store 18(z) 34 
+                                Branch 32
+              32:             Label
+              38:    7(float) Load 12(face1) 
+              39:     16(int) Load 18(z) 
+              40:    7(float) ConvertSToF 39
+              41:   35(fvec4) CompositeConstruct 40 40 40 40
+              42:   35(fvec4) VectorTimesScalar 38 41
+              43:    7(float) FunctionCall 9(foo() 
+              44:   35(fvec4) CompositeConstruct 43 43 43 43
+              45:   35(fvec4) FAdd 42 44
+                              Store 37(gl_FragColor) 45 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
+         9(foo():    7(float) Function None 8
+              10:             Label
+              46:    7(float) Load 14(face2) 
+                              ReturnValue 46
+                              FunctionEnd
diff --git a/Test/baseResults/spv.130.frag.out b/Test/baseResults/spv.130.frag.out
new file mode 100644
index 000000000..123a45b53
--- /dev/null
+++ b/Test/baseResults/spv.130.frag.out
@@ -0,0 +1,10 @@
+spv.130.frag
+WARNING: 0:34: '#extension' : extension is only partially supported: GL_ARB_gpu_shader5
+
+
+
+Linked fragment stage:
+
+
+
+Missing functionality: texture gather
diff --git a/Test/baseResults/spv.140.frag.out b/Test/baseResults/spv.140.frag.out
new file mode 100644
index 000000000..3c43631d6
--- /dev/null
+++ b/Test/baseResults/spv.140.frag.out
@@ -0,0 +1,151 @@
+spv.140.frag
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 90
+
+                              Source GLSL 140
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 9  "foo("
+                              Name 12  "i1"
+                              Name 17  "gl_FrontFacing"
+                              Name 25  "i2"
+                              Name 29  "o"
+                              Name 34  "gl_ClipDistance"
+                              Name 43  "k"
+                              Name 54  "sampR"
+                              Name 60  "sampB"
+                              Name 83  "samp2Da"
+                              Name 87  "bn"
+                              MemberName 87(bn) 0  "matra"
+                              MemberName 87(bn) 1  "matca"
+                              MemberName 87(bn) 2  "matr"
+                              MemberName 87(bn) 3  "matc"
+                              MemberName 87(bn) 4  "matrdef"
+                              Name 89  ""
+                              Decorate 17(gl_FrontFacing) BuiltIn FrontFacing
+                              Decorate 34(gl_ClipDistance) Smooth 
+                              Decorate 34(gl_ClipDistance) BuiltIn ClipDistance
+                              Decorate 43(k) Smooth 
+                              Decorate 83(samp2Da) NoStaticUse 
+                              MemberDecorate 87(bn) 0 RowMajor 
+                              MemberDecorate 87(bn) 1 ColMajor 
+                              MemberDecorate 87(bn) 2 RowMajor 
+                              MemberDecorate 87(bn) 3 ColMajor 
+                              MemberDecorate 87(bn) 4 RowMajor 
+                              Decorate 87(bn) GLSLStd140 
+                              Decorate 87(bn) Block 
+                              Decorate 89 NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeFunction 7(float) 
+              11:             TypePointer PrivateGlobal 7(float)
+          12(i1):     11(ptr) Variable PrivateGlobal 
+              13:             TypePointer Function 7(float)
+              15:             TypeBool
+              16:             TypePointer Input 15(bool)
+17(gl_FrontFacing):     16(ptr) Variable Input 
+              21:    7(float) Constant 3221225472
+              23:    7(float) Constant 1073741824
+          25(i2):     11(ptr) Variable PrivateGlobal 
+              26:    7(float) Constant 1120665600
+              27:             TypeVector 7(float) 4
+              28:             TypePointer Output 27(fvec4)
+           29(o):     28(ptr) Variable Output 
+              30:             TypeInt 32 0
+              31:     30(int) Constant 5
+              32:             TypeArray 7(float) 31
+              33:             TypePointer Input 32
+34(gl_ClipDistance):     33(ptr) Variable Input 
+              35:             TypeInt 32 1
+              36:     35(int) Constant 2
+              37:             TypePointer Input 7(float)
+              42:             TypePointer Input 27(fvec4)
+           43(k):     42(ptr) Variable Input 
+              45:             TypeVector 35(int) 4
+              52:             TypeSampler7(float) Rect filter+texture
+              53:             TypePointer UniformConstant 52
+       54(sampR):     53(ptr) Variable UniformConstant 
+              56:             TypeVector 35(int) 2
+              58:             TypeSampler35(int) Buffer filter+texture
+              59:             TypePointer UniformConstant 58
+       60(sampB):     59(ptr) Variable UniformConstant 
+              65:             TypeVector 7(float) 2
+              68:    7(float) Constant 1120403456
+              79:             TypeSampler7(float) 2D filter+texture
+              80:     30(int) Constant 3
+              81:             TypeArray 79 80
+              82:             TypePointer UniformConstant 81
+     83(samp2Da):     82(ptr) Variable UniformConstant 
+              84:             TypeMatrix 27(fvec4) 4
+              85:     30(int) Constant 4
+              86:             TypeArray 84 85
+          87(bn):             TypeStruct 86 86 84 84 84
+              88:             TypePointer Uniform 87(bn)
+              89:     88(ptr) Variable Uniform 
+         4(main):           2 Function None 3
+               5:             Label
+              14:     13(ptr) Variable Function 
+              18:    15(bool) Load 17(gl_FrontFacing) 
+                              SelectionMerge 20 None
+                              BranchConditional 18 19 22 
+              19:               Label
+                                Store 14 21 
+                                Branch 20
+              22:               Label
+                                Store 14 23 
+                                Branch 20
+              20:             Label
+              24:    7(float) Load 14 
+                              Store 12(i1) 24 
+                              Store 25(i2) 26 
+              38:     37(ptr) AccessChain 34(gl_ClipDistance) 36
+              39:    7(float) Load 38 
+              40:   27(fvec4) Load 29(o) 
+              41:   27(fvec4) CompositeInsert 39 40 1
+                              Store 29(o) 41 
+              44:   27(fvec4) Load 43(k) 
+              46:   45(ivec4) ConvertFToS 44
+              47:     35(int) CompositeExtract 46 0
+              48:     37(ptr) AccessChain 34(gl_ClipDistance) 47
+              49:    7(float) Load 48 
+              50:   27(fvec4) Load 29(o) 
+              51:   27(fvec4) CompositeInsert 49 50 2
+                              Store 29(o) 51 
+              55:          52 Load 54(sampR) 
+              57:   56(ivec2) TextureQuerySize 55
+              61:          58 Load 60(sampB) 
+              62:     35(int) TextureQuerySize 61
+              63:   56(ivec2) CompositeConstruct 62 62
+              64:   56(ivec2) IAdd 57 63
+              66:   65(fvec2) ConvertSToF 64
+              67:    7(float) CompositeExtract 66 0
+              69:    7(float) FDiv 67 68
+              70:   27(fvec4) Load 29(o) 
+              71:   27(fvec4) CompositeInsert 69 70 3
+                              Store 29(o) 71 
+              72:    7(float) FunctionCall 9(foo() 
+              73:   27(fvec4) Load 29(o) 
+              74:   27(fvec4) CompositeInsert 72 73 2
+                              Store 29(o) 74 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
+         9(foo():    7(float) Function None 8
+              10:             Label
+              75:    7(float) Load 12(i1) 
+              76:    7(float) Load 25(i2) 
+              77:    7(float) FAdd 75 76
+                              ReturnValue 77
+                              FunctionEnd
diff --git a/Test/baseResults/spv.140.vert.out b/Test/baseResults/spv.140.vert.out
new file mode 100644
index 000000000..35470ddc5
--- /dev/null
+++ b/Test/baseResults/spv.140.vert.out
@@ -0,0 +1,30 @@
+Error: unable to open input file: spv.140.vert
+Usage: glslangValidator [option]... [file]...
+
+Where: each 'file' ends in .<stage>, where <stage> is one of
+    .conf to provide an optional config file that replaces the default configuration
+          (see -c option below for generating a template)
+    .vert for a vertex shader
+    .tesc for a tessellation control shader
+    .tese for a tessellation evaluation shader
+    .geom for a geometry shader
+    .frag for a fragment shader
+    .comp for a compute shader
+
+Compilation warnings and errors will be printed to stdout.
+
+To get other information, use one of the following options:
+(Each option must be specified separately, but can go anywhere in the command line.)
+  -V  create SPIR-V in file <stage>.spv
+  -H  print human readable form of SPIR-V; turns on -V
+  -c  configuration dump; use to create default configuration file (redirect to a .conf file)
+  -d  default to desktop (#version 110) when there is no version in the shader (default is ES version 100)
+  -i  intermediate tree (glslang AST) is printed out
+  -l  link validation of all input files
+  -m  memory leak mode
+  -q  dump reflection query database
+  -r  relaxed semantic error-checking mode
+  -s  silent mode
+  -t  multi-threaded mode
+  -v  print version strings
+  -w  suppress warnings (except as required by #extension : warn)
diff --git a/Test/baseResults/spv.150.geom.out b/Test/baseResults/spv.150.geom.out
new file mode 100644
index 000000000..d32c8da5a
--- /dev/null
+++ b/Test/baseResults/spv.150.geom.out
@@ -0,0 +1,146 @@
+spv.150.geom
+
+
+
+Linked geometry stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 72
+
+                              Source GLSL 150
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Geometry 4
+                              ExecutionMode 4 InputTrianglesAdjacency 
+                              ExecutionMode 4 Invocations 0
+                              ExecutionMode 4 OutputTriangleStrip 
+                              ExecutionMode 4 OutputVertices 30
+                              Name 4  "main"
+                              Name 9  "fromVertex"
+                              MemberName 9(fromVertex) 0  "color"
+                              Name 11  ""
+                              Name 14  "fromVertex"
+                              MemberName 14(fromVertex) 0  "color"
+                              Name 19  "fromV"
+                              Name 28  "gl_PerVertex"
+                              MemberName 28(gl_PerVertex) 0  "gl_Position"
+                              MemberName 28(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 28(gl_PerVertex) 2  "gl_ClipDistance"
+                              Name 30  ""
+                              Name 31  "gl_PerVertex"
+                              MemberName 31(gl_PerVertex) 0  "gl_Position"
+                              MemberName 31(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 31(gl_PerVertex) 2  "gl_ClipDistance"
+                              Name 34  "gl_in"
+                              Name 48  "gl_PrimitiveID"
+                              Name 50  "gl_PrimitiveIDIn"
+                              Name 52  "gl_Layer"
+                              Name 69  "toFragment"
+                              MemberName 69(toFragment) 0  "color"
+                              Name 71  "toF"
+                              Decorate 9(fromVertex) Block 
+                              Decorate 9(fromVertex) Stream 3
+                              Decorate 11 Stream 3
+                              Decorate 14(fromVertex) Block 
+                              Decorate 28(gl_PerVertex) Block 
+                              Decorate 28(gl_PerVertex) Stream 0
+                              Decorate 30 Stream 0
+                              Decorate 31(gl_PerVertex) Block 
+                              Decorate 48(gl_PrimitiveID) Stream 0
+                              Decorate 48(gl_PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 50(gl_PrimitiveIDIn) BuiltIn PrimitiveId
+                              Decorate 52(gl_Layer) Stream 0
+                              Decorate 52(gl_Layer) BuiltIn Layer
+                              Decorate 69(toFragment) Block 
+                              Decorate 69(toFragment) Stream 3
+                              Decorate 71(toF) Stream 3
+                              Decorate 71(toF) NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeVector 7(float) 3
+   9(fromVertex):             TypeStruct 8(fvec3)
+              10:             TypePointer Output 9(fromVertex)
+              11:     10(ptr) Variable Output 
+              12:             TypeInt 32 1
+              13:     12(int) Constant 0
+  14(fromVertex):             TypeStruct 8(fvec3)
+              15:             TypeInt 32 0
+              16:     15(int) Constant 6
+              17:             TypeArray 14(fromVertex) 16
+              18:             TypePointer Input 17
+       19(fromV):     18(ptr) Variable Input 
+              20:             TypePointer Input 8(fvec3)
+              23:             TypePointer Output 8(fvec3)
+              25:             TypeVector 7(float) 4
+              26:     15(int) Constant 1
+              27:             TypeArray 7(float) 26
+28(gl_PerVertex):             TypeStruct 25(fvec4) 7(float) 27
+              29:             TypePointer Output 28(gl_PerVertex)
+              30:     29(ptr) Variable Output 
+31(gl_PerVertex):             TypeStruct 25(fvec4) 7(float) 27
+              32:             TypeArray 31(gl_PerVertex) 16
+              33:             TypePointer Input 32
+       34(gl_in):     33(ptr) Variable Input 
+              35:             TypePointer Input 25(fvec4)
+              38:             TypePointer Output 25(fvec4)
+              40:     12(int) Constant 1
+              41:     12(int) Constant 3
+              42:             TypePointer Input 7(float)
+              45:             TypePointer Output 7(float)
+              47:             TypePointer Output 12(int)
+48(gl_PrimitiveID):     47(ptr) Variable Output 
+              49:             TypePointer Input 12(int)
+50(gl_PrimitiveIDIn):     49(ptr) Variable Input 
+    52(gl_Layer):     47(ptr) Variable Output 
+              53:     12(int) Constant 2
+              54:    7(float) Constant 1073741824
+  69(toFragment):             TypeStruct 8(fvec3)
+              70:             TypePointer Output 69(toFragment)
+         71(toF):     70(ptr) Variable Output 
+         4(main):           2 Function None 3
+               5:             Label
+              21:     20(ptr) AccessChain 19(fromV) 13 13
+              22:    8(fvec3) Load 21 
+              24:     23(ptr) AccessChain 11 13
+                              Store 24 22 
+              36:     35(ptr) AccessChain 34(gl_in) 13 13
+              37:   25(fvec4) Load 36 
+              39:     38(ptr) AccessChain 30 13
+                              Store 39 37 
+              43:     42(ptr) AccessChain 34(gl_in) 41 40
+              44:    7(float) Load 43 
+              46:     45(ptr) AccessChain 30 40
+                              Store 46 44 
+              51:     12(int) Load 50(gl_PrimitiveIDIn) 
+                              Store 48(gl_PrimitiveID) 51 
+                              Store 52(gl_Layer) 53 
+                              EmitVertex
+              55:     20(ptr) AccessChain 19(fromV) 13 13
+              56:    8(fvec3) Load 55 
+              57:    8(fvec3) VectorTimesScalar 54 56
+              58:     23(ptr) AccessChain 11 13
+                              Store 58 57 
+              59:     35(ptr) AccessChain 34(gl_in) 13 13
+              60:   25(fvec4) Load 59 
+              61:   25(fvec4) VectorTimesScalar 54 60
+              62:     38(ptr) AccessChain 30 13
+                              Store 62 61 
+              63:     42(ptr) AccessChain 34(gl_in) 41 40
+              64:    7(float) Load 63 
+              65:    7(float) FMul 54 64
+              66:     45(ptr) AccessChain 30 40
+                              Store 66 65 
+              67:     12(int) Load 50(gl_PrimitiveIDIn) 
+              68:     12(int) IAdd 67 40
+                              Store 48(gl_PrimitiveID) 68 
+                              Store 52(gl_Layer) 41 
+                              EmitVertex
+                              EndPrimitive
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.150.vert.out b/Test/baseResults/spv.150.vert.out
new file mode 100644
index 000000000..c2d8bdf55
--- /dev/null
+++ b/Test/baseResults/spv.150.vert.out
@@ -0,0 +1,108 @@
+spv.150.vert
+
+
+
+Linked vertex stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 53
+
+                              Source GLSL 150
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4
+                              Name 4  "main"
+                              Name 14  "gl_PerVertex"
+                              MemberName 14(gl_PerVertex) 0  "gl_Position"
+                              MemberName 14(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 14(gl_PerVertex) 2  "gl_ClipDistance"
+                              MemberName 14(gl_PerVertex) 3  "gl_ClipVertex"
+                              MemberName 14(gl_PerVertex) 4  "gl_FrontColor"
+                              MemberName 14(gl_PerVertex) 5  "gl_BackColor"
+                              MemberName 14(gl_PerVertex) 6  "gl_FrontSecondaryColor"
+                              MemberName 14(gl_PerVertex) 7  "gl_BackSecondaryColor"
+                              MemberName 14(gl_PerVertex) 8  "gl_TexCoord"
+                              MemberName 14(gl_PerVertex) 9  "gl_FogFragCoord"
+                              Name 16  ""
+                              Name 20  "iv4"
+                              Name 26  "ps"
+                              Name 36  "s1"
+                              MemberName 36(s1) 0  "a"
+                              MemberName 36(s1) 1  "a2"
+                              MemberName 36(s1) 2  "b"
+                              Name 38  "s2"
+                              MemberName 38(s2) 0  "c"
+                              MemberName 38(s2) 1  "d"
+                              Name 40  "s2out"
+                              Name 42  "i"
+                              Name 49  "ui"
+                              Name 51  "gl_VertexID"
+                              Name 52  "gl_InstanceID"
+                              MemberDecorate 14(gl_PerVertex) 0 Invariant 
+                              Decorate 14(gl_PerVertex) Block 
+                              Decorate 49(ui) NoStaticUse 
+                              Decorate 51(gl_VertexID) BuiltIn VertexId
+                              Decorate 51(gl_VertexID) NoStaticUse 
+                              Decorate 52(gl_InstanceID) BuiltIn InstanceId
+                              Decorate 52(gl_InstanceID) NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeVector 7(float) 4
+               9:             TypeInt 32 0
+              10:      9(int) Constant 4
+              11:             TypeArray 7(float) 10
+              12:      9(int) Constant 1
+              13:             TypeArray 8(fvec4) 12
+14(gl_PerVertex):             TypeStruct 8(fvec4) 7(float) 11 8(fvec4) 8(fvec4) 8(fvec4) 8(fvec4) 8(fvec4) 13 7(float)
+              15:             TypePointer Output 14(gl_PerVertex)
+              16:     15(ptr) Variable Output 
+              17:             TypeInt 32 1
+              18:     17(int) Constant 0
+              19:             TypePointer Input 8(fvec4)
+         20(iv4):     19(ptr) Variable Input 
+              22:             TypePointer Output 8(fvec4)
+              24:     17(int) Constant 1
+              25:             TypePointer UniformConstant 7(float)
+          26(ps):     25(ptr) Variable UniformConstant 
+              28:             TypePointer Output 7(float)
+              30:     17(int) Constant 2
+              34:      9(int) Constant 3
+              35:             TypeArray 8(fvec4) 34
+          36(s1):             TypeStruct 17(int) 17(int) 35
+              37:             TypeArray 36(s1) 10
+          38(s2):             TypeStruct 17(int) 37
+              39:             TypePointer Output 38(s2)
+       40(s2out):     39(ptr) Variable Output 
+              41:             TypePointer Function 17(int)
+              48:             TypePointer UniformConstant 17(int)
+          49(ui):     48(ptr) Variable UniformConstant 
+              50:             TypePointer Input 17(int)
+ 51(gl_VertexID):     50(ptr) Variable Input 
+52(gl_InstanceID):     50(ptr) Variable Input 
+         4(main):           2 Function None 3
+               5:             Label
+           42(i):     41(ptr) Variable Function 
+              21:    8(fvec4) Load 20(iv4) 
+              23:     22(ptr) AccessChain 16 18
+                              Store 23 21 
+              27:    7(float) Load 26(ps) 
+              29:     28(ptr) AccessChain 16 24
+                              Store 29 27 
+              31:    8(fvec4) Load 20(iv4) 
+              32:    7(float) CompositeExtract 31 0
+              33:     28(ptr) AccessChain 16 30 30
+                              Store 33 32 
+              43:     17(int) Load 42(i) 
+              44:    7(float) Load 26(ps) 
+              45:     22(ptr) AccessChain 40(s2out) 24 43 30 30
+              46:    8(fvec4) Load 45 
+              47:    8(fvec4) CompositeInsert 44 46 3
+                              Store 45 47 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.300BuiltIns.vert.out b/Test/baseResults/spv.300BuiltIns.vert.out
new file mode 100644
index 000000000..9ec134f3c
--- /dev/null
+++ b/Test/baseResults/spv.300BuiltIns.vert.out
@@ -0,0 +1,85 @@
+spv.300BuiltIns.vert
+
+
+
+Linked vertex stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 41
+
+                              Source GLSL 300
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4
+                              Name 4  "main"
+                              Name 9  "i"
+                              Name 12  "gl_VertexID"
+                              Name 17  "j"
+                              Name 24  "gl_Position"
+                              Name 26  "ps"
+                              Name 34  "gl_PointSize"
+                              Name 40  "gl_InstanceID"
+                              Decorate 9(i) PrecisionMedium 
+                              Decorate 12(gl_VertexID) PrecisionHigh 
+                              Decorate 12(gl_VertexID) BuiltIn VertexId
+                              Decorate 17(j) PrecisionMedium 
+                              Decorate 24(gl_Position) PrecisionHigh 
+                              Decorate 24(gl_Position) Invariant 
+                              Decorate 24(gl_Position) BuiltIn Position
+                              Decorate 26(ps) PrecisionMedium 
+                              Decorate 34(gl_PointSize) PrecisionHigh 
+                              Decorate 34(gl_PointSize) BuiltIn PointSize
+                              Decorate 40(gl_InstanceID) PrecisionHigh 
+                              Decorate 40(gl_InstanceID) BuiltIn InstanceId
+                              Decorate 40(gl_InstanceID) NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeInt 32 1
+               8:             TypePointer Function 7(int)
+              10:      7(int) Constant 4
+              11:             TypePointer Input 7(int)
+ 12(gl_VertexID):     11(ptr) Variable Input 
+              15:      7(int) Constant 10
+              21:             TypeFloat 32
+              22:             TypeVector 21(float) 4
+              23:             TypePointer Output 22(fvec4)
+ 24(gl_Position):     23(ptr) Variable Output 
+              25:             TypePointer Input 21(float)
+          26(ps):     25(ptr) Variable Input 
+              33:             TypePointer Output 21(float)
+34(gl_PointSize):     33(ptr) Variable Output 
+40(gl_InstanceID):     11(ptr) Variable Input 
+         4(main):           2 Function None 3
+               5:             Label
+            9(i):      8(ptr) Variable Function 
+           17(j):      8(ptr) Variable Function 
+              13:      7(int) Load 12(gl_VertexID) 
+              14:      7(int) IMul 10 13
+              16:      7(int) ISub 14 15
+                              Store 9(i) 16 
+              18:      7(int) Load 12(gl_VertexID) 
+              19:      7(int) IMul 10 18
+              20:      7(int) ISub 19 15
+                              Store 17(j) 20 
+              27:   21(float) Load 26(ps) 
+              28:   22(fvec4) CompositeConstruct 27 27 27 27
+                              Store 24(gl_Position) 28 
+              29:      7(int) Load 9(i) 
+              30:   21(float) ConvertSToF 29
+              31:   22(fvec4) Load 24(gl_Position) 
+              32:   22(fvec4) VectorTimesScalar 31 30
+                              Store 24(gl_Position) 32 
+              35:   21(float) Load 26(ps) 
+                              Store 34(gl_PointSize) 35 
+              36:      7(int) Load 17(j) 
+              37:   21(float) ConvertSToF 36
+              38:   21(float) Load 34(gl_PointSize) 
+              39:   21(float) FMul 38 37
+                              Store 34(gl_PointSize) 39 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.300layout.frag.out b/Test/baseResults/spv.300layout.frag.out
new file mode 100644
index 000000000..d81baf1be
--- /dev/null
+++ b/Test/baseResults/spv.300layout.frag.out
@@ -0,0 +1,76 @@
+spv.300layout.frag
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 38
+
+                              Source GLSL 300
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 10  "c"
+                              Name 12  "color"
+                              Name 14  "S"
+                              MemberName 14(S) 0  "c"
+                              MemberName 14(S) 1  "f"
+                              Name 16  "s"
+                              Name 27  "p"
+                              Name 30  "pos"
+                              Decorate 10(c) PrecisionMedium 
+                              Decorate 10(c) Location 7
+                              Decorate 12(color) PrecisionMedium 
+                              Decorate 12(color) Smooth 
+                              MemberDecorate 14(S) 0 PrecisionMedium 
+                              MemberDecorate 14(S) 1 PrecisionMedium 
+                              Decorate 27(p) PrecisionMedium 
+                              Decorate 27(p) Location 3
+                              Decorate 30(pos) PrecisionMedium 
+                              Decorate 30(pos) Smooth 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeVector 7(float) 3
+               9:             TypePointer Output 8(fvec3)
+           10(c):      9(ptr) Variable Output 
+              11:             TypePointer Input 8(fvec3)
+       12(color):     11(ptr) Variable Input 
+           14(S):             TypeStruct 8(fvec3) 7(float)
+              15:             TypePointer Input 14(S)
+           16(s):     15(ptr) Variable Input 
+              17:             TypeInt 32 1
+              18:     17(int) Constant 0
+              22:             TypeVector 7(float) 4
+              23:             TypeInt 32 0
+              24:     23(int) Constant 2
+              25:             TypeArray 22(fvec4) 24
+              26:             TypePointer Output 25
+           27(p):     26(ptr) Variable Output 
+              28:     17(int) Constant 1
+              29:             TypePointer Input 22(fvec4)
+         30(pos):     29(ptr) Variable Input 
+              32:             TypePointer Input 7(float)
+              36:             TypePointer Output 22(fvec4)
+         4(main):           2 Function None 3
+               5:             Label
+              13:    8(fvec3) Load 12(color) 
+              19:     11(ptr) AccessChain 16(s) 18
+              20:    8(fvec3) Load 19 
+              21:    8(fvec3) FAdd 13 20
+                              Store 10(c) 21 
+              31:   22(fvec4) Load 30(pos) 
+              33:     32(ptr) AccessChain 16(s) 28
+              34:    7(float) Load 33 
+              35:   22(fvec4) VectorTimesScalar 31 34
+              37:     36(ptr) AccessChain 27(p) 28
+                              Store 37 35 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.300layout.vert.out b/Test/baseResults/spv.300layout.vert.out
new file mode 100644
index 000000000..348ee7079
--- /dev/null
+++ b/Test/baseResults/spv.300layout.vert.out
@@ -0,0 +1,9 @@
+spv.300layout.vert
+
+
+
+Linked vertex stage:
+
+
+
+Missing functionality: binary operation on matrix
diff --git a/Test/baseResults/spv.300layoutp.vert.out b/Test/baseResults/spv.300layoutp.vert.out
new file mode 100644
index 000000000..6c8697b88
--- /dev/null
+++ b/Test/baseResults/spv.300layoutp.vert.out
@@ -0,0 +1,211 @@
+spv.300layoutp.vert
+
+
+
+Linked vertex stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 112
+
+                              Source GLSL 300
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4
+                              Name 4  "main"
+                              Name 10  "pos"
+                              Name 12  "p"
+                              Name 18  "Transform"
+                              MemberName 18(Transform) 0  "M1"
+                              MemberName 18(Transform) 1  "M2"
+                              MemberName 18(Transform) 2  "N1"
+                              MemberName 18(Transform) 3  "iuin"
+                              Name 20  "tblock"
+                              Name 34  "T3"
+                              MemberName 34(T3) 0  "M3"
+                              MemberName 34(T3) 1  "M4"
+                              MemberName 34(T3) 2  "N2"
+                              MemberName 34(T3) 3  "uv3a"
+                              Name 36  ""
+                              Name 44  "T2"
+                              MemberName 44(T2) 0  "b"
+                              MemberName 44(T2) 1  "t2m"
+                              Name 46  ""
+                              Name 52  "color"
+                              Name 54  "c"
+                              Name 62  "iout"
+                              Name 68  "uiuin"
+                              Name 74  "aiv2"
+                              Name 78  "S"
+                              MemberName 78(S) 0  "c"
+                              MemberName 78(S) 1  "f"
+                              Name 80  "s"
+                              Name 110  "gl_VertexID"
+                              Name 111  "gl_InstanceID"
+                              Decorate 10(pos) PrecisionHigh 
+                              Decorate 10(pos) Smooth 
+                              Decorate 12(p) PrecisionHigh 
+                              Decorate 12(p) Location 3
+                              MemberDecorate 18(Transform) 0 RowMajor 
+                              MemberDecorate 18(Transform) 0 PrecisionHigh 
+                              MemberDecorate 18(Transform) 1 ColMajor 
+                              MemberDecorate 18(Transform) 1 PrecisionHigh 
+                              MemberDecorate 18(Transform) 2 RowMajor 
+                              MemberDecorate 18(Transform) 2 PrecisionHigh 
+                              MemberDecorate 18(Transform) 3 PrecisionHigh 
+                              Decorate 18(Transform) GLSLStd140 
+                              Decorate 18(Transform) Block 
+                              MemberDecorate 34(T3) 0 ColMajor 
+                              MemberDecorate 34(T3) 0 PrecisionHigh 
+                              MemberDecorate 34(T3) 1 RowMajor 
+                              MemberDecorate 34(T3) 1 PrecisionHigh 
+                              MemberDecorate 34(T3) 2 ColMajor 
+                              MemberDecorate 34(T3) 2 PrecisionHigh 
+                              MemberDecorate 34(T3) 3 PrecisionHigh 
+                              Decorate 34(T3) GLSLShared 
+                              Decorate 34(T3) Block 
+                              MemberDecorate 44(T2) 1 RowMajor 
+                              MemberDecorate 44(T2) 1 PrecisionHigh 
+                              Decorate 44(T2) GLSLShared 
+                              Decorate 44(T2) Block 
+                              Decorate 52(color) PrecisionHigh 
+                              Decorate 52(color) Smooth 
+                              Decorate 54(c) PrecisionHigh 
+                              Decorate 54(c) Location 7
+                              Decorate 62(iout) PrecisionHigh 
+                              Decorate 62(iout) Flat 
+                              Decorate 68(uiuin) PrecisionHigh 
+                              Decorate 74(aiv2) PrecisionHigh 
+                              Decorate 74(aiv2) Location 9
+                              MemberDecorate 78(S) 0 PrecisionHigh 
+                              MemberDecorate 78(S) 1 PrecisionHigh 
+                              Decorate 110(gl_VertexID) PrecisionHigh 
+                              Decorate 110(gl_VertexID) BuiltIn VertexId
+                              Decorate 110(gl_VertexID) NoStaticUse 
+                              Decorate 111(gl_InstanceID) PrecisionHigh 
+                              Decorate 111(gl_InstanceID) BuiltIn InstanceId
+                              Decorate 111(gl_InstanceID) NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeVector 7(float) 4
+               9:             TypePointer Output 8(fvec4)
+         10(pos):      9(ptr) Variable Output 
+              11:             TypePointer Input 8(fvec4)
+           12(p):     11(ptr) Variable Input 
+              14:             TypeMatrix 8(fvec4) 4
+              15:             TypeVector 7(float) 3
+              16:             TypeMatrix 15(fvec3) 3
+              17:             TypeInt 32 1
+   18(Transform):             TypeStruct 14 14 16 17(int)
+              19:             TypePointer Uniform 18(Transform)
+      20(tblock):     19(ptr) Variable Uniform 
+              21:     17(int) Constant 0
+              22:             TypePointer Uniform 14
+              25:     17(int) Constant 1
+              29:             TypeMatrix 15(fvec3) 2
+              30:             TypeInt 32 0
+              31:             TypeVector 30(int) 3
+              32:     30(int) Constant 4
+              33:             TypeArray 31(ivec3) 32
+          34(T3):             TypeStruct 14 14 29 33
+              35:             TypePointer Uniform 34(T3)
+              36:     35(ptr) Variable Uniform 
+              43:             TypeBool
+          44(T2):             TypeStruct 43(bool) 14
+              45:             TypePointer Uniform 44(T2)
+              46:     45(ptr) Variable Uniform 
+              51:             TypePointer Output 15(fvec3)
+       52(color):     51(ptr) Variable Output 
+              53:             TypePointer Input 15(fvec3)
+           54(c):     53(ptr) Variable Input 
+              56:     17(int) Constant 2
+              57:             TypePointer Uniform 16
+              61:             TypePointer Output 17(int)
+        62(iout):     61(ptr) Variable Output 
+              63:     17(int) Constant 3
+              64:             TypePointer Uniform 17(int)
+              67:             TypePointer UniformConstant 30(int)
+       68(uiuin):     67(ptr) Variable UniformConstant 
+              72:             TypeVector 17(int) 2
+              73:             TypePointer Input 72(ivec2)
+        74(aiv2):     73(ptr) Variable Input 
+           78(S):             TypeStruct 15(fvec3) 7(float)
+              79:             TypePointer Output 78(S)
+           80(s):     79(ptr) Variable Output 
+              85:             TypePointer Output 7(float)
+              87:             TypePointer Uniform 15(fvec3)
+              90:    7(float) Constant 1065353216
+              91:   15(fvec3) ConstantComposite 90 90 90
+              92:             TypeVector 43(bool) 3
+              95:             TypePointer Uniform 31(ivec3)
+              98:     30(int) Constant 5
+              99:   31(ivec3) ConstantComposite 98 98 98
+             109:             TypePointer Input 17(int)
+110(gl_VertexID):    109(ptr) Variable Input 
+111(gl_InstanceID):    109(ptr) Variable Input 
+         4(main):           2 Function None 3
+               5:             Label
+              13:    8(fvec4) Load 12(p) 
+              23:     22(ptr) AccessChain 20(tblock) 21
+              24:          14 Load 23 
+              26:     22(ptr) AccessChain 20(tblock) 25
+              27:          14 Load 26 
+              28:          14 MatrixTimesMatrix 24 27
+              37:     22(ptr) AccessChain 36 25
+              38:          14 Load 37 
+              39:          14 MatrixTimesMatrix 28 38
+              40:     22(ptr) AccessChain 36 21
+              41:          14 Load 40 
+              42:          14 MatrixTimesMatrix 39 41
+              47:     22(ptr) AccessChain 46 25
+              48:          14 Load 47 
+              49:          14 MatrixTimesMatrix 42 48
+              50:    8(fvec4) VectorTimesMatrix 13 49
+                              Store 10(pos) 50 
+              55:   15(fvec3) Load 54(c) 
+              58:     57(ptr) AccessChain 20(tblock) 56
+              59:          16 Load 58 
+              60:   15(fvec3) VectorTimesMatrix 55 59
+                              Store 52(color) 60 
+              65:     64(ptr) AccessChain 20(tblock) 63
+              66:     17(int) Load 65 
+              69:     30(int) Load 68(uiuin) 
+              70:     17(int) Bitcast 69
+              71:     17(int) IAdd 66 70
+              75:   72(ivec2) Load 74(aiv2) 
+              76:     17(int) CompositeExtract 75 1
+              77:     17(int) IAdd 71 76
+                              Store 62(iout) 77 
+              81:   15(fvec3) Load 54(c) 
+              82:     51(ptr) AccessChain 80(s) 21
+                              Store 82 81 
+              83:    8(fvec4) Load 12(p) 
+              84:    7(float) CompositeExtract 83 0
+              86:     85(ptr) AccessChain 80(s) 25
+                              Store 86 84 
+              88:     87(ptr) AccessChain 36 56 25
+              89:   15(fvec3) Load 88 
+              93:   92(bvec3) FOrdNotEqual 89 91
+              94:    43(bool) Any 93
+              96:     95(ptr) AccessChain 36 63 56
+              97:   31(ivec3) Load 96 
+             100:   92(bvec3) INotEqual 97 99
+             101:    43(bool) Any 100
+             102:    43(bool) LogicalOr 94 101
+                              SelectionMerge 104 None
+                              BranchConditional 102 103 104 
+             103:               Label
+             105:     51(ptr)   AccessChain 80(s) 21
+             106:   15(fvec3)   Load 105 
+             107:   15(fvec3)   CompositeConstruct 90 90 90
+             108:   15(fvec3)   FAdd 106 107
+                                Store 105 108 
+                                Branch 104
+             104:             Label
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.310.comp.out b/Test/baseResults/spv.310.comp.out
new file mode 100644
index 000000000..b12580b05
--- /dev/null
+++ b/Test/baseResults/spv.310.comp.out
@@ -0,0 +1,10 @@
+spv.310.comp
+Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
+
+
+
+Linked compute stage:
+
+
+
+Missing functionality: Unsized array
diff --git a/Test/baseResults/spv.330.geom.out b/Test/baseResults/spv.330.geom.out
new file mode 100644
index 000000000..b9923e6f0
--- /dev/null
+++ b/Test/baseResults/spv.330.geom.out
@@ -0,0 +1,72 @@
+spv.330.geom
+
+
+
+Linked geometry stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 33
+
+                              Source GLSL 330
+                              SourceExtension  "GL_ARB_separate_shader_objects"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Geometry 4
+                              ExecutionMode 4 InputTriangles 
+                              ExecutionMode 4 Invocations 0
+                              ExecutionMode 4 OutputTriangleStrip 
+                              ExecutionMode 4 OutputVertices 3
+                              Name 4  "main"
+                              Name 12  "gl_PerVertex"
+                              MemberName 12(gl_PerVertex) 0  "gl_Position"
+                              MemberName 12(gl_PerVertex) 1  "gl_ClipDistance"
+                              Name 14  ""
+                              Name 17  "gl_PerVertex"
+                              MemberName 17(gl_PerVertex) 0  "gl_Position"
+                              MemberName 17(gl_PerVertex) 1  "gl_ClipDistance"
+                              Name 21  "gl_in"
+                              Decorate 12(gl_PerVertex) Block 
+                              Decorate 12(gl_PerVertex) Stream 0
+                              Decorate 14 Stream 0
+                              Decorate 17(gl_PerVertex) Block 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeVector 7(float) 4
+               9:             TypeInt 32 0
+              10:      9(int) Constant 1
+              11:             TypeArray 7(float) 10
+12(gl_PerVertex):             TypeStruct 8(fvec4) 11
+              13:             TypePointer Output 12(gl_PerVertex)
+              14:     13(ptr) Variable Output 
+              15:             TypeInt 32 1
+              16:     15(int) Constant 0
+17(gl_PerVertex):             TypeStruct 8(fvec4) 11
+              18:      9(int) Constant 3
+              19:             TypeArray 17(gl_PerVertex) 18
+              20:             TypePointer Input 19
+       21(gl_in):     20(ptr) Variable Input 
+              22:     15(int) Constant 1
+              23:             TypePointer Input 8(fvec4)
+              26:             TypePointer Output 8(fvec4)
+              28:             TypePointer Input 7(float)
+              31:             TypePointer Output 7(float)
+         4(main):           2 Function None 3
+               5:             Label
+              24:     23(ptr) AccessChain 21(gl_in) 22 16
+              25:    8(fvec4) Load 24 
+              27:     26(ptr) AccessChain 14 16
+                              Store 27 25 
+              29:     28(ptr) AccessChain 21(gl_in) 22 22 16
+              30:    7(float) Load 29 
+              32:     31(ptr) AccessChain 14 22 16
+                              Store 32 30 
+                              EmitVertex
+                              EndPrimitive
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.400.frag.out b/Test/baseResults/spv.400.frag.out
new file mode 100644
index 000000000..9e98d2ced
--- /dev/null
+++ b/Test/baseResults/spv.400.frag.out
@@ -0,0 +1,10 @@
+spv.400.frag
+Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
+
+
+
+Linked fragment stage:
+
+
+
+Missing functionality: texture gather
diff --git a/Test/baseResults/spv.400.tesc.out b/Test/baseResults/spv.400.tesc.out
new file mode 100644
index 000000000..edfae88c7
--- /dev/null
+++ b/Test/baseResults/spv.400.tesc.out
@@ -0,0 +1,176 @@
+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 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 89
+
+                              Source GLSL 400
+                              SourceExtension  "GL_ARB_separate_shader_objects"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint TessellationControl 4
+                              ExecutionMode 4 OutputVertices 4
+                              Name 4  "main"
+                              Name 9  "a"
+                              Name 14  "p"
+                              Name 18  "gl_PerVertex"
+                              MemberName 18(gl_PerVertex) 0  "gl_Position"
+                              MemberName 18(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 18(gl_PerVertex) 2  "gl_ClipDistance"
+                              Name 22  "gl_in"
+                              Name 29  "ps"
+                              Name 33  "cd"
+                              Name 37  "pvi"
+                              Name 39  "gl_PatchVerticesIn"
+                              Name 41  "pid"
+                              Name 42  "gl_PrimitiveID"
+                              Name 44  "iid"
+                              Name 45  "gl_InvocationID"
+                              Name 47  "gl_PerVertex"
+                              MemberName 47(gl_PerVertex) 0  "gl_Position"
+                              MemberName 47(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 47(gl_PerVertex) 2  "gl_ClipDistance"
+                              Name 51  "gl_out"
+                              Name 62  "gl_TessLevelOuter"
+                              Name 69  "gl_TessLevelInner"
+                              Name 74  "outa"
+                              Name 75  "patchOut"
+                              Name 79  "inb"
+                              Name 80  "ind"
+                              Name 83  "ivla"
+                              Name 84  "ivlb"
+                              Name 87  "ovla"
+                              Name 88  "ovlb"
+                              Decorate 18(gl_PerVertex) Block 
+                              Decorate 39(gl_PatchVerticesIn) BuiltIn PatchVertices
+                              Decorate 42(gl_PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 45(gl_InvocationID) BuiltIn InvocationId
+                              Decorate 47(gl_PerVertex) Block 
+                              Decorate 62(gl_TessLevelOuter) Patch 
+                              Decorate 62(gl_TessLevelOuter) BuiltIn TessLevelOuter
+                              Decorate 69(gl_TessLevelInner) Patch 
+                              Decorate 69(gl_TessLevelInner) BuiltIn TessLevelInner
+                              Decorate 74(outa) NoStaticUse 
+                              Decorate 75(patchOut) Patch 
+                              Decorate 75(patchOut) NoStaticUse 
+                              Decorate 79(inb) NoStaticUse 
+                              Decorate 80(ind) NoStaticUse 
+                              Decorate 83(ivla) Location 3
+                              Decorate 83(ivla) NoStaticUse 
+                              Decorate 84(ivlb) Location 4
+                              Decorate 84(ivlb) NoStaticUse 
+                              Decorate 87(ovla) Location 3
+                              Decorate 87(ovla) NoStaticUse 
+                              Decorate 88(ovlb) Location 4
+                              Decorate 88(ovlb) NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeInt 32 1
+               8:             TypePointer Function 7(int)
+              10:      7(int) Constant 5392
+              11:             TypeFloat 32
+              12:             TypeVector 11(float) 4
+              13:             TypePointer Function 12(fvec4)
+              15:             TypeInt 32 0
+              16:     15(int) Constant 1
+              17:             TypeArray 11(float) 16
+18(gl_PerVertex):             TypeStruct 12(fvec4) 11(float) 17
+              19:     15(int) Constant 32
+              20:             TypeArray 18(gl_PerVertex) 19
+              21:             TypePointer Input 20
+       22(gl_in):     21(ptr) Variable Input 
+              23:      7(int) Constant 1
+              24:      7(int) Constant 0
+              25:             TypePointer Input 12(fvec4)
+              28:             TypePointer Function 11(float)
+              30:             TypePointer Input 11(float)
+              34:      7(int) Constant 2
+              38:             TypePointer Input 7(int)
+39(gl_PatchVerticesIn):     38(ptr) Variable Input 
+42(gl_PrimitiveID):     38(ptr) Variable Input 
+45(gl_InvocationID):     38(ptr) Variable Input 
+47(gl_PerVertex):             TypeStruct 12(fvec4) 11(float) 17
+              48:     15(int) Constant 4
+              49:             TypeArray 47(gl_PerVertex) 48
+              50:             TypePointer Output 49
+      51(gl_out):     50(ptr) Variable Output 
+              53:             TypePointer Output 12(fvec4)
+              56:             TypePointer Output 11(float)
+              60:             TypeArray 11(float) 48
+              61:             TypePointer Output 60
+62(gl_TessLevelOuter):     61(ptr) Variable Output 
+              63:      7(int) Constant 3
+              64:   11(float) Constant 1078774989
+              66:     15(int) Constant 2
+              67:             TypeArray 11(float) 66
+              68:             TypePointer Output 67
+69(gl_TessLevelInner):     68(ptr) Variable Output 
+              70:   11(float) Constant 1067869798
+              72:             TypeArray 7(int) 48
+              73:             TypePointer PrivateGlobal 72
+        74(outa):     73(ptr) Variable PrivateGlobal 
+    75(patchOut):     53(ptr) Variable Output 
+              76:             TypeVector 11(float) 2
+              77:             TypeArray 76(fvec2) 19
+              78:             TypePointer Input 77
+         79(inb):     78(ptr) Variable Input 
+         80(ind):     78(ptr) Variable Input 
+              81:             TypeArray 12(fvec4) 19
+              82:             TypePointer Input 81
+        83(ivla):     82(ptr) Variable Input 
+        84(ivlb):     82(ptr) Variable Input 
+              85:             TypeArray 12(fvec4) 48
+              86:             TypePointer Output 85
+        87(ovla):     86(ptr) Variable Output 
+        88(ovlb):     86(ptr) Variable Output 
+         4(main):           2 Function None 3
+               5:             Label
+            9(a):      8(ptr) Variable Function 
+           14(p):     13(ptr) Variable Function 
+          29(ps):     28(ptr) Variable Function 
+          33(cd):     28(ptr) Variable Function 
+         37(pvi):      8(ptr) Variable Function 
+         41(pid):      8(ptr) Variable Function 
+         44(iid):      8(ptr) Variable Function 
+                              MemoryBarrier Device Relaxed SequentiallyConsistent Acquire Release UniformMemory SubgroupMemory WorkgroupLocalMemory WorkgroupGlobalMemory AtomicCounterMemory ImageMemory 
+                              ControlBarrier Device
+                              Store 9(a) 10 
+              26:     25(ptr) AccessChain 22(gl_in) 23 24
+              27:   12(fvec4) Load 26 
+                              Store 14(p) 27 
+              31:     30(ptr) AccessChain 22(gl_in) 23 23
+              32:   11(float) Load 31 
+                              Store 29(ps) 32 
+              35:     30(ptr) AccessChain 22(gl_in) 23 34 34
+              36:   11(float) Load 35 
+                              Store 33(cd) 36 
+              40:      7(int) Load 39(gl_PatchVerticesIn) 
+                              Store 37(pvi) 40 
+              43:      7(int) Load 42(gl_PrimitiveID) 
+                              Store 41(pid) 43 
+              46:      7(int) Load 45(gl_InvocationID) 
+                              Store 44(iid) 46 
+              52:   12(fvec4) Load 14(p) 
+              54:     53(ptr) AccessChain 51(gl_out) 23 24
+                              Store 54 52 
+              55:   11(float) Load 29(ps) 
+              57:     56(ptr) AccessChain 51(gl_out) 23 23
+                              Store 57 55 
+              58:   11(float) Load 33(cd) 
+              59:     56(ptr) AccessChain 51(gl_out) 23 34 23
+                              Store 59 58 
+              65:     56(ptr) AccessChain 62(gl_TessLevelOuter) 63
+                              Store 65 64 
+              71:     56(ptr) AccessChain 69(gl_TessLevelInner) 23
+                              Store 71 70 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.400.tese.out b/Test/baseResults/spv.400.tese.out
new file mode 100644
index 000000000..4d141ae2b
--- /dev/null
+++ b/Test/baseResults/spv.400.tese.out
@@ -0,0 +1,191 @@
+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 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 99
+
+                              Source GLSL 400
+                              SourceExtension  "GL_ARB_separate_shader_objects"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint TessellationEvaluation 4
+                              ExecutionMode 4 InputTriangles 
+                              Name 4  "main"
+                              Name 9  "a"
+                              Name 14  "p"
+                              Name 18  "gl_PerVertex"
+                              MemberName 18(gl_PerVertex) 0  "gl_Position"
+                              MemberName 18(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 18(gl_PerVertex) 2  "gl_ClipDistance"
+                              Name 22  "gl_in"
+                              Name 29  "ps"
+                              Name 33  "cd"
+                              Name 37  "pvi"
+                              Name 39  "gl_PatchVerticesIn"
+                              Name 41  "pid"
+                              Name 42  "gl_PrimitiveID"
+                              Name 46  "tc"
+                              Name 48  "gl_TessCoord"
+                              Name 50  "tlo"
+                              Name 54  "gl_TessLevelOuter"
+                              Name 58  "tli"
+                              Name 62  "gl_TessLevelInner"
+                              Name 67  "gl_PerVertex"
+                              MemberName 67(gl_PerVertex) 0  "gl_Position"
+                              MemberName 67(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 67(gl_PerVertex) 2  "gl_ClipDistance"
+                              Name 69  ""
+                              Name 78  "patchIn"
+                              Name 82  "inb"
+                              Name 83  "ind"
+                              Name 84  "testblb"
+                              MemberName 84(testblb) 0  "f"
+                              Name 87  "blb"
+                              Name 88  "testbld"
+                              MemberName 88(testbld) 0  "f"
+                              Name 91  "bld"
+                              Name 94  "ivla"
+                              Name 95  "ivlb"
+                              Name 98  "ovla"
+                              Decorate 18(gl_PerVertex) Block 
+                              Decorate 39(gl_PatchVerticesIn) BuiltIn PatchVertices
+                              Decorate 42(gl_PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 48(gl_TessCoord) BuiltIn TessCoord
+                              Decorate 54(gl_TessLevelOuter) Patch 
+                              Decorate 54(gl_TessLevelOuter) BuiltIn TessLevelOuter
+                              Decorate 62(gl_TessLevelInner) Patch 
+                              Decorate 62(gl_TessLevelInner) BuiltIn TessLevelInner
+                              Decorate 67(gl_PerVertex) Block 
+                              Decorate 78(patchIn) Patch 
+                              Decorate 78(patchIn) NoStaticUse 
+                              Decorate 82(inb) NoStaticUse 
+                              Decorate 83(ind) NoStaticUse 
+                              Decorate 84(testblb) Block 
+                              Decorate 87(blb) NoStaticUse 
+                              Decorate 88(testbld) Block 
+                              Decorate 91(bld) NoStaticUse 
+                              Decorate 94(ivla) Location 23
+                              Decorate 94(ivla) NoStaticUse 
+                              Decorate 95(ivlb) Location 24
+                              Decorate 95(ivlb) NoStaticUse 
+                              Decorate 98(ovla) Location 23
+                              Decorate 98(ovla) NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeInt 32 1
+               8:             TypePointer Function 7(int)
+              10:      7(int) Constant 1512
+              11:             TypeFloat 32
+              12:             TypeVector 11(float) 4
+              13:             TypePointer Function 12(fvec4)
+              15:             TypeInt 32 0
+              16:     15(int) Constant 1
+              17:             TypeArray 11(float) 16
+18(gl_PerVertex):             TypeStruct 12(fvec4) 11(float) 17
+              19:     15(int) Constant 32
+              20:             TypeArray 18(gl_PerVertex) 19
+              21:             TypePointer Input 20
+       22(gl_in):     21(ptr) Variable Input 
+              23:      7(int) Constant 1
+              24:      7(int) Constant 0
+              25:             TypePointer Input 12(fvec4)
+              28:             TypePointer Function 11(float)
+              30:             TypePointer Input 11(float)
+              34:      7(int) Constant 2
+              38:             TypePointer Input 7(int)
+39(gl_PatchVerticesIn):     38(ptr) Variable Input 
+42(gl_PrimitiveID):     38(ptr) Variable Input 
+              44:             TypeVector 11(float) 3
+              45:             TypePointer Function 44(fvec3)
+              47:             TypePointer Input 44(fvec3)
+48(gl_TessCoord):     47(ptr) Variable Input 
+              51:     15(int) Constant 4
+              52:             TypeArray 11(float) 51
+              53:             TypePointer Input 52
+54(gl_TessLevelOuter):     53(ptr) Variable Input 
+              55:      7(int) Constant 3
+              59:     15(int) Constant 2
+              60:             TypeArray 11(float) 59
+              61:             TypePointer Input 60
+62(gl_TessLevelInner):     61(ptr) Variable Input 
+              65:     15(int) Constant 3
+              66:             TypeArray 11(float) 65
+67(gl_PerVertex):             TypeStruct 12(fvec4) 11(float) 66
+              68:             TypePointer Output 67(gl_PerVertex)
+              69:     68(ptr) Variable Output 
+              71:             TypePointer Output 12(fvec4)
+              74:             TypePointer Output 11(float)
+     78(patchIn):     25(ptr) Variable Input 
+              79:             TypeVector 11(float) 2
+              80:             TypeArray 79(fvec2) 19
+              81:             TypePointer Input 80
+         82(inb):     81(ptr) Variable Input 
+         83(ind):     81(ptr) Variable Input 
+     84(testblb):             TypeStruct 7(int)
+              85:             TypeArray 84(testblb) 19
+              86:             TypePointer Input 85
+         87(blb):     86(ptr) Variable Input 
+     88(testbld):             TypeStruct 7(int)
+              89:             TypeArray 88(testbld) 19
+              90:             TypePointer Input 89
+         91(bld):     90(ptr) Variable Input 
+              92:             TypeArray 12(fvec4) 19
+              93:             TypePointer Input 92
+        94(ivla):     93(ptr) Variable Input 
+        95(ivlb):     93(ptr) Variable Input 
+              96:             TypeArray 12(fvec4) 59
+              97:             TypePointer Output 96
+        98(ovla):     97(ptr) Variable Output 
+         4(main):           2 Function None 3
+               5:             Label
+            9(a):      8(ptr) Variable Function 
+           14(p):     13(ptr) Variable Function 
+          29(ps):     28(ptr) Variable Function 
+          33(cd):     28(ptr) Variable Function 
+         37(pvi):      8(ptr) Variable Function 
+         41(pid):      8(ptr) Variable Function 
+          46(tc):     45(ptr) Variable Function 
+         50(tlo):     28(ptr) Variable Function 
+         58(tli):     28(ptr) Variable Function 
+                              Store 9(a) 10 
+              26:     25(ptr) AccessChain 22(gl_in) 23 24
+              27:   12(fvec4) Load 26 
+                              Store 14(p) 27 
+              31:     30(ptr) AccessChain 22(gl_in) 23 23
+              32:   11(float) Load 31 
+                              Store 29(ps) 32 
+              35:     30(ptr) AccessChain 22(gl_in) 23 34 34
+              36:   11(float) Load 35 
+                              Store 33(cd) 36 
+              40:      7(int) Load 39(gl_PatchVerticesIn) 
+                              Store 37(pvi) 40 
+              43:      7(int) Load 42(gl_PrimitiveID) 
+                              Store 41(pid) 43 
+              49:   44(fvec3) Load 48(gl_TessCoord) 
+                              Store 46(tc) 49 
+              56:     30(ptr) AccessChain 54(gl_TessLevelOuter) 55
+              57:   11(float) Load 56 
+                              Store 50(tlo) 57 
+              63:     30(ptr) AccessChain 62(gl_TessLevelInner) 23
+              64:   11(float) Load 63 
+                              Store 58(tli) 64 
+              70:   12(fvec4) Load 14(p) 
+              72:     71(ptr) AccessChain 69 24
+                              Store 72 70 
+              73:   11(float) Load 29(ps) 
+              75:     74(ptr) AccessChain 69 23
+                              Store 75 73 
+              76:   11(float) Load 33(cd) 
+              77:     74(ptr) AccessChain 69 34 34
+                              Store 77 76 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.420.geom.out b/Test/baseResults/spv.420.geom.out
new file mode 100644
index 000000000..ba12e9ebd
--- /dev/null
+++ b/Test/baseResults/spv.420.geom.out
@@ -0,0 +1,10 @@
+spv.420.geom
+Warning, version 420 is not yet complete; most version-specific features are present, but some are missing.
+
+
+
+Linked geometry stage:
+
+
+
+Missing functionality: texture gather
diff --git a/Test/baseResults/spv.430.vert.out b/Test/baseResults/spv.430.vert.out
new file mode 100644
index 000000000..b1cf837f7
--- /dev/null
+++ b/Test/baseResults/spv.430.vert.out
@@ -0,0 +1,135 @@
+spv.430.vert
+Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
+
+
+
+Linked vertex stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 62
+
+                              Source GLSL 430
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4
+                              Name 4  "main"
+                              Name 11  "gl_PerVertex"
+                              MemberName 11(gl_PerVertex) 0  "gl_ClipDistance"
+                              Name 13  ""
+                              Name 24  "bad"
+                              Name 35  "badorder3"
+                              Name 39  "f"
+                              Name 43  "uv4"
+                              Name 44  "badorder"
+                              Name 45  "badorder2"
+                              Name 46  "boundblock"
+                              MemberName 46(boundblock) 0  "aoeu"
+                              Name 48  "boundInst"
+                              Name 49  "anonblock"
+                              MemberName 49(anonblock) 0  "aoeu"
+                              Name 51  ""
+                              Name 54  "sampb1"
+                              Name 57  "sampb2"
+                              Name 58  "sampb4"
+                              Name 60  "gl_VertexID"
+                              Name 61  "gl_InstanceID"
+                              Decorate 11(gl_PerVertex) Block 
+                              Decorate 35(badorder3) Flat 
+                              Decorate 43(uv4) Location 4
+                              Decorate 43(uv4) NoStaticUse 
+                              Decorate 29 NoStaticUse 
+                              Decorate 29 NoStaticUse 
+                              Decorate 44(badorder) NoStaticUse 
+                              Decorate 45(badorder2) Smooth 
+                              Decorate 45(badorder2) Invariant 
+                              Decorate 45(badorder2) NoStaticUse 
+                              Decorate 46(boundblock) GLSLShared 
+                              Decorate 46(boundblock) Block 
+                              Decorate 48(boundInst) Binding 3
+                              Decorate 48(boundInst) NoStaticUse 
+                              Decorate 49(anonblock) GLSLShared 
+                              Decorate 49(anonblock) Block 
+                              Decorate 51 Binding 7
+                              Decorate 51 NoStaticUse 
+                              Decorate 54(sampb1) Binding 4
+                              Decorate 54(sampb1) NoStaticUse 
+                              Decorate 57(sampb2) Binding 5
+                              Decorate 57(sampb2) NoStaticUse 
+                              Decorate 58(sampb4) Binding 31
+                              Decorate 58(sampb4) NoStaticUse 
+                              Decorate 60(gl_VertexID) BuiltIn VertexId
+                              Decorate 60(gl_VertexID) NoStaticUse 
+                              Decorate 61(gl_InstanceID) BuiltIn InstanceId
+                              Decorate 61(gl_InstanceID) NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeInt 32 0
+               9:      8(int) Constant 3
+              10:             TypeArray 7(float) 9
+11(gl_PerVertex):             TypeStruct 10
+              12:             TypePointer Output 11(gl_PerVertex)
+              13:     12(ptr) Variable Output 
+              14:             TypeInt 32 1
+              15:     14(int) Constant 0
+              16:     14(int) Constant 2
+              17:    7(float) Constant 1080872141
+              18:             TypePointer Output 7(float)
+              20:             TypeVector 7(float) 4
+              21:      8(int) Constant 10
+              22:             TypeArray 20(fvec4) 21
+              23:             TypePointer Input 22
+         24(bad):     23(ptr) Variable Input 
+              25:             TypePointer Input 20(fvec4)
+              29:    7(float) Constant 1082549862
+              30:             TypeBool
+              34:             TypePointer Output 20(fvec4)
+   35(badorder3):     34(ptr) Variable Output 
+              38:             TypePointer UniformConstant 7(float)
+           39(f):     38(ptr) Variable UniformConstant 
+              42:             TypePointer UniformConstant 20(fvec4)
+         43(uv4):     42(ptr) Variable UniformConstant 
+    44(badorder):     25(ptr) Variable Input 
+   45(badorder2):     34(ptr) Variable Output 
+  46(boundblock):             TypeStruct 14(int)
+              47:             TypePointer Uniform 46(boundblock)
+   48(boundInst):     47(ptr) Variable Uniform 
+   49(anonblock):             TypeStruct 14(int)
+              50:             TypePointer Uniform 49(anonblock)
+              51:     50(ptr) Variable Uniform 
+              52:             TypeSampler7(float) 2D filter+texture
+              53:             TypePointer UniformConstant 52
+      54(sampb1):     53(ptr) Variable UniformConstant 
+              55:             TypeArray 52 21
+              56:             TypePointer UniformConstant 55
+      57(sampb2):     56(ptr) Variable UniformConstant 
+      58(sampb4):     53(ptr) Variable UniformConstant 
+              59:             TypePointer Input 14(int)
+ 60(gl_VertexID):     59(ptr) Variable Input 
+61(gl_InstanceID):     59(ptr) Variable Input 
+         4(main):           2 Function None 3
+               5:             Label
+              19:     18(ptr) AccessChain 13 15 16
+                              Store 19 17 
+              26:     25(ptr) AccessChain 24(bad) 15
+              27:   20(fvec4) Load 26 
+              28:    7(float) CompositeExtract 27 0
+              31:    30(bool) FOrdEqual 28 29
+                              SelectionMerge 33 None
+                              BranchConditional 31 32 33 
+              32:               Label
+              36:     25(ptr)   AccessChain 24(bad) 15
+              37:   20(fvec4)   Load 36 
+                                Store 35(badorder3) 37 
+                                Branch 33
+              33:             Label
+              40:    7(float) Load 39(f) 
+              41:     18(ptr) AccessChain 13 15 15
+                              Store 41 40 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.Operations.frag.out b/Test/baseResults/spv.Operations.frag.out
new file mode 100644
index 000000000..f38492467
--- /dev/null
+++ b/Test/baseResults/spv.Operations.frag.out
@@ -0,0 +1,516 @@
+spv.Operations.frag
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 399
+
+                              Source GLSL 130
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 10  "v"
+                              Name 12  "uv4"
+                              Name 21  "i"
+                              Name 23  "ui"
+                              Name 170  "uf"
+                              Name 217  "b"
+                              Name 243  "ub41"
+                              Name 245  "ub42"
+                              Name 302  "f"
+                              Name 378  "gl_FragColor"
+                              Name 396  "uiv4"
+                              Name 398  "ub"
+                              Decorate 378(gl_FragColor) BuiltIn FragColor
+                              Decorate 396(uiv4) NoStaticUse 
+                              Decorate 398(ub) NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeVector 7(float) 4
+               9:             TypePointer Function 8(fvec4)
+              11:             TypePointer UniformConstant 8(fvec4)
+         12(uv4):     11(ptr) Variable UniformConstant 
+              19:             TypeInt 32 1
+              20:             TypePointer Function 19(int)
+              22:             TypePointer UniformConstant 19(int)
+          23(ui):     22(ptr) Variable UniformConstant 
+             169:             TypePointer UniformConstant 7(float)
+         170(uf):    169(ptr) Variable UniformConstant 
+             215:             TypeBool
+             216:             TypePointer Function 215(bool)
+             220:             TypeVector 215(bool) 4
+             242:             TypePointer UniformConstant 220(bvec4)
+       243(ub41):    242(ptr) Variable UniformConstant 
+       245(ub42):    242(ptr) Variable UniformConstant 
+             292:     19(int) Constant 2
+             299:     19(int) Constant 1
+             301:             TypePointer Function 7(float)
+             331:             TypeVector 7(float) 3
+             347:    7(float) Constant 1073741824
+             354:    7(float) Constant 1065353216
+             359:     19(int) Constant 66
+             365:     19(int) Constant 17
+             377:             TypePointer Output 8(fvec4)
+378(gl_FragColor):    377(ptr) Variable Output 
+             394:             TypeVector 19(int) 4
+             395:             TypePointer UniformConstant 394(ivec4)
+       396(uiv4):    395(ptr) Variable UniformConstant 
+             397:             TypePointer UniformConstant 215(bool)
+         398(ub):    397(ptr) Variable UniformConstant 
+         4(main):           2 Function None 3
+               5:             Label
+           10(v):      9(ptr) Variable Function 
+           21(i):     20(ptr) Variable Function 
+          217(b):    216(ptr) Variable Function 
+          302(f):    301(ptr) Variable Function 
+             379:      9(ptr) Variable Function 
+              13:    8(fvec4) Load 12(uv4) 
+              14:    8(fvec4) ExtInst 1(GLSL.std.450) 8(radians) 13
+                              Store 10(v) 14 
+              15:    8(fvec4) Load 10(v) 
+              16:    8(fvec4) ExtInst 1(GLSL.std.450) 9(degrees) 15
+              17:    8(fvec4) Load 10(v) 
+              18:    8(fvec4) FAdd 17 16
+                              Store 10(v) 18 
+              24:     19(int) Load 23(ui) 
+              25:     19(int) Load 23(ui) 
+              26:     19(int) IMul 24 25
+                              Store 21(i) 26 
+              27:    8(fvec4) Load 10(v) 
+              28:    8(fvec4) ExtInst 1(GLSL.std.450) 10(sin) 27
+              29:    8(fvec4) Load 10(v) 
+              30:    8(fvec4) FAdd 29 28
+                              Store 10(v) 30 
+              31:    8(fvec4) Load 10(v) 
+              32:    8(fvec4) ExtInst 1(GLSL.std.450) 11(cos) 31
+              33:    8(fvec4) Load 10(v) 
+              34:    8(fvec4) FAdd 33 32
+                              Store 10(v) 34 
+              35:    8(fvec4) Load 10(v) 
+              36:    8(fvec4) ExtInst 1(GLSL.std.450) 12(tan) 35
+              37:    8(fvec4) Load 10(v) 
+              38:    8(fvec4) FAdd 37 36
+                              Store 10(v) 38 
+              39:    8(fvec4) Load 10(v) 
+              40:    8(fvec4) ExtInst 1(GLSL.std.450) 13(asin) 39
+              41:    8(fvec4) Load 10(v) 
+              42:    8(fvec4) FAdd 41 40
+                              Store 10(v) 42 
+              43:    8(fvec4) Load 10(v) 
+              44:    8(fvec4) ExtInst 1(GLSL.std.450) 14(acos) 43
+              45:    8(fvec4) Load 10(v) 
+              46:    8(fvec4) FAdd 45 44
+                              Store 10(v) 46 
+              47:    8(fvec4) Load 10(v) 
+              48:    8(fvec4) ExtInst 1(GLSL.std.450) 15(atan) 47
+              49:    8(fvec4) Load 10(v) 
+              50:    8(fvec4) FAdd 49 48
+                              Store 10(v) 50 
+              51:    8(fvec4) Load 10(v) 
+              52:    8(fvec4) ExtInst 1(GLSL.std.450) 16(sinh) 51
+              53:    8(fvec4) Load 10(v) 
+              54:    8(fvec4) FAdd 53 52
+                              Store 10(v) 54 
+              55:    8(fvec4) Load 10(v) 
+              56:    8(fvec4) ExtInst 1(GLSL.std.450) 17(cosh) 55
+              57:    8(fvec4) Load 10(v) 
+              58:    8(fvec4) FAdd 57 56
+                              Store 10(v) 58 
+              59:    8(fvec4) Load 10(v) 
+              60:    8(fvec4) ExtInst 1(GLSL.std.450) 18(tanh) 59
+              61:    8(fvec4) Load 10(v) 
+              62:    8(fvec4) FAdd 61 60
+                              Store 10(v) 62 
+              63:    8(fvec4) Load 10(v) 
+              64:    8(fvec4) ExtInst 1(GLSL.std.450) 19(asinh) 63
+              65:    8(fvec4) Load 10(v) 
+              66:    8(fvec4) FAdd 65 64
+                              Store 10(v) 66 
+              67:    8(fvec4) Load 10(v) 
+              68:    8(fvec4) ExtInst 1(GLSL.std.450) 20(acosh) 67
+              69:    8(fvec4) Load 10(v) 
+              70:    8(fvec4) FAdd 69 68
+                              Store 10(v) 70 
+              71:    8(fvec4) Load 10(v) 
+              72:    8(fvec4) ExtInst 1(GLSL.std.450) 21(atanh) 71
+              73:    8(fvec4) Load 10(v) 
+              74:    8(fvec4) FAdd 73 72
+                              Store 10(v) 74 
+              75:    8(fvec4) Load 10(v) 
+              76:    8(fvec4) Load 10(v) 
+              77:    8(fvec4) ExtInst 1(GLSL.std.450) 23(pow) 75 76
+              78:    8(fvec4) Load 10(v) 
+              79:    8(fvec4) FAdd 78 77
+                              Store 10(v) 79 
+              80:    8(fvec4) Load 10(v) 
+              81:    8(fvec4) ExtInst 1(GLSL.std.450) 24(exp) 80
+              82:    8(fvec4) Load 10(v) 
+              83:    8(fvec4) FAdd 82 81
+                              Store 10(v) 83 
+              84:    8(fvec4) Load 10(v) 
+              85:    8(fvec4) ExtInst 1(GLSL.std.450) 25(log) 84
+              86:    8(fvec4) Load 10(v) 
+              87:    8(fvec4) FAdd 86 85
+                              Store 10(v) 87 
+              88:    8(fvec4) Load 10(v) 
+              89:    8(fvec4) ExtInst 1(GLSL.std.450) 26(exp2) 88
+              90:    8(fvec4) Load 10(v) 
+              91:    8(fvec4) FAdd 90 89
+                              Store 10(v) 91 
+              92:    8(fvec4) Load 10(v) 
+              93:    8(fvec4) ExtInst 1(GLSL.std.450) 27(log2) 92
+              94:    8(fvec4) Load 10(v) 
+              95:    8(fvec4) FAdd 94 93
+                              Store 10(v) 95 
+              96:    8(fvec4) Load 10(v) 
+              97:    8(fvec4) ExtInst 1(GLSL.std.450) 28(sqrt) 96
+              98:    8(fvec4) Load 10(v) 
+              99:    8(fvec4) FAdd 98 97
+                              Store 10(v) 99 
+             100:    8(fvec4) Load 10(v) 
+             101:    8(fvec4) ExtInst 1(GLSL.std.450) 29(inverseSqrt) 100
+             102:    8(fvec4) Load 10(v) 
+             103:    8(fvec4) FAdd 102 101
+                              Store 10(v) 103 
+             104:    8(fvec4) Load 10(v) 
+             105:    8(fvec4) ExtInst 1(GLSL.std.450) 3(abs) 104
+             106:    8(fvec4) Load 10(v) 
+             107:    8(fvec4) FAdd 106 105
+                              Store 10(v) 107 
+             108:    8(fvec4) Load 10(v) 
+             109:    8(fvec4) ExtInst 1(GLSL.std.450) 4(sign) 108
+             110:    8(fvec4) Load 10(v) 
+             111:    8(fvec4) FAdd 110 109
+                              Store 10(v) 111 
+             112:    8(fvec4) Load 10(v) 
+             113:    8(fvec4) ExtInst 1(GLSL.std.450) 5(floor) 112
+             114:    8(fvec4) Load 10(v) 
+             115:    8(fvec4) FAdd 114 113
+                              Store 10(v) 115 
+             116:    8(fvec4) Load 10(v) 
+             117:    8(fvec4) ExtInst 1(GLSL.std.450) 6(ceil) 116
+             118:    8(fvec4) Load 10(v) 
+             119:    8(fvec4) FAdd 118 117
+                              Store 10(v) 119 
+             120:    8(fvec4) Load 10(v) 
+             121:    8(fvec4) ExtInst 1(GLSL.std.450) 7(fract) 120
+             122:    8(fvec4) Load 10(v) 
+             123:    8(fvec4) FAdd 122 121
+                              Store 10(v) 123 
+             124:    8(fvec4) Load 10(v) 
+             125:    8(fvec4) Load 10(v) 
+             126:    8(fvec4) FMod 124 125
+             127:    8(fvec4) Load 10(v) 
+             128:    8(fvec4) FAdd 127 126
+                              Store 10(v) 128 
+             129:    8(fvec4) Load 10(v) 
+             130:    8(fvec4) Load 10(v) 
+             131:    7(float) CompositeExtract 130 0
+             132:    8(fvec4) CompositeConstruct 131 131 131 131
+             133:    8(fvec4) FMod 129 132
+             134:    8(fvec4) Load 10(v) 
+             135:    8(fvec4) FAdd 134 133
+                              Store 10(v) 135 
+             136:    8(fvec4) Load 10(v) 
+             137:    8(fvec4) Load 12(uv4) 
+             138:    8(fvec4) ExtInst 1(GLSL.std.450) 33(min) 136 137
+             139:    8(fvec4) Load 10(v) 
+             140:    8(fvec4) FAdd 139 138
+                              Store 10(v) 140 
+             141:    8(fvec4) Load 10(v) 
+             142:    8(fvec4) Load 12(uv4) 
+             143:    8(fvec4) ExtInst 1(GLSL.std.450) 34(max) 141 142
+             144:    8(fvec4) Load 10(v) 
+             145:    8(fvec4) FAdd 144 143
+                              Store 10(v) 145 
+             146:    8(fvec4) Load 10(v) 
+             147:    8(fvec4) Load 12(uv4) 
+             148:    8(fvec4) Load 12(uv4) 
+             149:    8(fvec4) ExtInst 1(GLSL.std.450) 35(clamp) 146 147 148
+             150:    8(fvec4) Load 10(v) 
+             151:    8(fvec4) FAdd 150 149
+                              Store 10(v) 151 
+             152:    8(fvec4) Load 10(v) 
+             153:    8(fvec4) Load 10(v) 
+             154:    8(fvec4) Load 10(v) 
+             155:    8(fvec4) ExtInst 1(GLSL.std.450) 36(mix) 152 153 154
+             156:    8(fvec4) Load 10(v) 
+             157:    8(fvec4) FAdd 156 155
+                              Store 10(v) 157 
+             158:    8(fvec4) Load 10(v) 
+             159:    8(fvec4) Load 10(v) 
+             160:    8(fvec4) ExtInst 1(GLSL.std.450) 37(step) 158 159
+             161:    8(fvec4) Load 10(v) 
+             162:    8(fvec4) FAdd 161 160
+                              Store 10(v) 162 
+             163:    8(fvec4) Load 10(v) 
+             164:    8(fvec4) Load 10(v) 
+             165:    8(fvec4) Load 10(v) 
+             166:    8(fvec4) ExtInst 1(GLSL.std.450) 38(smoothStep) 163 164 165
+             167:    8(fvec4) Load 10(v) 
+             168:    8(fvec4) FAdd 167 166
+                              Store 10(v) 168 
+             171:    7(float) Load 170(uf) 
+             172:    8(fvec4) Load 10(v) 
+             173:    8(fvec4) ExtInst 1(GLSL.std.450) 37(step) 171 172
+             174:    8(fvec4) Load 10(v) 
+             175:    8(fvec4) FAdd 174 173
+                              Store 10(v) 175 
+             176:    7(float) Load 170(uf) 
+             177:    7(float) Load 170(uf) 
+             178:    8(fvec4) Load 10(v) 
+             179:    8(fvec4) ExtInst 1(GLSL.std.450) 38(smoothStep) 176 177 178
+             180:    8(fvec4) Load 10(v) 
+             181:    8(fvec4) FAdd 180 179
+                              Store 10(v) 181 
+             182:    8(fvec4) Load 10(v) 
+             183:    8(fvec4) ExtInst 1(GLSL.std.450) 61(normalize) 182
+             184:    8(fvec4) Load 10(v) 
+             185:    8(fvec4) FAdd 184 183
+                              Store 10(v) 185 
+             186:    8(fvec4) Load 10(v) 
+             187:    8(fvec4) Load 10(v) 
+             188:    8(fvec4) Load 10(v) 
+             189:    8(fvec4) ExtInst 1(GLSL.std.450) 63(faceForward) 186 187 188
+             190:    8(fvec4) Load 10(v) 
+             191:    8(fvec4) FAdd 190 189
+                              Store 10(v) 191 
+             192:    8(fvec4) Load 10(v) 
+             193:    8(fvec4) Load 10(v) 
+             194:    8(fvec4) ExtInst 1(GLSL.std.450) 64(reflect) 192 193
+             195:    8(fvec4) Load 10(v) 
+             196:    8(fvec4) FAdd 195 194
+                              Store 10(v) 196 
+             197:    8(fvec4) Load 10(v) 
+             198:    8(fvec4) Load 10(v) 
+             199:    7(float) Load 170(uf) 
+             200:    8(fvec4) ExtInst 1(GLSL.std.450) 65(refract) 197 198 199
+             201:    8(fvec4) Load 10(v) 
+             202:    8(fvec4) FAdd 201 200
+                              Store 10(v) 202 
+             203:    8(fvec4) Load 10(v) 
+             204:    8(fvec4) DPdx 203
+             205:    8(fvec4) Load 10(v) 
+             206:    8(fvec4) FAdd 205 204
+                              Store 10(v) 206 
+             207:    8(fvec4) Load 10(v) 
+             208:    8(fvec4) DPdy 207
+             209:    8(fvec4) Load 10(v) 
+             210:    8(fvec4) FAdd 209 208
+                              Store 10(v) 210 
+             211:    8(fvec4) Load 10(v) 
+             212:    8(fvec4) Fwidth 211
+             213:    8(fvec4) Load 10(v) 
+             214:    8(fvec4) FAdd 213 212
+                              Store 10(v) 214 
+             218:    8(fvec4) Load 10(v) 
+             219:    8(fvec4) Load 12(uv4) 
+             221:  220(bvec4) FOrdLessThan 218 219
+             222:   215(bool) Any 221
+                              Store 217(b) 222 
+             223:   215(bool) Load 217(b) 
+             224:    8(fvec4) Load 10(v) 
+             225:    8(fvec4) Load 12(uv4) 
+             226:  220(bvec4) FOrdLessThanEqual 224 225
+             227:   215(bool) Any 226
+             228:   215(bool) LogicalAnd 223 227
+                              Store 217(b) 228 
+             229:   215(bool) Load 217(b) 
+             230:    8(fvec4) Load 10(v) 
+             231:    8(fvec4) Load 12(uv4) 
+             232:  220(bvec4) FOrdGreaterThan 230 231
+             233:   215(bool) Any 232
+             234:   215(bool) LogicalAnd 229 233
+                              Store 217(b) 234 
+             235:   215(bool) Load 217(b) 
+             236:    8(fvec4) Load 10(v) 
+             237:    8(fvec4) Load 12(uv4) 
+             238:  220(bvec4) FOrdGreaterThanEqual 236 237
+             239:   215(bool) Any 238
+             240:   215(bool) LogicalAnd 235 239
+                              Store 217(b) 240 
+             241:   215(bool) Load 217(b) 
+             244:  220(bvec4) Load 243(ub41) 
+             246:  220(bvec4) Load 245(ub42) 
+             247:  220(bvec4) IEqual 244 246
+             248:   215(bool) Any 247
+             249:   215(bool) LogicalAnd 241 248
+                              Store 217(b) 249 
+             250:   215(bool) Load 217(b) 
+             251:  220(bvec4) Load 243(ub41) 
+             252:  220(bvec4) Load 245(ub42) 
+             253:  220(bvec4) INotEqual 251 252
+             254:   215(bool) Any 253
+             255:   215(bool) LogicalAnd 250 254
+                              Store 217(b) 255 
+             256:   215(bool) Load 217(b) 
+             257:  220(bvec4) Load 243(ub41) 
+             258:   215(bool) Any 257
+             259:   215(bool) LogicalAnd 256 258
+                              Store 217(b) 259 
+             260:   215(bool) Load 217(b) 
+             261:  220(bvec4) Load 243(ub41) 
+             262:   215(bool) All 261
+             263:   215(bool) LogicalAnd 260 262
+                              Store 217(b) 263 
+             264:   215(bool) Load 217(b) 
+             265:  220(bvec4) Load 243(ub41) 
+             266:  220(bvec4) Not 265
+             267:   215(bool) Any 266
+             268:   215(bool) LogicalAnd 264 267
+                              Store 217(b) 268 
+             269:     19(int) Load 21(i) 
+             270:     19(int) Load 23(ui) 
+             271:     19(int) IAdd 269 270
+             272:     19(int) Load 21(i) 
+             273:     19(int) IMul 271 272
+             274:     19(int) Load 23(ui) 
+             275:     19(int) ISub 273 274
+             276:     19(int) Load 21(i) 
+             277:     19(int) SDiv 275 276
+                              Store 21(i) 277 
+             278:     19(int) Load 21(i) 
+             279:     19(int) Load 23(ui) 
+             280:     19(int) SMod 278 279
+                              Store 21(i) 280 
+             281:     19(int) Load 21(i) 
+             282:     19(int) Load 23(ui) 
+             283:   215(bool) IEqual 281 282
+             284:     19(int) Load 21(i) 
+             285:     19(int) Load 23(ui) 
+             286:   215(bool) INotEqual 284 285
+             287:     19(int) Load 21(i) 
+             288:     19(int) Load 23(ui) 
+             289:   215(bool) IEqual 287 288
+             290:   215(bool) LogicalAnd 286 289
+             291:     19(int) Load 21(i) 
+             293:   215(bool) INotEqual 291 292
+             294:   215(bool) LogicalXor 290 293
+             295:   215(bool) LogicalOr 283 294
+                              SelectionMerge 297 None
+                              BranchConditional 295 296 297 
+             296:               Label
+             298:     19(int)   Load 21(i) 
+             300:     19(int)   IAdd 298 299
+                                Store 21(i) 300 
+                                Branch 297
+             297:             Label
+             303:    7(float) Load 170(uf) 
+             304:    7(float) Load 170(uf) 
+             305:    7(float) FAdd 303 304
+             306:    7(float) Load 170(uf) 
+             307:    7(float) FMul 305 306
+             308:    7(float) Load 170(uf) 
+             309:    7(float) FSub 307 308
+             310:    7(float) Load 170(uf) 
+             311:    7(float) FDiv 309 310
+                              Store 302(f) 311 
+             312:    8(fvec4) Load 10(v) 
+             313:    7(float) ExtInst 1(GLSL.std.450) 58(length) 312
+             314:    7(float) Load 302(f) 
+             315:    7(float) FAdd 314 313
+                              Store 302(f) 315 
+             316:    8(fvec4) Load 10(v) 
+             317:    8(fvec4) Load 10(v) 
+             318:    7(float) ExtInst 1(GLSL.std.450) 59(distance) 316 317
+             319:    7(float) Load 302(f) 
+             320:    7(float) FAdd 319 318
+                              Store 302(f) 320 
+             321:    8(fvec4) Load 10(v) 
+             322:    8(fvec4) Load 10(v) 
+             323:    7(float) Dot 321 322
+             324:    7(float) Load 302(f) 
+             325:    7(float) FAdd 324 323
+                              Store 302(f) 325 
+             326:    7(float) Load 302(f) 
+             327:    7(float) Load 170(uf) 
+             328:    7(float) FMul 326 327
+             329:    7(float) Load 302(f) 
+             330:    7(float) FAdd 329 328
+                              Store 302(f) 330 
+             332:    8(fvec4) Load 10(v) 
+             333:  331(fvec3) VectorShuffle 332 332 0 1 2
+             334:    8(fvec4) Load 10(v) 
+             335:  331(fvec3) VectorShuffle 334 334 0 1 2
+             336:  331(fvec3) ExtInst 1(GLSL.std.450) 60(cross) 333 335
+             337:    7(float) CompositeExtract 336 0
+             338:    7(float) Load 302(f) 
+             339:    7(float) FAdd 338 337
+                              Store 302(f) 339 
+             340:    7(float) Load 302(f) 
+             341:    7(float) Load 170(uf) 
+             342:   215(bool) FOrdEqual 340 341
+             343:    7(float) Load 302(f) 
+             344:    7(float) Load 170(uf) 
+             345:   215(bool) FOrdNotEqual 343 344
+             346:    7(float) Load 302(f) 
+             348:   215(bool) FOrdNotEqual 346 347
+             349:   215(bool) LogicalAnd 345 348
+             350:   215(bool) LogicalOr 342 349
+                              SelectionMerge 352 None
+                              BranchConditional 350 351 352 
+             351:               Label
+             353:    7(float)   Load 302(f) 
+             355:    7(float)   FAdd 353 354
+                                Store 302(f) 355 
+                                Branch 352
+             352:             Label
+             356:     19(int) Load 23(ui) 
+             357:     19(int) Load 21(i) 
+             358:     19(int) BitwiseAnd 357 356
+                              Store 21(i) 358 
+             360:     19(int) Load 21(i) 
+             361:     19(int) BitwiseOr 360 359
+                              Store 21(i) 361 
+             362:     19(int) Load 23(ui) 
+             363:     19(int) Load 21(i) 
+             364:     19(int) BitwiseXor 363 362
+                              Store 21(i) 364 
+             366:     19(int) Load 21(i) 
+             367:     19(int) SMod 366 365
+                              Store 21(i) 367 
+             368:     19(int) Load 21(i) 
+             369:     19(int) ShiftRightArithmetic 368 292
+                              Store 21(i) 369 
+             370:     19(int) Load 23(ui) 
+             371:     19(int) Load 21(i) 
+             372:     19(int) ShiftLeftLogical 371 370
+                              Store 21(i) 372 
+             373:     19(int) Load 21(i) 
+             374:     19(int) Not 373
+                              Store 21(i) 374 
+             375:   215(bool) Load 217(b) 
+             376:   215(bool) Not 375
+                              Store 217(b) 376 
+             380:   215(bool) Load 217(b) 
+                              SelectionMerge 382 None
+                              BranchConditional 380 381 391 
+             381:               Label
+             383:     19(int)   Load 21(i) 
+             384:    7(float)   ConvertSToF 383
+             385:    8(fvec4)   CompositeConstruct 384 384 384 384
+             386:    7(float)   Load 302(f) 
+             387:    8(fvec4)   CompositeConstruct 386 386 386 386
+             388:    8(fvec4)   FAdd 385 387
+             389:    8(fvec4)   Load 10(v) 
+             390:    8(fvec4)   FAdd 388 389
+                                Store 379 390 
+                                Branch 382
+             391:               Label
+             392:    8(fvec4)   Load 10(v) 
+                                Store 379 392 
+                                Branch 382
+             382:             Label
+             393:    8(fvec4) Load 379 
+                              Store 378(gl_FragColor) 393 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.aggOps.frag.out b/Test/baseResults/spv.aggOps.frag.out
new file mode 100644
index 000000000..51d4d608d
--- /dev/null
+++ b/Test/baseResults/spv.aggOps.frag.out
@@ -0,0 +1,11 @@
+spv.aggOps.frag
+WARNING: 0:4: varying deprecated in version 130; may be removed in future release
+WARNING: 0:6: varying deprecated in version 130; may be removed in future release
+
+
+
+Linked fragment stage:
+
+
+
+Missing functionality: Composite comparison of non-vectors
diff --git a/Test/baseResults/spv.always-discard.frag.out b/Test/baseResults/spv.always-discard.frag.out
new file mode 100644
index 000000000..01a2239fb
--- /dev/null
+++ b/Test/baseResults/spv.always-discard.frag.out
@@ -0,0 +1,133 @@
+spv.always-discard.frag
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 81
+
+                              Source GLSL 110
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 10  "white"
+                              Name 13  "black"
+                              Name 16  "color"
+                              Name 19  "x"
+                              Name 22  "tex_coord"
+                              Name 28  "y"
+                              Name 33  "radius"
+                              Name 56  "gl_FragColor"
+                              Decorate 22(tex_coord) Smooth 
+                              Decorate 56(gl_FragColor) BuiltIn FragColor
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeVector 7(float) 4
+               9:             TypePointer Function 8(fvec4)
+              11:    7(float) Constant 1065353216
+              12:    8(fvec4) ConstantComposite 11 11 11 11
+              14:    7(float) Constant 1045220557
+              15:    8(fvec4) ConstantComposite 14 14 14 14
+              18:             TypePointer Function 7(float)
+              20:             TypeVector 7(float) 2
+              21:             TypePointer Input 20(fvec2)
+   22(tex_coord):     21(ptr) Variable Input 
+              25:    7(float) Constant 1073741824
+              43:             TypeBool
+              48:    7(float) Constant 1066192077
+              55:             TypePointer Output 8(fvec4)
+56(gl_FragColor):     55(ptr) Variable Output 
+              59:    7(float) Constant 1067030938
+              68:    7(float) Constant 1061158912
+              73:    7(float) Constant 1098907648
+         4(main):           2 Function None 3
+               5:             Label
+       10(white):      9(ptr) Variable Function 
+       13(black):      9(ptr) Variable Function 
+       16(color):      9(ptr) Variable Function 
+           19(x):     18(ptr) Variable Function 
+           28(y):     18(ptr) Variable Function 
+      33(radius):     18(ptr) Variable Function 
+                              Store 10(white) 12 
+                              Store 13(black) 15 
+              17:    8(fvec4) Load 10(white) 
+                              Store 16(color) 17 
+              23:   20(fvec2) Load 22(tex_coord) 
+              24:    7(float) CompositeExtract 23 0
+              26:    7(float) FMul 24 25
+              27:    7(float) FSub 26 11
+                              Store 19(x) 27 
+              29:   20(fvec2) Load 22(tex_coord) 
+              30:    7(float) CompositeExtract 29 1
+              31:    7(float) FMul 30 25
+              32:    7(float) FSub 31 11
+                              Store 28(y) 32 
+              34:    7(float) Load 19(x) 
+              35:    7(float) Load 19(x) 
+              36:    7(float) FMul 34 35
+              37:    7(float) Load 28(y) 
+              38:    7(float) Load 28(y) 
+              39:    7(float) FMul 37 38
+              40:    7(float) FAdd 36 39
+              41:    7(float) ExtInst 1(GLSL.std.450) 28(sqrt) 40
+                              Store 33(radius) 41 
+              42:    7(float) Load 33(radius) 
+              44:    43(bool) FOrdGreaterThan 42 11
+                              SelectionMerge 46 None
+                              BranchConditional 44 45 46 
+              45:               Label
+              47:    7(float)   Load 33(radius) 
+              49:    43(bool)   FOrdGreaterThan 47 48
+                                SelectionMerge 51 None
+                                BranchConditional 49 50 51 
+              50:                 Label
+              52:    8(fvec4)     Load 16(color) 
+              53:    8(fvec4)     CompositeConstruct 11 11 11 11
+              54:    8(fvec4)     FAdd 52 53
+                                  Store 16(color) 54 
+                                  Branch 51
+              51:               Label
+              57:    8(fvec4)   Load 16(color) 
+                                Store 56(gl_FragColor) 57 
+              58:    7(float)   Load 33(radius) 
+              60:    43(bool)   FOrdGreaterThan 58 59
+                                SelectionMerge 62 None
+                                BranchConditional 60 61 62 
+              61:                 Label
+              63:    8(fvec4)     Load 16(color) 
+              64:    8(fvec4)     CompositeConstruct 11 11 11 11
+              65:    8(fvec4)     FAdd 63 64
+                                  Store 16(color) 65 
+                                  Branch 62
+              62:               Label
+                                Branch 46
+              46:             Label
+                              Kill
+              66:             Label
+              67:    7(float) Load 33(radius) 
+              69:    43(bool) FOrdGreaterThanEqual 67 68
+                              SelectionMerge 71 None
+                              BranchConditional 69 70 71 
+              70:               Label
+              72:    7(float)   Load 33(radius) 
+              74:    7(float)   ExtInst 1(GLSL.std.450) 23(pow) 72 73
+              75:    7(float)   FDiv 74 25
+              76:    7(float)   ExtInst 1(GLSL.std.450) 3(abs) 75
+              77:    8(fvec4)   Load 16(color) 
+              78:    8(fvec4)   CompositeConstruct 76 76 76 76
+              79:    8(fvec4)   FSub 77 78
+                                Store 16(color) 79 
+                                Branch 71
+              71:             Label
+              80:    8(fvec4) Load 16(color) 
+                              Store 56(gl_FragColor) 80 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.always-discard2.frag.out b/Test/baseResults/spv.always-discard2.frag.out
new file mode 100644
index 000000000..c4096b0aa
--- /dev/null
+++ b/Test/baseResults/spv.always-discard2.frag.out
@@ -0,0 +1,67 @@
+spv.always-discard2.frag
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 37
+
+                              Source GLSL 110
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 10  "white"
+                              Name 13  "black"
+                              Name 16  "color"
+                              Name 19  "x"
+                              Name 22  "tex_coord"
+                              Name 28  "y"
+                              Name 35  "gl_FragColor"
+                              Decorate 22(tex_coord) Smooth 
+                              Decorate 35(gl_FragColor) BuiltIn FragColor
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeVector 7(float) 4
+               9:             TypePointer Function 8(fvec4)
+              11:    7(float) Constant 1065353216
+              12:    8(fvec4) ConstantComposite 11 11 11 11
+              14:    7(float) Constant 1045220557
+              15:    8(fvec4) ConstantComposite 14 14 14 14
+              18:             TypePointer Function 7(float)
+              20:             TypeVector 7(float) 2
+              21:             TypePointer Input 20(fvec2)
+   22(tex_coord):     21(ptr) Variable Input 
+              25:    7(float) Constant 1073741824
+              34:             TypePointer Output 8(fvec4)
+35(gl_FragColor):     34(ptr) Variable Output 
+         4(main):           2 Function None 3
+               5:             Label
+       10(white):      9(ptr) Variable Function 
+       13(black):      9(ptr) Variable Function 
+       16(color):      9(ptr) Variable Function 
+           19(x):     18(ptr) Variable Function 
+           28(y):     18(ptr) Variable Function 
+                              Store 10(white) 12 
+                              Store 13(black) 15 
+              17:    8(fvec4) Load 10(white) 
+                              Store 16(color) 17 
+              23:   20(fvec2) Load 22(tex_coord) 
+              24:    7(float) CompositeExtract 23 0
+              26:    7(float) FMul 24 25
+              27:    7(float) FSub 26 11
+                              Store 19(x) 27 
+              29:   20(fvec2) Load 22(tex_coord) 
+              30:    7(float) CompositeExtract 29 1
+              31:    7(float) FMul 30 25
+              32:    7(float) FSub 31 11
+                              Store 28(y) 32 
+                              Kill
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.conditionalDiscard.frag.out b/Test/baseResults/spv.conditionalDiscard.frag.out
new file mode 100644
index 000000000..f66685f21
--- /dev/null
+++ b/Test/baseResults/spv.conditionalDiscard.frag.out
@@ -0,0 +1,64 @@
+spv.conditionalDiscard.frag
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 36
+
+                              Source GLSL 110
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 10  "v"
+                              Name 13  "tex"
+                              Name 17  "coord"
+                              Name 34  "gl_FragColor"
+                              Decorate 17(coord) Smooth 
+                              Decorate 34(gl_FragColor) BuiltIn FragColor
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeVector 7(float) 4
+               9:             TypePointer Function 8(fvec4)
+              11:             TypeSampler7(float) 2D filter+texture
+              12:             TypePointer UniformConstant 11
+         13(tex):     12(ptr) Variable UniformConstant 
+              15:             TypeVector 7(float) 2
+              16:             TypePointer Input 15(fvec2)
+       17(coord):     16(ptr) Variable Input 
+              21:    7(float) Constant 1036831949
+              22:    7(float) Constant 1045220557
+              23:    7(float) Constant 1050253722
+              24:    7(float) Constant 1053609165
+              25:    8(fvec4) ConstantComposite 21 22 23 24
+              26:             TypeBool
+              27:             TypeVector 26(bool) 4
+              33:             TypePointer Output 8(fvec4)
+34(gl_FragColor):     33(ptr) Variable Output 
+         4(main):           2 Function None 3
+               5:             Label
+           10(v):      9(ptr) Variable Function 
+              14:          11 Load 13(tex) 
+              18:   15(fvec2) Load 17(coord) 
+              19:    8(fvec4) TextureSample 14 18 
+                              Store 10(v) 19 
+              20:    8(fvec4) Load 10(v) 
+              28:   27(bvec4) FOrdEqual 20 25
+              29:    26(bool) All 28
+                              SelectionMerge 31 None
+                              BranchConditional 29 30 31 
+              30:               Label
+                                Kill
+              31:             Label
+              35:    8(fvec4) Load 10(v) 
+                              Store 34(gl_FragColor) 35 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.conversion.frag.out b/Test/baseResults/spv.conversion.frag.out
new file mode 100644
index 000000000..dd1679afc
--- /dev/null
+++ b/Test/baseResults/spv.conversion.frag.out
@@ -0,0 +1,580 @@
+spv.conversion.frag
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 444
+
+                              Source GLSL 130
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 9  "b"
+                              Name 12  "u_i"
+                              Name 19  "u_f"
+                              Name 26  "b2"
+                              Name 34  "b3"
+                              Name 40  "i_i"
+                              Name 46  "b4"
+                              Name 54  "i_f"
+                              Name 59  "i"
+                              Name 69  "i2"
+                              Name 72  "u_f2"
+                              Name 82  "i3"
+                              Name 85  "u_f3"
+                              Name 95  "i4"
+                              Name 98  "u_f4"
+                              Name 107  "f"
+                              Name 111  "f2"
+                              Name 115  "f3"
+                              Name 119  "f4"
+                              Name 158  "i_i4"
+                              Name 313  "gl_FragColor"
+                              Name 406  "cv2"
+                              Name 407  "cv5"
+                              Name 417  "u_b"
+                              Name 419  "u_b2"
+                              Name 421  "u_b3"
+                              Name 423  "u_b4"
+                              Name 425  "u_i2"
+                              Name 427  "u_i3"
+                              Name 429  "u_i4"
+                              Name 430  "i_b"
+                              Name 431  "i_b2"
+                              Name 432  "i_b3"
+                              Name 433  "i_b4"
+                              Name 435  "i_i2"
+                              Name 437  "i_i3"
+                              Name 439  "i_f2"
+                              Name 441  "i_f3"
+                              Name 443  "i_f4"
+                              Decorate 40(i_i) Flat 
+                              Decorate 54(i_f) Smooth 
+                              Decorate 158(i_i4) Flat 
+                              Decorate 313(gl_FragColor) BuiltIn FragColor
+                              Decorate 417(u_b) NoStaticUse 
+                              Decorate 419(u_b2) NoStaticUse 
+                              Decorate 421(u_b3) NoStaticUse 
+                              Decorate 423(u_b4) NoStaticUse 
+                              Decorate 425(u_i2) NoStaticUse 
+                              Decorate 427(u_i3) NoStaticUse 
+                              Decorate 429(u_i4) NoStaticUse 
+                              Decorate 430(i_b) NoStaticUse 
+                              Decorate 431(i_b2) NoStaticUse 
+                              Decorate 432(i_b3) NoStaticUse 
+                              Decorate 433(i_b4) NoStaticUse 
+                              Decorate 435(i_i2) Flat 
+                              Decorate 435(i_i2) NoStaticUse 
+                              Decorate 437(i_i3) Flat 
+                              Decorate 437(i_i3) NoStaticUse 
+                              Decorate 439(i_f2) Smooth 
+                              Decorate 439(i_f2) NoStaticUse 
+                              Decorate 441(i_f3) Smooth 
+                              Decorate 441(i_f3) NoStaticUse 
+                              Decorate 443(i_f4) Smooth 
+                              Decorate 443(i_f4) NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeBool
+               8:             TypePointer Function 7(bool)
+              10:             TypeInt 32 1
+              11:             TypePointer UniformConstant 10(int)
+         12(u_i):     11(ptr) Variable UniformConstant 
+              14:             TypeInt 32 0
+              15:     14(int) Constant 0
+              17:             TypeFloat 32
+              18:             TypePointer UniformConstant 17(float)
+         19(u_f):     18(ptr) Variable UniformConstant 
+              21:   17(float) Constant 0
+              24:             TypeVector 7(bool) 2
+              25:             TypePointer Function 24(bvec2)
+              32:             TypeVector 7(bool) 3
+              33:             TypePointer Function 32(bvec3)
+              39:             TypePointer Input 10(int)
+         40(i_i):     39(ptr) Variable Input 
+              44:             TypeVector 7(bool) 4
+              45:             TypePointer Function 44(bvec4)
+              53:             TypePointer Input 17(float)
+         54(i_f):     53(ptr) Variable Input 
+              58:             TypePointer Function 10(int)
+              63:     10(int) Constant 0
+              64:     10(int) Constant 1
+              67:             TypeVector 10(int) 2
+              68:             TypePointer Function 67(ivec2)
+              70:             TypeVector 17(float) 2
+              71:             TypePointer UniformConstant 70(fvec2)
+        72(u_f2):     71(ptr) Variable UniformConstant 
+              76:   67(ivec2) ConstantComposite 63 63
+              77:   67(ivec2) ConstantComposite 64 64
+              80:             TypeVector 10(int) 3
+              81:             TypePointer Function 80(ivec3)
+              83:             TypeVector 17(float) 3
+              84:             TypePointer UniformConstant 83(fvec3)
+        85(u_f3):     84(ptr) Variable UniformConstant 
+              89:   80(ivec3) ConstantComposite 63 63 63
+              90:   80(ivec3) ConstantComposite 64 64 64
+              93:             TypeVector 10(int) 4
+              94:             TypePointer Function 93(ivec4)
+              96:             TypeVector 17(float) 4
+              97:             TypePointer UniformConstant 96(fvec4)
+        98(u_f4):     97(ptr) Variable UniformConstant 
+             102:   93(ivec4) ConstantComposite 63 63 63 63
+             103:   93(ivec4) ConstantComposite 64 64 64 64
+             106:             TypePointer Function 17(float)
+             110:             TypePointer Function 70(fvec2)
+             114:             TypePointer Function 83(fvec3)
+             118:             TypePointer Function 96(fvec4)
+             125:   17(float) Constant 1065353216
+             133:   70(fvec2) ConstantComposite 21 21
+             134:   70(fvec2) ConstantComposite 125 125
+             142:   83(fvec3) ConstantComposite 21 21 21
+             143:   83(fvec3) ConstantComposite 125 125 125
+             151:   96(fvec4) ConstantComposite 21 21 21 21
+             152:   96(fvec4) ConstantComposite 125 125 125 125
+             157:             TypePointer Input 93(ivec4)
+       158(i_i4):    157(ptr) Variable Input 
+             160:             TypeVector 14(int) 4
+             161:  160(ivec4) ConstantComposite 15 15 15 15
+             312:             TypePointer Output 96(fvec4)
+313(gl_FragColor):    312(ptr) Variable Output 
+             416:             TypePointer UniformConstant 7(bool)
+        417(u_b):    416(ptr) Variable UniformConstant 
+             418:             TypePointer UniformConstant 24(bvec2)
+       419(u_b2):    418(ptr) Variable UniformConstant 
+             420:             TypePointer UniformConstant 32(bvec3)
+       421(u_b3):    420(ptr) Variable UniformConstant 
+             422:             TypePointer UniformConstant 44(bvec4)
+       423(u_b4):    422(ptr) Variable UniformConstant 
+             424:             TypePointer UniformConstant 67(ivec2)
+       425(u_i2):    424(ptr) Variable UniformConstant 
+             426:             TypePointer UniformConstant 80(ivec3)
+       427(u_i3):    426(ptr) Variable UniformConstant 
+             428:             TypePointer UniformConstant 93(ivec4)
+       429(u_i4):    428(ptr) Variable UniformConstant 
+        430(i_b):    416(ptr) Variable UniformConstant 
+       431(i_b2):    418(ptr) Variable UniformConstant 
+       432(i_b3):    420(ptr) Variable UniformConstant 
+       433(i_b4):    422(ptr) Variable UniformConstant 
+             434:             TypePointer Input 67(ivec2)
+       435(i_i2):    434(ptr) Variable Input 
+             436:             TypePointer Input 80(ivec3)
+       437(i_i3):    436(ptr) Variable Input 
+             438:             TypePointer Input 70(fvec2)
+       439(i_f2):    438(ptr) Variable Input 
+             440:             TypePointer Input 83(fvec3)
+       441(i_f3):    440(ptr) Variable Input 
+             442:             TypePointer Input 96(fvec4)
+       443(i_f4):    442(ptr) Variable Input 
+         4(main):           2 Function None 3
+               5:             Label
+            9(b):      8(ptr) Variable Function 
+          26(b2):     25(ptr) Variable Function 
+          34(b3):     33(ptr) Variable Function 
+          46(b4):     45(ptr) Variable Function 
+           59(i):     58(ptr) Variable Function 
+          69(i2):     68(ptr) Variable Function 
+          82(i3):     81(ptr) Variable Function 
+          95(i4):     94(ptr) Variable Function 
+          107(f):    106(ptr) Variable Function 
+         111(f2):    110(ptr) Variable Function 
+         115(f3):    114(ptr) Variable Function 
+         119(f4):    118(ptr) Variable Function 
+             289:    106(ptr) Variable Function 
+             299:    106(ptr) Variable Function 
+             314:    118(ptr) Variable Function 
+        406(cv2):     94(ptr) Variable Function 
+        407(cv5):     45(ptr) Variable Function 
+              13:     10(int) Load 12(u_i) 
+              16:     7(bool) INotEqual 13 15
+              20:   17(float) Load 19(u_f) 
+              22:     7(bool) FOrdNotEqual 20 21
+              23:     7(bool) LogicalXor 16 22
+                              Store 9(b) 23 
+              27:     10(int) Load 12(u_i) 
+              28:     7(bool) INotEqual 27 15
+              29:   17(float) Load 19(u_f) 
+              30:     7(bool) FOrdNotEqual 29 21
+              31:   24(bvec2) CompositeConstruct 28 30
+                              Store 26(b2) 31 
+              35:     10(int) Load 12(u_i) 
+              36:     7(bool) INotEqual 35 15
+              37:   17(float) Load 19(u_f) 
+              38:     7(bool) FOrdNotEqual 37 21
+              41:     10(int) Load 40(i_i) 
+              42:     7(bool) INotEqual 41 15
+              43:   32(bvec3) CompositeConstruct 36 38 42
+                              Store 34(b3) 43 
+              47:     10(int) Load 12(u_i) 
+              48:     7(bool) INotEqual 47 15
+              49:   17(float) Load 19(u_f) 
+              50:     7(bool) FOrdNotEqual 49 21
+              51:     10(int) Load 40(i_i) 
+              52:     7(bool) INotEqual 51 15
+              55:   17(float) Load 54(i_f) 
+              56:     7(bool) FOrdNotEqual 55 21
+              57:   44(bvec4) CompositeConstruct 48 50 52 56
+                              Store 46(b4) 57 
+              60:   17(float) Load 19(u_f) 
+              61:     10(int) ConvertFToS 60
+              62:     7(bool) Load 9(b) 
+              65:     10(int) Select 62 64 63
+              66:     10(int) IAdd 61 65
+                              Store 59(i) 66 
+              73:   70(fvec2) Load 72(u_f2) 
+              74:   67(ivec2) ConvertFToS 73
+              75:   24(bvec2) Load 26(b2) 
+              78:   67(ivec2) Select 75 77 76
+              79:   67(ivec2) IAdd 74 78
+                              Store 69(i2) 79 
+              86:   83(fvec3) Load 85(u_f3) 
+              87:   80(ivec3) ConvertFToS 86
+              88:   32(bvec3) Load 34(b3) 
+              91:   80(ivec3) Select 88 90 89
+              92:   80(ivec3) IAdd 87 91
+                              Store 82(i3) 92 
+              99:   96(fvec4) Load 98(u_f4) 
+             100:   93(ivec4) ConvertFToS 99
+             101:   44(bvec4) Load 46(b4) 
+             104:   93(ivec4) Select 101 103 102
+             105:   93(ivec4) IAdd 100 104
+                              Store 95(i4) 105 
+             108:     10(int) Load 59(i) 
+             109:   17(float) ConvertSToF 108
+                              Store 107(f) 109 
+             112:   67(ivec2) Load 69(i2) 
+             113:   70(fvec2) ConvertSToF 112
+                              Store 111(f2) 113 
+             116:   80(ivec3) Load 82(i3) 
+             117:   83(fvec3) ConvertSToF 116
+                              Store 115(f3) 117 
+             120:   93(ivec4) Load 95(i4) 
+             121:   96(fvec4) ConvertSToF 120
+                              Store 119(f4) 121 
+             122:     10(int) Load 59(i) 
+             123:   17(float) ConvertSToF 122
+             124:     7(bool) Load 9(b) 
+             126:   17(float) Select 124 125 21
+             127:   17(float) FAdd 123 126
+             128:   17(float) Load 107(f) 
+             129:   17(float) FAdd 128 127
+                              Store 107(f) 129 
+             130:   67(ivec2) Load 69(i2) 
+             131:   70(fvec2) ConvertSToF 130
+             132:   24(bvec2) Load 26(b2) 
+             135:   70(fvec2) Select 132 134 133
+             136:   70(fvec2) FAdd 131 135
+             137:   70(fvec2) Load 111(f2) 
+             138:   70(fvec2) FSub 137 136
+                              Store 111(f2) 138 
+             139:   80(ivec3) Load 82(i3) 
+             140:   83(fvec3) ConvertSToF 139
+             141:   32(bvec3) Load 34(b3) 
+             144:   83(fvec3) Select 141 143 142
+             145:   83(fvec3) FAdd 140 144
+             146:   83(fvec3) Load 115(f3) 
+             147:   83(fvec3) FDiv 146 145
+                              Store 115(f3) 147 
+             148:   93(ivec4) Load 95(i4) 
+             149:   96(fvec4) ConvertSToF 148
+             150:   44(bvec4) Load 46(b4) 
+             153:   96(fvec4) Select 150 152 151
+             154:   96(fvec4) FAdd 149 153
+             155:   96(fvec4) Load 119(f4) 
+             156:   96(fvec4) FAdd 155 154
+                              Store 119(f4) 156 
+             159:   93(ivec4) Load 158(i_i4) 
+             162:   44(bvec4) INotEqual 159 161
+             163:   96(fvec4) Select 162 152 151
+             164:   96(fvec4) Load 119(f4) 
+             165:   96(fvec4) FAdd 164 163
+                              Store 119(f4) 165 
+             166:   96(fvec4) Load 98(u_f4) 
+             167:   44(bvec4) FOrdNotEqual 166 151
+             168:   96(fvec4) Select 167 152 151
+             169:   96(fvec4) Load 119(f4) 
+             170:   96(fvec4) FAdd 169 168
+                              Store 119(f4) 170 
+             171:   17(float) Load 107(f) 
+             172:     10(int) Load 59(i) 
+             173:   17(float) ConvertSToF 172
+             174:   17(float) FSub 171 173
+             175:   17(float) Load 107(f) 
+             176:   17(float) FAdd 175 174
+                              Store 107(f) 176 
+             177:   17(float) Load 107(f) 
+             178:     10(int) Load 59(i) 
+             179:   17(float) ConvertSToF 178
+             180:   70(fvec2) CompositeConstruct 177 179
+             181:   67(ivec2) Load 69(i2) 
+             182:   70(fvec2) ConvertSToF 181
+             183:   70(fvec2) FAdd 180 182
+             184:   70(fvec2) Load 111(f2) 
+             185:   70(fvec2) FAdd 184 183
+                              Store 111(f2) 185 
+             186:   80(ivec3) Load 82(i3) 
+             187:   83(fvec3) ConvertSToF 186
+             188:   17(float) Load 107(f) 
+             189:     10(int) Load 59(i) 
+             190:   17(float) ConvertSToF 189
+             191:   17(float) Load 107(f) 
+             192:   83(fvec3) CompositeConstruct 188 190 191
+             193:   83(fvec3) FAdd 187 192
+             194:   83(fvec3) Load 115(f3) 
+             195:   83(fvec3) FAdd 194 193
+                              Store 115(f3) 195 
+             196:     7(bool) Load 9(b) 
+             197:   17(float) Select 196 125 21
+             198:     10(int) Load 59(i) 
+             199:   17(float) ConvertSToF 198
+             200:   17(float) Load 107(f) 
+             201:     10(int) Load 59(i) 
+             202:   17(float) ConvertSToF 201
+             203:   96(fvec4) CompositeConstruct 197 199 200 202
+             204:   93(ivec4) Load 95(i4) 
+             205:   96(fvec4) ConvertSToF 204
+             206:   96(fvec4) FAdd 203 205
+             207:   96(fvec4) Load 119(f4) 
+             208:   96(fvec4) FAdd 207 206
+                              Store 119(f4) 208 
+             209:   17(float) Load 107(f) 
+             210:     10(int) Load 59(i) 
+             211:   17(float) ConvertSToF 210
+             212:   70(fvec2) CompositeConstruct 209 211
+             213:     10(int) Load 59(i) 
+             214:   17(float) ConvertSToF 213
+             215:   70(fvec2) VectorTimesScalar 212 214
+             216:   70(fvec2) Load 111(f2) 
+             217:   70(fvec2) FAdd 216 215
+                              Store 111(f2) 217 
+             218:   17(float) Load 107(f) 
+             219:     10(int) Load 59(i) 
+             220:   17(float) ConvertSToF 219
+             221:   17(float) Load 107(f) 
+             222:   83(fvec3) CompositeConstruct 218 220 221
+             223:     10(int) Load 59(i) 
+             224:   17(float) ConvertSToF 223
+             225:   83(fvec3) CompositeConstruct 224 224 224
+             226:   83(fvec3) FAdd 222 225
+             227:   83(fvec3) Load 115(f3) 
+             228:   83(fvec3) FAdd 227 226
+                              Store 115(f3) 228 
+             229:     10(int) Load 59(i) 
+             230:   17(float) ConvertSToF 229
+             231:     7(bool) Load 9(b) 
+             232:   17(float) Select 231 125 21
+             233:     10(int) Load 59(i) 
+             234:   17(float) ConvertSToF 233
+             235:   17(float) Load 107(f) 
+             236:     10(int) Load 59(i) 
+             237:   17(float) ConvertSToF 236
+             238:   96(fvec4) CompositeConstruct 232 234 235 237
+             239:   96(fvec4) CompositeConstruct 230 230 230 230
+             240:   96(fvec4) FSub 239 238
+             241:   96(fvec4) Load 119(f4) 
+             242:   96(fvec4) FAdd 241 240
+                              Store 119(f4) 242 
+             243:   17(float) Load 107(f) 
+             244:     10(int) ConvertFToS 243
+             245:     10(int) Load 59(i) 
+             246:   67(ivec2) CompositeConstruct 244 245
+             247:   67(ivec2) Load 69(i2) 
+             248:   67(ivec2) IAdd 247 246
+                              Store 69(i2) 248 
+             249:   17(float) Load 107(f) 
+             250:     10(int) ConvertFToS 249
+             251:     10(int) Load 59(i) 
+             252:   17(float) Load 107(f) 
+             253:     10(int) ConvertFToS 252
+             254:   80(ivec3) CompositeConstruct 250 251 253
+             255:   80(ivec3) Load 82(i3) 
+             256:   80(ivec3) IAdd 255 254
+                              Store 82(i3) 256 
+             257:     7(bool) Load 9(b) 
+             258:     10(int) Select 257 64 63
+             259:     10(int) Load 59(i) 
+             260:   17(float) Load 107(f) 
+             261:     10(int) ConvertFToS 260
+             262:     10(int) Load 59(i) 
+             263:   93(ivec4) CompositeConstruct 258 259 261 262
+             264:   93(ivec4) Load 95(i4) 
+             265:   93(ivec4) IAdd 264 263
+                              Store 95(i4) 265 
+             266:   17(float) Load 107(f) 
+             267:     10(int) Load 59(i) 
+             268:   17(float) ConvertSToF 267
+             269:     7(bool) FOrdLessThan 266 268
+             270:     10(int) Load 59(i) 
+             271:   17(float) ConvertSToF 270
+             272:   17(float) Load 107(f) 
+             273:     7(bool) FOrdLessThan 271 272
+             274:     7(bool) LogicalOr 269 273
+             275:   70(fvec2) Load 111(f2) 
+             276:   67(ivec2) Load 69(i2) 
+             277:   70(fvec2) ConvertSToF 276
+             278:   24(bvec2) FOrdEqual 275 277
+             279:     7(bool) All 278
+             280:     7(bool) LogicalOr 274 279
+             281:   80(ivec3) Load 82(i3) 
+             282:   83(fvec3) ConvertSToF 281
+             283:   83(fvec3) Load 115(f3) 
+             284:   32(bvec3) FOrdNotEqual 282 283
+             285:     7(bool) Any 284
+             286:     7(bool) LogicalOr 280 285
+                              SelectionMerge 288 None
+                              BranchConditional 286 287 288 
+             287:               Label
+             290:     7(bool)   Load 9(b) 
+                                SelectionMerge 292 None
+                                BranchConditional 290 291 295 
+             291:                 Label
+             293:     10(int)     Load 59(i) 
+             294:   17(float)     ConvertSToF 293
+                                  Store 289 294 
+                                  Branch 292
+             295:                 Label
+             296:   70(fvec2)     Load 111(f2) 
+             297:   17(float)     CompositeExtract 296 0
+                                  Store 289 297 
+                                  Branch 292
+             292:               Label
+             298:   17(float)   Load 289 
+             300:   24(bvec2)   Load 26(b2) 
+             301:     7(bool)   CompositeExtract 300 0
+                                SelectionMerge 303 None
+                                BranchConditional 301 302 306 
+             302:                 Label
+             304:   83(fvec3)     Load 115(f3) 
+             305:   17(float)     CompositeExtract 304 0
+                                  Store 299 305 
+                                  Branch 303
+             306:                 Label
+             307:   67(ivec2)     Load 69(i2) 
+             308:     10(int)     CompositeExtract 307 1
+             309:   17(float)     ConvertSToF 308
+                                  Store 299 309 
+                                  Branch 303
+             303:               Label
+             310:   17(float)   Load 299 
+             311:   17(float)   FAdd 298 310
+                                Store 107(f) 311 
+                                Branch 288
+             288:             Label
+             315:     7(bool) Load 9(b) 
+             316:   24(bvec2) Load 26(b2) 
+             317:     7(bool) CompositeExtract 316 0
+             318:     7(bool) LogicalOr 315 317
+             319:   24(bvec2) Load 26(b2) 
+             320:     7(bool) CompositeExtract 319 1
+             321:     7(bool) LogicalOr 318 320
+             322:   32(bvec3) Load 34(b3) 
+             323:     7(bool) CompositeExtract 322 0
+             324:     7(bool) LogicalOr 321 323
+             325:   32(bvec3) Load 34(b3) 
+             326:     7(bool) CompositeExtract 325 1
+             327:     7(bool) LogicalOr 324 326
+             328:   32(bvec3) Load 34(b3) 
+             329:     7(bool) CompositeExtract 328 2
+             330:     7(bool) LogicalOr 327 329
+             331:   44(bvec4) Load 46(b4) 
+             332:     7(bool) CompositeExtract 331 0
+             333:     7(bool) LogicalOr 330 332
+             334:   44(bvec4) Load 46(b4) 
+             335:     7(bool) CompositeExtract 334 1
+             336:     7(bool) LogicalOr 333 335
+             337:   44(bvec4) Load 46(b4) 
+             338:     7(bool) CompositeExtract 337 2
+             339:     7(bool) LogicalOr 336 338
+             340:   44(bvec4) Load 46(b4) 
+             341:     7(bool) CompositeExtract 340 3
+             342:     7(bool) LogicalOr 339 341
+                              SelectionMerge 344 None
+                              BranchConditional 342 343 404 
+             343:               Label
+             345:     10(int)   Load 59(i) 
+             346:   67(ivec2)   Load 69(i2) 
+             347:     10(int)   CompositeExtract 346 0
+             348:     10(int)   IAdd 345 347
+             349:   67(ivec2)   Load 69(i2) 
+             350:     10(int)   CompositeExtract 349 1
+             351:     10(int)   IAdd 348 350
+             352:   80(ivec3)   Load 82(i3) 
+             353:     10(int)   CompositeExtract 352 0
+             354:     10(int)   IAdd 351 353
+             355:   80(ivec3)   Load 82(i3) 
+             356:     10(int)   CompositeExtract 355 1
+             357:     10(int)   IAdd 354 356
+             358:   80(ivec3)   Load 82(i3) 
+             359:     10(int)   CompositeExtract 358 2
+             360:     10(int)   IAdd 357 359
+             361:   93(ivec4)   Load 95(i4) 
+             362:     10(int)   CompositeExtract 361 0
+             363:     10(int)   IAdd 360 362
+             364:   93(ivec4)   Load 95(i4) 
+             365:     10(int)   CompositeExtract 364 1
+             366:     10(int)   IAdd 363 365
+             367:   93(ivec4)   Load 95(i4) 
+             368:     10(int)   CompositeExtract 367 2
+             369:     10(int)   IAdd 366 368
+             370:   93(ivec4)   Load 95(i4) 
+             371:     10(int)   CompositeExtract 370 3
+             372:     10(int)   IAdd 369 371
+             373:   17(float)   ConvertSToF 372
+             374:   17(float)   Load 107(f) 
+             375:   17(float)   FAdd 373 374
+             376:   70(fvec2)   Load 111(f2) 
+             377:   17(float)   CompositeExtract 376 0
+             378:   17(float)   FAdd 375 377
+             379:   70(fvec2)   Load 111(f2) 
+             380:   17(float)   CompositeExtract 379 1
+             381:   17(float)   FAdd 378 380
+             382:   83(fvec3)   Load 115(f3) 
+             383:   17(float)   CompositeExtract 382 0
+             384:   17(float)   FAdd 381 383
+             385:   83(fvec3)   Load 115(f3) 
+             386:   17(float)   CompositeExtract 385 1
+             387:   17(float)   FAdd 384 386
+             388:   83(fvec3)   Load 115(f3) 
+             389:   17(float)   CompositeExtract 388 2
+             390:   17(float)   FAdd 387 389
+             391:   96(fvec4)   Load 119(f4) 
+             392:   17(float)   CompositeExtract 391 0
+             393:   17(float)   FAdd 390 392
+             394:   96(fvec4)   Load 119(f4) 
+             395:   17(float)   CompositeExtract 394 1
+             396:   17(float)   FAdd 393 395
+             397:   96(fvec4)   Load 119(f4) 
+             398:   17(float)   CompositeExtract 397 2
+             399:   17(float)   FAdd 396 398
+             400:   96(fvec4)   Load 119(f4) 
+             401:   17(float)   CompositeExtract 400 3
+             402:   17(float)   FAdd 399 401
+             403:   96(fvec4)   CompositeConstruct 402 402 402 402
+                                Store 314 403 
+                                Branch 344
+             404:               Label
+                                Store 314 152 
+                                Branch 344
+             344:             Label
+             405:   96(fvec4) Load 314 
+                              Store 313(gl_FragColor) 405 
+                              Store 406(cv2) 103 
+             408:   93(ivec4) Load 406(cv2) 
+             409:   44(bvec4) INotEqual 408 161
+                              Store 407(cv5) 409 
+             410:   44(bvec4) Load 407(cv5) 
+             411:   96(fvec4) Select 410 152 151
+             412:   17(float) CompositeExtract 411 0
+             413:   96(fvec4) Load 313(gl_FragColor) 
+             414:   96(fvec4) CompositeConstruct 412 412 412 412
+             415:   96(fvec4) FAdd 413 414
+                              Store 313(gl_FragColor) 415 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.dataOut.frag.out b/Test/baseResults/spv.dataOut.frag.out
new file mode 100644
index 000000000..f33acd743
--- /dev/null
+++ b/Test/baseResults/spv.dataOut.frag.out
@@ -0,0 +1,45 @@
+spv.dataOut.frag
+WARNING: 0:3: varying deprecated in version 130; may be removed in future release
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 21
+
+                              Source GLSL 130
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 13  "gl_FragData"
+                              Name 17  "Color"
+                              Decorate 13(gl_FragData) BuiltIn FragColor
+                              Decorate 17(Color) Smooth 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeVector 7(float) 4
+               9:             TypeInt 32 0
+              10:      9(int) Constant 32
+              11:             TypeArray 8(fvec4) 10
+              12:             TypePointer Output 11
+ 13(gl_FragData):     12(ptr) Variable Output 
+              14:             TypeInt 32 1
+              15:     14(int) Constant 1
+              16:             TypePointer Input 8(fvec4)
+       17(Color):     16(ptr) Variable Input 
+              19:             TypePointer Output 8(fvec4)
+         4(main):           2 Function None 3
+               5:             Label
+              18:    8(fvec4) Load 17(Color) 
+              20:     19(ptr) AccessChain 13(gl_FragData) 15
+                              Store 20 18 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.dataOutIndirect.frag.out b/Test/baseResults/spv.dataOutIndirect.frag.out
new file mode 100644
index 000000000..62b9d549f
--- /dev/null
+++ b/Test/baseResults/spv.dataOutIndirect.frag.out
@@ -0,0 +1,48 @@
+spv.dataOutIndirect.frag
+WARNING: 0:3: varying deprecated in version 130; may be removed in future release
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 23
+
+                              Source GLSL 130
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 13  "gl_FragData"
+                              Name 16  "i"
+                              Name 19  "Color"
+                              Decorate 13(gl_FragData) BuiltIn FragColor
+                              Decorate 19(Color) Smooth 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeVector 7(float) 4
+               9:             TypeInt 32 0
+              10:      9(int) Constant 32
+              11:             TypeArray 8(fvec4) 10
+              12:             TypePointer Output 11
+ 13(gl_FragData):     12(ptr) Variable Output 
+              14:             TypeInt 32 1
+              15:             TypePointer UniformConstant 14(int)
+           16(i):     15(ptr) Variable UniformConstant 
+              18:             TypePointer Input 8(fvec4)
+       19(Color):     18(ptr) Variable Input 
+              21:             TypePointer Output 8(fvec4)
+         4(main):           2 Function None 3
+               5:             Label
+              17:     14(int) Load 16(i) 
+              20:    8(fvec4) Load 19(Color) 
+              22:     21(ptr) AccessChain 13(gl_FragData) 17
+                              Store 22 20 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.dataOutIndirect.vert.out b/Test/baseResults/spv.dataOutIndirect.vert.out
new file mode 100644
index 000000000..8c39498bf
--- /dev/null
+++ b/Test/baseResults/spv.dataOutIndirect.vert.out
@@ -0,0 +1,76 @@
+spv.dataOutIndirect.vert
+WARNING: 0:3: attribute deprecated in version 130; may be removed in future release
+WARNING: 0:4: varying deprecated in version 130; may be removed in future release
+
+
+
+Linked vertex stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 39
+
+                              Source GLSL 130
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4
+                              Name 4  "main"
+                              Name 9  "i"
+                              Name 24  "colorOut"
+                              Name 27  "color"
+                              Name 33  "gl_Position"
+                              Name 38  "gl_VertexID"
+                              Decorate 24(colorOut) Smooth 
+                              Decorate 33(gl_Position) BuiltIn Position
+                              Decorate 38(gl_VertexID) BuiltIn VertexId
+                              Decorate 38(gl_VertexID) NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeInt 32 1
+               8:             TypePointer Function 7(int)
+              10:      7(int) Constant 1
+              14:      7(int) Constant 5
+              15:             TypeBool
+              18:             TypeFloat 32
+              19:             TypeVector 18(float) 4
+              20:             TypeInt 32 0
+              21:     20(int) Constant 6
+              22:             TypeArray 19(fvec4) 21
+              23:             TypePointer Output 22
+    24(colorOut):     23(ptr) Variable Output 
+              26:             TypePointer Input 19(fvec4)
+       27(color):     26(ptr) Variable Input 
+              29:             TypePointer Output 19(fvec4)
+ 33(gl_Position):     29(ptr) Variable Output 
+              34:      7(int) Constant 2
+              37:             TypePointer Input 7(int)
+ 38(gl_VertexID):     37(ptr) Variable Input 
+         4(main):           2 Function None 3
+               5:             Label
+            9(i):      8(ptr) Variable Function 
+                              Store 9(i) 10 
+                              Branch 11
+              11:             Label
+              13:      7(int) Load 9(i) 
+              16:    15(bool) SLessThan 13 14
+                              LoopMerge 12 None
+                              BranchConditional 16 17 12 
+              17:               Label
+              25:      7(int)   Load 9(i) 
+              28:   19(fvec4)   Load 27(color) 
+              30:     29(ptr)   AccessChain 24(colorOut) 25
+                                Store 30 28 
+              31:      7(int)   Load 9(i) 
+              32:      7(int)   IAdd 31 10
+                                Store 9(i) 32 
+                                Branch 11
+              12:             Label
+              35:     29(ptr) AccessChain 24(colorOut) 34
+              36:   19(fvec4) Load 35 
+                              Store 33(gl_Position) 36 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.deepRvalue.frag.out b/Test/baseResults/spv.deepRvalue.frag.out
new file mode 100644
index 000000000..5d6d13183
--- /dev/null
+++ b/Test/baseResults/spv.deepRvalue.frag.out
@@ -0,0 +1,9 @@
+spv.deepRvalue.frag
+
+
+
+Linked fragment stage:
+
+
+
+Missing functionality: binary operation on matrix
diff --git a/Test/baseResults/spv.depthOut.frag.out b/Test/baseResults/spv.depthOut.frag.out
new file mode 100644
index 000000000..f8e09ce53
--- /dev/null
+++ b/Test/baseResults/spv.depthOut.frag.out
@@ -0,0 +1,49 @@
+spv.depthOut.frag
+WARNING: 0:3: varying deprecated in version 130; may be removed in future release
+WARNING: 0:4: varying deprecated in version 130; may be removed in future release
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 19
+
+                              Source GLSL 130
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 9  "gl_FragDepth"
+                              Name 11  "Depth"
+                              Name 15  "gl_FragColor"
+                              Name 17  "Color"
+                              Decorate 9(gl_FragDepth) BuiltIn FragDepth
+                              Decorate 11(Depth) Smooth 
+                              Decorate 15(gl_FragColor) BuiltIn FragColor
+                              Decorate 17(Color) Smooth 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypePointer Output 7(float)
+ 9(gl_FragDepth):      8(ptr) Variable Output 
+              10:             TypePointer Input 7(float)
+       11(Depth):     10(ptr) Variable Input 
+              13:             TypeVector 7(float) 4
+              14:             TypePointer Output 13(fvec4)
+15(gl_FragColor):     14(ptr) Variable Output 
+              16:             TypePointer Input 13(fvec4)
+       17(Color):     16(ptr) Variable Input 
+         4(main):           2 Function None 3
+               5:             Label
+              12:    7(float) Load 11(Depth) 
+                              Store 9(gl_FragDepth) 12 
+              18:   13(fvec4) Load 17(Color) 
+                              Store 15(gl_FragColor) 18 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.discard-dce.frag.out b/Test/baseResults/spv.discard-dce.frag.out
new file mode 100644
index 000000000..d90eb115b
--- /dev/null
+++ b/Test/baseResults/spv.discard-dce.frag.out
@@ -0,0 +1,131 @@
+spv.discard-dce.frag
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 81
+
+                              Source GLSL 110
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 10  "white"
+                              Name 13  "black"
+                              Name 16  "color"
+                              Name 19  "x"
+                              Name 22  "tex_coord"
+                              Name 28  "y"
+                              Name 33  "radius"
+                              Name 56  "gl_FragColor"
+                              Decorate 22(tex_coord) Smooth 
+                              Decorate 56(gl_FragColor) BuiltIn FragColor
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeVector 7(float) 4
+               9:             TypePointer Function 8(fvec4)
+              11:    7(float) Constant 1065353216
+              12:    8(fvec4) ConstantComposite 11 11 11 11
+              14:    7(float) Constant 1045220557
+              15:    8(fvec4) ConstantComposite 14 14 14 14
+              18:             TypePointer Function 7(float)
+              20:             TypeVector 7(float) 2
+              21:             TypePointer Input 20(fvec2)
+   22(tex_coord):     21(ptr) Variable Input 
+              25:    7(float) Constant 1073741824
+              43:             TypeBool
+              48:    7(float) Constant 1066192077
+              55:             TypePointer Output 8(fvec4)
+56(gl_FragColor):     55(ptr) Variable Output 
+              59:    7(float) Constant 1067030938
+              68:    7(float) Constant 1061158912
+              73:    7(float) Constant 1098907648
+         4(main):           2 Function None 3
+               5:             Label
+       10(white):      9(ptr) Variable Function 
+       13(black):      9(ptr) Variable Function 
+       16(color):      9(ptr) Variable Function 
+           19(x):     18(ptr) Variable Function 
+           28(y):     18(ptr) Variable Function 
+      33(radius):     18(ptr) Variable Function 
+                              Store 10(white) 12 
+                              Store 13(black) 15 
+              17:    8(fvec4) Load 10(white) 
+                              Store 16(color) 17 
+              23:   20(fvec2) Load 22(tex_coord) 
+              24:    7(float) CompositeExtract 23 0
+              26:    7(float) FMul 24 25
+              27:    7(float) FSub 26 11
+                              Store 19(x) 27 
+              29:   20(fvec2) Load 22(tex_coord) 
+              30:    7(float) CompositeExtract 29 1
+              31:    7(float) FMul 30 25
+              32:    7(float) FSub 31 11
+                              Store 28(y) 32 
+              34:    7(float) Load 19(x) 
+              35:    7(float) Load 19(x) 
+              36:    7(float) FMul 34 35
+              37:    7(float) Load 28(y) 
+              38:    7(float) Load 28(y) 
+              39:    7(float) FMul 37 38
+              40:    7(float) FAdd 36 39
+              41:    7(float) ExtInst 1(GLSL.std.450) 28(sqrt) 40
+                              Store 33(radius) 41 
+              42:    7(float) Load 33(radius) 
+              44:    43(bool) FOrdGreaterThan 42 11
+                              SelectionMerge 46 None
+                              BranchConditional 44 45 46 
+              45:               Label
+              47:    7(float)   Load 33(radius) 
+              49:    43(bool)   FOrdGreaterThan 47 48
+                                SelectionMerge 51 None
+                                BranchConditional 49 50 51 
+              50:                 Label
+              52:    8(fvec4)     Load 16(color) 
+              53:    8(fvec4)     CompositeConstruct 11 11 11 11
+              54:    8(fvec4)     FAdd 52 53
+                                  Store 16(color) 54 
+                                  Branch 51
+              51:               Label
+              57:    8(fvec4)   Load 16(color) 
+                                Store 56(gl_FragColor) 57 
+              58:    7(float)   Load 33(radius) 
+              60:    43(bool)   FOrdGreaterThan 58 59
+                                SelectionMerge 62 None
+                                BranchConditional 60 61 62 
+              61:                 Label
+              63:    8(fvec4)     Load 16(color) 
+              64:    8(fvec4)     CompositeConstruct 11 11 11 11
+              65:    8(fvec4)     FAdd 63 64
+                                  Store 16(color) 65 
+                                  Branch 62
+              62:               Label
+                                Kill
+              46:             Label
+              67:    7(float) Load 33(radius) 
+              69:    43(bool) FOrdGreaterThanEqual 67 68
+                              SelectionMerge 71 None
+                              BranchConditional 69 70 71 
+              70:               Label
+              72:    7(float)   Load 33(radius) 
+              74:    7(float)   ExtInst 1(GLSL.std.450) 23(pow) 72 73
+              75:    7(float)   FDiv 74 25
+              76:    7(float)   ExtInst 1(GLSL.std.450) 3(abs) 75
+              77:    8(fvec4)   Load 16(color) 
+              78:    8(fvec4)   CompositeConstruct 76 76 76 76
+              79:    8(fvec4)   FSub 77 78
+                                Store 16(color) 79 
+                                Branch 71
+              71:             Label
+              80:    8(fvec4) Load 16(color) 
+                              Store 56(gl_FragColor) 80 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.doWhileLoop.frag.out b/Test/baseResults/spv.doWhileLoop.frag.out
new file mode 100644
index 000000000..62bf5b1b9
--- /dev/null
+++ b/Test/baseResults/spv.doWhileLoop.frag.out
@@ -0,0 +1,68 @@
+spv.doWhileLoop.frag
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 34
+
+                              Source GLSL 110
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 10  "color"
+                              Name 12  "BaseColor"
+                              Name 19  "bigColor"
+                              Name 26  "d"
+                              Name 32  "gl_FragColor"
+                              Decorate 12(BaseColor) Smooth 
+                              Decorate 32(gl_FragColor) BuiltIn FragColor
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeVector 7(float) 4
+               9:             TypePointer Function 8(fvec4)
+              11:             TypePointer Input 8(fvec4)
+   12(BaseColor):     11(ptr) Variable Input 
+              18:             TypePointer UniformConstant 8(fvec4)
+    19(bigColor):     18(ptr) Variable UniformConstant 
+              25:             TypePointer UniformConstant 7(float)
+           26(d):     25(ptr) Variable UniformConstant 
+              28:             TypeBool
+              31:             TypePointer Output 8(fvec4)
+32(gl_FragColor):     31(ptr) Variable Output 
+         4(main):           2 Function None 3
+               5:             Label
+       10(color):      9(ptr) Variable Function 
+              13:    8(fvec4) Load 12(BaseColor) 
+                              Store 10(color) 13 
+                              Branch 14
+              14:             Label
+                              LoopMerge 15 None
+                              Branch 16
+              16:             Label
+              20:    8(fvec4) Load 19(bigColor) 
+              21:    8(fvec4) Load 10(color) 
+              22:    8(fvec4) FAdd 21 20
+                              Store 10(color) 22 
+                              Branch 17
+              17:             Label
+              23:    8(fvec4) Load 10(color) 
+              24:    7(float) CompositeExtract 23 0
+              27:    7(float) Load 26(d) 
+              29:    28(bool) FOrdLessThan 24 27
+                              BranchConditional 29 30 15 
+              30:               Label
+                                Branch 14
+              15:             Label
+              33:    8(fvec4) Load 10(color) 
+                              Store 32(gl_FragColor) 33 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.double.comp.out b/Test/baseResults/spv.double.comp.out
new file mode 100644
index 000000000..5eab42021
--- /dev/null
+++ b/Test/baseResults/spv.double.comp.out
@@ -0,0 +1,110 @@
+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 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 63
+
+                              Source GLSL 430
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4
+                              Name 4  "main"
+                              Name 9  "bufName"
+                              MemberName 9(bufName) 0  "f"
+                              MemberName 9(bufName) 1  "d"
+                              Name 11  "bufInst"
+                              Name 23  "storePos"
+                              Name 27  "gl_GlobalInvocationID"
+                              Name 33  "localCoef"
+                              Name 34  "gl_LocalInvocationID"
+                              Name 50  "aa"
+                              Name 55  "globalCoef"
+                              Name 59  "roll"
+                              Name 62  "destTex"
+                              Decorate 9(bufName) GLSLShared 
+                              Decorate 9(bufName) BufferBlock 
+                              Decorate 27(gl_GlobalInvocationID) BuiltIn GlobalInvocationId
+                              Decorate 34(gl_LocalInvocationID) BuiltIn LocalInvocationId
+                              Decorate 14 NoStaticUse 
+                              Decorate 57 NoStaticUse 
+                              Decorate 14 NoStaticUse 
+                              Decorate 14 NoStaticUse 
+                              Decorate 59(roll) NoStaticUse 
+                              Decorate 62(destTex) NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeFloat 64
+      9(bufName):             TypeStruct 7(float) 8(float)
+              10:             TypePointer Uniform 9(bufName)
+     11(bufInst):     10(ptr) Variable Uniform 
+              12:             TypeInt 32 1
+              13:     12(int) Constant 1
+              14:    8(float) Constant 1413754136 1074340347
+              15:             TypePointer Uniform 8(float)
+              17:     12(int) Constant 0
+              18:    7(float) Constant 1095307129
+              19:             TypePointer Uniform 7(float)
+              21:             TypeVector 12(int) 2
+              22:             TypePointer Function 21(ivec2)
+              24:             TypeInt 32 0
+              25:             TypeVector 24(int) 3
+              26:             TypePointer Input 25(ivec3)
+27(gl_GlobalInvocationID):     26(ptr) Variable Input 
+              28:             TypeVector 24(int) 2
+              32:             TypePointer Function 8(float)
+34(gl_LocalInvocationID):     26(ptr) Variable Input 
+              38:     12(int) Constant 8
+              41:             TypeVector 7(float) 2
+              43:    7(float) Constant 1090519040
+              48:             TypeVector 8(float) 4
+              49:             TypePointer Function 48(fvec4)
+              51:    8(float) Constant 2576980378 1071225241
+              52:    8(float) Constant 2576980378 1070176665
+              53:    8(float) Constant 858993459 1070805811
+              54:   48(fvec4) ConstantComposite 51 52 53 51
+              56:    8(float) Constant 0 1072693248
+              57:    8(float) Constant 3229815407 1074340298
+              58:             TypePointer UniformConstant 8(float)
+        59(roll):     58(ptr) Variable UniformConstant 
+              60:             TypeSampler7(float) 2D image
+              61:             TypePointer UniformConstant 60
+     62(destTex):     61(ptr) Variable UniformConstant 
+         4(main):           2 Function None 3
+               5:             Label
+    23(storePos):     22(ptr) Variable Function 
+   33(localCoef):     32(ptr) Variable Function 
+          50(aa):     49(ptr) Variable Function 
+  55(globalCoef):     32(ptr) Variable Function 
+              16:     15(ptr) AccessChain 11(bufInst) 13
+                              Store 16 14 
+              20:     19(ptr) AccessChain 11(bufInst) 17
+                              Store 20 18 
+              29:   25(ivec3) Load 27(gl_GlobalInvocationID) 
+              30:   28(ivec2) VectorShuffle 29 29 0 1
+              31:   21(ivec2) Bitcast 30
+                              Store 23(storePos) 31 
+              35:   25(ivec3) Load 34(gl_LocalInvocationID) 
+              36:   28(ivec2) VectorShuffle 35 35 0 1
+              37:   21(ivec2) Bitcast 36
+              39:   21(ivec2) CompositeConstruct 38 38
+              40:   21(ivec2) ISub 37 39
+              42:   41(fvec2) ConvertSToF 40
+              44:   41(fvec2) CompositeConstruct 43 43
+              45:   41(fvec2) FDiv 42 44
+              46:    7(float) ExtInst 1(GLSL.std.450) 58(length) 45
+              47:    8(float) FConvert 46
+                              Store 33(localCoef) 47 
+                              Store 50(aa) 54 
+                              Store 55(globalCoef) 56 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.earlyReturnDiscard.frag.out b/Test/baseResults/spv.earlyReturnDiscard.frag.out
new file mode 100644
index 000000000..9669e10fa
--- /dev/null
+++ b/Test/baseResults/spv.earlyReturnDiscard.frag.out
@@ -0,0 +1,181 @@
+spv.earlyReturnDiscard.frag
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 112
+
+                              Source GLSL 110
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 10  "color"
+                              Name 12  "BaseColor"
+                              Name 14  "color2"
+                              Name 16  "otherColor"
+                              Name 19  "c"
+                              Name 22  "d"
+                              Name 28  "bigColor"
+                              Name 33  "smallColor"
+                              Name 39  "minimum"
+                              Name 53  "threshhold"
+                              Name 64  "threshhold2"
+                              Name 78  "b"
+                              Name 107  "gl_FragColor"
+                              Name 111  "threshhold3"
+                              Decorate 12(BaseColor) Smooth 
+                              Decorate 19(c) Smooth 
+                              Decorate 107(gl_FragColor) BuiltIn FragColor
+                              Decorate 111(threshhold3) NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeVector 7(float) 4
+               9:             TypePointer Function 8(fvec4)
+              11:             TypePointer Input 8(fvec4)
+   12(BaseColor):     11(ptr) Variable Input 
+              15:             TypePointer UniformConstant 8(fvec4)
+  16(otherColor):     15(ptr) Variable UniformConstant 
+              18:             TypePointer Input 7(float)
+           19(c):     18(ptr) Variable Input 
+              21:             TypePointer UniformConstant 7(float)
+           22(d):     21(ptr) Variable UniformConstant 
+              24:             TypeBool
+    28(bigColor):     15(ptr) Variable UniformConstant 
+  33(smallColor):     15(ptr) Variable UniformConstant 
+     39(minimum):     21(ptr) Variable UniformConstant 
+              47:    7(float) Constant 1065353216
+  53(threshhold):     21(ptr) Variable UniformConstant 
+ 64(threshhold2):     21(ptr) Variable UniformConstant 
+              77:             TypePointer UniformConstant 24(bool)
+           78(b):     77(ptr) Variable UniformConstant 
+             106:             TypePointer Output 8(fvec4)
+107(gl_FragColor):    106(ptr) Variable Output 
+111(threshhold3):     21(ptr) Variable UniformConstant 
+         4(main):           2 Function None 3
+               5:             Label
+       10(color):      9(ptr) Variable Function 
+      14(color2):      9(ptr) Variable Function 
+              13:    8(fvec4) Load 12(BaseColor) 
+                              Store 10(color) 13 
+              17:    8(fvec4) Load 16(otherColor) 
+                              Store 14(color2) 17 
+              20:    7(float) Load 19(c) 
+              23:    7(float) Load 22(d) 
+              25:    24(bool) FOrdGreaterThan 20 23
+                              SelectionMerge 27 None
+                              BranchConditional 25 26 32 
+              26:               Label
+              29:    8(fvec4)   Load 28(bigColor) 
+              30:    8(fvec4)   Load 10(color) 
+              31:    8(fvec4)   FAdd 30 29
+                                Store 10(color) 31 
+                                Branch 27
+              32:               Label
+              34:    8(fvec4)   Load 33(smallColor) 
+              35:    8(fvec4)   Load 10(color) 
+              36:    8(fvec4)   FAdd 35 34
+                                Store 10(color) 36 
+                                Branch 27
+              27:             Label
+              37:    8(fvec4) Load 10(color) 
+              38:    7(float) CompositeExtract 37 2
+              40:    7(float) Load 39(minimum) 
+              41:    24(bool) FOrdLessThan 38 40
+                              SelectionMerge 43 None
+                              BranchConditional 41 42 43 
+              42:               Label
+                                Branch 6
+              43:             Label
+              45:    8(fvec4) Load 10(color) 
+              46:    7(float) CompositeExtract 45 2
+              48:    7(float) FAdd 46 47
+              49:    8(fvec4) Load 10(color) 
+              50:    8(fvec4) CompositeInsert 48 49 2
+                              Store 10(color) 50 
+              51:    8(fvec4) Load 10(color) 
+              52:    7(float) CompositeExtract 51 2
+              54:    7(float) Load 53(threshhold) 
+              55:    24(bool) FOrdGreaterThan 52 54
+                              SelectionMerge 57 None
+                              BranchConditional 55 56 57 
+              56:               Label
+                                Kill
+              57:             Label
+              59:    8(fvec4) Load 10(color) 
+              60:    8(fvec4) CompositeConstruct 47 47 47 47
+              61:    8(fvec4) FAdd 59 60
+                              Store 10(color) 61 
+              62:    8(fvec4) Load 10(color) 
+              63:    7(float) CompositeExtract 62 3
+              65:    7(float) Load 64(threshhold2) 
+              66:    24(bool) FOrdGreaterThan 63 65
+                              SelectionMerge 68 None
+                              BranchConditional 66 67 99 
+              67:               Label
+              69:    8(fvec4)   Load 10(color) 
+              70:    7(float)   CompositeExtract 69 2
+              71:    7(float)   Load 64(threshhold2) 
+              72:    24(bool)   FOrdGreaterThan 70 71
+                                SelectionMerge 74 None
+                                BranchConditional 72 73 76 
+              73:                 Label
+                                  Branch 6
+              76:                 Label
+              79:    24(bool)     Load 78(b) 
+                                  SelectionMerge 81 None
+                                  BranchConditional 79 80 87 
+              80:                   Label
+              82:    8(fvec4)       Load 10(color) 
+              83:    7(float)       CompositeExtract 82 2
+              84:    7(float)       FAdd 83 47
+              85:    8(fvec4)       Load 10(color) 
+              86:    8(fvec4)       CompositeInsert 84 85 2
+                                    Store 10(color) 86 
+                                    Branch 81
+              87:                   Label
+              88:    8(fvec4)       Load 10(color) 
+              89:    7(float)       CompositeExtract 88 0
+              90:    7(float)       Load 39(minimum) 
+              91:    24(bool)       FOrdLessThan 89 90
+                                    SelectionMerge 93 None
+                                    BranchConditional 91 92 95 
+              92:                     Label
+                                      Kill
+              95:                     Label
+              96:    8(fvec4)         Load 10(color) 
+              97:    8(fvec4)         CompositeConstruct 47 47 47 47
+              98:    8(fvec4)         FAdd 96 97
+                                      Store 10(color) 98 
+                                      Branch 93
+              93:                   Label
+                                    Branch 81
+              81:                 Label
+                                  Branch 74
+              74:               Label
+                                Branch 68
+              99:               Label
+             100:    24(bool)   Load 78(b) 
+                                SelectionMerge 102 None
+                                BranchConditional 100 101 104 
+             101:                 Label
+                                  Kill
+             104:                 Label
+                                  Branch 6
+             102:               Label
+                                Branch 68
+              68:             Label
+             108:    8(fvec4) Load 10(color) 
+             109:    8(fvec4) Load 14(color2) 
+             110:    8(fvec4) FMul 108 109
+                              Store 107(gl_FragColor) 110 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.flowControl.frag.out b/Test/baseResults/spv.flowControl.frag.out
new file mode 100644
index 000000000..e8d0395a5
--- /dev/null
+++ b/Test/baseResults/spv.flowControl.frag.out
@@ -0,0 +1,81 @@
+spv.flowControl.frag
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 42
+
+                              Source GLSL 120
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 10  "color"
+                              Name 12  "BaseColor"
+                              Name 14  "color2"
+                              Name 16  "otherColor"
+                              Name 19  "c"
+                              Name 22  "d"
+                              Name 28  "bigColor"
+                              Name 33  "smallColor"
+                              Name 38  "gl_FragColor"
+                              Decorate 12(BaseColor) Smooth 
+                              Decorate 19(c) Smooth 
+                              Decorate 38(gl_FragColor) BuiltIn FragColor
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeVector 7(float) 4
+               9:             TypePointer Function 8(fvec4)
+              11:             TypePointer Input 8(fvec4)
+   12(BaseColor):     11(ptr) Variable Input 
+              15:             TypePointer UniformConstant 8(fvec4)
+  16(otherColor):     15(ptr) Variable UniformConstant 
+              18:             TypePointer Input 7(float)
+           19(c):     18(ptr) Variable Input 
+              21:             TypePointer UniformConstant 7(float)
+           22(d):     21(ptr) Variable UniformConstant 
+              24:             TypeBool
+    28(bigColor):     15(ptr) Variable UniformConstant 
+  33(smallColor):     15(ptr) Variable UniformConstant 
+              37:             TypePointer Output 8(fvec4)
+38(gl_FragColor):     37(ptr) Variable Output 
+         4(main):           2 Function None 3
+               5:             Label
+       10(color):      9(ptr) Variable Function 
+      14(color2):      9(ptr) Variable Function 
+              13:    8(fvec4) Load 12(BaseColor) 
+                              Store 10(color) 13 
+              17:    8(fvec4) Load 16(otherColor) 
+                              Store 14(color2) 17 
+              20:    7(float) Load 19(c) 
+              23:    7(float) Load 22(d) 
+              25:    24(bool) FOrdGreaterThan 20 23
+                              SelectionMerge 27 None
+                              BranchConditional 25 26 32 
+              26:               Label
+              29:    8(fvec4)   Load 28(bigColor) 
+              30:    8(fvec4)   Load 10(color) 
+              31:    8(fvec4)   FAdd 30 29
+                                Store 10(color) 31 
+                                Branch 27
+              32:               Label
+              34:    8(fvec4)   Load 33(smallColor) 
+              35:    8(fvec4)   Load 10(color) 
+              36:    8(fvec4)   FAdd 35 34
+                                Store 10(color) 36 
+                                Branch 27
+              27:             Label
+              39:    8(fvec4) Load 10(color) 
+              40:    8(fvec4) Load 14(color2) 
+              41:    8(fvec4) FMul 39 40
+                              Store 38(gl_FragColor) 41 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.forLoop.frag.out b/Test/baseResults/spv.forLoop.frag.out
new file mode 100644
index 000000000..13cbe6311
--- /dev/null
+++ b/Test/baseResults/spv.forLoop.frag.out
@@ -0,0 +1,200 @@
+spv.forLoop.frag
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 123
+
+                              Source GLSL 130
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 10  "color"
+                              Name 12  "BaseColor"
+                              Name 16  "i"
+                              Name 22  "Count"
+                              Name 28  "bigColor"
+                              Name 36  "gl_FragColor"
+                              Name 39  "sum"
+                              Name 41  "i"
+                              Name 51  "v4"
+                              Name 60  "i"
+                              Name 66  "tv4"
+                              Name 84  "r"
+                              Name 90  "i"
+                              Name 98  "f"
+                              Name 111  "i"
+                              Decorate 12(BaseColor) Smooth 
+                              Decorate 36(gl_FragColor) BuiltIn FragColor
+                              Decorate 98(f) Smooth 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeVector 7(float) 4
+               9:             TypePointer Function 8(fvec4)
+              11:             TypePointer Input 8(fvec4)
+   12(BaseColor):     11(ptr) Variable Input 
+              14:             TypeInt 32 1
+              15:             TypePointer Function 14(int)
+              17:     14(int) Constant 0
+              21:             TypePointer UniformConstant 14(int)
+       22(Count):     21(ptr) Variable UniformConstant 
+              24:             TypeBool
+              27:             TypePointer UniformConstant 8(fvec4)
+    28(bigColor):     27(ptr) Variable UniformConstant 
+              33:     14(int) Constant 1
+              35:             TypePointer Output 8(fvec4)
+36(gl_FragColor):     35(ptr) Variable Output 
+              38:             TypePointer Function 7(float)
+              40:    7(float) Constant 0
+              45:     14(int) Constant 4
+              48:             TypeInt 32 0
+              49:             TypeVector 48(int) 4
+              50:             TypePointer UniformConstant 49(ivec4)
+          51(v4):     50(ptr) Variable UniformConstant 
+              71:     48(int) Constant 4
+              85:             TypeVector 7(float) 3
+              97:             TypePointer Input 7(float)
+           98(f):     97(ptr) Variable Input 
+             115:     14(int) Constant 16
+         4(main):           2 Function None 3
+               5:             Label
+       10(color):      9(ptr) Variable Function 
+           16(i):     15(ptr) Variable Function 
+         39(sum):     38(ptr) Variable Function 
+           41(i):     15(ptr) Variable Function 
+           60(i):     15(ptr) Variable Function 
+         66(tv4):      9(ptr) Variable Function 
+           84(r):      9(ptr) Variable Function 
+           90(i):     15(ptr) Variable Function 
+          111(i):     15(ptr) Variable Function 
+              13:    8(fvec4) Load 12(BaseColor) 
+                              Store 10(color) 13 
+                              Store 16(i) 17 
+                              Branch 18
+              18:             Label
+              20:     14(int) Load 16(i) 
+              23:     14(int) Load 22(Count) 
+              25:    24(bool) SLessThan 20 23
+                              LoopMerge 19 None
+                              BranchConditional 25 26 19 
+              26:               Label
+              29:    8(fvec4)   Load 28(bigColor) 
+              30:    8(fvec4)   Load 10(color) 
+              31:    8(fvec4)   FAdd 30 29
+                                Store 10(color) 31 
+              32:     14(int)   Load 16(i) 
+              34:     14(int)   IAdd 32 33
+                                Store 16(i) 34 
+                                Branch 18
+              19:             Label
+              37:    8(fvec4) Load 10(color) 
+                              Store 36(gl_FragColor) 37 
+                              Store 39(sum) 40 
+                              Store 41(i) 17 
+                              Branch 42
+              42:             Label
+              44:     14(int) Load 41(i) 
+              46:    24(bool) SLessThan 44 45
+                              LoopMerge 43 None
+                              BranchConditional 46 47 43 
+              47:               Label
+              52:     14(int)   Load 41(i) 
+              53:   49(ivec4)   Load 51(v4) 
+              54:     48(int)   VectorExtractDynamic 53 52
+              55:    7(float)   ConvertUToF 54
+              56:    7(float)   Load 39(sum) 
+              57:    7(float)   FAdd 56 55
+                                Store 39(sum) 57 
+              58:     14(int)   Load 41(i) 
+              59:     14(int)   IAdd 58 33
+                                Store 41(i) 59 
+                                Branch 42
+              43:             Label
+                              Store 60(i) 17 
+                              Branch 61
+              61:             Label
+              63:     14(int) Load 60(i) 
+              64:    24(bool) SLessThan 63 45
+                              LoopMerge 62 None
+                              BranchConditional 64 65 62 
+              65:               Label
+              67:     14(int)   Load 60(i) 
+              68:     14(int)   Load 60(i) 
+              69:   49(ivec4)   Load 51(v4) 
+              70:     48(int)   VectorExtractDynamic 69 68
+              72:     48(int)   IMul 70 71
+              73:    7(float)   ConvertUToF 72
+              75:    8(fvec4)   Load 66(tv4) 
+              74:    7(float)   VectorInsertDynamic 75 73 67
+                                Store 66(tv4) 74 
+              76:     14(int)   Load 60(i) 
+              77:     14(int)   IAdd 76 33
+                                Store 60(i) 77 
+                                Branch 61
+              62:             Label
+              78:    7(float) Load 39(sum) 
+              79:    8(fvec4) CompositeConstruct 78 78 78 78
+              80:    8(fvec4) Load 66(tv4) 
+              81:    8(fvec4) FAdd 79 80
+              82:    8(fvec4) Load 36(gl_FragColor) 
+              83:    8(fvec4) FAdd 82 81
+                              Store 36(gl_FragColor) 83 
+              86:    8(fvec4) Load 12(BaseColor) 
+              87:   85(fvec3) VectorShuffle 86 86 0 1 2
+              88:    8(fvec4) Load 84(r) 
+              89:    8(fvec4) VectorShuffle 88 87 4 5 6 3
+                              Store 84(r) 89 
+                              Store 90(i) 17 
+                              Branch 91
+              91:             Label
+              93:     14(int) Load 90(i) 
+              94:     14(int) Load 22(Count) 
+              95:    24(bool) SLessThan 93 94
+                              LoopMerge 92 None
+                              BranchConditional 95 96 92 
+              96:               Label
+              99:    7(float)   Load 98(f) 
+             100:    8(fvec4)   Load 84(r) 
+             101:    8(fvec4)   CompositeInsert 99 100 3
+                                Store 84(r) 101 
+             102:     14(int)   Load 90(i) 
+             103:     14(int)   IAdd 102 33
+                                Store 90(i) 103 
+                                Branch 91
+              92:             Label
+             104:    8(fvec4) Load 84(r) 
+             105:   85(fvec3) VectorShuffle 104 104 0 1 2
+             106:    8(fvec4) Load 36(gl_FragColor) 
+             107:   85(fvec3) VectorShuffle 106 106 0 1 2
+             108:   85(fvec3) FAdd 107 105
+             109:    8(fvec4) Load 36(gl_FragColor) 
+             110:    8(fvec4) VectorShuffle 109 108 4 5 6 3
+                              Store 36(gl_FragColor) 110 
+                              Store 111(i) 17 
+                              Branch 112
+             112:             Label
+             114:     14(int) Load 111(i) 
+             116:    24(bool) SLessThan 114 115
+                              LoopMerge 113 None
+                              BranchConditional 116 117 113 
+             117:               Label
+             118:    7(float)   Load 98(f) 
+             119:    8(fvec4)   Load 36(gl_FragColor) 
+             120:    8(fvec4)   VectorTimesScalar 119 118
+                                Store 36(gl_FragColor) 120 
+             121:     14(int)   Load 111(i) 
+             122:     14(int)   IAdd 121 45
+                                Store 111(i) 122 
+                                Branch 112
+             113:             Label
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.forwardFun.frag.out b/Test/baseResults/spv.forwardFun.frag.out
new file mode 100644
index 000000000..23f8e53ba
--- /dev/null
+++ b/Test/baseResults/spv.forwardFun.frag.out
@@ -0,0 +1,109 @@
+spv.forwardFun.frag
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 59
+
+                              Source GLSL 100
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 7  "bar("
+                              Name 11  "unreachableReturn("
+                              Name 17  "foo(vf4;"
+                              Name 16  "bar"
+                              Name 19  "color"
+                              Name 21  "BaseColor"
+                              Name 22  "param"
+                              Name 28  "f"
+                              Name 31  "gl_FragColor"
+                              Name 37  "d"
+                              Name 49  "dummyReturn"
+                              Name 58  "bigColor"
+                              Decorate 19(color) PrecisionMedium 
+                              Decorate 21(BaseColor) PrecisionMedium 
+                              Decorate 21(BaseColor) Smooth 
+                              Decorate 28(f) PrecisionMedium 
+                              Decorate 31(gl_FragColor) PrecisionMedium 
+                              Decorate 31(gl_FragColor) BuiltIn FragColor
+                              Decorate 37(d) PrecisionMedium 
+                              Decorate 58(bigColor) PrecisionMedium 
+                              Decorate 58(bigColor) NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               9:             TypeFloat 32
+              10:             TypeFunction 9(float) 
+              13:             TypeVector 9(float) 4
+              14:             TypePointer Function 13(fvec4)
+              15:             TypeFunction 9(float) 14(ptr)
+              20:             TypePointer Input 13(fvec4)
+   21(BaseColor):     20(ptr) Variable Input 
+              27:             TypePointer Function 9(float)
+              30:             TypePointer Output 13(fvec4)
+31(gl_FragColor):     30(ptr) Variable Output 
+              36:             TypePointer UniformConstant 9(float)
+           37(d):     36(ptr) Variable UniformConstant 
+              39:    9(float) Constant 1082549862
+              40:             TypeBool
+              44:    9(float) Constant 1067030938
+              47:    9(float) Constant 1083179008
+              57:             TypePointer UniformConstant 13(fvec4)
+    58(bigColor):     57(ptr) Variable UniformConstant 
+         4(main):           2 Function None 3
+               5:             Label
+       19(color):     14(ptr) Variable Function 
+       22(param):     14(ptr) Variable Function 
+           28(f):     27(ptr) Variable Function 
+              23:   13(fvec4) Load 21(BaseColor) 
+                              Store 22(param) 23 
+              24:    9(float) FunctionCall 17(foo(vf4;) 22(param)
+              25:   13(fvec4) CompositeConstruct 24 24 24 24
+                              Store 19(color) 25 
+              26:           2 FunctionCall 7(bar() 
+              29:    9(float) FunctionCall 11(unreachableReturn() 
+                              Store 28(f) 29 
+              32:   13(fvec4) Load 19(color) 
+              33:    9(float) Load 28(f) 
+              34:   13(fvec4) VectorTimesScalar 32 33
+                              Store 31(gl_FragColor) 34 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
+         7(bar():           2 Function None 3
+               8:             Label
+                              Return
+                              FunctionEnd
+11(unreachableReturn():    9(float) Function None 10
+              12:             Label
+ 49(dummyReturn):     27(ptr) Variable Function 
+              35:           2 FunctionCall 7(bar() 
+              38:    9(float) Load 37(d) 
+              41:    40(bool) FOrdLessThan 38 39
+                              SelectionMerge 43 None
+                              BranchConditional 41 42 46 
+              42:               Label
+                                ReturnValue 44
+              46:               Label
+                                ReturnValue 47
+              43:             Label
+              50:    9(float) Load 49(dummyReturn) 
+                              ReturnValue 50
+                              FunctionEnd
+    17(foo(vf4;):    9(float) Function None 15
+         16(bar):     14(ptr) FunctionParameter
+              18:             Label
+              51:   13(fvec4) Load 16(bar) 
+              52:    9(float) CompositeExtract 51 0
+              53:   13(fvec4) Load 16(bar) 
+              54:    9(float) CompositeExtract 53 1
+              55:    9(float) FAdd 52 54
+                              ReturnValue 55
+                              FunctionEnd
diff --git a/Test/baseResults/spv.functionCall.frag.out b/Test/baseResults/spv.functionCall.frag.out
new file mode 100644
index 000000000..a8bb6c2ef
--- /dev/null
+++ b/Test/baseResults/spv.functionCall.frag.out
@@ -0,0 +1,132 @@
+spv.functionCall.frag
+WARNING: 0:4: varying deprecated in version 130; may be removed in future release
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 76
+
+                              Source GLSL 130
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 12  "foo(vf4;"
+                              Name 11  "bar"
+                              Name 14  "bar("
+                              Name 17  "unreachableReturn("
+                              Name 19  "missingReturn("
+                              Name 22  "h"
+                              Name 31  "d"
+                              Name 44  "dummyReturn"
+                              Name 53  "dummyReturn"
+                              Name 55  "color"
+                              Name 57  "BaseColor"
+                              Name 58  "param"
+                              Name 63  "f"
+                              Name 65  "g"
+                              Name 68  "gl_FragColor"
+                              Name 75  "bigColor"
+                              Decorate 57(BaseColor) Smooth 
+                              Decorate 68(gl_FragColor) BuiltIn FragColor
+                              Decorate 75(bigColor) NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeVector 7(float) 4
+               9:             TypePointer Function 8(fvec4)
+              10:             TypeFunction 7(float) 9(ptr)
+              16:             TypeFunction 7(float) 
+              21:             TypePointer PrivateGlobal 7(float)
+           22(h):     21(ptr) Variable PrivateGlobal 
+              23:    7(float) Constant 0
+              30:             TypePointer UniformConstant 7(float)
+           31(d):     30(ptr) Variable UniformConstant 
+              33:    7(float) Constant 1082549862
+              34:             TypeBool
+              38:    7(float) Constant 1067030938
+              41:    7(float) Constant 1083179008
+              43:             TypePointer Function 7(float)
+              51:    7(float) Constant 1081711002
+              56:             TypePointer Input 8(fvec4)
+   57(BaseColor):     56(ptr) Variable Input 
+              67:             TypePointer Output 8(fvec4)
+68(gl_FragColor):     67(ptr) Variable Output 
+              74:             TypePointer UniformConstant 8(fvec4)
+    75(bigColor):     74(ptr) Variable UniformConstant 
+         4(main):           2 Function None 3
+               5:             Label
+       55(color):      9(ptr) Variable Function 
+       58(param):      9(ptr) Variable Function 
+           63(f):     43(ptr) Variable Function 
+           65(g):     43(ptr) Variable Function 
+                              Store 22(h) 23 
+              59:    8(fvec4) Load 57(BaseColor) 
+                              Store 58(param) 59 
+              60:    7(float) FunctionCall 12(foo(vf4;) 58(param)
+              61:    8(fvec4) CompositeConstruct 60 60 60 60
+                              Store 55(color) 61 
+              62:           2 FunctionCall 14(bar() 
+              64:    7(float) FunctionCall 17(unreachableReturn() 
+                              Store 63(f) 64 
+              66:    7(float) FunctionCall 19(missingReturn() 
+                              Store 65(g) 66 
+              69:    8(fvec4) Load 55(color) 
+              70:    7(float) Load 63(f) 
+              71:    8(fvec4) VectorTimesScalar 69 70
+              72:    7(float) Load 22(h) 
+              73:    8(fvec4) VectorTimesScalar 71 72
+                              Store 68(gl_FragColor) 73 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
+    12(foo(vf4;):    7(float) Function None 10
+         11(bar):      9(ptr) FunctionParameter
+              13:             Label
+              24:    8(fvec4) Load 11(bar) 
+              25:    7(float) CompositeExtract 24 0
+              26:    8(fvec4) Load 11(bar) 
+              27:    7(float) CompositeExtract 26 1
+              28:    7(float) FAdd 25 27
+                              ReturnValue 28
+                              FunctionEnd
+        14(bar():           2 Function None 3
+              15:             Label
+                              Return
+                              FunctionEnd
+17(unreachableReturn():    7(float) Function None 16
+              18:             Label
+ 44(dummyReturn):     43(ptr) Variable Function 
+              32:    7(float) Load 31(d) 
+              35:    34(bool) FOrdLessThan 32 33
+                              SelectionMerge 37 None
+                              BranchConditional 35 36 40 
+              36:               Label
+                                ReturnValue 38
+              40:               Label
+                                ReturnValue 41
+              37:             Label
+              45:    7(float) Load 44(dummyReturn) 
+                              ReturnValue 45
+                              FunctionEnd
+19(missingReturn():    7(float) Function None 16
+              20:             Label
+ 53(dummyReturn):     43(ptr) Variable Function 
+              46:    7(float) Load 31(d) 
+              47:    34(bool) FOrdLessThan 46 41
+                              SelectionMerge 49 None
+                              BranchConditional 47 48 49 
+              48:               Label
+              50:    7(float)   Load 31(d) 
+                                Store 22(h) 50 
+                                ReturnValue 51
+              49:             Label
+              54:    7(float) Load 53(dummyReturn) 
+                              ReturnValue 54
+                              FunctionEnd
diff --git a/Test/baseResults/spv.functionSemantics.frag.out b/Test/baseResults/spv.functionSemantics.frag.out
new file mode 100644
index 000000000..c86bb8e85
--- /dev/null
+++ b/Test/baseResults/spv.functionSemantics.frag.out
@@ -0,0 +1,240 @@
+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 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 159
+
+                              Source GLSL 400
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 16  "foo(i1;i1;i1;i1;i1;i1;"
+                              Name 10  "a"
+                              Name 11  "b"
+                              Name 12  "c"
+                              Name 13  "d"
+                              Name 14  "e"
+                              Name 15  "f"
+                              Name 26  "foo2(f1;vf3;i1;"
+                              Name 23  "a"
+                              Name 24  "b"
+                              Name 25  "r"
+                              Name 29  "foo3("
+                              Name 31  "sum"
+                              Name 73  "u"
+                              Name 85  "t"
+                              Name 88  "s"
+                              MemberName 88(s) 0  "t"
+                              Name 90  "f"
+                              Name 97  "color"
+                              Name 103  "e"
+                              Name 104  "param"
+                              Name 105  "param"
+                              Name 106  "param"
+                              Name 107  "param"
+                              Name 126  "ret"
+                              Name 128  "tempReturn"
+                              Name 133  "tempArg"
+                              Name 134  "param"
+                              Name 135  "param"
+                              Name 136  "param"
+                              Name 139  "arg"
+                              Name 155  "gl_FragColor"
+                              Decorate 155(gl_FragColor) BuiltIn FragColor
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeInt 32 1
+               8:             TypePointer Function 7(int)
+               9:             TypeFunction 7(int) 8(ptr) 7(int) 8(ptr) 7(int) 8(ptr) 8(ptr)
+              18:             TypeFloat 32
+              19:             TypePointer Function 18(float)
+              20:             TypeVector 18(float) 3
+              21:             TypePointer Function 20(fvec3)
+              22:             TypeFunction 7(int) 19(ptr) 21(ptr) 8(ptr)
+              28:             TypeFunction 7(int) 
+              39:      7(int) Constant 64
+              44:      7(int) Constant 1024
+              62:   18(float) Constant 1077936128
+              66:   18(float) Constant 1084227584
+              72:             TypePointer UniformConstant 18(float)
+           73(u):     72(ptr) Variable UniformConstant 
+              75:   18(float) Constant 1078774989
+              76:             TypeBool
+              81:      7(int) Constant 1000000
+              83:      7(int) Constant 2000000
+              86:      7(int) Constant 2
+              87:             TypeVector 7(int) 4
+           88(s):             TypeStruct 87(ivec4)
+              89:             TypePointer Function 88(s)
+              91:      7(int) Constant 0
+              92:      7(int) Constant 32
+              93:             TypePointer Function 87(ivec4)
+              98:      7(int) Constant 1
+             102:      7(int) Constant 8
+             117:      7(int) Constant 128
+             127:             TypePointer PrivateGlobal 7(int)
+ 128(tempReturn):    127(ptr) Variable PrivateGlobal 
+             129:   18(float) Constant 1082130432
+             130:   18(float) Constant 1065353216
+             131:   18(float) Constant 1073741824
+             132:   20(fvec3) ConstantComposite 130 131 62
+             153:             TypeVector 18(float) 4
+             154:             TypePointer Output 153(fvec4)
+155(gl_FragColor):    154(ptr) Variable Output 
+         4(main):           2 Function None 3
+               5:             Label
+           85(t):      8(ptr) Variable Function 
+           90(f):     89(ptr) Variable Function 
+       97(color):      8(ptr) Variable Function 
+          103(e):      8(ptr) Variable Function 
+      104(param):      8(ptr) Variable Function 
+      105(param):      8(ptr) Variable Function 
+      106(param):      8(ptr) Variable Function 
+      107(param):      8(ptr) Variable Function 
+        126(ret):     19(ptr) Variable Function 
+    133(tempArg):      8(ptr) Variable Function 
+      134(param):     19(ptr) Variable Function 
+      135(param):     21(ptr) Variable Function 
+      136(param):      8(ptr) Variable Function 
+        139(arg):     19(ptr) Variable Function 
+                              Store 85(t) 86 
+              94:     93(ptr) AccessChain 90(f) 91
+              95:   87(ivec4) Load 94 
+              96:   87(ivec4) CompositeInsert 92 95 1
+                              Store 94 96 
+              99:      7(int) Load 85(t) 
+             100:      7(int) Load 85(t) 
+             101:      7(int) IAdd 99 100
+                              Store 104(param) 98 
+                              Store 105(param) 101 
+             108:     93(ptr) AccessChain 90(f) 91
+             109:   87(ivec4) Load 108 
+             110:      7(int) CompositeExtract 109 1
+                              Store 107(param) 110 
+             111:      7(int) FunctionCall 16(foo(i1;i1;i1;i1;i1;i1;) 104(param) 86 105(param) 102 106(param) 107(param)
+             112:      7(int) Load 106(param) 
+                              Store 103(e) 112 
+             113:      7(int) Load 107(param) 
+             114:     93(ptr) AccessChain 90(f) 91
+             115:   87(ivec4) Load 114 
+             116:   87(ivec4) CompositeInsert 113 115 1
+                              Store 114 116 
+                              Store 97(color) 111 
+             118:      7(int) Load 103(e) 
+             119:     93(ptr) AccessChain 90(f) 91
+             120:   87(ivec4) Load 119 
+             121:      7(int) CompositeExtract 120 1
+             122:      7(int) IAdd 118 121
+             123:      7(int) IMul 117 122
+             124:      7(int) Load 97(color) 
+             125:      7(int) IAdd 124 123
+                              Store 97(color) 125 
+                              Store 134(param) 129 
+                              Store 135(param) 132 
+             137:      7(int) FunctionCall 26(foo2(f1;vf3;i1;) 134(param) 135(param) 136(param)
+             138:      7(int) Load 136(param) 
+                              Store 133(tempArg) 138 
+                              Store 128(tempReturn) 137 
+             140:      7(int) Load 133(tempArg) 
+             141:   18(float) ConvertSToF 140
+                              Store 139(arg) 141 
+             142:      7(int) Load 128(tempReturn) 
+             143:   18(float) ConvertSToF 142
+                              Store 126(ret) 143 
+             144:   18(float) Load 126(ret) 
+             145:   18(float) Load 139(arg) 
+             146:   18(float) FAdd 144 145
+             147:      7(int) ConvertFToS 146
+             148:      7(int) Load 97(color) 
+             149:      7(int) IAdd 148 147
+                              Store 97(color) 149 
+             150:      7(int) FunctionCall 29(foo3() 
+             151:      7(int) Load 97(color) 
+             152:      7(int) IAdd 151 150
+                              Store 97(color) 152 
+             156:      7(int) Load 97(color) 
+             157:   18(float) ConvertSToF 156
+             158:  153(fvec4) CompositeConstruct 157 157 157 157
+                              Store 155(gl_FragColor) 158 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
+16(foo(i1;i1;i1;i1;i1;i1;):      7(int) Function None 9
+           10(a):      8(ptr) FunctionParameter
+           11(b):      7(int) FunctionParameter
+           12(c):      8(ptr) FunctionParameter
+           13(d):      7(int) FunctionParameter
+           14(e):      8(ptr) FunctionParameter
+           15(f):      8(ptr) FunctionParameter
+              17:             Label
+         31(sum):      8(ptr) Variable Function 
+              32:      7(int) Load 10(a) 
+              33:      7(int) IAdd 32 11(b)
+              34:      7(int) Load 12(c) 
+              35:      7(int) IAdd 33 34
+              36:      7(int) IAdd 35 13(d)
+              37:      7(int) Load 15(f) 
+              38:      7(int) IAdd 36 37
+                              Store 31(sum) 38 
+              40:      7(int) Load 10(a) 
+              41:      7(int) IMul 40 39
+                              Store 10(a) 41 
+              42:      7(int) Load 12(c) 
+              43:      7(int) IMul 42 39
+                              Store 12(c) 43 
+                              Store 14(e) 44 
+              45:      7(int) Load 15(f) 
+              46:      7(int) IMul 45 39
+                              Store 15(f) 46 
+              47:      7(int) Load 10(a) 
+              48:      7(int) IMul 39 11(b)
+              49:      7(int) IAdd 47 48
+              50:      7(int) Load 12(c) 
+              51:      7(int) IAdd 49 50
+              52:      7(int) IMul 39 13(d)
+              53:      7(int) IAdd 51 52
+              54:      7(int) Load 14(e) 
+              55:      7(int) IAdd 53 54
+              56:      7(int) Load 15(f) 
+              57:      7(int) IAdd 55 56
+              58:      7(int) Load 31(sum) 
+              59:      7(int) IAdd 58 57
+                              Store 31(sum) 59 
+              60:      7(int) Load 31(sum) 
+                              ReturnValue 60
+                              FunctionEnd
+26(foo2(f1;vf3;i1;):      7(int) Function None 22
+           23(a):     19(ptr) FunctionParameter
+           24(b):     21(ptr) FunctionParameter
+           25(r):      8(ptr) FunctionParameter
+              27:             Label
+              63:   18(float) Load 23(a) 
+              64:   18(float) FMul 62 63
+              65:      7(int) ConvertFToS 64
+                              Store 25(r) 65 
+              67:   20(fvec3) Load 24(b) 
+              68:   18(float) CompositeExtract 67 1
+              69:   18(float) FMul 66 68
+              70:      7(int) ConvertFToS 69
+                              ReturnValue 70
+                              FunctionEnd
+       29(foo3():      7(int) Function None 28
+              30:             Label
+              74:   18(float) Load 73(u) 
+              77:    76(bool) FOrdGreaterThan 74 75
+                              SelectionMerge 79 None
+                              BranchConditional 77 78 79 
+              78:               Label
+                                Kill
+              79:             Label
+                              ReturnValue 83
+                              FunctionEnd
diff --git a/Test/baseResults/spv.length.frag.out b/Test/baseResults/spv.length.frag.out
new file mode 100644
index 000000000..2f4db5567
--- /dev/null
+++ b/Test/baseResults/spv.length.frag.out
@@ -0,0 +1,61 @@
+spv.length.frag
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 34
+
+                              Source GLSL 120
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 10  "t"
+                              Name 15  "v"
+                              Name 27  "gl_FragColor"
+                              Name 33  "u"
+                              Decorate 15(v) Smooth 
+                              Decorate 27(gl_FragColor) BuiltIn FragColor
+                              Decorate 33(u) NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeVector 7(float) 2
+               9:             TypePointer Function 8(fvec2)
+              11:             TypeInt 32 0
+              12:     11(int) Constant 2
+              13:             TypeArray 8(fvec2) 12
+              14:             TypePointer Input 13
+           15(v):     14(ptr) Variable Input 
+              16:             TypeInt 32 1
+              17:     16(int) Constant 0
+              18:             TypePointer Input 8(fvec2)
+              21:     16(int) Constant 1
+              25:             TypeVector 7(float) 4
+              26:             TypePointer Output 25(fvec4)
+27(gl_FragColor):     26(ptr) Variable Output 
+              28:    7(float) Constant 1106247680
+              29:   25(fvec4) ConstantComposite 28 28 28 28
+              30:     11(int) Constant 3
+              31:             TypeArray 25(fvec4) 30
+              32:             TypePointer UniformConstant 31
+           33(u):     32(ptr) Variable UniformConstant 
+         4(main):           2 Function None 3
+               5:             Label
+           10(t):      9(ptr) Variable Function 
+              19:     18(ptr) AccessChain 15(v) 17
+              20:    8(fvec2) Load 19 
+              22:     18(ptr) AccessChain 15(v) 21
+              23:    8(fvec2) Load 22 
+              24:    8(fvec2) FAdd 20 23
+                              Store 10(t) 24 
+                              Store 27(gl_FragColor) 29 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.localAggregates.frag.out b/Test/baseResults/spv.localAggregates.frag.out
new file mode 100644
index 000000000..184b24ce4
--- /dev/null
+++ b/Test/baseResults/spv.localAggregates.frag.out
@@ -0,0 +1,220 @@
+spv.localAggregates.frag
+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 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 134
+
+                              Source GLSL 130
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 9  "s1"
+                              MemberName 9(s1) 0  "i"
+                              MemberName 9(s1) 1  "f"
+                              Name 11  "s2"
+                              MemberName 11(s2) 0  "i"
+                              MemberName 11(s2) 1  "f"
+                              MemberName 11(s2) 2  "s1_1"
+                              MemberName 11(s2) 3  "bleh"
+                              Name 13  "locals2"
+                              Name 14  "s3"
+                              MemberName 14(s3) 0  "s2_1"
+                              MemberName 14(s3) 1  "i"
+                              MemberName 14(s3) 2  "f"
+                              MemberName 14(s3) 3  "s1_1"
+                              Name 16  "foo3"
+                              Name 37  "localFArray"
+                              Name 41  "coord"
+                              Name 48  "localIArray"
+                              Name 67  "x"
+                              Name 69  "localArray"
+                              Name 74  "i"
+                              Name 81  "a"
+                              Name 87  "condition"
+                              Name 95  "color"
+                              Name 105  "gl_FragColor"
+                              Name 124  "sampler"
+                              Name 130  "foo"
+                              Name 131  "foo2"
+                              Name 133  "uFloatArray"
+                              Decorate 41(coord) Smooth 
+                              Decorate 95(color) Smooth 
+                              Decorate 105(gl_FragColor) BuiltIn FragColor
+                              Decorate 130(foo) NoStaticUse 
+                              Decorate 131(foo2) NoStaticUse 
+                              Decorate 133(uFloatArray) NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeInt 32 1
+               8:             TypeFloat 32
+           9(s1):             TypeStruct 7(int) 8(float)
+              10:             TypeVector 8(float) 4
+          11(s2):             TypeStruct 7(int) 8(float) 9(s1) 10(fvec4)
+              12:             TypePointer Function 11(s2)
+          14(s3):             TypeStruct 11(s2) 7(int) 8(float) 9(s1)
+              15:             TypePointer UniformConstant 14(s3)
+        16(foo3):     15(ptr) Variable UniformConstant 
+              17:      7(int) Constant 0
+              18:             TypePointer UniformConstant 11(s2)
+              21:             TypePointer UniformConstant 7(int)
+              24:             TypeBool
+              28:      7(int) Constant 2
+              29:      7(int) Constant 1
+              30:    8(float) Constant 1065353216
+              31:             TypePointer Function 8(float)
+              33:             TypeInt 32 0
+              34:     33(int) Constant 16
+              35:             TypeArray 8(float) 34
+              36:             TypePointer Function 35
+              38:      7(int) Constant 4
+              39:             TypeVector 8(float) 2
+              40:             TypePointer Input 39(fvec2)
+       41(coord):     40(ptr) Variable Input 
+              45:     33(int) Constant 8
+              46:             TypeArray 7(int) 45
+              47:             TypePointer Function 46
+              51:             TypePointer Function 7(int)
+              68:      7(int) Constant 5
+              78:      7(int) Constant 16
+              83:    8(float) Constant 0
+   87(condition):     21(ptr) Variable UniformConstant 
+              93:      7(int) Constant 3
+              94:             TypePointer Input 10(fvec4)
+       95(color):     94(ptr) Variable Input 
+              97:             TypePointer Function 10(fvec4)
+             104:             TypePointer Output 10(fvec4)
+105(gl_FragColor):    104(ptr) Variable Output 
+             122:             TypeSampler8(float) 2D filter+texture
+             123:             TypePointer UniformConstant 122
+    124(sampler):    123(ptr) Variable UniformConstant 
+             129:             TypePointer UniformConstant 9(s1)
+        130(foo):    129(ptr) Variable UniformConstant 
+       131(foo2):     18(ptr) Variable UniformConstant 
+             132:             TypePointer UniformConstant 35
+133(uFloatArray):    132(ptr) Variable UniformConstant 
+         4(main):           2 Function None 3
+               5:             Label
+     13(locals2):     12(ptr) Variable Function 
+ 37(localFArray):     36(ptr) Variable Function 
+ 48(localIArray):     47(ptr) Variable Function 
+           67(x):     51(ptr) Variable Function 
+  69(localArray):     36(ptr) Variable Function 
+           74(i):     51(ptr) Variable Function 
+           81(a):     36(ptr) Variable Function 
+              19:     18(ptr) AccessChain 16(foo3) 17
+              20:      11(s2) Load 19 
+                              Store 13(locals2) 20 
+              22:     21(ptr) AccessChain 16(foo3) 17 17
+              23:      7(int) Load 22 
+              25:    24(bool) SGreaterThan 23 17
+                              SelectionMerge 27 None
+                              BranchConditional 25 26 53 
+              26:               Label
+              32:     31(ptr)   AccessChain 13(locals2) 28 29
+                                Store 32 30 
+              42:   39(fvec2)   Load 41(coord) 
+              43:    8(float)   CompositeExtract 42 0
+              44:     31(ptr)   AccessChain 37(localFArray) 38
+                                Store 44 43 
+              49:     21(ptr)   AccessChain 16(foo3) 17 17
+              50:      7(int)   Load 49 
+              52:     51(ptr)   AccessChain 48(localIArray) 28
+                                Store 52 50 
+                                Branch 27
+              53:               Label
+              54:   39(fvec2)   Load 41(coord) 
+              55:    8(float)   CompositeExtract 54 0
+              56:     31(ptr)   AccessChain 13(locals2) 28 29
+                                Store 56 55 
+              57:     31(ptr)   AccessChain 37(localFArray) 38
+                                Store 57 30 
+              58:     51(ptr)   AccessChain 48(localIArray) 28
+                                Store 58 17 
+                                Branch 27
+              27:             Label
+              59:     51(ptr) AccessChain 48(localIArray) 28
+              60:      7(int) Load 59 
+              61:    24(bool) IEqual 60 17
+                              SelectionMerge 63 None
+                              BranchConditional 61 62 63 
+              62:               Label
+              64:     31(ptr)   AccessChain 37(localFArray) 38
+              65:    8(float)   Load 64 
+              66:    8(float)   FAdd 65 30
+                                Store 64 66 
+                                Branch 63
+              63:             Label
+                              Store 67(x) 68 
+              70:      7(int) Load 67(x) 
+              71:   39(fvec2) Load 41(coord) 
+              72:    8(float) CompositeExtract 71 0
+              73:     31(ptr) AccessChain 69(localArray) 70
+                              Store 73 72 
+                              Store 74(i) 17 
+                              Branch 75
+              75:             Label
+              77:      7(int) Load 74(i) 
+              79:    24(bool) SLessThan 77 78
+                              LoopMerge 76 None
+                              BranchConditional 79 80 76 
+              80:               Label
+              82:      7(int)   Load 74(i) 
+              84:     31(ptr)   AccessChain 81(a) 82
+                                Store 84 83 
+              85:      7(int)   Load 74(i) 
+              86:      7(int)   IAdd 85 29
+                                Store 74(i) 86 
+                                Branch 75
+              76:             Label
+              88:      7(int) Load 87(condition) 
+              89:    24(bool) IEqual 88 29
+                              SelectionMerge 91 None
+                              BranchConditional 89 90 91 
+              90:               Label
+              92:          35   Load 69(localArray) 
+                                Store 81(a) 92 
+                                Branch 91
+              91:             Label
+              96:   10(fvec4) Load 95(color) 
+              98:     97(ptr) AccessChain 13(locals2) 93
+                              Store 98 96 
+              99:   39(fvec2) Load 41(coord) 
+             100:    8(float) CompositeExtract 99 1
+             101:     97(ptr) AccessChain 13(locals2) 93
+             102:   10(fvec4) Load 101 
+             103:   10(fvec4) CompositeInsert 100 102 2
+                              Store 101 103 
+             106:     97(ptr) AccessChain 13(locals2) 93
+             107:   10(fvec4) Load 106 
+             108:     31(ptr) AccessChain 37(localFArray) 38
+             109:    8(float) Load 108 
+             110:     31(ptr) AccessChain 13(locals2) 28 29
+             111:    8(float) Load 110 
+             112:    8(float) FAdd 109 111
+             113:      7(int) Load 67(x) 
+             114:     31(ptr) AccessChain 69(localArray) 113
+             115:    8(float) Load 114 
+             116:    8(float) FAdd 112 115
+             117:      7(int) Load 67(x) 
+             118:     31(ptr) AccessChain 81(a) 117
+             119:    8(float) Load 118 
+             120:    8(float) FAdd 116 119
+             121:   10(fvec4) VectorTimesScalar 107 120
+             125:         122 Load 124(sampler) 
+             126:   39(fvec2) Load 41(coord) 
+             127:   10(fvec4) TextureSample 125 126 
+             128:   10(fvec4) FMul 121 127
+                              Store 105(gl_FragColor) 128 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.loops.frag.out b/Test/baseResults/spv.loops.frag.out
new file mode 100644
index 000000000..a0cfef783
--- /dev/null
+++ b/Test/baseResults/spv.loops.frag.out
@@ -0,0 +1,1113 @@
+spv.loops.frag
+WARNING: 0:14: varying deprecated in version 130; may be removed in future release
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 737
+
+                              Source GLSL 130
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 10  "color"
+                              Name 12  "BaseColor"
+                              Name 47  "d"
+                              Name 52  "bigColor"
+                              Name 63  "bigColor1_1"
+                              Name 92  "d2"
+                              Name 97  "d3"
+                              Name 102  "bigColor1_2"
+                              Name 113  "bigColor1_3"
+                              Name 119  "d4"
+                              Name 130  "i"
+                              Name 136  "Count"
+                              Name 140  "bigColor2"
+                              Name 151  "bigColor3"
+                              Name 160  "i"
+                              Name 175  "i"
+                              Name 213  "i"
+                              Name 238  "i"
+                              Name 266  "i"
+                              Name 296  "bigColor4"
+                              Name 335  "bigColor5"
+                              Name 341  "d5"
+                              Name 359  "d6"
+                              Name 371  "bigColor6"
+                              Name 406  "d7"
+                              Name 437  "bigColor7"
+                              Name 459  "d8"
+                              Name 506  "d9"
+                              Name 538  "d10"
+                              Name 549  "d11"
+                              Name 561  "d12"
+                              Name 589  "bigColor8"
+                              Name 617  "gl_FragColor"
+                              Name 623  "d14"
+                              Name 629  "d15"
+                              Name 646  "d16"
+                              Name 683  "d18"
+                              Name 694  "d17"
+                              Name 720  "d13"
+                              Name 721  "d19"
+                              Name 722  "d20"
+                              Name 723  "d21"
+                              Name 724  "d22"
+                              Name 725  "d23"
+                              Name 726  "d24"
+                              Name 727  "d25"
+                              Name 728  "d26"
+                              Name 729  "d27"
+                              Name 730  "d28"
+                              Name 731  "d29"
+                              Name 732  "d30"
+                              Name 733  "d31"
+                              Name 734  "d32"
+                              Name 735  "d33"
+                              Name 736  "d34"
+                              Decorate 12(BaseColor) Smooth 
+                              Decorate 617(gl_FragColor) BuiltIn FragColor
+                              Decorate 720(d13) NoStaticUse 
+                              Decorate 721(d19) NoStaticUse 
+                              Decorate 722(d20) NoStaticUse 
+                              Decorate 723(d21) NoStaticUse 
+                              Decorate 724(d22) NoStaticUse 
+                              Decorate 725(d23) NoStaticUse 
+                              Decorate 726(d24) NoStaticUse 
+                              Decorate 727(d25) NoStaticUse 
+                              Decorate 728(d26) NoStaticUse 
+                              Decorate 729(d27) NoStaticUse 
+                              Decorate 730(d28) NoStaticUse 
+                              Decorate 731(d29) NoStaticUse 
+                              Decorate 732(d30) NoStaticUse 
+                              Decorate 733(d31) NoStaticUse 
+                              Decorate 734(d32) NoStaticUse 
+                              Decorate 735(d33) NoStaticUse 
+                              Decorate 736(d34) NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeVector 7(float) 4
+               9:             TypePointer Function 8(fvec4)
+              11:             TypePointer Input 8(fvec4)
+   12(BaseColor):     11(ptr) Variable Input 
+              16:             TypeBool
+              17:    16(bool) ConstantTrue
+              21:    7(float) Constant 1051260355
+              25:    8(fvec4) ConstantComposite 21 21 21 21
+              31:    7(float) Constant 1059648963
+              35:    8(fvec4) ConstantComposite 31 31 31 31
+              46:             TypePointer UniformConstant 7(float)
+           47(d):     46(ptr) Variable UniformConstant 
+              51:             TypePointer UniformConstant 8(fvec4)
+    52(bigColor):     51(ptr) Variable UniformConstant 
+ 63(bigColor1_1):     51(ptr) Variable UniformConstant 
+              81:    7(float) Constant 1109917696
+              85:    7(float) Constant 1065353216
+          92(d2):     46(ptr) Variable UniformConstant 
+          97(d3):     46(ptr) Variable UniformConstant 
+102(bigColor1_2):     51(ptr) Variable UniformConstant 
+113(bigColor1_3):     51(ptr) Variable UniformConstant 
+         119(d4):     46(ptr) Variable UniformConstant 
+             128:             TypeInt 32 1
+             129:             TypePointer Function 128(int)
+             131:    128(int) Constant 0
+             135:             TypePointer UniformConstant 128(int)
+      136(Count):    135(ptr) Variable UniformConstant 
+  140(bigColor2):     51(ptr) Variable UniformConstant 
+             145:    128(int) Constant 1
+  151(bigColor3):     51(ptr) Variable UniformConstant 
+             164:    128(int) Constant 42
+             179:    128(int) Constant 100
+             184:    7(float) Constant 1101004800
+             217:    128(int) Constant 120
+  296(bigColor4):     51(ptr) Variable UniformConstant 
+  335(bigColor5):     51(ptr) Variable UniformConstant 
+         341(d5):     46(ptr) Variable UniformConstant 
+         359(d6):     46(ptr) Variable UniformConstant 
+  371(bigColor6):     51(ptr) Variable UniformConstant 
+         406(d7):     46(ptr) Variable UniformConstant 
+             432:    7(float) Constant 0
+  437(bigColor7):     51(ptr) Variable UniformConstant 
+         459(d8):     46(ptr) Variable UniformConstant 
+             478:    7(float) Constant 1073741824
+         506(d9):     46(ptr) Variable UniformConstant 
+             523:    7(float) Constant 1084227584
+        538(d10):     46(ptr) Variable UniformConstant 
+        549(d11):     46(ptr) Variable UniformConstant 
+        561(d12):     46(ptr) Variable UniformConstant 
+             586:    7(float) Constant 1092616192
+  589(bigColor8):     51(ptr) Variable UniformConstant 
+             616:             TypePointer Output 8(fvec4)
+617(gl_FragColor):    616(ptr) Variable Output 
+        623(d14):     46(ptr) Variable UniformConstant 
+        629(d15):     46(ptr) Variable UniformConstant 
+        646(d16):     46(ptr) Variable UniformConstant 
+        683(d18):     46(ptr) Variable UniformConstant 
+        694(d17):     46(ptr) Variable UniformConstant 
+        720(d13):     46(ptr) Variable UniformConstant 
+        721(d19):     46(ptr) Variable UniformConstant 
+        722(d20):     46(ptr) Variable UniformConstant 
+        723(d21):     46(ptr) Variable UniformConstant 
+        724(d22):     46(ptr) Variable UniformConstant 
+        725(d23):     46(ptr) Variable UniformConstant 
+        726(d24):     46(ptr) Variable UniformConstant 
+        727(d25):     46(ptr) Variable UniformConstant 
+        728(d26):     46(ptr) Variable UniformConstant 
+        729(d27):     46(ptr) Variable UniformConstant 
+        730(d28):     46(ptr) Variable UniformConstant 
+        731(d29):     46(ptr) Variable UniformConstant 
+        732(d30):     46(ptr) Variable UniformConstant 
+        733(d31):     46(ptr) Variable UniformConstant 
+        734(d32):     46(ptr) Variable UniformConstant 
+        735(d33):     46(ptr) Variable UniformConstant 
+        736(d34):     46(ptr) Variable UniformConstant 
+         4(main):           2 Function None 3
+               5:             Label
+       10(color):      9(ptr) Variable Function 
+          130(i):    129(ptr) Variable Function 
+          160(i):    129(ptr) Variable Function 
+          175(i):    129(ptr) Variable Function 
+          213(i):    129(ptr) Variable Function 
+          238(i):    129(ptr) Variable Function 
+          266(i):    129(ptr) Variable Function 
+              13:    8(fvec4) Load 12(BaseColor) 
+                              Store 10(color) 13 
+                              Branch 14
+              14:             Label
+                              LoopMerge 15 None
+                              BranchConditional 17 18 15 
+              18:               Label
+              19:    8(fvec4)   Load 10(color) 
+              20:    7(float)   CompositeExtract 19 0
+              22:    16(bool)   FOrdLessThan 20 21
+                                SelectionMerge 24 None
+                                BranchConditional 22 23 24 
+              23:                 Label
+              26:    8(fvec4)     Load 10(color) 
+              27:    8(fvec4)     FAdd 26 25
+                                  Store 10(color) 27 
+                                  Branch 15
+              24:               Label
+              29:    8(fvec4)   Load 10(color) 
+              30:    7(float)   CompositeExtract 29 0
+              32:    16(bool)   FOrdLessThan 30 31
+                                SelectionMerge 34 None
+                                BranchConditional 32 33 34 
+              33:                 Label
+              36:    8(fvec4)     Load 10(color) 
+              37:    8(fvec4)     FAdd 36 35
+                                  Store 10(color) 37 
+                                  Branch 15
+              34:               Label
+              39:    8(fvec4)   Load 10(color) 
+              40:    8(fvec4)   FAdd 39 25
+                                Store 10(color) 40 
+                                Branch 15
+              15:             Label
+                              Branch 42
+              42:             Label
+              44:    8(fvec4) Load 10(color) 
+              45:    7(float) CompositeExtract 44 0
+              48:    7(float) Load 47(d) 
+              49:    16(bool) FOrdLessThan 45 48
+                              LoopMerge 43 None
+                              BranchConditional 49 50 43 
+              50:               Label
+              53:    8(fvec4)   Load 52(bigColor) 
+              54:    8(fvec4)   Load 10(color) 
+              55:    8(fvec4)   FAdd 54 53
+                                Store 10(color) 55 
+                                Branch 42
+              43:             Label
+                              Branch 56
+              56:             Label
+              58:    8(fvec4) Load 10(color) 
+              59:    7(float) CompositeExtract 58 2
+              60:    7(float) Load 47(d) 
+              61:    16(bool) FOrdLessThan 59 60
+                              LoopMerge 57 None
+                              BranchConditional 61 62 57 
+              62:               Label
+              64:    8(fvec4)   Load 63(bigColor1_1) 
+              65:    8(fvec4)   Load 10(color) 
+              66:    8(fvec4)   FAdd 65 64
+                                Store 10(color) 66 
+              67:    8(fvec4)   Load 10(color) 
+              68:    7(float)   CompositeExtract 67 3
+              69:    7(float)   Load 47(d) 
+              70:    16(bool)   FOrdLessThan 68 69
+                                SelectionMerge 72 None
+                                BranchConditional 70 71 72 
+              71:                 Label
+                                  Branch 56
+              72:               Label
+              74:    8(fvec4)   Load 63(bigColor1_1) 
+              75:    8(fvec4)   Load 10(color) 
+              76:    8(fvec4)   FAdd 75 74
+                                Store 10(color) 76 
+                                Branch 56
+              57:             Label
+                              Branch 77
+              77:             Label
+              79:    8(fvec4) Load 10(color) 
+              80:    7(float) CompositeExtract 79 0
+              82:    16(bool) FOrdLessThan 80 81
+                              LoopMerge 78 None
+                              BranchConditional 82 83 78 
+              83:               Label
+              84:    8(fvec4)   Load 10(color) 
+              86:    8(fvec4)   CompositeConstruct 85 85 85 85
+              87:    8(fvec4)   FAdd 84 86
+                                Store 10(color) 87 
+                                Branch 77
+              78:             Label
+                              Branch 88
+              88:             Label
+              90:    8(fvec4) Load 10(color) 
+              91:    7(float) CompositeExtract 90 3
+              93:    7(float) Load 92(d2) 
+              94:    16(bool) FOrdLessThan 91 93
+              95:    8(fvec4) Load 10(color) 
+              96:    7(float) CompositeExtract 95 1
+              98:    7(float) Load 97(d3) 
+              99:    16(bool) FOrdLessThan 96 98
+             100:    16(bool) LogicalAnd 94 99
+                              LoopMerge 89 None
+                              BranchConditional 100 101 89 
+             101:               Label
+             103:    8(fvec4)   Load 102(bigColor1_2) 
+             104:    8(fvec4)   Load 10(color) 
+             105:    8(fvec4)   FAdd 104 103
+                                Store 10(color) 105 
+                                Branch 88
+              89:             Label
+                              Branch 106
+             106:             Label
+             108:    8(fvec4) Load 10(color) 
+             109:    7(float) CompositeExtract 108 2
+             110:    7(float) Load 97(d3) 
+             111:    16(bool) FOrdLessThan 109 110
+                              LoopMerge 107 None
+                              BranchConditional 111 112 107 
+             112:               Label
+             114:    8(fvec4)   Load 113(bigColor1_3) 
+             115:    8(fvec4)   Load 10(color) 
+             116:    8(fvec4)   FAdd 115 114
+                                Store 10(color) 116 
+             117:    8(fvec4)   Load 10(color) 
+             118:    7(float)   CompositeExtract 117 1
+             120:    7(float)   Load 119(d4) 
+             121:    16(bool)   FOrdLessThan 118 120
+                                SelectionMerge 123 None
+                                BranchConditional 121 122 123 
+             122:                 Label
+                                  Branch 107
+             123:               Label
+             125:    8(fvec4)   Load 113(bigColor1_3) 
+             126:    8(fvec4)   Load 10(color) 
+             127:    8(fvec4)   FAdd 126 125
+                                Store 10(color) 127 
+                                Branch 106
+             107:             Label
+                              Store 130(i) 131 
+                              Branch 132
+             132:             Label
+             134:    128(int) Load 130(i) 
+             137:    128(int) Load 136(Count) 
+             138:    16(bool) SLessThan 134 137
+                              LoopMerge 133 None
+                              BranchConditional 138 139 133 
+             139:               Label
+             141:    8(fvec4)   Load 140(bigColor2) 
+             142:    8(fvec4)   Load 10(color) 
+             143:    8(fvec4)   FAdd 142 141
+                                Store 10(color) 143 
+             144:    128(int)   Load 130(i) 
+             146:    128(int)   IAdd 144 145
+                                Store 130(i) 146 
+                                Branch 132
+             133:             Label
+                              Branch 147
+             147:             Label
+                              LoopMerge 148 None
+                              Branch 149
+             149:             Label
+             152:    8(fvec4) Load 151(bigColor3) 
+             153:    8(fvec4) Load 10(color) 
+             154:    8(fvec4) FAdd 153 152
+                              Store 10(color) 154 
+                              Branch 150
+             150:             Label
+             155:    8(fvec4) Load 10(color) 
+             156:    7(float) CompositeExtract 155 0
+             157:    7(float) Load 92(d2) 
+             158:    16(bool) FOrdLessThan 156 157
+                              BranchConditional 158 159 148 
+             159:               Label
+                                Branch 147
+             148:             Label
+                              Store 160(i) 131 
+                              Branch 161
+             161:             Label
+             163:    128(int) Load 160(i) 
+             165:    16(bool) SLessThan 163 164
+                              LoopMerge 162 None
+                              BranchConditional 165 166 162 
+             166:               Label
+             167:    7(float)   Load 97(d3) 
+             168:    8(fvec4)   Load 10(color) 
+             169:    7(float)   CompositeExtract 168 2
+             170:    7(float)   FAdd 169 167
+             171:    8(fvec4)   Load 10(color) 
+             172:    8(fvec4)   CompositeInsert 170 171 2
+                                Store 10(color) 172 
+             173:    128(int)   Load 160(i) 
+             174:    128(int)   IAdd 173 145
+                                Store 160(i) 174 
+                                Branch 161
+             162:             Label
+                              Store 175(i) 131 
+                              Branch 176
+             176:             Label
+             178:    128(int) Load 175(i) 
+             180:    16(bool) SLessThan 178 179
+                              LoopMerge 177 None
+                              BranchConditional 180 181 177 
+             181:               Label
+             182:    8(fvec4)   Load 10(color) 
+             183:    7(float)   CompositeExtract 182 2
+             185:    16(bool)   FOrdLessThan 183 184
+                                SelectionMerge 187 None
+                                BranchConditional 185 186 193 
+             186:                 Label
+             188:    8(fvec4)     Load 10(color) 
+             189:    7(float)     CompositeExtract 188 0
+             190:    7(float)     FAdd 189 85
+             191:    8(fvec4)     Load 10(color) 
+             192:    8(fvec4)     CompositeInsert 190 191 0
+                                  Store 10(color) 192 
+                                  Branch 187
+             193:                 Label
+             194:    8(fvec4)     Load 10(color) 
+             195:    7(float)     CompositeExtract 194 1
+             196:    7(float)     FAdd 195 85
+             197:    8(fvec4)     Load 10(color) 
+             198:    8(fvec4)     CompositeInsert 196 197 1
+                                  Store 10(color) 198 
+                                  Branch 187
+             187:               Label
+             199:    8(fvec4)   Load 10(color) 
+             200:    7(float)   CompositeExtract 199 3
+             201:    16(bool)   FOrdLessThan 200 184
+                                SelectionMerge 203 None
+                                BranchConditional 201 202 203 
+             202:                 Label
+             204:    8(fvec4)     Load 10(color) 
+             205:    7(float)     CompositeExtract 204 2
+             206:    8(fvec4)     Load 10(color) 
+             207:    7(float)     CompositeExtract 206 1
+             208:    16(bool)     FOrdGreaterThan 205 207
+                                  SelectionMerge 210 None
+                                  BranchConditional 208 209 210 
+             209:                   Label
+                                    Branch 210
+             210:                 Label
+                                  Branch 203
+             203:               Label
+             211:    128(int)   Load 175(i) 
+             212:    128(int)   IAdd 211 145
+                                Store 175(i) 212 
+                                Branch 176
+             177:             Label
+                              Store 213(i) 131 
+                              Branch 214
+             214:             Label
+             216:    128(int) Load 213(i) 
+             218:    16(bool) SLessThan 216 217
+                              LoopMerge 215 None
+                              BranchConditional 218 219 215 
+             219:               Label
+             220:    8(fvec4)   Load 10(color) 
+             221:    7(float)   CompositeExtract 220 2
+             222:    16(bool)   FOrdLessThan 221 184
+                                SelectionMerge 224 None
+                                BranchConditional 222 223 230 
+             223:                 Label
+             225:    8(fvec4)     Load 10(color) 
+             226:    7(float)     CompositeExtract 225 0
+             227:    7(float)     FAdd 226 85
+             228:    8(fvec4)     Load 10(color) 
+             229:    8(fvec4)     CompositeInsert 227 228 0
+                                  Store 10(color) 229 
+                                  Branch 224
+             230:                 Label
+             231:    8(fvec4)     Load 10(color) 
+             232:    7(float)     CompositeExtract 231 1
+             233:    7(float)     FAdd 232 85
+             234:    8(fvec4)     Load 10(color) 
+             235:    8(fvec4)     CompositeInsert 233 234 1
+                                  Store 10(color) 235 
+                                  Branch 224
+             224:               Label
+             236:    128(int)   Load 213(i) 
+             237:    128(int)   IAdd 236 145
+                                Store 213(i) 237 
+                                Branch 214
+             215:             Label
+                              Store 238(i) 131 
+                              Branch 239
+             239:             Label
+             241:    128(int) Load 238(i) 
+             242:    16(bool) SLessThan 241 164
+                              LoopMerge 240 None
+                              BranchConditional 242 243 240 
+             243:               Label
+             244:    7(float)   Load 97(d3) 
+             245:    8(fvec4)   Load 10(color) 
+             246:    7(float)   CompositeExtract 245 2
+             247:    7(float)   FAdd 246 244
+             248:    8(fvec4)   Load 10(color) 
+             249:    8(fvec4)   CompositeInsert 247 248 2
+                                Store 10(color) 249 
+             250:    8(fvec4)   Load 10(color) 
+             251:    7(float)   CompositeExtract 250 0
+             252:    7(float)   Load 119(d4) 
+             253:    16(bool)   FOrdLessThan 251 252
+                                SelectionMerge 255 None
+                                BranchConditional 253 254 255 
+             254:                 Label
+             256:    128(int)     Load 238(i) 
+             257:    128(int)     IAdd 256 145
+                                  Store 238(i) 257 
+                                  Branch 239
+             255:               Label
+             259:    8(fvec4)   Load 10(color) 
+             260:    7(float)   CompositeExtract 259 3
+             261:    7(float)   FAdd 260 85
+             262:    8(fvec4)   Load 10(color) 
+             263:    8(fvec4)   CompositeInsert 261 262 3
+                                Store 10(color) 263 
+             264:    128(int)   Load 238(i) 
+             265:    128(int)   IAdd 264 145
+                                Store 238(i) 265 
+                                Branch 239
+             240:             Label
+                              Store 266(i) 131 
+                              Branch 267
+             267:             Label
+             269:    128(int) Load 266(i) 
+             270:    16(bool) SLessThan 269 164
+                              LoopMerge 268 None
+                              BranchConditional 270 271 268 
+             271:               Label
+             272:    7(float)   Load 97(d3) 
+             273:    8(fvec4)   Load 10(color) 
+             274:    7(float)   CompositeExtract 273 2
+             275:    7(float)   FAdd 274 272
+             276:    8(fvec4)   Load 10(color) 
+             277:    8(fvec4)   CompositeInsert 275 276 2
+                                Store 10(color) 277 
+             278:    8(fvec4)   Load 10(color) 
+             279:    7(float)   CompositeExtract 278 0
+             280:    7(float)   Load 119(d4) 
+             281:    16(bool)   FOrdLessThan 279 280
+                                SelectionMerge 283 None
+                                BranchConditional 281 282 283 
+             282:                 Label
+                                  Branch 268
+             283:               Label
+             285:    8(fvec4)   Load 10(color) 
+             286:    7(float)   CompositeExtract 285 3
+             287:    7(float)   FAdd 286 85
+             288:    8(fvec4)   Load 10(color) 
+             289:    8(fvec4)   CompositeInsert 287 288 3
+                                Store 10(color) 289 
+             290:    128(int)   Load 266(i) 
+             291:    128(int)   IAdd 290 145
+                                Store 266(i) 291 
+                                Branch 267
+             268:             Label
+                              Branch 292
+             292:             Label
+                              LoopMerge 293 None
+                              Branch 294
+             294:             Label
+             297:    8(fvec4) Load 296(bigColor4) 
+             298:    8(fvec4) Load 10(color) 
+             299:    8(fvec4) FAdd 298 297
+                              Store 10(color) 299 
+             300:    8(fvec4) Load 10(color) 
+             301:    7(float) CompositeExtract 300 0
+             302:    7(float) Load 119(d4) 
+             303:    16(bool) FOrdLessThan 301 302
+                              SelectionMerge 305 None
+                              BranchConditional 303 304 305 
+             304:               Label
+                                Branch 295
+             305:             Label
+             307:    8(fvec4) Load 10(color) 
+             308:    7(float) CompositeExtract 307 1
+             309:    7(float) Load 119(d4) 
+             310:    16(bool) FOrdLessThan 308 309
+                              SelectionMerge 312 None
+                              BranchConditional 310 311 319 
+             311:               Label
+             313:    7(float)   Load 119(d4) 
+             314:    8(fvec4)   Load 10(color) 
+             315:    7(float)   CompositeExtract 314 1
+             316:    7(float)   FAdd 315 313
+             317:    8(fvec4)   Load 10(color) 
+             318:    8(fvec4)   CompositeInsert 316 317 1
+                                Store 10(color) 318 
+                                Branch 312
+             319:               Label
+             320:    7(float)   Load 119(d4) 
+             321:    8(fvec4)   Load 10(color) 
+             322:    7(float)   CompositeExtract 321 0
+             323:    7(float)   FAdd 322 320
+             324:    8(fvec4)   Load 10(color) 
+             325:    8(fvec4)   CompositeInsert 323 324 0
+                                Store 10(color) 325 
+                                Branch 312
+             312:             Label
+                              Branch 295
+             295:             Label
+             326:    8(fvec4) Load 10(color) 
+             327:    7(float) CompositeExtract 326 2
+             328:    7(float) Load 119(d4) 
+             329:    16(bool) FOrdLessThan 327 328
+                              BranchConditional 329 330 293 
+             330:             Label
+                              Branch 292
+             293:             Label
+                              Branch 331
+             331:             Label
+                              LoopMerge 332 None
+                              Branch 333
+             333:             Label
+             336:    8(fvec4) Load 335(bigColor5) 
+             337:    8(fvec4) Load 10(color) 
+             338:    8(fvec4) FAdd 337 336
+                              Store 10(color) 338 
+             339:    8(fvec4) Load 10(color) 
+             340:    7(float) CompositeExtract 339 1
+             342:    7(float) Load 341(d5) 
+             343:    16(bool) FOrdLessThan 340 342
+                              SelectionMerge 345 None
+                              BranchConditional 343 344 345 
+             344:               Label
+             346:    7(float)   Load 341(d5) 
+             347:    8(fvec4)   Load 10(color) 
+             348:    7(float)   CompositeExtract 347 1
+             349:    7(float)   FAdd 348 346
+             350:    8(fvec4)   Load 10(color) 
+             351:    8(fvec4)   CompositeInsert 349 350 1
+                                Store 10(color) 351 
+                                Branch 345
+             345:             Label
+                              Branch 334
+             334:             Label
+             352:    8(fvec4) Load 10(color) 
+             353:    7(float) CompositeExtract 352 0
+             354:    7(float) Load 341(d5) 
+             355:    16(bool) FOrdLessThan 353 354
+                              BranchConditional 355 356 332 
+             356:             Label
+                              Branch 331
+             332:             Label
+             357:    8(fvec4) Load 10(color) 
+             358:    7(float) CompositeExtract 357 0
+             360:    7(float) Load 359(d6) 
+             361:    16(bool) FOrdLessThan 358 360
+                              SelectionMerge 363 None
+                              BranchConditional 361 362 375 
+             362:               Label
+                                Branch 364
+             364:               Label
+             366:    8(fvec4)   Load 10(color) 
+             367:    7(float)   CompositeExtract 366 1
+             368:    7(float)   Load 359(d6) 
+             369:    16(bool)   FOrdLessThan 367 368
+                                LoopMerge 365 None
+                                BranchConditional 369 370 365 
+             370:                 Label
+             372:    8(fvec4)     Load 371(bigColor6) 
+             373:    8(fvec4)     Load 10(color) 
+             374:    8(fvec4)     FAdd 373 372
+                                  Store 10(color) 374 
+                                  Branch 364
+             365:               Label
+                                Branch 363
+             375:               Label
+                                Branch 376
+             376:               Label
+             378:    8(fvec4)   Load 10(color) 
+             379:    7(float)   CompositeExtract 378 2
+             380:    7(float)   Load 359(d6) 
+             381:    16(bool)   FOrdLessThan 379 380
+                                LoopMerge 377 None
+                                BranchConditional 381 382 377 
+             382:                 Label
+             383:    8(fvec4)     Load 371(bigColor6) 
+             384:    7(float)     CompositeExtract 383 2
+             385:    8(fvec4)     Load 10(color) 
+             386:    7(float)     CompositeExtract 385 2
+             387:    7(float)     FAdd 386 384
+             388:    8(fvec4)     Load 10(color) 
+             389:    8(fvec4)     CompositeInsert 387 388 2
+                                  Store 10(color) 389 
+                                  Branch 376
+             377:               Label
+                                Branch 363
+             363:             Label
+             390:    8(fvec4) Load 10(color) 
+             391:    7(float) CompositeExtract 390 0
+             392:    7(float) Load 359(d6) 
+             393:    16(bool) FOrdLessThan 391 392
+                              SelectionMerge 395 None
+                              BranchConditional 393 394 412 
+             394:               Label
+                                Branch 396
+             396:               Label
+             398:    8(fvec4)   Load 10(color) 
+             399:    7(float)   CompositeExtract 398 1
+             400:    7(float)   Load 359(d6) 
+             401:    16(bool)   FOrdLessThan 399 400
+                                LoopMerge 397 None
+                                BranchConditional 401 402 397 
+             402:                 Label
+             403:    8(fvec4)     Load 371(bigColor6) 
+             404:    8(fvec4)     Load 10(color) 
+             405:    8(fvec4)     FAdd 404 403
+                                  Store 10(color) 405 
+             407:    7(float)     Load 406(d7) 
+             408:    16(bool)     FOrdLessThan 407 85
+                                  SelectionMerge 410 None
+                                  BranchConditional 408 409 410 
+             409:                   Label
+                                    Branch 397
+             410:                 Label
+                                  Branch 396
+             397:               Label
+                                Branch 395
+             412:               Label
+                                Branch 413
+             413:               Label
+             415:    8(fvec4)   Load 10(color) 
+             416:    7(float)   CompositeExtract 415 2
+             417:    7(float)   Load 359(d6) 
+             418:    16(bool)   FOrdLessThan 416 417
+                                LoopMerge 414 None
+                                BranchConditional 418 419 414 
+             419:                 Label
+             420:    8(fvec4)     Load 371(bigColor6) 
+             421:    7(float)     CompositeExtract 420 2
+             422:    8(fvec4)     Load 10(color) 
+             423:    7(float)     CompositeExtract 422 2
+             424:    7(float)     FAdd 423 421
+             425:    8(fvec4)     Load 10(color) 
+             426:    8(fvec4)     CompositeInsert 424 425 2
+                                  Store 10(color) 426 
+                                  Branch 413
+             414:               Label
+                                Branch 395
+             395:             Label
+                              Branch 427
+             427:             Label
+                              LoopMerge 428 None
+                              Branch 429
+             429:             Label
+             431:    7(float) Load 406(d7) 
+             433:    16(bool) FOrdLessThan 431 432
+                              SelectionMerge 435 None
+                              BranchConditional 433 434 435 
+             434:               Label
+                                Branch 428
+             435:             Label
+             438:    8(fvec4) Load 437(bigColor7) 
+             439:    8(fvec4) Load 10(color) 
+             440:    8(fvec4) FAdd 439 438
+                              Store 10(color) 440 
+             441:    7(float) Load 406(d7) 
+             442:    16(bool) FOrdLessThan 441 85
+                              SelectionMerge 444 None
+                              BranchConditional 442 443 444 
+             443:               Label
+             445:    8(fvec4)   Load 10(color) 
+             446:    7(float)   CompositeExtract 445 2
+             447:    7(float)   FAdd 446 85
+             448:    8(fvec4)   Load 10(color) 
+             449:    8(fvec4)   CompositeInsert 447 448 2
+                                Store 10(color) 449 
+                                Branch 428
+             444:             Label
+             451:    8(fvec4) Load 12(BaseColor) 
+             452:    8(fvec4) Load 10(color) 
+             453:    8(fvec4) FAdd 452 451
+                              Store 10(color) 453 
+                              Branch 430
+             430:             Label
+                              BranchConditional 17 454 428 
+             454:             Label
+                              Branch 427
+             428:             Label
+                              Branch 455
+             455:             Label
+                              LoopMerge 456 None
+                              Branch 457
+             457:             Label
+             460:    7(float) Load 459(d8) 
+             461:    16(bool) FOrdLessThan 460 432
+                              SelectionMerge 463 None
+                              BranchConditional 461 462 463 
+             462:               Label
+                                Branch 456
+             463:             Label
+             465:    8(fvec4) Load 437(bigColor7) 
+             466:    8(fvec4) Load 10(color) 
+             467:    8(fvec4) FAdd 466 465
+                              Store 10(color) 467 
+             468:    7(float) Load 459(d8) 
+             469:    16(bool) FOrdLessThan 468 85
+                              SelectionMerge 471 None
+                              BranchConditional 469 470 471 
+             470:               Label
+             472:    8(fvec4)   Load 10(color) 
+             473:    7(float)   CompositeExtract 472 2
+             474:    7(float)   FAdd 473 85
+             475:    8(fvec4)   Load 10(color) 
+             476:    8(fvec4)   CompositeInsert 474 475 2
+                                Store 10(color) 476 
+             477:    7(float)   Load 459(d8) 
+             479:    16(bool)   FOrdLessThan 477 478
+                                SelectionMerge 481 None
+                                BranchConditional 479 480 487 
+             480:                 Label
+             482:    8(fvec4)     Load 10(color) 
+             483:    7(float)     CompositeExtract 482 1
+             484:    7(float)     FAdd 483 85
+             485:    8(fvec4)     Load 10(color) 
+             486:    8(fvec4)     CompositeInsert 484 485 1
+                                  Store 10(color) 486 
+                                  Branch 481
+             487:                 Label
+             488:    8(fvec4)     Load 10(color) 
+             489:    7(float)     CompositeExtract 488 0
+             490:    7(float)     FAdd 489 85
+             491:    8(fvec4)     Load 10(color) 
+             492:    8(fvec4)     CompositeInsert 490 491 0
+                                  Store 10(color) 492 
+                                  Branch 481
+             481:               Label
+                                Branch 456
+             471:             Label
+             494:    8(fvec4) Load 12(BaseColor) 
+             495:    8(fvec4) Load 10(color) 
+             496:    8(fvec4) FAdd 495 494
+                              Store 10(color) 496 
+                              Branch 458
+             458:             Label
+             497:    8(fvec4) Load 10(color) 
+             498:    7(float) CompositeExtract 497 2
+             499:    7(float) Load 459(d8) 
+             500:    16(bool) FOrdLessThan 498 499
+                              BranchConditional 500 501 456 
+             501:             Label
+                              Branch 455
+             456:             Label
+                              Branch 502
+             502:             Label
+             504:    8(fvec4) Load 10(color) 
+             505:    7(float) CompositeExtract 504 3
+             507:    7(float) Load 506(d9) 
+             508:    16(bool) FOrdLessThan 505 507
+                              LoopMerge 503 None
+                              BranchConditional 508 509 503 
+             509:               Label
+             510:    7(float)   Load 506(d9) 
+             511:    7(float)   Load 459(d8) 
+             512:    16(bool)   FOrdGreaterThan 510 511
+                                SelectionMerge 514 None
+                                BranchConditional 512 513 514 
+             513:                 Label
+             515:    8(fvec4)     Load 10(color) 
+             516:    7(float)     CompositeExtract 515 0
+             517:    7(float)     Load 406(d7) 
+             518:    16(bool)     FOrdLessThanEqual 516 517
+                                  SelectionMerge 520 None
+                                  BranchConditional 518 519 520 
+             519:                   Label
+             521:    8(fvec4)       Load 10(color) 
+             522:    7(float)       CompositeExtract 521 2
+             524:    16(bool)       FOrdEqual 522 523
+                                    SelectionMerge 526 None
+                                    BranchConditional 524 525 532 
+             525:                     Label
+             527:    8(fvec4)         Load 10(color) 
+             528:    7(float)         CompositeExtract 527 3
+             529:    7(float)         FAdd 528 85
+             530:    8(fvec4)         Load 10(color) 
+             531:    8(fvec4)         CompositeInsert 529 530 3
+                                      Store 10(color) 531 
+                                      Branch 526
+             532:                     Label
+                                      Branch 503
+             526:                   Label
+                                    Branch 520
+             520:                 Label
+                                  Branch 514
+             514:               Label
+                                Branch 502
+             503:             Label
+                              Branch 534
+             534:             Label
+             536:    8(fvec4) Load 10(color) 
+             537:    7(float) CompositeExtract 536 2
+             539:    7(float) Load 538(d10) 
+             540:    16(bool) FOrdLessThan 537 539
+                              LoopMerge 535 None
+                              BranchConditional 540 541 535 
+             541:               Label
+             542:    8(fvec4)   Load 10(color) 
+             543:    7(float)   CompositeExtract 542 1
+             544:    7(float)   FAdd 543 85
+             545:    8(fvec4)   Load 10(color) 
+             546:    8(fvec4)   CompositeInsert 544 545 1
+                                Store 10(color) 546 
+             547:    8(fvec4)   Load 10(color) 
+             548:    7(float)   CompositeExtract 547 1
+             550:    7(float)   Load 549(d11) 
+             551:    16(bool)   FOrdLessThan 548 550
+                                SelectionMerge 553 None
+                                BranchConditional 551 552 553 
+             552:                 Label
+             554:    8(fvec4)     Load 10(color) 
+             555:    7(float)     CompositeExtract 554 2
+             556:    7(float)     FAdd 555 85
+             557:    8(fvec4)     Load 10(color) 
+             558:    8(fvec4)     CompositeInsert 556 557 2
+                                  Store 10(color) 558 
+             559:    8(fvec4)     Load 10(color) 
+             560:    7(float)     CompositeExtract 559 3
+             562:    7(float)     Load 561(d12) 
+             563:    16(bool)     FOrdLessThan 560 562
+                                  SelectionMerge 565 None
+                                  BranchConditional 563 564 571 
+             564:                   Label
+             566:    8(fvec4)       Load 10(color) 
+             567:    7(float)       CompositeExtract 566 3
+             568:    7(float)       FAdd 567 85
+             569:    8(fvec4)       Load 10(color) 
+             570:    8(fvec4)       CompositeInsert 568 569 3
+                                    Store 10(color) 570 
+                                    Branch 565
+             571:                   Label
+             572:    8(fvec4)       Load 10(color) 
+             573:    7(float)       CompositeExtract 572 0
+             574:    7(float)       FAdd 573 85
+             575:    8(fvec4)       Load 10(color) 
+             576:    8(fvec4)       CompositeInsert 574 575 0
+                                    Store 10(color) 576 
+                                    Branch 565
+             565:                 Label
+                                  Branch 534
+             553:               Label
+             578:    8(fvec4)   Load 10(color) 
+             579:    8(fvec4)   CompositeConstruct 85 85 85 85
+             580:    8(fvec4)   FAdd 578 579
+                                Store 10(color) 580 
+                                Branch 535
+             535:             Label
+                              Branch 582
+             582:             Label
+             584:    8(fvec4) Load 10(color) 
+             585:    7(float) CompositeExtract 584 0
+             587:    16(bool) FOrdLessThan 585 586
+                              LoopMerge 583 None
+                              BranchConditional 587 588 583 
+             588:               Label
+             590:    8(fvec4)   Load 589(bigColor8) 
+             591:    8(fvec4)   Load 10(color) 
+             592:    8(fvec4)   FAdd 591 590
+                                Store 10(color) 592 
+             593:    8(fvec4)   Load 10(color) 
+             594:    7(float)   CompositeExtract 593 2
+             595:    7(float)   Load 459(d8) 
+             596:    16(bool)   FOrdLessThan 594 595
+                                SelectionMerge 598 None
+                                BranchConditional 596 597 598 
+             597:                 Label
+             599:    8(fvec4)     Load 10(color) 
+             600:    7(float)     CompositeExtract 599 3
+             601:    7(float)     Load 359(d6) 
+             602:    16(bool)     FOrdLessThan 600 601
+                                  SelectionMerge 604 None
+                                  BranchConditional 602 603 604 
+             603:                   Label
+                                    Branch 582
+             604:                 Label
+                                  Branch 598
+             598:               Label
+             606:    8(fvec4)   Load 589(bigColor8) 
+             607:    7(float)   CompositeExtract 606 0
+             608:    8(fvec4)   Load 10(color) 
+             609:    7(float)   CompositeExtract 608 1
+             610:    7(float)   FAdd 609 607
+             611:    8(fvec4)   Load 10(color) 
+             612:    8(fvec4)   CompositeInsert 610 611 1
+                                Store 10(color) 612 
+                                Branch 582
+             583:             Label
+             613:    8(fvec4) Load 10(color) 
+             614:    8(fvec4) CompositeConstruct 85 85 85 85
+             615:    8(fvec4) FAdd 613 614
+                              Store 10(color) 615 
+             618:    8(fvec4) Load 10(color) 
+                              Store 617(gl_FragColor) 618 
+                              Branch 619
+             619:             Label
+             621:    8(fvec4) Load 10(color) 
+             622:    7(float) CompositeExtract 621 0
+             624:    7(float) Load 623(d14) 
+             625:    16(bool) FOrdLessThan 622 624
+                              LoopMerge 620 None
+                              BranchConditional 625 626 620 
+             626:               Label
+             627:    8(fvec4)   Load 10(color) 
+             628:    7(float)   CompositeExtract 627 1
+             630:    7(float)   Load 629(d15) 
+             631:    16(bool)   FOrdLessThan 628 630
+                                SelectionMerge 633 None
+                                BranchConditional 631 632 635 
+             632:                 Label
+                                  Branch 6
+             635:                 Label
+             636:    8(fvec4)     Load 10(color) 
+             637:    8(fvec4)     CompositeConstruct 85 85 85 85
+             638:    8(fvec4)     FAdd 636 637
+                                  Store 10(color) 638 
+                                  Branch 633
+             633:               Label
+                                Branch 619
+             620:             Label
+             639:    8(fvec4) Load 10(color) 
+             640:    8(fvec4) CompositeConstruct 85 85 85 85
+             641:    8(fvec4) FAdd 639 640
+                              Store 10(color) 641 
+                              Branch 642
+             642:             Label
+             644:    8(fvec4) Load 10(color) 
+             645:    7(float) CompositeExtract 644 3
+             647:    7(float) Load 646(d16) 
+             648:    16(bool) FOrdLessThan 645 647
+                              LoopMerge 643 None
+                              BranchConditional 648 649 643 
+             649:               Label
+             650:    8(fvec4)   Load 10(color) 
+             651:    7(float)   CompositeExtract 650 3
+             652:    7(float)   FAdd 651 85
+             653:    8(fvec4)   Load 10(color) 
+             654:    8(fvec4)   CompositeInsert 652 653 3
+                                Store 10(color) 654 
+                                Branch 642
+             643:             Label
+                              Branch 655
+             655:             Label
+             657:    8(fvec4) Load 10(color) 
+             658:    7(float) CompositeExtract 657 3
+             659:    7(float) Load 92(d2) 
+             660:    16(bool) FOrdLessThan 658 659
+             661:    8(fvec4) Load 10(color) 
+             662:    7(float) CompositeExtract 661 1
+             663:    7(float) Load 97(d3) 
+             664:    16(bool) FOrdLessThan 662 663
+             665:    16(bool) LogicalAnd 660 664
+                              LoopMerge 656 None
+                              BranchConditional 665 666 656 
+             666:               Label
+             667:    8(fvec4)   Load 102(bigColor1_2) 
+             668:    8(fvec4)   Load 10(color) 
+             669:    8(fvec4)   FAdd 668 667
+                                Store 10(color) 669 
+             670:    8(fvec4)   Load 10(color) 
+             671:    7(float)   CompositeExtract 670 2
+             672:    7(float)   Load 97(d3) 
+             673:    16(bool)   FOrdLessThan 671 672
+                                SelectionMerge 675 None
+                                BranchConditional 673 674 675 
+             674:                 Label
+                                  Branch 6
+             675:               Label
+                                Branch 655
+             656:             Label
+                              Branch 677
+             677:             Label
+                              LoopMerge 678 None
+                              Branch 679
+             679:             Label
+             681:    8(fvec4) Load 10(color) 
+             682:    7(float) CompositeExtract 681 1
+             684:    7(float) Load 683(d18) 
+             685:    16(bool) FOrdLessThan 682 684
+                              SelectionMerge 687 None
+                              BranchConditional 685 686 687 
+             686:               Label
+                                Branch 6
+             687:             Label
+             689:    8(fvec4) Load 10(color) 
+             690:    8(fvec4) CompositeConstruct 85 85 85 85
+             691:    8(fvec4) FAdd 689 690
+                              Store 10(color) 691 
+                              Branch 680
+             680:             Label
+             692:    8(fvec4) Load 10(color) 
+             693:    7(float) CompositeExtract 692 0
+             695:    7(float) Load 694(d17) 
+             696:    16(bool) FOrdLessThan 693 695
+                              BranchConditional 696 697 678 
+             697:             Label
+                              Branch 677
+             678:             Label
+                              Branch 698
+             698:             Label
+             700:    8(fvec4) Load 10(color) 
+             701:    7(float) CompositeExtract 700 1
+             702:    7(float) Load 646(d16) 
+             703:    16(bool) FOrdLessThan 701 702
+                              LoopMerge 699 None
+                              BranchConditional 703 704 699 
+             704:               Label
+             705:    8(fvec4)   Load 10(color) 
+             706:    7(float)   CompositeExtract 705 3
+             707:    7(float)   Load 646(d16) 
+             708:    16(bool)   FOrdLessThan 706 707
+                                SelectionMerge 710 None
+                                BranchConditional 708 709 712 
+             709:                 Label
+                                  Kill
+             712:                 Label
+             713:    8(fvec4)     Load 10(color) 
+             714:    8(fvec4)     CompositeConstruct 85 85 85 85
+             715:    8(fvec4)     FAdd 713 714
+                                  Store 10(color) 715 
+                                  Branch 710
+             710:               Label
+                                Branch 698
+             699:             Label
+             716:    8(fvec4) Load 10(color) 
+             717:    8(fvec4) CompositeConstruct 85 85 85 85
+             718:    8(fvec4) FAdd 716 717
+                              Store 10(color) 718 
+             719:    8(fvec4) Load 10(color) 
+                              Store 617(gl_FragColor) 719 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.loopsArtificial.frag.out b/Test/baseResults/spv.loopsArtificial.frag.out
new file mode 100644
index 000000000..7aef1ae8f
--- /dev/null
+++ b/Test/baseResults/spv.loopsArtificial.frag.out
@@ -0,0 +1,352 @@
+spv.loopsArtificial.frag
+WARNING: 0:14: varying deprecated in version 130; may be removed in future release
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 192
+
+                              Source GLSL 130
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 10  "color"
+                              Name 12  "BaseColor"
+                              Name 19  "bigColor4"
+                              Name 26  "d4"
+                              Name 79  "d13"
+                              Name 145  "gl_FragColor"
+                              Name 147  "bigColor"
+                              Name 148  "bigColor1_1"
+                              Name 149  "bigColor1_2"
+                              Name 150  "bigColor1_3"
+                              Name 151  "bigColor2"
+                              Name 152  "bigColor3"
+                              Name 153  "bigColor5"
+                              Name 154  "bigColor6"
+                              Name 155  "bigColor7"
+                              Name 156  "bigColor8"
+                              Name 157  "d"
+                              Name 158  "d2"
+                              Name 159  "d3"
+                              Name 160  "d5"
+                              Name 161  "d6"
+                              Name 162  "d7"
+                              Name 163  "d8"
+                              Name 164  "d9"
+                              Name 165  "d10"
+                              Name 166  "d11"
+                              Name 167  "d12"
+                              Name 168  "d14"
+                              Name 169  "d15"
+                              Name 170  "d16"
+                              Name 171  "d17"
+                              Name 172  "d18"
+                              Name 173  "d19"
+                              Name 174  "d20"
+                              Name 175  "d21"
+                              Name 176  "d22"
+                              Name 177  "d23"
+                              Name 178  "d24"
+                              Name 179  "d25"
+                              Name 180  "d26"
+                              Name 181  "d27"
+                              Name 182  "d28"
+                              Name 183  "d29"
+                              Name 184  "d30"
+                              Name 185  "d31"
+                              Name 186  "d32"
+                              Name 187  "d33"
+                              Name 188  "d34"
+                              Name 191  "Count"
+                              Decorate 12(BaseColor) Smooth 
+                              Decorate 145(gl_FragColor) BuiltIn FragColor
+                              Decorate 147(bigColor) NoStaticUse 
+                              Decorate 148(bigColor1_1) NoStaticUse 
+                              Decorate 149(bigColor1_2) NoStaticUse 
+                              Decorate 150(bigColor1_3) NoStaticUse 
+                              Decorate 151(bigColor2) NoStaticUse 
+                              Decorate 152(bigColor3) NoStaticUse 
+                              Decorate 153(bigColor5) NoStaticUse 
+                              Decorate 154(bigColor6) NoStaticUse 
+                              Decorate 155(bigColor7) NoStaticUse 
+                              Decorate 156(bigColor8) NoStaticUse 
+                              Decorate 157(d) NoStaticUse 
+                              Decorate 158(d2) NoStaticUse 
+                              Decorate 159(d3) NoStaticUse 
+                              Decorate 160(d5) NoStaticUse 
+                              Decorate 161(d6) NoStaticUse 
+                              Decorate 162(d7) NoStaticUse 
+                              Decorate 163(d8) NoStaticUse 
+                              Decorate 164(d9) NoStaticUse 
+                              Decorate 165(d10) NoStaticUse 
+                              Decorate 166(d11) NoStaticUse 
+                              Decorate 167(d12) NoStaticUse 
+                              Decorate 168(d14) NoStaticUse 
+                              Decorate 169(d15) NoStaticUse 
+                              Decorate 170(d16) NoStaticUse 
+                              Decorate 171(d17) NoStaticUse 
+                              Decorate 172(d18) NoStaticUse 
+                              Decorate 173(d19) NoStaticUse 
+                              Decorate 174(d20) NoStaticUse 
+                              Decorate 175(d21) NoStaticUse 
+                              Decorate 176(d22) NoStaticUse 
+                              Decorate 177(d23) NoStaticUse 
+                              Decorate 178(d24) NoStaticUse 
+                              Decorate 179(d25) NoStaticUse 
+                              Decorate 180(d26) NoStaticUse 
+                              Decorate 181(d27) NoStaticUse 
+                              Decorate 182(d28) NoStaticUse 
+                              Decorate 183(d29) NoStaticUse 
+                              Decorate 184(d30) NoStaticUse 
+                              Decorate 185(d31) NoStaticUse 
+                              Decorate 186(d32) NoStaticUse 
+                              Decorate 187(d33) NoStaticUse 
+                              Decorate 188(d34) NoStaticUse 
+                              Decorate 191(Count) NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeVector 7(float) 4
+               9:             TypePointer Function 8(fvec4)
+              11:             TypePointer Input 8(fvec4)
+   12(BaseColor):     11(ptr) Variable Input 
+              18:             TypePointer UniformConstant 8(fvec4)
+   19(bigColor4):     18(ptr) Variable UniformConstant 
+              25:             TypePointer UniformConstant 7(float)
+          26(d4):     25(ptr) Variable UniformConstant 
+              28:             TypeBool
+              32:    7(float) Constant 1073741824
+              46:    7(float) Constant 1065353216
+         79(d13):     25(ptr) Variable UniformConstant 
+             144:             TypePointer Output 8(fvec4)
+145(gl_FragColor):    144(ptr) Variable Output 
+   147(bigColor):     18(ptr) Variable UniformConstant 
+148(bigColor1_1):     18(ptr) Variable UniformConstant 
+149(bigColor1_2):     18(ptr) Variable UniformConstant 
+150(bigColor1_3):     18(ptr) Variable UniformConstant 
+  151(bigColor2):     18(ptr) Variable UniformConstant 
+  152(bigColor3):     18(ptr) Variable UniformConstant 
+  153(bigColor5):     18(ptr) Variable UniformConstant 
+  154(bigColor6):     18(ptr) Variable UniformConstant 
+  155(bigColor7):     18(ptr) Variable UniformConstant 
+  156(bigColor8):     18(ptr) Variable UniformConstant 
+          157(d):     25(ptr) Variable UniformConstant 
+         158(d2):     25(ptr) Variable UniformConstant 
+         159(d3):     25(ptr) Variable UniformConstant 
+         160(d5):     25(ptr) Variable UniformConstant 
+         161(d6):     25(ptr) Variable UniformConstant 
+         162(d7):     25(ptr) Variable UniformConstant 
+         163(d8):     25(ptr) Variable UniformConstant 
+         164(d9):     25(ptr) Variable UniformConstant 
+        165(d10):     25(ptr) Variable UniformConstant 
+        166(d11):     25(ptr) Variable UniformConstant 
+        167(d12):     25(ptr) Variable UniformConstant 
+        168(d14):     25(ptr) Variable UniformConstant 
+        169(d15):     25(ptr) Variable UniformConstant 
+        170(d16):     25(ptr) Variable UniformConstant 
+        171(d17):     25(ptr) Variable UniformConstant 
+        172(d18):     25(ptr) Variable UniformConstant 
+        173(d19):     25(ptr) Variable UniformConstant 
+        174(d20):     25(ptr) Variable UniformConstant 
+        175(d21):     25(ptr) Variable UniformConstant 
+        176(d22):     25(ptr) Variable UniformConstant 
+        177(d23):     25(ptr) Variable UniformConstant 
+        178(d24):     25(ptr) Variable UniformConstant 
+        179(d25):     25(ptr) Variable UniformConstant 
+        180(d26):     25(ptr) Variable UniformConstant 
+        181(d27):     25(ptr) Variable UniformConstant 
+        182(d28):     25(ptr) Variable UniformConstant 
+        183(d29):     25(ptr) Variable UniformConstant 
+        184(d30):     25(ptr) Variable UniformConstant 
+        185(d31):     25(ptr) Variable UniformConstant 
+        186(d32):     25(ptr) Variable UniformConstant 
+        187(d33):     25(ptr) Variable UniformConstant 
+        188(d34):     25(ptr) Variable UniformConstant 
+             189:             TypeInt 32 1
+             190:             TypePointer UniformConstant 189(int)
+      191(Count):    190(ptr) Variable UniformConstant 
+         4(main):           2 Function None 3
+               5:             Label
+       10(color):      9(ptr) Variable Function 
+              13:    8(fvec4) Load 12(BaseColor) 
+                              Store 10(color) 13 
+                              Branch 14
+              14:             Label
+                              LoopMerge 15 None
+                              Branch 16
+              16:             Label
+              20:    8(fvec4) Load 19(bigColor4) 
+              21:    8(fvec4) Load 10(color) 
+              22:    8(fvec4) FAdd 21 20
+                              Store 10(color) 22 
+              23:    8(fvec4) Load 10(color) 
+              24:    7(float) CompositeExtract 23 0
+              27:    7(float) Load 26(d4) 
+              29:    28(bool) FOrdLessThan 24 27
+                              SelectionMerge 31 None
+                              BranchConditional 29 30 31 
+              30:               Label
+              33:    8(fvec4)   Load 10(color) 
+              34:    7(float)   CompositeExtract 33 2
+              35:    7(float)   FAdd 34 32
+              36:    8(fvec4)   Load 10(color) 
+              37:    8(fvec4)   CompositeInsert 35 36 2
+                                Store 10(color) 37 
+              38:    8(fvec4)   Load 10(color) 
+              39:    7(float)   CompositeExtract 38 2
+              40:    7(float)   Load 26(d4) 
+              41:    28(bool)   FOrdLessThan 39 40
+                                SelectionMerge 43 None
+                                BranchConditional 41 42 43 
+              42:                 Label
+              44:    8(fvec4)     Load 10(color) 
+              45:    7(float)     CompositeExtract 44 0
+              47:    7(float)     FAdd 45 46
+              48:    8(fvec4)     Load 10(color) 
+              49:    8(fvec4)     CompositeInsert 47 48 0
+                                  Store 10(color) 49 
+                                  Branch 17
+              43:               Label
+                                Branch 31
+              31:             Label
+              51:    8(fvec4) Load 10(color) 
+              52:    7(float) CompositeExtract 51 1
+              53:    7(float) Load 26(d4) 
+              54:    28(bool) FOrdLessThan 52 53
+                              SelectionMerge 56 None
+                              BranchConditional 54 55 63 
+              55:               Label
+              57:    7(float)   Load 26(d4) 
+              58:    8(fvec4)   Load 10(color) 
+              59:    7(float)   CompositeExtract 58 1
+              60:    7(float)   FAdd 59 57
+              61:    8(fvec4)   Load 10(color) 
+              62:    8(fvec4)   CompositeInsert 60 61 1
+                                Store 10(color) 62 
+                                Branch 56
+              63:               Label
+              64:    7(float)   Load 26(d4) 
+              65:    8(fvec4)   Load 10(color) 
+              66:    7(float)   CompositeExtract 65 0
+              67:    7(float)   FAdd 66 64
+              68:    8(fvec4)   Load 10(color) 
+              69:    8(fvec4)   CompositeInsert 67 68 0
+                                Store 10(color) 69 
+                                Branch 56
+              56:             Label
+                              Branch 17
+              17:             Label
+              70:    8(fvec4) Load 10(color) 
+              71:    7(float) CompositeExtract 70 2
+              72:    7(float) Load 26(d4) 
+              73:    28(bool) FOrdLessThan 71 72
+                              BranchConditional 73 74 15 
+              74:             Label
+                              Branch 14
+              15:             Label
+                              Branch 75
+              75:             Label
+              77:    8(fvec4) Load 10(color) 
+              78:    7(float) CompositeExtract 77 3
+              80:    7(float) Load 79(d13) 
+              81:    28(bool) FOrdLessThan 78 80
+                              LoopMerge 76 None
+                              BranchConditional 81 82 76 
+              82:               Label
+              83:    8(fvec4)   Load 10(color) 
+              84:    7(float)   CompositeExtract 83 2
+              85:    7(float)   Load 79(d13) 
+              86:    28(bool)   FOrdLessThan 84 85
+                                SelectionMerge 88 None
+                                BranchConditional 86 87 92 
+              87:                 Label
+              89:    8(fvec4)     Load 10(color) 
+              90:    8(fvec4)     CompositeConstruct 46 46 46 46
+              91:    8(fvec4)     FAdd 89 90
+                                  Store 10(color) 91 
+                                  Branch 88
+              92:                 Label
+              93:    8(fvec4)     Load 10(color) 
+              94:    8(fvec4)     CompositeConstruct 46 46 46 46
+              95:    8(fvec4)     FSub 93 94
+                                  Store 10(color) 95 
+                                  Branch 88
+              88:               Label
+              96:    8(fvec4)   Load 19(bigColor4) 
+              97:    8(fvec4)   Load 10(color) 
+              98:    8(fvec4)   FAdd 97 96
+                                Store 10(color) 98 
+              99:    8(fvec4)   Load 10(color) 
+             100:    7(float)   CompositeExtract 99 0
+             101:    7(float)   Load 26(d4) 
+             102:    28(bool)   FOrdLessThan 100 101
+                                SelectionMerge 104 None
+                                BranchConditional 102 103 104 
+             103:                 Label
+             105:    8(fvec4)     Load 10(color) 
+             106:    7(float)     CompositeExtract 105 2
+             107:    7(float)     FAdd 106 32
+             108:    8(fvec4)     Load 10(color) 
+             109:    8(fvec4)     CompositeInsert 107 108 2
+                                  Store 10(color) 109 
+             110:    8(fvec4)     Load 10(color) 
+             111:    7(float)     CompositeExtract 110 2
+             112:    7(float)     Load 26(d4) 
+             113:    28(bool)     FOrdLessThan 111 112
+                                  SelectionMerge 115 None
+                                  BranchConditional 113 114 115 
+             114:                   Label
+             116:    8(fvec4)       Load 10(color) 
+             117:    7(float)       CompositeExtract 116 0
+             118:    7(float)       FAdd 117 46
+             119:    8(fvec4)       Load 10(color) 
+             120:    8(fvec4)       CompositeInsert 118 119 0
+                                    Store 10(color) 120 
+                                    Branch 75
+             115:                 Label
+                                  Branch 104
+             104:               Label
+             122:    8(fvec4)   Load 10(color) 
+             123:    7(float)   CompositeExtract 122 1
+             124:    7(float)   Load 26(d4) 
+             125:    28(bool)   FOrdLessThan 123 124
+                                SelectionMerge 127 None
+                                BranchConditional 125 126 134 
+             126:                 Label
+             128:    7(float)     Load 26(d4) 
+             129:    8(fvec4)     Load 10(color) 
+             130:    7(float)     CompositeExtract 129 1
+             131:    7(float)     FAdd 130 128
+             132:    8(fvec4)     Load 10(color) 
+             133:    8(fvec4)     CompositeInsert 131 132 1
+                                  Store 10(color) 133 
+                                  Branch 127
+             134:                 Label
+             135:    7(float)     Load 26(d4) 
+             136:    8(fvec4)     Load 10(color) 
+             137:    7(float)     CompositeExtract 136 0
+             138:    7(float)     FAdd 137 135
+             139:    8(fvec4)     Load 10(color) 
+             140:    8(fvec4)     CompositeInsert 138 139 0
+                                  Store 10(color) 140 
+                                  Branch 127
+             127:               Label
+                                Branch 75
+              76:             Label
+             141:    8(fvec4) Load 10(color) 
+             142:    8(fvec4) CompositeConstruct 46 46 46 46
+             143:    8(fvec4) FAdd 141 142
+                              Store 10(color) 143 
+             146:    8(fvec4) Load 10(color) 
+                              Store 145(gl_FragColor) 146 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.matFun.vert.out b/Test/baseResults/spv.matFun.vert.out
new file mode 100644
index 000000000..2a0a0fc99
--- /dev/null
+++ b/Test/baseResults/spv.matFun.vert.out
@@ -0,0 +1,142 @@
+spv.matFun.vert
+
+
+
+Linked vertex stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 94
+
+                              Source GLSL 130
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4
+                              Name 4  "main"
+                              Name 15  "xf(mf33;vf3;"
+                              Name 13  "m"
+                              Name 14  "v"
+                              Name 22  "Mat3(mf44;"
+                              Name 21  "m"
+                              Name 27  "mxv(mf44;vf3;"
+                              Name 25  "m4"
+                              Name 26  "v"
+                              Name 64  "param"
+                              Name 70  "gl_Position"
+                              Name 72  "m4"
+                              Name 74  "v3"
+                              Name 75  "param"
+                              Name 77  "param"
+                              Name 81  "m3"
+                              Name 82  "param"
+                              Name 84  "param"
+                              Name 93  "gl_VertexID"
+                              Decorate 70(gl_Position) BuiltIn Position
+                              Decorate 93(gl_VertexID) BuiltIn VertexId
+                              Decorate 93(gl_VertexID) NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeVector 7(float) 3
+               9:             TypeMatrix 8(fvec3) 3
+              10:             TypePointer Function 9
+              11:             TypePointer Function 8(fvec3)
+              12:             TypeFunction 8(fvec3) 10(ptr) 11(ptr)
+              17:             TypeVector 7(float) 4
+              18:             TypeMatrix 17(fvec4) 4
+              19:             TypePointer Function 18
+              20:             TypeFunction 9 19(ptr)
+              24:             TypeFunction 8(fvec3) 19(ptr) 11(ptr)
+              33:             TypeInt 32 1
+              34:     33(int) Constant 0
+              35:             TypePointer Function 17(fvec4)
+              39:     33(int) Constant 1
+              43:     33(int) Constant 2
+              47:    7(float) Constant 1065353216
+              48:    7(float) Constant 0
+              69:             TypePointer Output 17(fvec4)
+ 70(gl_Position):     69(ptr) Variable Output 
+              71:             TypePointer UniformConstant 18
+          72(m4):     71(ptr) Variable UniformConstant 
+              73:             TypePointer Input 8(fvec3)
+          74(v3):     73(ptr) Variable Input 
+              80:             TypePointer UniformConstant 9
+          81(m3):     80(ptr) Variable UniformConstant 
+              92:             TypePointer Input 33(int)
+ 93(gl_VertexID):     92(ptr) Variable Input 
+         4(main):           2 Function None 3
+               5:             Label
+       75(param):     19(ptr) Variable Function 
+       77(param):     11(ptr) Variable Function 
+       82(param):     10(ptr) Variable Function 
+       84(param):     11(ptr) Variable Function 
+              76:          18 Load 72(m4) 
+                              Store 75(param) 76 
+              78:    8(fvec3) Load 74(v3) 
+                              Store 77(param) 78 
+              79:    8(fvec3) FunctionCall 27(mxv(mf44;vf3;) 75(param) 77(param)
+              83:           9 Load 81(m3) 
+                              Store 82(param) 83 
+              85:    8(fvec3) Load 74(v3) 
+                              Store 84(param) 85 
+              86:    8(fvec3) FunctionCall 15(xf(mf33;vf3;) 82(param) 84(param)
+              87:    8(fvec3) FAdd 79 86
+              88:    7(float) CompositeExtract 87 0
+              89:    7(float) CompositeExtract 87 1
+              90:    7(float) CompositeExtract 87 2
+              91:   17(fvec4) CompositeConstruct 88 89 90 47
+                              Store 70(gl_Position) 91 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
+15(xf(mf33;vf3;):    8(fvec3) Function None 12
+           13(m):     10(ptr) FunctionParameter
+           14(v):     11(ptr) FunctionParameter
+              16:             Label
+              29:    8(fvec3) Load 14(v) 
+              30:           9 Load 13(m) 
+              31:    8(fvec3) VectorTimesMatrix 29 30
+                              ReturnValue 31
+                              FunctionEnd
+  22(Mat3(mf44;):           9 Function None 20
+           21(m):     19(ptr) FunctionParameter
+              23:             Label
+              36:     35(ptr) AccessChain 21(m) 34
+              37:   17(fvec4) Load 36 
+              38:    8(fvec3) VectorShuffle 37 37 0 1 2
+              40:     35(ptr) AccessChain 21(m) 39
+              41:   17(fvec4) Load 40 
+              42:    8(fvec3) VectorShuffle 41 41 0 1 2
+              44:     35(ptr) AccessChain 21(m) 43
+              45:   17(fvec4) Load 44 
+              46:    8(fvec3) VectorShuffle 45 45 0 1 2
+              49:    7(float) CompositeExtract 38 0
+              50:    7(float) CompositeExtract 38 1
+              51:    7(float) CompositeExtract 38 2
+              52:    7(float) CompositeExtract 42 0
+              53:    7(float) CompositeExtract 42 1
+              54:    7(float) CompositeExtract 42 2
+              55:    7(float) CompositeExtract 46 0
+              56:    7(float) CompositeExtract 46 1
+              57:    7(float) CompositeExtract 46 2
+              58:    8(fvec3) CompositeConstruct 49 50 51
+              59:    8(fvec3) CompositeConstruct 52 53 54
+              60:    8(fvec3) CompositeConstruct 55 56 57
+              61:           9 CompositeConstruct 58 59 60
+                              ReturnValue 61
+                              FunctionEnd
+27(mxv(mf44;vf3;):    8(fvec3) Function None 24
+          25(m4):     19(ptr) FunctionParameter
+           26(v):     11(ptr) FunctionParameter
+              28:             Label
+       64(param):     19(ptr) Variable Function 
+              63:    8(fvec3) Load 26(v) 
+              65:          18 Load 25(m4) 
+                              Store 64(param) 65 
+              66:           9 FunctionCall 22(Mat3(mf44;) 64(param)
+              67:    8(fvec3) VectorTimesMatrix 63 66
+                              ReturnValue 67
+                              FunctionEnd
diff --git a/Test/baseResults/spv.matrix.frag.out b/Test/baseResults/spv.matrix.frag.out
new file mode 100644
index 000000000..cec418da0
--- /dev/null
+++ b/Test/baseResults/spv.matrix.frag.out
@@ -0,0 +1,12 @@
+spv.matrix.frag
+WARNING: 0:6: varying deprecated in version 130; may be removed in future release
+WARNING: 0:17: varying deprecated in version 130; may be removed in future release
+WARNING: 0:22: varying deprecated in version 130; may be removed in future release
+
+
+
+Linked fragment stage:
+
+
+
+Missing functionality: Composite comparison of non-vectors
diff --git a/Test/baseResults/spv.matrix2.frag.out b/Test/baseResults/spv.matrix2.frag.out
new file mode 100644
index 000000000..c40b01ccf
--- /dev/null
+++ b/Test/baseResults/spv.matrix2.frag.out
@@ -0,0 +1,12 @@
+spv.matrix2.frag
+WARNING: 0:4: varying deprecated in version 130; may be removed in future release
+WARNING: 0:13: varying deprecated in version 130; may be removed in future release
+WARNING: 0:15: varying deprecated in version 130; may be removed in future release
+
+
+
+Linked fragment stage:
+
+
+
+Missing functionality: binary operation on matrix
diff --git a/Test/baseResults/spv.newTexture.frag.out b/Test/baseResults/spv.newTexture.frag.out
new file mode 100644
index 000000000..1962e1a08
--- /dev/null
+++ b/Test/baseResults/spv.newTexture.frag.out
@@ -0,0 +1,10 @@
+spv.newTexture.frag
+Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
+
+
+
+Linked fragment stage:
+
+
+
+Missing functionality: texel fetch
diff --git a/Test/baseResults/spv.nonSquare.vert.out b/Test/baseResults/spv.nonSquare.vert.out
new file mode 100644
index 000000000..969e63a3e
--- /dev/null
+++ b/Test/baseResults/spv.nonSquare.vert.out
@@ -0,0 +1,123 @@
+spv.nonSquare.vert
+
+
+
+Linked vertex stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 91
+
+                              Source GLSL 120
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4
+                              Name 4  "main"
+                              Name 10  "a"
+                              Name 13  "v3"
+                              Name 17  "m23"
+                              Name 20  "b"
+                              Name 23  "m32"
+                              Name 29  "gl_Position"
+                              Name 56  "v4"
+                              Decorate 29(gl_Position) BuiltIn Position
+                              Decorate 75 NoStaticUse 
+                              Decorate 79 NoStaticUse 
+                              Decorate 90 NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeVector 7(float) 2
+               9:             TypePointer Function 8(fvec2)
+              11:             TypeVector 7(float) 3
+              12:             TypePointer Input 11(fvec3)
+          13(v3):     12(ptr) Variable Input 
+              15:             TypeMatrix 11(fvec3) 2
+              16:             TypePointer Function 15
+              21:             TypeMatrix 8(fvec2) 3
+              22:             TypePointer UniformConstant 21
+         23(m32):     22(ptr) Variable UniformConstant 
+              27:             TypeVector 7(float) 4
+              28:             TypePointer Output 27(fvec4)
+ 29(gl_Position):     28(ptr) Variable Output 
+              32:             TypeMatrix 11(fvec3) 3
+              36:    7(float) Constant 0
+              41:             TypeMatrix 27(fvec4) 4
+              42:    7(float) Constant 1077936128
+              43:    7(float) Constant 1086324736
+              44:   27(fvec4) ConstantComposite 42 43 36 36
+              45:    7(float) Constant 1091567616
+              46:    7(float) Constant 1094713344
+              47:   27(fvec4) ConstantComposite 45 46 36 36
+              48:    7(float) Constant 1097859072
+              49:    7(float) Constant 1099956224
+              50:   27(fvec4) ConstantComposite 48 49 36 36
+              51:    7(float) Constant 1101529088
+              52:    7(float) Constant 1103101952
+              53:   27(fvec4) ConstantComposite 51 52 36 36
+              54:          41 ConstantComposite 44 47 50 53
+              55:             TypePointer Input 27(fvec4)
+          56(v4):     55(ptr) Variable Input 
+              60:    7(float) Constant 1112014848
+              61:    7(float) Constant 1121714176
+              62:    7(float) Constant 1126825984
+              63:    7(float) Constant 1130758144
+              64:   27(fvec4) ConstantComposite 60 61 62 63
+              66:    7(float) Constant 1106247680
+              67:    7(float) Constant 1114636288
+              68:   27(fvec4) ConstantComposite 66 67 36 36
+              70:    7(float) Constant 1101004800
+              71:    7(float) Constant 1092616192
+              72:    7(float) Constant 1084227584
+              73:   27(fvec4) ConstantComposite 70 71 43 72
+              75:    8(fvec2) ConstantComposite 71 70
+              76:             TypeMatrix 27(fvec4) 2
+              77:   27(fvec4) ConstantComposite 42 36 36 36
+              78:   27(fvec4) ConstantComposite 36 42 36 36
+              79:          76 ConstantComposite 77 78
+              80:             TypeMatrix 8(fvec2) 4
+              81:    7(float) Constant 1065353216
+              82:    7(float) Constant 1073741824
+              83:    8(fvec2) ConstantComposite 81 82
+              84:    7(float) Constant 1082130432
+              85:    8(fvec2) ConstantComposite 42 84
+              86:    8(fvec2) ConstantComposite 72 43
+              87:    7(float) Constant 1088421888
+              88:    7(float) Constant 1090519040
+              89:    8(fvec2) ConstantComposite 87 88
+              90:          80 ConstantComposite 83 85 86 89
+         4(main):           2 Function None 3
+               5:             Label
+           10(a):      9(ptr) Variable Function 
+         17(m23):     16(ptr) Variable Function 
+           20(b):      9(ptr) Variable Function 
+              14:   11(fvec3) Load 13(v3) 
+              18:          15 Load 17(m23) 
+              19:    8(fvec2) VectorTimesMatrix 14 18
+                              Store 10(a) 19 
+              24:          21 Load 23(m32) 
+              25:   11(fvec3) Load 13(v3) 
+              26:    8(fvec2) MatrixTimesVector 24 25
+                              Store 20(b) 26 
+              30:          15 Load 17(m23) 
+              31:          21 Load 23(m32) 
+              33:          32 MatrixTimesMatrix 30 31
+              34:   11(fvec3) Load 13(v3) 
+              35:   11(fvec3) MatrixTimesVector 33 34
+              37:    7(float) CompositeExtract 35 0
+              38:    7(float) CompositeExtract 35 1
+              39:    7(float) CompositeExtract 35 2
+              40:   27(fvec4) CompositeConstruct 37 38 39 36
+              57:   27(fvec4) Load 56(v4) 
+              58:   27(fvec4) MatrixTimesVector 54 57
+              59:   27(fvec4) FAdd 40 58
+              65:   27(fvec4) FAdd 59 64
+              69:   27(fvec4) FAdd 65 68
+              74:   27(fvec4) FAdd 69 73
+                              Store 29(gl_Position) 74 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.precision.frag.out b/Test/baseResults/spv.precision.frag.out
new file mode 100644
index 000000000..71abeeb1b
--- /dev/null
+++ b/Test/baseResults/spv.precision.frag.out
@@ -0,0 +1,182 @@
+spv.precision.frag
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 111
+
+                              Source GLSL 300
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 13  "foo(vf3;"
+                              Name 12  "mv3"
+                              Name 20  "boolfun(vb2;"
+                              Name 19  "bv2"
+                              Name 24  "highfin"
+                              Name 37  "sum"
+                              Name 39  "uniform_medium"
+                              Name 41  "uniform_high"
+                              Name 47  "uniform_low"
+                              Name 52  "arg1"
+                              Name 54  "arg2"
+                              Name 56  "d"
+                              Name 58  "lowfin"
+                              Name 60  "mediumfin"
+                              Name 64  "global_highp"
+                              Name 68  "local_highp"
+                              Name 72  "mediumfout"
+                              Name 101  "ub2"
+                              Name 102  "param"
+                              Decorate 24(highfin) PrecisionHigh 
+                              Decorate 24(highfin) Smooth 
+                              Decorate 37(sum) PrecisionLow 
+                              Decorate 39(uniform_medium) PrecisionMedium 
+                              Decorate 41(uniform_high) PrecisionHigh 
+                              Decorate 47(uniform_low) PrecisionLow 
+                              Decorate 52(arg1) PrecisionLow 
+                              Decorate 54(arg2) PrecisionMedium 
+                              Decorate 56(d) PrecisionLow 
+                              Decorate 58(lowfin) PrecisionLow 
+                              Decorate 58(lowfin) Smooth 
+                              Decorate 60(mediumfin) PrecisionMedium 
+                              Decorate 60(mediumfin) Smooth 
+                              Decorate 64(global_highp) PrecisionHigh 
+                              Decorate 68(local_highp) PrecisionHigh 
+                              Decorate 72(mediumfout) PrecisionMedium 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeVector 7(float) 3
+               9:             TypePointer Function 8(fvec3)
+              10:             TypeVector 7(float) 2
+              11:             TypeFunction 10(fvec2) 9(ptr)
+              15:             TypeBool
+              16:             TypeVector 15(bool) 2
+              17:             TypePointer Function 16(bvec2)
+              18:             TypeFunction 15(bool) 17(ptr)
+              22:             TypeVector 7(float) 4
+              23:             TypePointer Input 22(fvec4)
+     24(highfin):     23(ptr) Variable Input 
+              29:    15(bool) ConstantFalse
+              30:    15(bool) ConstantTrue
+              31:   16(bvec2) ConstantComposite 29 30
+              35:             TypeInt 32 1
+              36:             TypePointer Function 35(int)
+              38:             TypePointer UniformConstant 35(int)
+39(uniform_medium):     38(ptr) Variable UniformConstant 
+41(uniform_high):     38(ptr) Variable UniformConstant 
+ 47(uniform_low):     38(ptr) Variable UniformConstant 
+              51:             TypePointer Function 7(float)
+              53:    7(float) Constant 1078774989
+              55:    7(float) Constant 1232730691
+              57:             TypePointer Input 7(float)
+      58(lowfin):     57(ptr) Variable Input 
+   60(mediumfin):     57(ptr) Variable Input 
+              63:             TypePointer PrivateGlobal 7(float)
+64(global_highp):     63(ptr) Variable PrivateGlobal 
+              67:             TypePointer Function 22(fvec4)
+              71:             TypePointer Output 22(fvec4)
+  72(mediumfout):     71(ptr) Variable Output 
+              81:     35(int) Constant 4
+              83:             TypeVector 35(int) 2
+             100:             TypePointer UniformConstant 16(bvec2)
+        101(ub2):    100(ptr) Variable UniformConstant 
+             108:    7(float) Constant 1065353216
+         4(main):           2 Function None 3
+               5:             Label
+         37(sum):     36(ptr) Variable Function 
+        52(arg1):     51(ptr) Variable Function 
+        54(arg2):     51(ptr) Variable Function 
+           56(d):     51(ptr) Variable Function 
+ 68(local_highp):     67(ptr) Variable Function 
+      102(param):     17(ptr) Variable Function 
+              40:     35(int) Load 39(uniform_medium) 
+              42:     35(int) Load 41(uniform_high) 
+              43:     35(int) IAdd 40 42
+                              Store 37(sum) 43 
+              44:     35(int) Load 41(uniform_high) 
+              45:     35(int) Load 37(sum) 
+              46:     35(int) IAdd 45 44
+                              Store 37(sum) 46 
+              48:     35(int) Load 47(uniform_low) 
+              49:     35(int) Load 37(sum) 
+              50:     35(int) IAdd 49 48
+                              Store 37(sum) 50 
+                              Store 52(arg1) 53 
+                              Store 54(arg2) 55 
+              59:    7(float) Load 58(lowfin) 
+              61:    7(float) Load 60(mediumfin) 
+              62:    7(float) ExtInst 1(GLSL.std.450) 59(distance) 59 61
+                              Store 56(d) 62 
+              65:   22(fvec4) Load 24(highfin) 
+              66:    7(float) ExtInst 1(GLSL.std.450) 58(length) 65
+                              Store 64(global_highp) 66 
+              69:    7(float) Load 64(global_highp) 
+              70:   22(fvec4) CompositeConstruct 69 69 69 69
+                              Store 68(local_highp) 70 
+              73:    7(float) Load 56(d) 
+              74:    7(float) ExtInst 1(GLSL.std.450) 10(sin) 73
+              75:   22(fvec4) CompositeConstruct 74 74 74 74
+              76:    7(float) Load 54(arg2) 
+              77:   22(fvec4) CompositeConstruct 76 76 76 76
+              78:   22(fvec4) FAdd 75 77
+              79:   22(fvec4) Load 68(local_highp) 
+              80:   22(fvec4) FAdd 78 79
+                              Store 72(mediumfout) 80 
+              82:     35(int) Load 47(uniform_low) 
+              84:   83(ivec2) CompositeConstruct 82 82
+              85:     35(int) Load 41(uniform_high) 
+              86:   83(ivec2) CompositeConstruct 85 85
+              87:   83(ivec2) IMul 84 86
+              88:     35(int) Load 41(uniform_high) 
+              89:   83(ivec2) CompositeConstruct 88 88
+              90:   83(ivec2) IAdd 87 89
+              91:     35(int) CompositeExtract 90 0
+              92:     35(int) IAdd 81 91
+              93:     35(int) Load 37(sum) 
+              94:     35(int) IAdd 93 92
+                              Store 37(sum) 94 
+              95:     35(int) Load 37(sum) 
+              96:    7(float) ConvertSToF 95
+              97:   22(fvec4) CompositeConstruct 96 96 96 96
+              98:   22(fvec4) Load 72(mediumfout) 
+              99:   22(fvec4) FAdd 98 97
+                              Store 72(mediumfout) 99 
+             103:   16(bvec2) Load 101(ub2) 
+                              Store 102(param) 103 
+             104:    15(bool) FunctionCall 20(boolfun(vb2;) 102(param)
+                              SelectionMerge 106 None
+                              BranchConditional 104 105 106 
+             105:               Label
+             107:   22(fvec4)   Load 72(mediumfout) 
+             109:   22(fvec4)   CompositeConstruct 108 108 108 108
+             110:   22(fvec4)   FAdd 107 109
+                                Store 72(mediumfout) 110 
+                                Branch 106
+             106:             Label
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
+    13(foo(vf3;):   10(fvec2) Function None 11
+         12(mv3):      9(ptr) FunctionParameter
+              14:             Label
+              25:   22(fvec4) Load 24(highfin) 
+              26:   10(fvec2) VectorShuffle 25 25 0 1
+                              ReturnValue 26
+                              FunctionEnd
+20(boolfun(vb2;):    15(bool) Function None 18
+         19(bv2):     17(ptr) FunctionParameter
+              21:             Label
+              28:   16(bvec2) Load 19(bv2) 
+              32:   16(bvec2) IEqual 28 31
+              33:    15(bool) All 32
+                              ReturnValue 33
+                              FunctionEnd
diff --git a/Test/baseResults/spv.prepost.frag.out b/Test/baseResults/spv.prepost.frag.out
new file mode 100644
index 000000000..5064d5a4e
--- /dev/null
+++ b/Test/baseResults/spv.prepost.frag.out
@@ -0,0 +1,153 @@
+spv.prepost.frag
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 97
+
+                              Source GLSL 140
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 9  "index"
+                              Name 15  "s"
+                              MemberName 15(s) 0  "y"
+                              Name 17  "str"
+                              Name 23  "t"
+                              Name 51  "x"
+                              Name 62  "y"
+                              Name 67  "z"
+                              Name 74  "v"
+                              Name 93  "gl_FragColor"
+                              Decorate 93(gl_FragColor) BuiltIn FragColor
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeInt 32 1
+               8:             TypePointer Function 7(int)
+              10:      7(int) Constant 5
+              11:             TypeFloat 32
+              12:             TypeInt 32 0
+              13:     12(int) Constant 5
+              14:             TypeArray 11(float) 13
+           15(s):             TypeStruct 14
+              16:             TypePointer Function 15(s)
+              18:      7(int) Constant 0
+              19:      7(int) Constant 4
+              20:   11(float) Constant 1073741824
+              21:             TypePointer Function 11(float)
+              25:      7(int) Constant 1
+              29:   11(float) Constant 1065353216
+              72:             TypeVector 11(float) 4
+              73:             TypePointer Function 72(fvec4)
+              75:   11(float) Constant 1077936128
+              76:   11(float) Constant 1082130432
+              77:   72(fvec4) ConstantComposite 29 20 75 76
+              92:             TypePointer Output 72(fvec4)
+93(gl_FragColor):     92(ptr) Variable Output 
+         4(main):           2 Function None 3
+               5:             Label
+        9(index):      8(ptr) Variable Function 
+         17(str):     16(ptr) Variable Function 
+           23(t):     21(ptr) Variable Function 
+           51(x):     21(ptr) Variable Function 
+           62(y):     21(ptr) Variable Function 
+           67(z):     21(ptr) Variable Function 
+           74(v):     73(ptr) Variable Function 
+                              Store 9(index) 10 
+              22:     21(ptr) AccessChain 17(str) 18 19
+                              Store 22 20 
+              24:      7(int) Load 9(index) 
+              26:      7(int) ISub 24 25
+                              Store 9(index) 26 
+              27:     21(ptr) AccessChain 17(str) 18 26
+              28:   11(float) Load 27 
+              30:   11(float) FAdd 28 29
+                              Store 27 30 
+                              Store 23(t) 30 
+              31:   11(float) Load 23(t) 
+              32:     21(ptr) AccessChain 17(str) 18 19
+              33:   11(float) Load 32 
+              34:   11(float) FAdd 33 31
+              35:     21(ptr) AccessChain 17(str) 18 19
+                              Store 35 34 
+              36:     21(ptr) AccessChain 17(str) 18 19
+              37:   11(float) Load 36 
+              38:   11(float) FSub 37 29
+                              Store 36 38 
+                              Store 23(t) 37 
+              39:      7(int) Load 9(index) 
+              40:      7(int) IAdd 39 25
+                              Store 9(index) 40 
+              41:   11(float) Load 23(t) 
+              42:     21(ptr) AccessChain 17(str) 18 39
+              43:   11(float) Load 42 
+              44:   11(float) FAdd 43 41
+              45:     21(ptr) AccessChain 17(str) 18 39
+                              Store 45 44 
+              46:      7(int) Load 9(index) 
+              47:      7(int) ISub 46 25
+                              Store 9(index) 47 
+              48:     21(ptr) AccessChain 17(str) 18 47
+              49:   11(float) Load 48 
+              50:   11(float) FSub 49 29
+                              Store 48 50 
+              52:     21(ptr) AccessChain 17(str) 18 19
+              53:   11(float) Load 52 
+                              Store 51(x) 53 
+              54:   11(float) Load 51(x) 
+              55:   11(float) FAdd 54 29
+                              Store 51(x) 55 
+              56:   11(float) Load 51(x) 
+              57:   11(float) FSub 56 29
+                              Store 51(x) 57 
+              58:   11(float) Load 51(x) 
+              59:   11(float) FAdd 58 29
+                              Store 51(x) 59 
+              60:   11(float) Load 51(x) 
+              61:   11(float) FSub 60 29
+                              Store 51(x) 61 
+              63:   11(float) Load 51(x) 
+              64:   11(float) Load 51(x) 
+              65:   11(float) FAdd 64 29
+                              Store 51(x) 65 
+              66:   11(float) FMul 63 65
+                              Store 62(y) 66 
+              68:   11(float) Load 62(y) 
+              69:   11(float) Load 51(x) 
+              70:   11(float) FSub 69 29
+                              Store 51(x) 70 
+              71:   11(float) FMul 68 69
+                              Store 67(z) 71 
+                              Store 74(v) 77 
+              78:   72(fvec4) Load 74(v) 
+              79:   11(float) CompositeExtract 78 2
+              80:   11(float) FSub 79 29
+              81:   72(fvec4) Load 74(v) 
+              82:   72(fvec4) CompositeInsert 80 81 2
+                              Store 74(v) 82 
+              83:   72(fvec4) Load 74(v) 
+              84:   72(fvec4) CompositeInsert 79 83 1
+                              Store 74(v) 84 
+              85:   72(fvec4) Load 74(v) 
+              86:   11(float) CompositeExtract 85 3
+              87:   11(float) FSub 86 29
+              88:   72(fvec4) Load 74(v) 
+              89:   72(fvec4) CompositeInsert 87 88 3
+                              Store 74(v) 89 
+              90:   72(fvec4) Load 74(v) 
+              91:   72(fvec4) CompositeInsert 87 90 0
+                              Store 74(v) 91 
+              94:   11(float) Load 67(z) 
+              95:   72(fvec4) Load 74(v) 
+              96:   72(fvec4) VectorTimesScalar 94 95
+                              Store 93(gl_FragColor) 96 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.qualifiers.vert.out b/Test/baseResults/spv.qualifiers.vert.out
new file mode 100644
index 000000000..1df120fb6
--- /dev/null
+++ b/Test/baseResults/spv.qualifiers.vert.out
@@ -0,0 +1,67 @@
+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 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 26
+
+                              Source GLSL 430
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4
+                              Name 4  "main"
+                              Name 10  "outVc"
+                              Name 12  "inV"
+                              Name 14  "outVs"
+                              Name 16  "outVf"
+                              Name 18  "outVn"
+                              Name 20  "outVcn"
+                              Name 24  "gl_VertexID"
+                              Name 25  "gl_InstanceID"
+                              Decorate 10(outVc) Smooth 
+                              Decorate 14(outVs) Smooth 
+                              Decorate 16(outVf) Flat 
+                              Decorate 18(outVn) Noperspective 
+                              Decorate 20(outVcn) Noperspective 
+                              Decorate 24(gl_VertexID) BuiltIn VertexId
+                              Decorate 24(gl_VertexID) NoStaticUse 
+                              Decorate 25(gl_InstanceID) BuiltIn InstanceId
+                              Decorate 25(gl_InstanceID) NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeVector 7(float) 4
+               9:             TypePointer Output 8(fvec4)
+       10(outVc):      9(ptr) Variable Output 
+              11:             TypePointer Input 8(fvec4)
+         12(inV):     11(ptr) Variable Input 
+       14(outVs):      9(ptr) Variable Output 
+       16(outVf):      9(ptr) Variable Output 
+       18(outVn):      9(ptr) Variable Output 
+      20(outVcn):      9(ptr) Variable Output 
+              22:             TypeInt 32 1
+              23:             TypePointer Input 22(int)
+ 24(gl_VertexID):     23(ptr) Variable Input 
+25(gl_InstanceID):     23(ptr) Variable Input 
+         4(main):           2 Function None 3
+               5:             Label
+              13:    8(fvec4) Load 12(inV) 
+                              Store 10(outVc) 13 
+              15:    8(fvec4) Load 12(inV) 
+                              Store 14(outVs) 15 
+              17:    8(fvec4) Load 12(inV) 
+                              Store 16(outVf) 17 
+              19:    8(fvec4) Load 12(inV) 
+                              Store 18(outVn) 19 
+              21:    8(fvec4) Load 12(inV) 
+                              Store 20(outVcn) 21 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.set.vert.out b/Test/baseResults/spv.set.vert.out
new file mode 100644
index 000000000..7a18683d2
--- /dev/null
+++ b/Test/baseResults/spv.set.vert.out
@@ -0,0 +1,64 @@
+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 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 25
+
+                              Source GLSL 450
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4
+                              Name 4  "main"
+                              Name 10  "color"
+                              Name 11  "setBuf"
+                              MemberName 11(setBuf) 0  "color"
+                              Name 13  "setBufInst"
+                              Name 21  "sampler"
+                              Name 23  "gl_VertexID"
+                              Name 24  "gl_InstanceID"
+                              Decorate 10(color) Smooth 
+                              Decorate 11(setBuf) GLSLShared 
+                              Decorate 11(setBuf) BufferBlock 
+                              Decorate 13(setBufInst) DescriptorSet 0
+                              Decorate 13(setBufInst) Binding 8
+                              Decorate 21(sampler) DescriptorSet 4
+                              Decorate 21(sampler) Binding 7
+                              Decorate 21(sampler) NoStaticUse 
+                              Decorate 23(gl_VertexID) BuiltIn VertexId
+                              Decorate 23(gl_VertexID) NoStaticUse 
+                              Decorate 24(gl_InstanceID) BuiltIn InstanceId
+                              Decorate 24(gl_InstanceID) NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeVector 7(float) 4
+               9:             TypePointer Output 8(fvec4)
+       10(color):      9(ptr) Variable Output 
+      11(setBuf):             TypeStruct 8(fvec4)
+              12:             TypePointer Uniform 11(setBuf)
+  13(setBufInst):     12(ptr) Variable Uniform 
+              14:             TypeInt 32 1
+              15:     14(int) Constant 0
+              16:             TypePointer Uniform 8(fvec4)
+              19:             TypeSampler7(float) 2D filter+texture
+              20:             TypePointer UniformConstant 19
+     21(sampler):     20(ptr) Variable UniformConstant 
+              22:             TypePointer Input 14(int)
+ 23(gl_VertexID):     22(ptr) Variable Input 
+24(gl_InstanceID):     22(ptr) Variable Input 
+         4(main):           2 Function None 3
+               5:             Label
+              17:     16(ptr) AccessChain 13(setBufInst) 15
+              18:    8(fvec4) Load 17 
+                              Store 10(color) 18 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.simpleFunctionCall.frag.out b/Test/baseResults/spv.simpleFunctionCall.frag.out
new file mode 100644
index 000000000..82a250233
--- /dev/null
+++ b/Test/baseResults/spv.simpleFunctionCall.frag.out
@@ -0,0 +1,53 @@
+spv.simpleFunctionCall.frag
+WARNING: 0:4: varying deprecated in version 130; may be removed in future release
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 23
+
+                              Source GLSL 150
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 10  "foo("
+                              Name 13  "BaseColor"
+                              Name 17  "gl_FragColor"
+                              Name 20  "bigColor"
+                              Name 22  "d"
+                              Decorate 13(BaseColor) Smooth 
+                              Decorate 17(gl_FragColor) BuiltIn FragColor
+                              Decorate 20(bigColor) NoStaticUse 
+                              Decorate 22(d) NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeVector 7(float) 4
+               9:             TypeFunction 8(fvec4) 
+              12:             TypePointer Input 8(fvec4)
+   13(BaseColor):     12(ptr) Variable Input 
+              16:             TypePointer Output 8(fvec4)
+17(gl_FragColor):     16(ptr) Variable Output 
+              19:             TypePointer UniformConstant 8(fvec4)
+    20(bigColor):     19(ptr) Variable UniformConstant 
+              21:             TypePointer UniformConstant 7(float)
+           22(d):     21(ptr) Variable UniformConstant 
+         4(main):           2 Function None 3
+               5:             Label
+              18:    8(fvec4) FunctionCall 10(foo() 
+                              Store 17(gl_FragColor) 18 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
+        10(foo():    8(fvec4) Function None 9
+              11:             Label
+              14:    8(fvec4) Load 13(BaseColor) 
+                              ReturnValue 14
+                              FunctionEnd
diff --git a/Test/baseResults/spv.simpleMat.vert.out b/Test/baseResults/spv.simpleMat.vert.out
new file mode 100644
index 000000000..3dcf879d7
--- /dev/null
+++ b/Test/baseResults/spv.simpleMat.vert.out
@@ -0,0 +1,78 @@
+spv.simpleMat.vert
+
+
+
+Linked vertex stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 44
+
+                              Source GLSL 330
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4
+                              Name 4  "main"
+                              Name 10  "glPos"
+                              Name 13  "mvp"
+                              Name 16  "v"
+                              Name 20  "f"
+                              Name 24  "am3"
+                              Name 35  "arraym"
+                              Name 42  "gl_VertexID"
+                              Name 43  "gl_InstanceID"
+                              Decorate 10(glPos) Smooth 
+                              Decorate 20(f) Smooth 
+                              Decorate 42(gl_VertexID) BuiltIn VertexId
+                              Decorate 42(gl_VertexID) NoStaticUse 
+                              Decorate 43(gl_InstanceID) BuiltIn InstanceId
+                              Decorate 43(gl_InstanceID) NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeVector 7(float) 4
+               9:             TypePointer Output 8(fvec4)
+       10(glPos):      9(ptr) Variable Output 
+              11:             TypeMatrix 8(fvec4) 4
+              12:             TypePointer UniformConstant 11
+         13(mvp):     12(ptr) Variable UniformConstant 
+              15:             TypePointer Input 8(fvec4)
+           16(v):     15(ptr) Variable Input 
+              19:             TypePointer Output 7(float)
+           20(f):     19(ptr) Variable Output 
+              21:             TypeVector 7(float) 3
+              22:             TypeMatrix 21(fvec3) 3
+              23:             TypePointer Input 22
+         24(am3):     23(ptr) Variable Input 
+              25:             TypeInt 32 1
+              26:     25(int) Constant 2
+              27:             TypePointer Input 21(fvec3)
+              31:             TypeInt 32 0
+              32:     31(int) Constant 3
+              33:             TypeArray 11 32
+              34:             TypePointer Input 33
+      35(arraym):     34(ptr) Variable Input 
+              36:     25(int) Constant 1
+              41:             TypePointer Input 25(int)
+ 42(gl_VertexID):     41(ptr) Variable Input 
+43(gl_InstanceID):     41(ptr) Variable Input 
+         4(main):           2 Function None 3
+               5:             Label
+              14:          11 Load 13(mvp) 
+              17:    8(fvec4) Load 16(v) 
+              18:    8(fvec4) MatrixTimesVector 14 17
+                              Store 10(glPos) 18 
+              28:     27(ptr) AccessChain 24(am3) 26
+              29:   21(fvec3) Load 28 
+              30:    7(float) CompositeExtract 29 1
+              37:     15(ptr) AccessChain 35(arraym) 36 26
+              38:    8(fvec4) Load 37 
+              39:    7(float) CompositeExtract 38 3
+              40:    7(float) FAdd 30 39
+                              Store 20(f) 40 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.structAssignment.frag.out b/Test/baseResults/spv.structAssignment.frag.out
new file mode 100644
index 000000000..cc4f3bf49
--- /dev/null
+++ b/Test/baseResults/spv.structAssignment.frag.out
@@ -0,0 +1,98 @@
+spv.structAssignment.frag
+WARNING: 0:4: varying deprecated in version 130; may be removed in future release
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 50
+
+                              Source GLSL 130
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 9  "lunarStruct1"
+                              MemberName 9(lunarStruct1) 0  "i"
+                              MemberName 9(lunarStruct1) 1  "f"
+                              Name 10  "lunarStruct2"
+                              MemberName 10(lunarStruct2) 0  "i"
+                              MemberName 10(lunarStruct2) 1  "f"
+                              MemberName 10(lunarStruct2) 2  "s1_1"
+                              Name 11  "lunarStruct3"
+                              MemberName 11(lunarStruct3) 0  "s2_1"
+                              MemberName 11(lunarStruct3) 1  "i"
+                              MemberName 11(lunarStruct3) 2  "f"
+                              MemberName 11(lunarStruct3) 3  "s1_1"
+                              Name 13  "foo3"
+                              Name 23  "locals2"
+                              Name 28  "foo2"
+                              Name 32  "gl_FragColor"
+                              Name 40  "sampler"
+                              Name 44  "coord"
+                              Name 49  "foo"
+                              Decorate 32(gl_FragColor) BuiltIn FragColor
+                              Decorate 44(coord) Smooth 
+                              Decorate 49(foo) NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeInt 32 1
+               8:             TypeFloat 32
+ 9(lunarStruct1):             TypeStruct 7(int) 8(float)
+10(lunarStruct2):             TypeStruct 7(int) 8(float) 9(lunarStruct1)
+11(lunarStruct3):             TypeStruct 10(lunarStruct2) 7(int) 8(float) 9(lunarStruct1)
+              12:             TypePointer UniformConstant 11(lunarStruct3)
+        13(foo3):     12(ptr) Variable UniformConstant 
+              14:      7(int) Constant 0
+              15:             TypePointer UniformConstant 7(int)
+              18:             TypeBool
+              22:             TypePointer Function 10(lunarStruct2)
+              24:             TypePointer UniformConstant 10(lunarStruct2)
+        28(foo2):     24(ptr) Variable UniformConstant 
+              30:             TypeVector 8(float) 4
+              31:             TypePointer Output 30(fvec4)
+32(gl_FragColor):     31(ptr) Variable Output 
+              33:      7(int) Constant 2
+              34:      7(int) Constant 1
+              35:             TypePointer Function 8(float)
+              38:             TypeSampler8(float) 2D filter+texture
+              39:             TypePointer UniformConstant 38
+     40(sampler):     39(ptr) Variable UniformConstant 
+              42:             TypeVector 8(float) 2
+              43:             TypePointer Input 42(fvec2)
+       44(coord):     43(ptr) Variable Input 
+              48:             TypePointer UniformConstant 9(lunarStruct1)
+         49(foo):     48(ptr) Variable UniformConstant 
+         4(main):           2 Function None 3
+               5:             Label
+     23(locals2):     22(ptr) Variable Function 
+              16:     15(ptr) AccessChain 13(foo3) 14 14
+              17:      7(int) Load 16 
+              19:    18(bool) SGreaterThan 17 14
+                              SelectionMerge 21 None
+                              BranchConditional 19 20 27 
+              20:               Label
+              25:     24(ptr)   AccessChain 13(foo3) 14
+              26:10(lunarStruct2)   Load 25 
+                                Store 23(locals2) 26 
+                                Branch 21
+              27:               Label
+              29:10(lunarStruct2)   Load 28(foo2) 
+                                Store 23(locals2) 29 
+                                Branch 21
+              21:             Label
+              36:     35(ptr) AccessChain 23(locals2) 33 34
+              37:    8(float) Load 36 
+              41:          38 Load 40(sampler) 
+              45:   42(fvec2) Load 44(coord) 
+              46:   30(fvec4) TextureSample 41 45 
+              47:   30(fvec4) VectorTimesScalar 37 46
+                              Store 32(gl_FragColor) 47 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.structDeref.frag.out b/Test/baseResults/spv.structDeref.frag.out
new file mode 100644
index 000000000..6a9146935
--- /dev/null
+++ b/Test/baseResults/spv.structDeref.frag.out
@@ -0,0 +1,193 @@
+spv.structDeref.frag
+WARNING: 0:4: varying deprecated in version 130; may be removed in future release
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 120
+
+                              Source GLSL 130
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 9  "s0"
+                              MemberName 9(s0) 0  "i"
+                              Name 10  "s1"
+                              MemberName 10(s1) 0  "i"
+                              MemberName 10(s1) 1  "f"
+                              MemberName 10(s1) 2  "s0_1"
+                              Name 11  "s2"
+                              MemberName 11(s2) 0  "i"
+                              MemberName 11(s2) 1  "f"
+                              MemberName 11(s2) 2  "s1_1"
+                              Name 15  "s3"
+                              MemberName 15(s3) 0  "s2_1"
+                              MemberName 15(s3) 1  "i"
+                              MemberName 15(s3) 2  "f"
+                              MemberName 15(s3) 3  "s1_1"
+                              Name 17  "foo3"
+                              Name 28  "locals2"
+                              Name 41  "fArray"
+                              Name 47  "locals1Array"
+                              Name 50  "foo1"
+                              Name 54  "locals0"
+                              Name 55  "s00"
+                              MemberName 55(s00) 0  "s0_0"
+                              Name 57  "locals00"
+                              Name 62  "coord"
+                              Name 69  "foo0"
+                              Name 84  "foo00"
+                              Name 97  "gl_FragColor"
+                              Name 113  "sampler"
+                              Name 119  "foo2"
+                              Decorate 62(coord) Smooth 
+                              Decorate 97(gl_FragColor) BuiltIn FragColor
+                              Decorate 119(foo2) NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeInt 32 1
+               8:             TypeFloat 32
+           9(s0):             TypeStruct 7(int)
+          10(s1):             TypeStruct 7(int) 8(float) 9(s0)
+          11(s2):             TypeStruct 7(int) 8(float) 10(s1)
+              12:             TypeInt 32 0
+              13:     12(int) Constant 12
+              14:             TypeArray 11(s2) 13
+          15(s3):             TypeStruct 14 7(int) 8(float) 10(s1)
+              16:             TypePointer UniformConstant 15(s3)
+        17(foo3):     16(ptr) Variable UniformConstant 
+              18:      7(int) Constant 0
+              19:      7(int) Constant 9
+              20:             TypePointer UniformConstant 7(int)
+              23:             TypeBool
+              27:             TypePointer Function 11(s2)
+              29:      7(int) Constant 1
+              30:    8(float) Constant 1065353216
+              31:             TypePointer Function 8(float)
+              33:      7(int) Constant 2
+              34:       9(s0) ConstantComposite 18
+              35:      10(s1) ConstantComposite 18 30 34
+              36:             TypePointer Function 10(s1)
+              38:     12(int) Constant 6
+              39:             TypeArray 8(float) 38
+              40:             TypePointer Function 39
+              42:    8(float) Constant 0
+              43:          39 ConstantComposite 42 42 42 42 42 42
+              44:     12(int) Constant 10
+              45:             TypeArray 10(s1) 44
+              46:             TypePointer Function 45
+              48:      7(int) Constant 6
+              49:             TypePointer UniformConstant 10(s1)
+        50(foo1):     49(ptr) Variable UniformConstant 
+              53:             TypePointer Function 9(s0)
+         55(s00):             TypeStruct 9(s0)
+              56:             TypePointer Function 55(s00)
+              58:     55(s00) ConstantComposite 34
+              60:             TypeVector 8(float) 2
+              61:             TypePointer Input 60(fvec2)
+       62(coord):     61(ptr) Variable Input 
+              68:             TypePointer UniformConstant 9(s0)
+        69(foo0):     68(ptr) Variable UniformConstant 
+              73:    8(float) Constant 1073741824
+              74:    8(float) Constant 1077936128
+              75:    8(float) Constant 1082130432
+              76:    8(float) Constant 1084227584
+              77:          39 ConstantComposite 42 30 73 74 75 76
+              83:             TypePointer UniformConstant 55(s00)
+       84(foo00):     83(ptr) Variable UniformConstant 
+              86:             TypePointer Function 7(int)
+              89:      7(int) Constant 5
+              95:             TypeVector 8(float) 4
+              96:             TypePointer Output 95(fvec4)
+97(gl_FragColor):     96(ptr) Variable Output 
+             104:      7(int) Constant 3
+             111:             TypeSampler8(float) 2D filter+texture
+             112:             TypePointer UniformConstant 111
+    113(sampler):    112(ptr) Variable UniformConstant 
+             118:             TypePointer UniformConstant 11(s2)
+       119(foo2):    118(ptr) Variable UniformConstant 
+         4(main):           2 Function None 3
+               5:             Label
+     28(locals2):     27(ptr) Variable Function 
+      41(fArray):     40(ptr) Variable Function 
+47(locals1Array):     46(ptr) Variable Function 
+     54(locals0):     53(ptr) Variable Function 
+    57(locals00):     56(ptr) Variable Function 
+              21:     20(ptr) AccessChain 17(foo3) 18 19 18
+              22:      7(int) Load 21 
+              24:    23(bool) SGreaterThan 22 18
+                              SelectionMerge 26 None
+                              BranchConditional 24 25 59 
+              25:               Label
+              32:     31(ptr)   AccessChain 28(locals2) 29
+                                Store 32 30 
+              37:     36(ptr)   AccessChain 28(locals2) 33
+                                Store 37 35 
+                                Store 41(fArray) 43 
+              51:      10(s1)   Load 50(foo1) 
+              52:     36(ptr)   AccessChain 47(locals1Array) 48
+                                Store 52 51 
+                                Store 54(locals0) 34 
+                                Store 57(locals00) 58 
+                                Branch 26
+              59:               Label
+              63:   60(fvec2)   Load 62(coord) 
+              64:    8(float)   CompositeExtract 63 0
+              65:     31(ptr)   AccessChain 28(locals2) 29
+                                Store 65 64 
+              66:   60(fvec2)   Load 62(coord) 
+              67:    8(float)   CompositeExtract 66 1
+              70:       9(s0)   Load 69(foo0) 
+              71:      10(s1)   CompositeConstruct 29 67 70
+              72:     36(ptr)   AccessChain 28(locals2) 33
+                                Store 72 71 
+                                Store 41(fArray) 77 
+              78:     36(ptr)   AccessChain 28(locals2) 33
+              79:      10(s1)   Load 78 
+              80:     36(ptr)   AccessChain 47(locals1Array) 48
+                                Store 80 79 
+              81:     68(ptr)   AccessChain 50(foo1) 33
+              82:       9(s0)   Load 81 
+                                Store 54(locals0) 82 
+              85:     55(s00)   Load 84(foo00) 
+                                Store 57(locals00) 85 
+                                Branch 26
+              26:             Label
+              87:     86(ptr) AccessChain 54(locals0) 18
+              88:      7(int) Load 87 
+              90:    23(bool) SGreaterThan 88 89
+                              SelectionMerge 92 None
+                              BranchConditional 90 91 92 
+              91:               Label
+              93:     53(ptr)   AccessChain 57(locals00) 18
+              94:       9(s0)   Load 93 
+                                Store 54(locals0) 94 
+                                Branch 92
+              92:             Label
+              98:     86(ptr) AccessChain 54(locals0) 18
+              99:      7(int) Load 98 
+             100:    8(float) ConvertSToF 99
+             101:     31(ptr) AccessChain 47(locals1Array) 48 29
+             102:    8(float) Load 101 
+             103:    8(float) FAdd 100 102
+             105:     31(ptr) AccessChain 41(fArray) 104
+             106:    8(float) Load 105 
+             107:    8(float) FAdd 103 106
+             108:     31(ptr) AccessChain 28(locals2) 33 29
+             109:    8(float) Load 108 
+             110:    8(float) FAdd 107 109
+             114:         111 Load 113(sampler) 
+             115:   60(fvec2) Load 62(coord) 
+             116:   95(fvec4) TextureSample 114 115 
+             117:   95(fvec4) VectorTimesScalar 110 116
+                              Store 97(gl_FragColor) 117 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.structure.frag.out b/Test/baseResults/spv.structure.frag.out
new file mode 100644
index 000000000..4cfdd002a
--- /dev/null
+++ b/Test/baseResults/spv.structure.frag.out
@@ -0,0 +1,105 @@
+spv.structure.frag
+WARNING: 0:3: varying deprecated in version 130; may be removed in future release
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 61
+
+                              Source GLSL 130
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 9  "scale"
+                              Name 19  "lunarStruct1"
+                              MemberName 19(lunarStruct1) 0  "i"
+                              MemberName 19(lunarStruct1) 1  "f"
+                              MemberName 19(lunarStruct1) 2  "color"
+                              Name 22  "lunarStruct2"
+                              MemberName 22(lunarStruct2) 0  "i"
+                              MemberName 22(lunarStruct2) 1  "f"
+                              MemberName 22(lunarStruct2) 2  "s1_1"
+                              Name 25  "foo2"
+                              Name 47  "gl_FragColor"
+                              Name 51  "sampler"
+                              Name 55  "coord"
+                              Name 60  "foo"
+                              Decorate 47(gl_FragColor) BuiltIn FragColor
+                              Decorate 55(coord) Smooth 
+                              Decorate 60(foo) NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypePointer Function 7(float)
+              10:    7(float) Constant 0
+              11:             TypeInt 32 1
+              12:             TypeInt 32 0
+              13:     12(int) Constant 5
+              14:             TypeArray 11(int) 13
+              15:     12(int) Constant 4
+              16:             TypeArray 7(float) 15
+              17:             TypeVector 7(float) 4
+              18:             TypeArray 17(fvec4) 13
+19(lunarStruct1):             TypeStruct 11(int) 16 18
+              20:     12(int) Constant 7
+              21:             TypeArray 19(lunarStruct1) 20
+22(lunarStruct2):             TypeStruct 14 7(float) 21
+              23:             TypeArray 22(lunarStruct2) 13
+              24:             TypePointer UniformConstant 23
+        25(foo2):     24(ptr) Variable UniformConstant 
+              26:     11(int) Constant 3
+              27:     11(int) Constant 0
+              28:     11(int) Constant 4
+              29:             TypePointer UniformConstant 11(int)
+              32:             TypeBool
+              36:     11(int) Constant 2
+              37:             TypePointer UniformConstant 17(fvec4)
+              42:     11(int) Constant 1
+              43:             TypePointer UniformConstant 7(float)
+              46:             TypePointer Output 17(fvec4)
+47(gl_FragColor):     46(ptr) Variable Output 
+              49:             TypeSampler7(float) 2D filter+texture
+              50:             TypePointer UniformConstant 49
+     51(sampler):     50(ptr) Variable UniformConstant 
+              53:             TypeVector 7(float) 2
+              54:             TypePointer Input 53(fvec2)
+       55(coord):     54(ptr) Variable Input 
+              59:             TypePointer UniformConstant 19(lunarStruct1)
+         60(foo):     59(ptr) Variable UniformConstant 
+         4(main):           2 Function None 3
+               5:             Label
+        9(scale):      8(ptr) Variable Function 
+                              Store 9(scale) 10 
+              30:     29(ptr) AccessChain 25(foo2) 26 27 28
+              31:     11(int) Load 30 
+              33:    32(bool) SGreaterThan 31 27
+                              SelectionMerge 35 None
+                              BranchConditional 33 34 41 
+              34:               Label
+              38:     37(ptr)   AccessChain 25(foo2) 26 36 36 36 26
+              39:   17(fvec4)   Load 38 
+              40:    7(float)   CompositeExtract 39 0
+                                Store 9(scale) 40 
+                                Branch 35
+              41:               Label
+              44:     43(ptr)   AccessChain 25(foo2) 26 36 36 42 26
+              45:    7(float)   Load 44 
+                                Store 9(scale) 45 
+                                Branch 35
+              35:             Label
+              48:    7(float) Load 9(scale) 
+              52:          49 Load 51(sampler) 
+              56:   53(fvec2) Load 55(coord) 
+              57:   17(fvec4) TextureSample 52 56 
+              58:   17(fvec4) VectorTimesScalar 48 57
+                              Store 47(gl_FragColor) 58 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.switch.frag.out b/Test/baseResults/spv.switch.frag.out
new file mode 100644
index 000000000..68a102fe1
--- /dev/null
+++ b/Test/baseResults/spv.switch.frag.out
@@ -0,0 +1,382 @@
+spv.switch.frag
+WARNING: 0:121: 'switch' : last case/default label not followed by statements 
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 249
+
+                              Source GLSL 300
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 16  "foo1(vf4;vf4;i1;"
+                              Name 13  "v1"
+                              Name 14  "v2"
+                              Name 15  "i1"
+                              Name 21  "foo2(vf4;vf4;i1;"
+                              Name 18  "v1"
+                              Name 19  "v2"
+                              Name 20  "i1"
+                              Name 59  "local"
+                              Name 61  "c"
+                              Name 72  "f"
+                              Name 74  "x"
+                              Name 128  "d"
+                              Name 154  "i"
+                              Name 172  "j"
+                              Name 222  "color"
+                              Name 228  "v"
+                              Name 229  "param"
+                              Name 231  "param"
+                              Name 233  "param"
+                              Name 239  "param"
+                              Name 241  "param"
+                              Name 243  "param"
+                              Decorate 59(local) PrecisionMedium 
+                              Decorate 61(c) PrecisionMedium 
+                              Decorate 72(f) PrecisionMedium 
+                              Decorate 74(x) PrecisionMedium 
+                              Decorate 74(x) Smooth 
+                              Decorate 128(d) PrecisionMedium 
+                              Decorate 154(i) PrecisionMedium 
+                              Decorate 172(j) PrecisionMedium 
+                              Decorate 222(color) PrecisionMedium 
+                              Decorate 228(v) PrecisionMedium 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeVector 7(float) 4
+               9:             TypePointer Function 8(fvec4)
+              10:             TypeInt 32 1
+              11:             TypePointer Function 10(int)
+              12:             TypeFunction 8(fvec4) 9(ptr) 9(ptr) 11(ptr)
+              37:    7(float) Constant 0
+              38:    8(fvec4) ConstantComposite 37 37 37 37
+              48:    7(float) Constant 1065353216
+              49:    8(fvec4) ConstantComposite 48 48 48 48
+              60:             TypePointer UniformConstant 10(int)
+           61(c):     60(ptr) Variable UniformConstant 
+              64:     10(int) Constant 1
+              71:             TypePointer Function 7(float)
+              73:             TypePointer Input 7(float)
+           74(x):     73(ptr) Variable Input 
+          128(d):     60(ptr) Variable UniformConstant 
+             155:     10(int) Constant 0
+             159:     10(int) Constant 10
+             160:             TypeBool
+             173:     10(int) Constant 20
+             177:     10(int) Constant 30
+             183:    7(float) Constant 1120429670
+             203:    7(float) Constant 1079739679
+             221:             TypePointer Output 7(float)
+      222(color):    221(ptr) Variable Output 
+             227:             TypePointer UniformConstant 8(fvec4)
+          228(v):    227(ptr) Variable UniformConstant 
+         4(main):           2 Function None 3
+               5:             Label
+       59(local):     11(ptr) Variable Function 
+           72(f):     71(ptr) Variable Function 
+          154(i):     11(ptr) Variable Function 
+          172(j):     11(ptr) Variable Function 
+      229(param):      9(ptr) Variable Function 
+      231(param):      9(ptr) Variable Function 
+      233(param):     11(ptr) Variable Function 
+      239(param):      9(ptr) Variable Function 
+      241(param):      9(ptr) Variable Function 
+      243(param):     11(ptr) Variable Function 
+              62:     10(int) Load 61(c) 
+                              Store 59(local) 62 
+              63:     10(int) Load 59(local) 
+              65:     10(int) IAdd 63 64
+                              Store 59(local) 65 
+              66:     10(int) Load 61(c) 
+                              SelectionMerge 70 None
+                              Switch 66 69 
+                                     case 1: 67
+                                     case 2: 68
+              67:               Label
+              75:    7(float)   Load 74(x) 
+              76:    7(float)   ExtInst 1(GLSL.std.450) 10(sin) 75
+                                Store 72(f) 76 
+                                Branch 70
+              68:               Label
+              78:    7(float)   Load 74(x) 
+              79:    7(float)   ExtInst 1(GLSL.std.450) 11(cos) 78
+                                Store 72(f) 79 
+                                Branch 70
+              69:               Label
+              81:    7(float)   Load 74(x) 
+              82:    7(float)   ExtInst 1(GLSL.std.450) 12(tan) 81
+                                Store 72(f) 82 
+                                Branch 70
+              70:             Label
+              84:     10(int) Load 61(c) 
+                              SelectionMerge 88 None
+                              Switch 84 87 
+                                     case 1: 85
+                                     case 2: 86
+              85:               Label
+              89:    7(float)   Load 74(x) 
+              90:    7(float)   ExtInst 1(GLSL.std.450) 10(sin) 89
+              91:    7(float)   Load 72(f) 
+              92:    7(float)   FAdd 91 90
+                                Store 72(f) 92 
+                                Branch 86
+              86:               Label
+              93:    7(float)   Load 74(x) 
+              94:    7(float)   ExtInst 1(GLSL.std.450) 11(cos) 93
+              95:    7(float)   Load 72(f) 
+              96:    7(float)   FAdd 95 94
+                                Store 72(f) 96 
+                                Branch 88
+              87:               Label
+              98:    7(float)   Load 74(x) 
+              99:    7(float)   ExtInst 1(GLSL.std.450) 12(tan) 98
+             100:    7(float)   Load 72(f) 
+             101:    7(float)   FAdd 100 99
+                                Store 72(f) 101 
+                                Branch 88
+              88:             Label
+             103:     10(int) Load 61(c) 
+                              SelectionMerge 106 None
+                              Switch 103 106 
+                                     case 1: 104
+                                     case 2: 105
+             104:               Label
+             107:    7(float)   Load 74(x) 
+             108:    7(float)   ExtInst 1(GLSL.std.450) 10(sin) 107
+             109:    7(float)   Load 72(f) 
+             110:    7(float)   FAdd 109 108
+                                Store 72(f) 110 
+                                Branch 106
+             105:               Label
+             112:    7(float)   Load 74(x) 
+             113:    7(float)   ExtInst 1(GLSL.std.450) 11(cos) 112
+             114:    7(float)   Load 72(f) 
+             115:    7(float)   FAdd 114 113
+                                Store 72(f) 115 
+                                Branch 106
+             106:             Label
+             118:     10(int) Load 61(c) 
+                              SelectionMerge 122 None
+                              Switch 118 121 
+                                     case 1: 119
+                                     case 2: 120
+             119:               Label
+             123:    7(float)   Load 74(x) 
+             124:    7(float)   ExtInst 1(GLSL.std.450) 10(sin) 123
+             125:    7(float)   Load 72(f) 
+             126:    7(float)   FAdd 125 124
+                                Store 72(f) 126 
+                                Branch 122
+             120:               Label
+             129:     10(int)   Load 128(d) 
+                                SelectionMerge 132 None
+                                Switch 129 132 
+                                       case 1: 130
+                                       case 2: 131
+             130:                 Label
+             133:    7(float)     Load 74(x) 
+             134:    7(float)     Load 74(x) 
+             135:    7(float)     FMul 133 134
+             136:    7(float)     Load 74(x) 
+             137:    7(float)     FMul 135 136
+             138:    7(float)     Load 72(f) 
+             139:    7(float)     FAdd 138 137
+                                  Store 72(f) 139 
+                                  Branch 132
+             131:                 Label
+             141:    7(float)     Load 74(x) 
+             142:    7(float)     Load 74(x) 
+             143:    7(float)     FMul 141 142
+             144:    7(float)     Load 72(f) 
+             145:    7(float)     FAdd 144 143
+                                  Store 72(f) 145 
+                                  Branch 132
+             132:               Label
+                                Branch 122
+             121:               Label
+             149:    7(float)   Load 74(x) 
+             150:    7(float)   ExtInst 1(GLSL.std.450) 12(tan) 149
+             151:    7(float)   Load 72(f) 
+             152:    7(float)   FAdd 151 150
+                                Store 72(f) 152 
+                                Branch 122
+             122:             Label
+                              Store 154(i) 155 
+                              Branch 156
+             156:             Label
+             158:     10(int) Load 154(i) 
+             161:   160(bool) SLessThan 158 159
+                              LoopMerge 157 None
+                              BranchConditional 161 162 157 
+             162:               Label
+             163:     10(int)   Load 61(c) 
+                                SelectionMerge 167 None
+                                Switch 163 166 
+                                       case 1: 164
+                                       case 2: 165
+             164:                 Label
+             168:    7(float)     Load 74(x) 
+             169:    7(float)     ExtInst 1(GLSL.std.450) 10(sin) 168
+             170:    7(float)     Load 72(f) 
+             171:    7(float)     FAdd 170 169
+                                  Store 72(f) 171 
+                                  Store 172(j) 173 
+                                  Branch 174
+             174:                 Label
+             176:     10(int)     Load 172(j) 
+             178:   160(bool)     SLessThan 176 177
+                                  LoopMerge 175 None
+                                  BranchConditional 178 179 175 
+             179:                   Label
+             180:    7(float)       Load 72(f) 
+             181:    7(float)       FAdd 180 48
+                                    Store 72(f) 181 
+             182:    7(float)       Load 72(f) 
+             184:   160(bool)       FOrdLessThan 182 183
+                                    SelectionMerge 186 None
+                                    BranchConditional 184 185 186 
+             185:                     Label
+                                      Branch 175
+             186:                   Label
+             188:     10(int)       Load 172(j) 
+             189:     10(int)       IAdd 188 64
+                                    Store 172(j) 189 
+                                    Branch 174
+             175:                 Label
+                                  Branch 167
+             165:                 Label
+             191:    7(float)     Load 74(x) 
+             192:    7(float)     ExtInst 1(GLSL.std.450) 11(cos) 191
+             193:    7(float)     Load 72(f) 
+             194:    7(float)     FAdd 193 192
+                                  Store 72(f) 194 
+                                  Branch 167
+             166:                 Label
+             197:    7(float)     Load 74(x) 
+             198:    7(float)     ExtInst 1(GLSL.std.450) 12(tan) 197
+             199:    7(float)     Load 72(f) 
+             200:    7(float)     FAdd 199 198
+                                  Store 72(f) 200 
+                                  Branch 167
+             167:               Label
+             202:    7(float)   Load 72(f) 
+             204:   160(bool)   FOrdLessThan 202 203
+                                SelectionMerge 206 None
+                                BranchConditional 204 205 206 
+             205:                 Label
+                                  Branch 157
+             206:               Label
+             208:     10(int)   Load 154(i) 
+             209:     10(int)   IAdd 208 64
+                                Store 154(i) 209 
+                                Branch 156
+             157:             Label
+             210:     10(int) Load 61(c) 
+                              SelectionMerge 213 None
+                              Switch 210 213 
+                                     case 1: 211
+                                     case 2: 212
+             211:               Label
+             214:    7(float)   Load 74(x) 
+             215:    7(float)   ExtInst 1(GLSL.std.450) 10(sin) 214
+             216:    7(float)   Load 72(f) 
+             217:    7(float)   FAdd 216 215
+                                Store 72(f) 217 
+                                Branch 213
+             212:               Label
+                                Branch 213
+             213:             Label
+             223:    7(float) Load 72(f) 
+             224:     10(int) Load 59(local) 
+             225:    7(float) ConvertSToF 224
+             226:    7(float) FAdd 223 225
+                              Store 222(color) 226 
+             230:    8(fvec4) Load 228(v) 
+                              Store 229(param) 230 
+             232:    8(fvec4) Load 228(v) 
+                              Store 231(param) 232 
+             234:     10(int) Load 61(c) 
+                              Store 233(param) 234 
+             235:    8(fvec4) FunctionCall 16(foo1(vf4;vf4;i1;) 229(param) 231(param) 233(param)
+             236:    7(float) CompositeExtract 235 1
+             237:    7(float) Load 222(color) 
+             238:    7(float) FAdd 237 236
+                              Store 222(color) 238 
+             240:    8(fvec4) Load 228(v) 
+                              Store 239(param) 240 
+             242:    8(fvec4) Load 228(v) 
+                              Store 241(param) 242 
+             244:     10(int) Load 61(c) 
+                              Store 243(param) 244 
+             245:    8(fvec4) FunctionCall 21(foo2(vf4;vf4;i1;) 239(param) 241(param) 243(param)
+             246:    7(float) CompositeExtract 245 2
+             247:    7(float) Load 222(color) 
+             248:    7(float) FAdd 247 246
+                              Store 222(color) 248 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
+16(foo1(vf4;vf4;i1;):    8(fvec4) Function None 12
+          13(v1):      9(ptr) FunctionParameter
+          14(v2):      9(ptr) FunctionParameter
+          15(i1):     11(ptr) FunctionParameter
+              17:             Label
+              23:     10(int) Load 15(i1) 
+                              SelectionMerge 27 None
+                              Switch 23 27 
+                                     case 0: 24
+                                     case 2: 25
+                                     case 1: 25
+                                     case 3: 26
+              24:               Label
+              28:    8(fvec4)   Load 13(v1) 
+                                ReturnValue 28
+              25:               Label
+              30:    8(fvec4)   Load 14(v2) 
+                                ReturnValue 30
+              26:               Label
+              32:    8(fvec4)   Load 13(v1) 
+              33:    8(fvec4)   Load 14(v2) 
+              34:    8(fvec4)   FMul 32 33
+                                ReturnValue 34
+              27:             Label
+                              ReturnValue 38
+                              FunctionEnd
+21(foo2(vf4;vf4;i1;):    8(fvec4) Function None 12
+          18(v1):      9(ptr) FunctionParameter
+          19(v2):      9(ptr) FunctionParameter
+          20(i1):     11(ptr) FunctionParameter
+              22:             Label
+              40:     10(int) Load 20(i1) 
+                              SelectionMerge 45 None
+                              Switch 40 45 
+                                     case 0: 41
+                                     case 2: 42
+                                     case 1: 43
+                                     case 3: 44
+              41:               Label
+              46:    8(fvec4)   Load 18(v1) 
+                                ReturnValue 46
+              42:               Label
+                                ReturnValue 49
+              43:               Label
+              51:    8(fvec4)   Load 19(v2) 
+                                ReturnValue 51
+              44:               Label
+              53:    8(fvec4)   Load 18(v1) 
+              54:    8(fvec4)   Load 19(v2) 
+              55:    8(fvec4)   FMul 53 54
+                                ReturnValue 55
+              45:             Label
+                              ReturnValue 38
+                              FunctionEnd
diff --git a/Test/baseResults/spv.swizzle.frag.out b/Test/baseResults/spv.swizzle.frag.out
new file mode 100644
index 000000000..c9a6a2c86
--- /dev/null
+++ b/Test/baseResults/spv.swizzle.frag.out
@@ -0,0 +1,179 @@
+spv.swizzle.frag
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 112
+
+                              Source GLSL 110
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 9  "blendscale"
+                              Name 13  "w"
+                              Name 15  "u"
+                              Name 17  "w_dep"
+                              Name 19  "w_reorder"
+                              Name 21  "w2"
+                              Name 23  "w_flow"
+                              Name 30  "t"
+                              Name 49  "w_undef"
+                              Name 56  "p"
+                              Name 70  "gl_FragColor"
+                              Name 82  "c"
+                              Name 84  "rep"
+                              Name 111  "blend"
+                              Decorate 30(t) Smooth 
+                              Decorate 70(gl_FragColor) BuiltIn FragColor
+                              Decorate 111(blend) NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypePointer Function 7(float)
+              10:    7(float) Constant 1071971828
+              11:             TypeVector 7(float) 4
+              12:             TypePointer Function 11(fvec4)
+              14:             TypePointer UniformConstant 11(fvec4)
+           15(u):     14(ptr) Variable UniformConstant 
+              28:             TypeVector 7(float) 2
+              29:             TypePointer Input 28(fvec2)
+           30(t):     29(ptr) Variable Input 
+              54:             TypeBool
+              55:             TypePointer UniformConstant 54(bool)
+           56(p):     55(ptr) Variable UniformConstant 
+              69:             TypePointer Output 11(fvec4)
+70(gl_FragColor):     69(ptr) Variable Output 
+              81:             TypePointer Function 28(fvec2)
+              85:    7(float) Constant 0
+              86:    7(float) Constant 1065353216
+              87:   11(fvec4) ConstantComposite 85 85 85 86
+              93:    7(float) Constant 3212836864
+             104:    7(float) Constant 1079613850
+             110:             TypePointer UniformConstant 7(float)
+      111(blend):    110(ptr) Variable UniformConstant 
+         4(main):           2 Function None 3
+               5:             Label
+   9(blendscale):      8(ptr) Variable Function 
+           13(w):     12(ptr) Variable Function 
+       17(w_dep):     12(ptr) Variable Function 
+   19(w_reorder):     12(ptr) Variable Function 
+          21(w2):     12(ptr) Variable Function 
+      23(w_flow):     12(ptr) Variable Function 
+     49(w_undef):     12(ptr) Variable Function 
+           82(c):     81(ptr) Variable Function 
+         84(rep):     12(ptr) Variable Function 
+                              Store 9(blendscale) 10 
+              16:   11(fvec4) Load 15(u) 
+                              Store 13(w) 16 
+              18:   11(fvec4) Load 15(u) 
+                              Store 17(w_dep) 18 
+              20:   11(fvec4) Load 15(u) 
+                              Store 19(w_reorder) 20 
+              22:   11(fvec4) Load 15(u) 
+                              Store 21(w2) 22 
+              24:   11(fvec4) Load 15(u) 
+                              Store 23(w_flow) 24 
+              25:    7(float) Load 9(blendscale) 
+              26:   11(fvec4) Load 19(w_reorder) 
+              27:   11(fvec4) CompositeInsert 25 26 2
+                              Store 19(w_reorder) 27 
+              31:   28(fvec2) Load 30(t) 
+              32:   11(fvec4) Load 13(w) 
+              33:   11(fvec4) VectorShuffle 32 31 0 5 2 4
+                              Store 13(w) 33 
+              34:    7(float) Load 9(blendscale) 
+              35:   11(fvec4) Load 19(w_reorder) 
+              36:   11(fvec4) CompositeInsert 34 35 0
+                              Store 19(w_reorder) 36 
+              37:   11(fvec4) Load 15(u) 
+              38:   11(fvec4) VectorShuffle 37 37 2 3 0 1
+                              Store 21(w2) 38 
+              39:    7(float) Load 9(blendscale) 
+              40:   11(fvec4) Load 19(w_reorder) 
+              41:   11(fvec4) CompositeInsert 39 40 1
+                              Store 19(w_reorder) 41 
+              42:   11(fvec4) Load 21(w2) 
+              43:   28(fvec2) VectorShuffle 42 42 0 2
+              44:   11(fvec4) Load 17(w_dep) 
+              45:   11(fvec4) VectorShuffle 44 43 4 5 2 3
+                              Store 17(w_dep) 45 
+              46:   28(fvec2) Load 30(t) 
+              47:   11(fvec4) Load 17(w_dep) 
+              48:   11(fvec4) VectorShuffle 47 46 0 1 4 5
+                              Store 17(w_dep) 48 
+              50:   11(fvec4) Load 15(u) 
+              51:   28(fvec2) VectorShuffle 50 50 2 3
+              52:   11(fvec4) Load 49(w_undef) 
+              53:   11(fvec4) VectorShuffle 52 51 4 5 2 3
+                              Store 49(w_undef) 53 
+              57:    54(bool) Load 56(p) 
+                              SelectionMerge 59 None
+                              BranchConditional 57 58 64 
+              58:               Label
+              60:   28(fvec2)   Load 30(t) 
+              61:    7(float)   CompositeExtract 60 0
+              62:   11(fvec4)   Load 23(w_flow) 
+              63:   11(fvec4)   CompositeInsert 61 62 0
+                                Store 23(w_flow) 63 
+                                Branch 59
+              64:               Label
+              65:   28(fvec2)   Load 30(t) 
+              66:    7(float)   CompositeExtract 65 1
+              67:   11(fvec4)   Load 23(w_flow) 
+              68:   11(fvec4)   CompositeInsert 66 67 0
+                                Store 23(w_flow) 68 
+                                Branch 59
+              59:             Label
+              71:   11(fvec4) Load 19(w_reorder) 
+              72:   11(fvec4) Load 49(w_undef) 
+              73:   11(fvec4) Load 13(w) 
+              74:   11(fvec4) Load 21(w2) 
+              75:   11(fvec4) FMul 73 74
+              76:   11(fvec4) Load 17(w_dep) 
+              77:   11(fvec4) FMul 75 76
+              78:   11(fvec4) Load 23(w_flow) 
+              79:   11(fvec4) FMul 77 78
+              80:   11(fvec4) ExtInst 1(GLSL.std.450) 36(mix) 71 72 79
+                              Store 70(gl_FragColor) 80 
+              83:   28(fvec2) Load 30(t) 
+                              Store 82(c) 83 
+                              Store 84(rep) 87 
+              88:   28(fvec2) Load 82(c) 
+              89:    7(float) CompositeExtract 88 0
+              90:    54(bool) FOrdLessThan 89 85
+                              SelectionMerge 92 None
+                              BranchConditional 90 91 92 
+              91:               Label
+              94:   28(fvec2)   Load 82(c) 
+              95:    7(float)   CompositeExtract 94 0
+              96:    7(float)   FMul 95 93
+              97:   28(fvec2)   Load 82(c) 
+              98:   28(fvec2)   CompositeInsert 96 97 0
+                                Store 82(c) 98 
+                                Branch 92
+              92:             Label
+              99:   28(fvec2) Load 82(c) 
+             100:    7(float) CompositeExtract 99 0
+             101:    54(bool) FOrdLessThanEqual 100 86
+                              SelectionMerge 103 None
+                              BranchConditional 101 102 103 
+             102:               Label
+             105:   11(fvec4)   Load 84(rep) 
+             106:   11(fvec4)   CompositeInsert 104 105 0
+                                Store 84(rep) 106 
+                                Branch 103
+             103:             Label
+             107:   11(fvec4) Load 84(rep) 
+             108:   11(fvec4) Load 70(gl_FragColor) 
+             109:   11(fvec4) FAdd 108 107
+                              Store 70(gl_FragColor) 109 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.test.frag.out b/Test/baseResults/spv.test.frag.out
new file mode 100644
index 000000000..8ebb946d5
--- /dev/null
+++ b/Test/baseResults/spv.test.frag.out
@@ -0,0 +1,90 @@
+spv.test.frag
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 54
+
+                              Source GLSL 110
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 9  "blendscale"
+                              Name 13  "v"
+                              Name 16  "texSampler2D"
+                              Name 20  "t"
+                              Name 23  "scale"
+                              Name 30  "w"
+                              Name 33  "texSampler3D"
+                              Name 37  "coords"
+                              Name 43  "gl_FragColor"
+                              Name 46  "u"
+                              Name 49  "blend"
+                              Decorate 20(t) Smooth 
+                              Decorate 37(coords) Smooth 
+                              Decorate 43(gl_FragColor) BuiltIn FragColor
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypePointer Function 7(float)
+              10:    7(float) Constant 1071971828
+              11:             TypeVector 7(float) 4
+              12:             TypePointer Function 11(fvec4)
+              14:             TypeSampler7(float) 2D filter+texture
+              15:             TypePointer UniformConstant 14
+16(texSampler2D):     15(ptr) Variable UniformConstant 
+              18:             TypeVector 7(float) 2
+              19:             TypePointer Input 18(fvec2)
+           20(t):     19(ptr) Variable Input 
+              22:             TypePointer UniformConstant 18(fvec2)
+       23(scale):     22(ptr) Variable UniformConstant 
+              31:             TypeSampler7(float) 3D filter+texture
+              32:             TypePointer UniformConstant 31
+33(texSampler3D):     32(ptr) Variable UniformConstant 
+              35:             TypeVector 7(float) 3
+              36:             TypePointer Input 35(fvec3)
+      37(coords):     36(ptr) Variable Input 
+              42:             TypePointer Output 11(fvec4)
+43(gl_FragColor):     42(ptr) Variable Output 
+              45:             TypePointer UniformConstant 11(fvec4)
+           46(u):     45(ptr) Variable UniformConstant 
+              48:             TypePointer UniformConstant 7(float)
+       49(blend):     48(ptr) Variable UniformConstant 
+         4(main):           2 Function None 3
+               5:             Label
+   9(blendscale):      8(ptr) Variable Function 
+           13(v):     12(ptr) Variable Function 
+           30(w):     12(ptr) Variable Function 
+                              Store 9(blendscale) 10 
+              17:          14 Load 16(texSampler2D) 
+              21:   18(fvec2) Load 20(t) 
+              24:   18(fvec2) Load 23(scale) 
+              25:   18(fvec2) FAdd 21 24
+              26:   18(fvec2) Load 23(scale) 
+              27:   18(fvec2) FDiv 25 26
+              28:   11(fvec4) TextureSample 17 27 
+              29:   11(fvec4) VectorShuffle 28 28 3 2 1 0
+                              Store 13(v) 29 
+              34:          31 Load 33(texSampler3D) 
+              38:   35(fvec3) Load 37(coords) 
+              39:   11(fvec4) TextureSample 34 38 
+              40:   11(fvec4) Load 13(v) 
+              41:   11(fvec4) FAdd 39 40
+                              Store 30(w) 41 
+              44:   11(fvec4) Load 30(w) 
+              47:   11(fvec4) Load 46(u) 
+              50:    7(float) Load 49(blend) 
+              51:    7(float) Load 9(blendscale) 
+              52:    7(float) FMul 50 51
+              53:   11(fvec4) ExtInst 1(GLSL.std.450) 36(mix) 44 47 52
+                              Store 43(gl_FragColor) 53 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.test.vert.out b/Test/baseResults/spv.test.vert.out
new file mode 100644
index 000000000..efd30d70e
--- /dev/null
+++ b/Test/baseResults/spv.test.vert.out
@@ -0,0 +1,10 @@
+spv.test.vert
+WARNING: 0:5: attribute deprecated in version 130; may be removed in future release
+
+
+
+Linked vertex stage:
+
+
+
+Missing functionality: ftransform()
diff --git a/Test/baseResults/spv.texture.frag.out b/Test/baseResults/spv.texture.frag.out
new file mode 100644
index 000000000..f3f6da359
--- /dev/null
+++ b/Test/baseResults/spv.texture.frag.out
@@ -0,0 +1,11 @@
+spv.texture.frag
+WARNING: 0:14: varying deprecated in version 130; may be removed in future release
+WARNING: 0:15: varying deprecated in version 130; may be removed in future release
+
+
+
+Linked fragment stage:
+
+
+
+Missing functionality: texel fetch
diff --git a/Test/baseResults/spv.texture.vert.out b/Test/baseResults/spv.texture.vert.out
new file mode 100644
index 000000000..ed87334bc
--- /dev/null
+++ b/Test/baseResults/spv.texture.vert.out
@@ -0,0 +1,186 @@
+spv.texture.vert
+
+
+
+Linked vertex stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 132
+
+                              Source GLSL 130
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4
+                              Name 4  "main"
+                              Name 9  "lod"
+                              Name 11  "coords1D"
+                              Name 15  "coords3D"
+                              Name 21  "coords4D"
+                              Name 24  "color"
+                              Name 29  "texSampler1D"
+                              Name 39  "coords2D"
+                              Name 53  "texSampler2D"
+                              Name 74  "texSampler3D"
+                              Name 89  "texSamplerCube"
+                              Name 98  "shadowSampler1D"
+                              Name 107  "shadowSampler2D"
+                              Name 127  "gl_Position"
+                              Name 131  "gl_VertexID"
+                              Decorate 127(gl_Position) BuiltIn Position
+                              Decorate 131(gl_VertexID) BuiltIn VertexId
+                              Decorate 131(gl_VertexID) NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypePointer Function 7(float)
+              10:    7(float) Constant 1077936128
+              12:    7(float) Constant 1071971828
+              13:             TypeVector 7(float) 3
+              14:             TypePointer Function 13(fvec3)
+              16:    7(float) Constant 1076753334
+              17:    7(float) Constant 1079836148
+              18:   13(fvec3) ConstantComposite 12 16 17
+              19:             TypeVector 7(float) 4
+              20:             TypePointer Function 19(fvec4)
+              22:    7(float) Constant 1073741824
+              23:   19(fvec4) ConstantComposite 12 16 17 22
+              25:    7(float) Constant 0
+              26:   19(fvec4) ConstantComposite 25 25 25 25
+              27:             TypeSampler7(float) 1D filter+texture
+              28:             TypePointer UniformConstant 27
+29(texSampler1D):     28(ptr) Variable UniformConstant 
+              37:             TypeVector 7(float) 2
+              38:             TypePointer Input 37(fvec2)
+    39(coords2D):     38(ptr) Variable Input 
+              51:             TypeSampler7(float) 2D filter+texture
+              52:             TypePointer UniformConstant 51
+53(texSampler2D):     52(ptr) Variable UniformConstant 
+              72:             TypeSampler7(float) 3D filter+texture
+              73:             TypePointer UniformConstant 72
+74(texSampler3D):     73(ptr) Variable UniformConstant 
+              87:             TypeSampler7(float) Cube filter+texture
+              88:             TypePointer UniformConstant 87
+89(texSamplerCube):     88(ptr) Variable UniformConstant 
+              96:             TypeSampler7(float) 1D filter+texture depth
+              97:             TypePointer UniformConstant 96
+98(shadowSampler1D):     97(ptr) Variable UniformConstant 
+             105:             TypeSampler7(float) 2D filter+texture depth
+             106:             TypePointer UniformConstant 105
+107(shadowSampler2D):    106(ptr) Variable UniformConstant 
+             126:             TypePointer Output 19(fvec4)
+127(gl_Position):    126(ptr) Variable Output 
+             129:             TypeInt 32 1
+             130:             TypePointer Input 129(int)
+131(gl_VertexID):    130(ptr) Variable Input 
+         4(main):           2 Function None 3
+               5:             Label
+          9(lod):      8(ptr) Variable Function 
+    11(coords1D):      8(ptr) Variable Function 
+    15(coords3D):     14(ptr) Variable Function 
+    21(coords4D):     20(ptr) Variable Function 
+       24(color):     20(ptr) Variable Function 
+                              Store 9(lod) 10 
+                              Store 11(coords1D) 12 
+                              Store 15(coords3D) 18 
+                              Store 21(coords4D) 23 
+                              Store 24(color) 26 
+              30:          27 Load 29(texSampler1D) 
+              31:    7(float) Load 11(coords1D) 
+              32:    7(float) Load 9(lod) 
+              33:   19(fvec4) TextureSampleLod 30 31 32
+              34:   19(fvec4) Load 24(color) 
+              35:   19(fvec4) FAdd 34 33
+                              Store 24(color) 35 
+              36:          27 Load 29(texSampler1D) 
+              40:   37(fvec2) Load 39(coords2D) 
+              41:    7(float) Load 9(lod) 
+              42:   19(fvec4) TextureSampleProjLod 36 40 41
+              43:   19(fvec4) Load 24(color) 
+              44:   19(fvec4) FAdd 43 42
+                              Store 24(color) 44 
+              45:          27 Load 29(texSampler1D) 
+              46:   19(fvec4) Load 21(coords4D) 
+              47:    7(float) Load 9(lod) 
+              48:   19(fvec4) TextureSampleProjLod 45 46 47
+              49:   19(fvec4) Load 24(color) 
+              50:   19(fvec4) FAdd 49 48
+                              Store 24(color) 50 
+              54:          51 Load 53(texSampler2D) 
+              55:   37(fvec2) Load 39(coords2D) 
+              56:    7(float) Load 9(lod) 
+              57:   19(fvec4) TextureSampleLod 54 55 56
+              58:   19(fvec4) Load 24(color) 
+              59:   19(fvec4) FAdd 58 57
+                              Store 24(color) 59 
+              60:          51 Load 53(texSampler2D) 
+              61:   13(fvec3) Load 15(coords3D) 
+              62:    7(float) Load 9(lod) 
+              63:   19(fvec4) TextureSampleProjLod 60 61 62
+              64:   19(fvec4) Load 24(color) 
+              65:   19(fvec4) FAdd 64 63
+                              Store 24(color) 65 
+              66:          51 Load 53(texSampler2D) 
+              67:   19(fvec4) Load 21(coords4D) 
+              68:    7(float) Load 9(lod) 
+              69:   19(fvec4) TextureSampleProjLod 66 67 68
+              70:   19(fvec4) Load 24(color) 
+              71:   19(fvec4) FAdd 70 69
+                              Store 24(color) 71 
+              75:          72 Load 74(texSampler3D) 
+              76:   13(fvec3) Load 15(coords3D) 
+              77:    7(float) Load 9(lod) 
+              78:   19(fvec4) TextureSampleLod 75 76 77
+              79:   19(fvec4) Load 24(color) 
+              80:   19(fvec4) FAdd 79 78
+                              Store 24(color) 80 
+              81:          72 Load 74(texSampler3D) 
+              82:   19(fvec4) Load 21(coords4D) 
+              83:    7(float) Load 9(lod) 
+              84:   19(fvec4) TextureSampleProjLod 81 82 83
+              85:   19(fvec4) Load 24(color) 
+              86:   19(fvec4) FAdd 85 84
+                              Store 24(color) 86 
+              90:          87 Load 89(texSamplerCube) 
+              91:   13(fvec3) Load 15(coords3D) 
+              92:    7(float) Load 9(lod) 
+              93:   19(fvec4) TextureSampleLod 90 91 92
+              94:   19(fvec4) Load 24(color) 
+              95:   19(fvec4) FAdd 94 93
+                              Store 24(color) 95 
+              99:          96 Load 98(shadowSampler1D) 
+             100:   13(fvec3) Load 15(coords3D) 
+             101:    7(float) Load 9(lod) 
+             102:   19(fvec4) TextureSampleLod 99 100 101
+             103:   19(fvec4) Load 24(color) 
+             104:   19(fvec4) FAdd 103 102
+                              Store 24(color) 104 
+             108:         105 Load 107(shadowSampler2D) 
+             109:   13(fvec3) Load 15(coords3D) 
+             110:    7(float) Load 9(lod) 
+             111:   19(fvec4) TextureSampleLod 108 109 110
+             112:   19(fvec4) Load 24(color) 
+             113:   19(fvec4) FAdd 112 111
+                              Store 24(color) 113 
+             114:          96 Load 98(shadowSampler1D) 
+             115:   19(fvec4) Load 21(coords4D) 
+             116:    7(float) Load 9(lod) 
+             117:   19(fvec4) TextureSampleProjLod 114 115 116
+             118:   19(fvec4) Load 24(color) 
+             119:   19(fvec4) FAdd 118 117
+                              Store 24(color) 119 
+             120:         105 Load 107(shadowSampler2D) 
+             121:   19(fvec4) Load 21(coords4D) 
+             122:    7(float) Load 9(lod) 
+             123:   19(fvec4) TextureSampleProjLod 120 121 122
+             124:   19(fvec4) Load 24(color) 
+             125:   19(fvec4) FAdd 124 123
+                              Store 24(color) 125 
+             128:   19(fvec4) Load 24(color) 
+                              Store 127(gl_Position) 128 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.types.frag.out b/Test/baseResults/spv.types.frag.out
new file mode 100644
index 000000000..b33a37bde
--- /dev/null
+++ b/Test/baseResults/spv.types.frag.out
@@ -0,0 +1,347 @@
+spv.types.frag
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 264
+
+                              Source GLSL 130
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 9  "b"
+                              Name 11  "u_b"
+                              Name 13  "i_b"
+                              Name 18  "b2"
+                              Name 20  "u_b2"
+                              Name 23  "i_b2"
+                              Name 36  "b3"
+                              Name 38  "u_b3"
+                              Name 41  "i_b3"
+                              Name 60  "b4"
+                              Name 62  "u_b4"
+                              Name 65  "i_b4"
+                              Name 90  "i"
+                              Name 92  "u_i"
+                              Name 95  "i_i"
+                              Name 100  "i2"
+                              Name 102  "u_i2"
+                              Name 105  "i_i2"
+                              Name 110  "i3"
+                              Name 112  "u_i3"
+                              Name 115  "i_i3"
+                              Name 120  "i4"
+                              Name 122  "u_i4"
+                              Name 125  "i_i4"
+                              Name 130  "f"
+                              Name 132  "u_f"
+                              Name 135  "i_f"
+                              Name 140  "f2"
+                              Name 142  "u_f2"
+                              Name 145  "i_f2"
+                              Name 150  "f3"
+                              Name 152  "u_f3"
+                              Name 155  "i_f3"
+                              Name 160  "f4"
+                              Name 162  "u_f4"
+                              Name 165  "i_f4"
+                              Name 169  "gl_FragColor"
+                              Decorate 95(i_i) Flat 
+                              Decorate 105(i_i2) Flat 
+                              Decorate 115(i_i3) Flat 
+                              Decorate 125(i_i4) Flat 
+                              Decorate 135(i_f) Smooth 
+                              Decorate 145(i_f2) Smooth 
+                              Decorate 155(i_f3) Smooth 
+                              Decorate 165(i_f4) Smooth 
+                              Decorate 169(gl_FragColor) BuiltIn FragColor
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeBool
+               8:             TypePointer Function 7(bool)
+              10:             TypePointer UniformConstant 7(bool)
+         11(u_b):     10(ptr) Variable UniformConstant 
+         13(i_b):     10(ptr) Variable UniformConstant 
+              16:             TypeVector 7(bool) 2
+              17:             TypePointer Function 16(bvec2)
+              19:             TypePointer UniformConstant 16(bvec2)
+        20(u_b2):     19(ptr) Variable UniformConstant 
+        23(i_b2):     19(ptr) Variable UniformConstant 
+              34:             TypeVector 7(bool) 3
+              35:             TypePointer Function 34(bvec3)
+              37:             TypePointer UniformConstant 34(bvec3)
+        38(u_b3):     37(ptr) Variable UniformConstant 
+        41(i_b3):     37(ptr) Variable UniformConstant 
+              58:             TypeVector 7(bool) 4
+              59:             TypePointer Function 58(bvec4)
+              61:             TypePointer UniformConstant 58(bvec4)
+        62(u_b4):     61(ptr) Variable UniformConstant 
+        65(i_b4):     61(ptr) Variable UniformConstant 
+              88:             TypeInt 32 1
+              89:             TypePointer Function 88(int)
+              91:             TypePointer UniformConstant 88(int)
+         92(u_i):     91(ptr) Variable UniformConstant 
+              94:             TypePointer Input 88(int)
+         95(i_i):     94(ptr) Variable Input 
+              98:             TypeVector 88(int) 2
+              99:             TypePointer Function 98(ivec2)
+             101:             TypePointer UniformConstant 98(ivec2)
+       102(u_i2):    101(ptr) Variable UniformConstant 
+             104:             TypePointer Input 98(ivec2)
+       105(i_i2):    104(ptr) Variable Input 
+             108:             TypeVector 88(int) 3
+             109:             TypePointer Function 108(ivec3)
+             111:             TypePointer UniformConstant 108(ivec3)
+       112(u_i3):    111(ptr) Variable UniformConstant 
+             114:             TypePointer Input 108(ivec3)
+       115(i_i3):    114(ptr) Variable Input 
+             118:             TypeVector 88(int) 4
+             119:             TypePointer Function 118(ivec4)
+             121:             TypePointer UniformConstant 118(ivec4)
+       122(u_i4):    121(ptr) Variable UniformConstant 
+             124:             TypePointer Input 118(ivec4)
+       125(i_i4):    124(ptr) Variable Input 
+             128:             TypeFloat 32
+             129:             TypePointer Function 128(float)
+             131:             TypePointer UniformConstant 128(float)
+        132(u_f):    131(ptr) Variable UniformConstant 
+             134:             TypePointer Input 128(float)
+        135(i_f):    134(ptr) Variable Input 
+             138:             TypeVector 128(float) 2
+             139:             TypePointer Function 138(fvec2)
+             141:             TypePointer UniformConstant 138(fvec2)
+       142(u_f2):    141(ptr) Variable UniformConstant 
+             144:             TypePointer Input 138(fvec2)
+       145(i_f2):    144(ptr) Variable Input 
+             148:             TypeVector 128(float) 3
+             149:             TypePointer Function 148(fvec3)
+             151:             TypePointer UniformConstant 148(fvec3)
+       152(u_f3):    151(ptr) Variable UniformConstant 
+             154:             TypePointer Input 148(fvec3)
+       155(i_f3):    154(ptr) Variable Input 
+             158:             TypeVector 128(float) 4
+             159:             TypePointer Function 158(fvec4)
+             161:             TypePointer UniformConstant 158(fvec4)
+       162(u_f4):    161(ptr) Variable UniformConstant 
+             164:             TypePointer Input 158(fvec4)
+       165(i_f4):    164(ptr) Variable Input 
+             168:             TypePointer Output 158(fvec4)
+169(gl_FragColor):    168(ptr) Variable Output 
+             261:  128(float) Constant 1065353216
+             262:  158(fvec4) ConstantComposite 261 261 261 261
+         4(main):           2 Function None 3
+               5:             Label
+            9(b):      8(ptr) Variable Function 
+          18(b2):     17(ptr) Variable Function 
+          36(b3):     35(ptr) Variable Function 
+          60(b4):     59(ptr) Variable Function 
+           90(i):     89(ptr) Variable Function 
+         100(i2):     99(ptr) Variable Function 
+         110(i3):    109(ptr) Variable Function 
+         120(i4):    119(ptr) Variable Function 
+          130(f):    129(ptr) Variable Function 
+         140(f2):    139(ptr) Variable Function 
+         150(f3):    149(ptr) Variable Function 
+         160(f4):    159(ptr) Variable Function 
+             170:    159(ptr) Variable Function 
+              12:     7(bool) Load 11(u_b) 
+              14:     7(bool) Load 13(i_b) 
+              15:     7(bool) LogicalAnd 12 14
+                              Store 9(b) 15 
+              21:   16(bvec2) Load 20(u_b2) 
+              22:     7(bool) CompositeExtract 21 0
+              24:   16(bvec2) Load 23(i_b2) 
+              25:     7(bool) CompositeExtract 24 0
+              26:     7(bool) LogicalAnd 22 25
+              27:   16(bvec2) Load 20(u_b2) 
+              28:     7(bool) CompositeExtract 27 1
+              29:     7(bool) LogicalAnd 26 28
+              30:   16(bvec2) Load 23(i_b2) 
+              31:     7(bool) CompositeExtract 30 1
+              32:     7(bool) LogicalAnd 29 31
+              33:   16(bvec2) CompositeConstruct 32 32
+                              Store 18(b2) 33 
+              39:   34(bvec3) Load 38(u_b3) 
+              40:     7(bool) CompositeExtract 39 0
+              42:   34(bvec3) Load 41(i_b3) 
+              43:     7(bool) CompositeExtract 42 0
+              44:     7(bool) LogicalAnd 40 43
+              45:   34(bvec3) Load 38(u_b3) 
+              46:     7(bool) CompositeExtract 45 1
+              47:     7(bool) LogicalAnd 44 46
+              48:   34(bvec3) Load 41(i_b3) 
+              49:     7(bool) CompositeExtract 48 1
+              50:     7(bool) LogicalAnd 47 49
+              51:   34(bvec3) Load 38(u_b3) 
+              52:     7(bool) CompositeExtract 51 2
+              53:     7(bool) LogicalAnd 50 52
+              54:   34(bvec3) Load 41(i_b3) 
+              55:     7(bool) CompositeExtract 54 2
+              56:     7(bool) LogicalAnd 53 55
+              57:   34(bvec3) CompositeConstruct 56 56 56
+                              Store 36(b3) 57 
+              63:   58(bvec4) Load 62(u_b4) 
+              64:     7(bool) CompositeExtract 63 0
+              66:   58(bvec4) Load 65(i_b4) 
+              67:     7(bool) CompositeExtract 66 0
+              68:     7(bool) LogicalAnd 64 67
+              69:   58(bvec4) Load 62(u_b4) 
+              70:     7(bool) CompositeExtract 69 1
+              71:     7(bool) LogicalAnd 68 70
+              72:   58(bvec4) Load 65(i_b4) 
+              73:     7(bool) CompositeExtract 72 1
+              74:     7(bool) LogicalAnd 71 73
+              75:   58(bvec4) Load 62(u_b4) 
+              76:     7(bool) CompositeExtract 75 2
+              77:     7(bool) LogicalAnd 74 76
+              78:   58(bvec4) Load 65(i_b4) 
+              79:     7(bool) CompositeExtract 78 2
+              80:     7(bool) LogicalAnd 77 79
+              81:   58(bvec4) Load 62(u_b4) 
+              82:     7(bool) CompositeExtract 81 3
+              83:     7(bool) LogicalAnd 80 82
+              84:   58(bvec4) Load 65(i_b4) 
+              85:     7(bool) CompositeExtract 84 3
+              86:     7(bool) LogicalAnd 83 85
+              87:   58(bvec4) CompositeConstruct 86 86 86 86
+                              Store 60(b4) 87 
+              93:     88(int) Load 92(u_i) 
+              96:     88(int) Load 95(i_i) 
+              97:     88(int) IAdd 93 96
+                              Store 90(i) 97 
+             103:   98(ivec2) Load 102(u_i2) 
+             106:   98(ivec2) Load 105(i_i2) 
+             107:   98(ivec2) IAdd 103 106
+                              Store 100(i2) 107 
+             113:  108(ivec3) Load 112(u_i3) 
+             116:  108(ivec3) Load 115(i_i3) 
+             117:  108(ivec3) IAdd 113 116
+                              Store 110(i3) 117 
+             123:  118(ivec4) Load 122(u_i4) 
+             126:  118(ivec4) Load 125(i_i4) 
+             127:  118(ivec4) IAdd 123 126
+                              Store 120(i4) 127 
+             133:  128(float) Load 132(u_f) 
+             136:  128(float) Load 135(i_f) 
+             137:  128(float) FAdd 133 136
+                              Store 130(f) 137 
+             143:  138(fvec2) Load 142(u_f2) 
+             146:  138(fvec2) Load 145(i_f2) 
+             147:  138(fvec2) FAdd 143 146
+                              Store 140(f2) 147 
+             153:  148(fvec3) Load 152(u_f3) 
+             156:  148(fvec3) Load 155(i_f3) 
+             157:  148(fvec3) FAdd 153 156
+                              Store 150(f3) 157 
+             163:  158(fvec4) Load 162(u_f4) 
+             166:  158(fvec4) Load 165(i_f4) 
+             167:  158(fvec4) FAdd 163 166
+                              Store 160(f4) 167 
+             171:     7(bool) Load 9(b) 
+             172:   16(bvec2) Load 18(b2) 
+             173:     7(bool) CompositeExtract 172 0
+             174:     7(bool) LogicalOr 171 173
+             175:   16(bvec2) Load 18(b2) 
+             176:     7(bool) CompositeExtract 175 1
+             177:     7(bool) LogicalOr 174 176
+             178:   34(bvec3) Load 36(b3) 
+             179:     7(bool) CompositeExtract 178 0
+             180:     7(bool) LogicalOr 177 179
+             181:   34(bvec3) Load 36(b3) 
+             182:     7(bool) CompositeExtract 181 1
+             183:     7(bool) LogicalOr 180 182
+             184:   34(bvec3) Load 36(b3) 
+             185:     7(bool) CompositeExtract 184 2
+             186:     7(bool) LogicalOr 183 185
+             187:   58(bvec4) Load 60(b4) 
+             188:     7(bool) CompositeExtract 187 0
+             189:     7(bool) LogicalOr 186 188
+             190:   58(bvec4) Load 60(b4) 
+             191:     7(bool) CompositeExtract 190 1
+             192:     7(bool) LogicalOr 189 191
+             193:   58(bvec4) Load 60(b4) 
+             194:     7(bool) CompositeExtract 193 2
+             195:     7(bool) LogicalOr 192 194
+             196:   58(bvec4) Load 60(b4) 
+             197:     7(bool) CompositeExtract 196 3
+             198:     7(bool) LogicalOr 195 197
+                              SelectionMerge 200 None
+                              BranchConditional 198 199 260 
+             199:               Label
+             201:     88(int)   Load 90(i) 
+             202:   98(ivec2)   Load 100(i2) 
+             203:     88(int)   CompositeExtract 202 0
+             204:     88(int)   IAdd 201 203
+             205:   98(ivec2)   Load 100(i2) 
+             206:     88(int)   CompositeExtract 205 1
+             207:     88(int)   IAdd 204 206
+             208:  108(ivec3)   Load 110(i3) 
+             209:     88(int)   CompositeExtract 208 0
+             210:     88(int)   IAdd 207 209
+             211:  108(ivec3)   Load 110(i3) 
+             212:     88(int)   CompositeExtract 211 1
+             213:     88(int)   IAdd 210 212
+             214:  108(ivec3)   Load 110(i3) 
+             215:     88(int)   CompositeExtract 214 2
+             216:     88(int)   IAdd 213 215
+             217:  118(ivec4)   Load 120(i4) 
+             218:     88(int)   CompositeExtract 217 0
+             219:     88(int)   IAdd 216 218
+             220:  118(ivec4)   Load 120(i4) 
+             221:     88(int)   CompositeExtract 220 1
+             222:     88(int)   IAdd 219 221
+             223:  118(ivec4)   Load 120(i4) 
+             224:     88(int)   CompositeExtract 223 2
+             225:     88(int)   IAdd 222 224
+             226:  118(ivec4)   Load 120(i4) 
+             227:     88(int)   CompositeExtract 226 3
+             228:     88(int)   IAdd 225 227
+             229:  128(float)   ConvertSToF 228
+             230:  128(float)   Load 130(f) 
+             231:  128(float)   FAdd 229 230
+             232:  138(fvec2)   Load 140(f2) 
+             233:  128(float)   CompositeExtract 232 0
+             234:  128(float)   FAdd 231 233
+             235:  138(fvec2)   Load 140(f2) 
+             236:  128(float)   CompositeExtract 235 1
+             237:  128(float)   FAdd 234 236
+             238:  148(fvec3)   Load 150(f3) 
+             239:  128(float)   CompositeExtract 238 0
+             240:  128(float)   FAdd 237 239
+             241:  148(fvec3)   Load 150(f3) 
+             242:  128(float)   CompositeExtract 241 1
+             243:  128(float)   FAdd 240 242
+             244:  148(fvec3)   Load 150(f3) 
+             245:  128(float)   CompositeExtract 244 2
+             246:  128(float)   FAdd 243 245
+             247:  158(fvec4)   Load 160(f4) 
+             248:  128(float)   CompositeExtract 247 0
+             249:  128(float)   FAdd 246 248
+             250:  158(fvec4)   Load 160(f4) 
+             251:  128(float)   CompositeExtract 250 1
+             252:  128(float)   FAdd 249 251
+             253:  158(fvec4)   Load 160(f4) 
+             254:  128(float)   CompositeExtract 253 2
+             255:  128(float)   FAdd 252 254
+             256:  158(fvec4)   Load 160(f4) 
+             257:  128(float)   CompositeExtract 256 3
+             258:  128(float)   FAdd 255 257
+             259:  158(fvec4)   CompositeConstruct 258 258 258 258
+                                Store 170 259 
+                                Branch 200
+             260:               Label
+                                Store 170 262 
+                                Branch 200
+             200:             Label
+             263:  158(fvec4) Load 170 
+                              Store 169(gl_FragColor) 263 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.uint.frag.out b/Test/baseResults/spv.uint.frag.out
new file mode 100644
index 000000000..751294daa
--- /dev/null
+++ b/Test/baseResults/spv.uint.frag.out
@@ -0,0 +1,357 @@
+spv.uint.frag
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 206
+
+                              Source GLSL 300
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 9  "count"
+                              Name 13  "u"
+                              Name 16  "t"
+                              Name 54  "shiftedii"
+                              Name 56  "shiftedui"
+                              Name 58  "shiftediu"
+                              Name 59  "shifteduu"
+                              Name 67  "c"
+                              Name 70  "usampler"
+                              Name 75  "tc"
+                              Name 108  "af"
+                              Name 112  "ab"
+                              Name 116  "ai"
+                              Name 151  "mask1"
+                              Name 153  "mask2"
+                              Name 155  "mask3"
+                              Name 159  "mask4"
+                              Name 199  "f"
+                              Name 201  "v"
+                              Name 203  "i"
+                              Name 205  "b"
+                              Decorate 9(count) PrecisionMedium 
+                              Decorate 13(u) PrecisionMedium 
+                              Decorate 16(t) PrecisionMedium 
+                              Decorate 16(t) Flat 
+                              Decorate 54(shiftedii) PrecisionMedium 
+                              Decorate 56(shiftedui) PrecisionMedium 
+                              Decorate 58(shiftediu) PrecisionMedium 
+                              Decorate 59(shifteduu) PrecisionMedium 
+                              Decorate 67(c) PrecisionMedium 
+                              Decorate 70(usampler) PrecisionMedium 
+                              Decorate 75(tc) PrecisionMedium 
+                              Decorate 75(tc) Smooth 
+                              Decorate 108(af) PrecisionMedium 
+                              Decorate 116(ai) PrecisionMedium 
+                              Decorate 151(mask1) PrecisionMedium 
+                              Decorate 153(mask2) PrecisionMedium 
+                              Decorate 155(mask3) PrecisionMedium 
+                              Decorate 159(mask4) PrecisionMedium 
+                              Decorate 199(f) PrecisionMedium 
+                              Decorate 199(f) Smooth 
+                              Decorate 199(f) NoStaticUse 
+                              Decorate 201(v) PrecisionMedium 
+                              Decorate 201(v) NoStaticUse 
+                              Decorate 203(i) PrecisionMedium 
+                              Decorate 203(i) NoStaticUse 
+                              Decorate 205(b) NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeInt 32 1
+               8:             TypePointer Function 7(int)
+              10:      7(int) Constant 1
+              11:             TypeInt 32 0
+              12:             TypePointer Function 11(int)
+              14:             TypeVector 11(int) 2
+              15:             TypePointer Input 14(ivec2)
+           16(t):     15(ptr) Variable Input 
+              19:     11(int) Constant 3
+              21:             TypeBool
+              22:    21(bool) ConstantTrue
+              25:      7(int) Constant 2
+              30:      7(int) Constant 3
+              33:    21(bool) ConstantFalse
+              36:      7(int) Constant 5
+              41:      7(int) Constant 7
+              46:      7(int) Constant 11
+              51:      7(int) Constant 13
+              55:      7(int) Constant 4294967295
+              57:     11(int) Constant 4194303
+              65:             TypeVector 11(int) 4
+              66:             TypePointer Output 65(ivec4)
+           67(c):     66(ptr) Variable Output 
+              68:             TypeSampler11(int) 2D filter+texture
+              69:             TypePointer UniformConstant 68
+    70(usampler):     69(ptr) Variable UniformConstant 
+              72:             TypeFloat 32
+              73:             TypeVector 72(float) 2
+              74:             TypePointer Input 73(fvec2)
+          75(tc):     74(ptr) Variable Input 
+              85:   72(float) Constant 1065353216
+              97:   72(float) Constant 1073741824
+              98:   73(fvec2) ConstantComposite 97 97
+             103:     11(int) Constant 4
+             107:             TypePointer Function 72(float)
+             111:             TypePointer Function 21(bool)
+             114:     11(int) Constant 0
+             122:     11(int) Constant 1
+             133:      7(int) Constant 17
+             138:      7(int) Constant 19
+             143:      7(int) Constant 23
+             148:      7(int) Constant 27
+             152:     11(int) Constant 161
+             154:     11(int) Constant 2576
+             157:      7(int) Constant 4
+             160:     11(int) Constant 2737
+             198:             TypePointer Input 72(float)
+          199(f):    198(ptr) Variable Input 
+             200:             TypePointer UniformConstant 65(ivec4)
+          201(v):    200(ptr) Variable UniformConstant 
+             202:             TypePointer UniformConstant 7(int)
+          203(i):    202(ptr) Variable UniformConstant 
+             204:             TypePointer UniformConstant 21(bool)
+          205(b):    204(ptr) Variable UniformConstant 
+         4(main):           2 Function None 3
+               5:             Label
+        9(count):      8(ptr) Variable Function 
+           13(u):     12(ptr) Variable Function 
+   54(shiftedii):      8(ptr) Variable Function 
+   56(shiftedui):     12(ptr) Variable Function 
+   58(shiftediu):      8(ptr) Variable Function 
+   59(shifteduu):     12(ptr) Variable Function 
+         108(af):    107(ptr) Variable Function 
+         112(ab):    111(ptr) Variable Function 
+         116(ai):      8(ptr) Variable Function 
+      151(mask1):     12(ptr) Variable Function 
+      153(mask2):     12(ptr) Variable Function 
+      155(mask3):     12(ptr) Variable Function 
+      159(mask4):     12(ptr) Variable Function 
+                              Store 9(count) 10 
+              17:   14(ivec2) Load 16(t) 
+              18:     11(int) CompositeExtract 17 1
+              20:     11(int) IAdd 18 19
+                              Store 13(u) 20 
+                              SelectionMerge 24 None
+                              BranchConditional 22 23 24 
+              23:               Label
+              26:      7(int)   Load 9(count) 
+              27:      7(int)   IMul 26 25
+                                Store 9(count) 27 
+                                Branch 24
+              24:             Label
+                              SelectionMerge 29 None
+                              BranchConditional 22 28 29 
+              28:               Label
+              31:      7(int)   Load 9(count) 
+              32:      7(int)   IMul 31 30
+                                Store 9(count) 32 
+                                Branch 29
+              29:             Label
+                              SelectionMerge 35 None
+                              BranchConditional 33 34 35 
+              34:               Label
+              37:      7(int)   Load 9(count) 
+              38:      7(int)   IMul 37 36
+                                Store 9(count) 38 
+                                Branch 35
+              35:             Label
+                              SelectionMerge 40 None
+                              BranchConditional 22 39 40 
+              39:               Label
+              42:      7(int)   Load 9(count) 
+              43:      7(int)   IMul 42 41
+                                Store 9(count) 43 
+                                Branch 40
+              40:             Label
+                              SelectionMerge 45 None
+                              BranchConditional 22 44 45 
+              44:               Label
+              47:      7(int)   Load 9(count) 
+              48:      7(int)   IMul 47 46
+                                Store 9(count) 48 
+                                Branch 45
+              45:             Label
+                              SelectionMerge 50 None
+                              BranchConditional 33 49 50 
+              49:               Label
+              52:      7(int)   Load 9(count) 
+              53:      7(int)   IMul 52 51
+                                Store 9(count) 53 
+                                Branch 50
+              50:             Label
+                              Store 54(shiftedii) 55 
+                              Store 56(shiftedui) 57 
+                              Store 58(shiftediu) 55 
+                              Store 59(shifteduu) 57 
+              60:      7(int) Load 54(shiftedii) 
+              61:      7(int) Load 58(shiftediu) 
+              62:    21(bool) IEqual 60 61
+                              SelectionMerge 64 None
+                              BranchConditional 62 63 64 
+              63:               Label
+              71:          68   Load 70(usampler) 
+              76:   73(fvec2)   Load 75(tc) 
+              77:   65(ivec4)   TextureSample 71 76 
+                                Store 67(c) 77 
+                                Branch 64
+              64:             Label
+              78:     11(int) Load 56(shiftedui) 
+              79:     11(int) Load 59(shifteduu) 
+              80:    21(bool) IEqual 78 79
+                              SelectionMerge 82 None
+                              BranchConditional 80 81 82 
+              81:               Label
+              83:          68   Load 70(usampler) 
+              84:   73(fvec2)   Load 75(tc) 
+              86:   73(fvec2)   CompositeConstruct 85 85
+              87:   73(fvec2)   FAdd 84 86
+              88:   65(ivec4)   TextureSample 83 87 
+                                Store 67(c) 88 
+                                Branch 82
+              82:             Label
+              89:      7(int) Load 54(shiftedii) 
+              90:     11(int) Load 56(shiftedui) 
+              91:      7(int) Bitcast 90
+              92:    21(bool) IEqual 89 91
+                              SelectionMerge 94 None
+                              BranchConditional 92 93 94 
+              93:               Label
+              95:          68   Load 70(usampler) 
+              96:   73(fvec2)   Load 75(tc) 
+              99:   73(fvec2)   FSub 96 98
+             100:   65(ivec4)   TextureSample 95 99 
+                                Store 67(c) 100 
+                                Branch 94
+              94:             Label
+             101:   14(ivec2) Load 16(t) 
+             102:     11(int) CompositeExtract 101 0
+             104:    21(bool) UGreaterThan 102 103
+                              SelectionMerge 106 None
+                              BranchConditional 104 105 106 
+             105:               Label
+             109:     11(int)   Load 13(u) 
+             110:   72(float)   ConvertUToF 109
+                                Store 108(af) 110 
+             113:     11(int)   Load 13(u) 
+             115:    21(bool)   INotEqual 113 114
+                                Store 112(ab) 115 
+             117:     11(int)   Load 13(u) 
+             118:      7(int)   Bitcast 117
+                                Store 116(ai) 118 
+             119:   72(float)   Load 108(af) 
+             120:     11(int)   ConvertFToU 119
+             121:    21(bool)   Load 112(ab) 
+             123:     11(int)   Select 121 122 114
+             124:      7(int)   Load 116(ai) 
+             125:     11(int)   Bitcast 124
+             126:      7(int)   Load 9(count) 
+             127:     11(int)   Bitcast 126
+             128:   65(ivec4)   CompositeConstruct 120 123 125 127
+             129:   65(ivec4)   Load 67(c) 
+             130:   65(ivec4)   IAdd 129 128
+                                Store 67(c) 130 
+                                Branch 106
+             106:             Label
+                              SelectionMerge 132 None
+                              BranchConditional 22 131 132 
+             131:               Label
+             134:      7(int)   Load 9(count) 
+             135:      7(int)   IMul 134 133
+                                Store 9(count) 135 
+                                Branch 132
+             132:             Label
+                              SelectionMerge 137 None
+                              BranchConditional 33 136 137 
+             136:               Label
+             139:      7(int)   Load 9(count) 
+             140:      7(int)   IMul 139 138
+                                Store 9(count) 140 
+                                Branch 137
+             137:             Label
+                              SelectionMerge 142 None
+                              BranchConditional 22 141 142 
+             141:               Label
+             144:      7(int)   Load 9(count) 
+             145:      7(int)   IMul 144 143
+                                Store 9(count) 145 
+                                Branch 142
+             142:             Label
+                              SelectionMerge 147 None
+                              BranchConditional 22 146 147 
+             146:               Label
+             149:      7(int)   Load 9(count) 
+             150:      7(int)   IMul 149 148
+                                Store 9(count) 150 
+                                Branch 147
+             147:             Label
+                              Store 151(mask1) 152 
+                              Store 153(mask2) 154 
+             156:     11(int) Load 151(mask1) 
+             158:     11(int) ShiftLeftLogical 156 157
+                              Store 155(mask3) 158 
+                              Store 159(mask4) 160 
+             161:     11(int) Load 155(mask3) 
+             162:     11(int) Load 153(mask2) 
+             163:    21(bool) IEqual 161 162
+                              SelectionMerge 165 None
+                              BranchConditional 163 164 165 
+             164:               Label
+             166:      7(int)   Load 9(count) 
+             167:      7(int)   IMul 166 25
+                                Store 9(count) 167 
+                                Branch 165
+             165:             Label
+             168:     11(int) Load 155(mask3) 
+             169:     11(int) Load 151(mask1) 
+             170:     11(int) BitwiseAnd 168 169
+             171:    21(bool) INotEqual 170 114
+                              SelectionMerge 173 None
+                              BranchConditional 171 172 173 
+             172:               Label
+             174:      7(int)   Load 9(count) 
+             175:      7(int)   IMul 174 30
+                                Store 9(count) 175 
+                                Branch 173
+             173:             Label
+             176:     11(int) Load 151(mask1) 
+             177:     11(int) Load 155(mask3) 
+             178:     11(int) BitwiseOr 176 177
+             179:     11(int) Load 159(mask4) 
+             180:    21(bool) IEqual 178 179
+                              SelectionMerge 182 None
+                              BranchConditional 180 181 182 
+             181:               Label
+             183:      7(int)   Load 9(count) 
+             184:      7(int)   IMul 183 36
+                                Store 9(count) 184 
+                                Branch 182
+             182:             Label
+             185:     11(int) Load 151(mask1) 
+             186:     11(int) Load 159(mask4) 
+             187:     11(int) BitwiseXor 185 186
+             188:    21(bool) IEqual 187 154
+                              SelectionMerge 190 None
+                              BranchConditional 188 189 190 
+             189:               Label
+             191:      7(int)   Load 9(count) 
+             192:      7(int)   IMul 191 41
+                                Store 9(count) 192 
+                                Branch 190
+             190:             Label
+             193:      7(int) Load 9(count) 
+             194:     11(int) Bitcast 193
+             195:   65(ivec4) CompositeConstruct 194 194 194 194
+             196:   65(ivec4) Load 67(c) 
+             197:   65(ivec4) IAdd 196 195
+                              Store 67(c) 197 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.uniformArray.frag.out b/Test/baseResults/spv.uniformArray.frag.out
new file mode 100644
index 000000000..62d88f821
--- /dev/null
+++ b/Test/baseResults/spv.uniformArray.frag.out
@@ -0,0 +1,82 @@
+spv.uniformArray.frag
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 52
+
+                              Source GLSL 130
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 10  "texColor"
+                              Name 15  "color"
+                              Name 26  "inColor"
+                              Name 36  "alpha"
+                              Name 47  "gl_FragColor"
+                              Name 51  "texSampler2D"
+                              Decorate 47(gl_FragColor) BuiltIn FragColor
+                              Decorate 51(texSampler2D) NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeVector 7(float) 4
+               9:             TypePointer Function 8(fvec4)
+              11:             TypeInt 32 0
+              12:     11(int) Constant 6
+              13:             TypeArray 8(fvec4) 12
+              14:             TypePointer UniformConstant 13
+       15(color):     14(ptr) Variable UniformConstant 
+              16:             TypeInt 32 1
+              17:     16(int) Constant 1
+              18:             TypePointer UniformConstant 8(fvec4)
+              24:             TypeVector 7(float) 3
+              25:             TypePointer UniformConstant 24(fvec3)
+     26(inColor):     25(ptr) Variable UniformConstant 
+              33:     11(int) Constant 16
+              34:             TypeArray 7(float) 33
+              35:             TypePointer UniformConstant 34
+       36(alpha):     35(ptr) Variable UniformConstant 
+              37:     16(int) Constant 12
+              38:             TypePointer UniformConstant 7(float)
+              46:             TypePointer Output 8(fvec4)
+47(gl_FragColor):     46(ptr) Variable Output 
+              49:             TypeSampler7(float) 2D filter+texture
+              50:             TypePointer UniformConstant 49
+51(texSampler2D):     50(ptr) Variable UniformConstant 
+         4(main):           2 Function None 3
+               5:             Label
+    10(texColor):      9(ptr) Variable Function 
+              19:     18(ptr) AccessChain 15(color) 17
+              20:    8(fvec4) Load 19 
+              21:     18(ptr) AccessChain 15(color) 17
+              22:    8(fvec4) Load 21 
+              23:    8(fvec4) FAdd 20 22
+                              Store 10(texColor) 23 
+              27:   24(fvec3) Load 26(inColor) 
+              28:    8(fvec4) Load 10(texColor) 
+              29:   24(fvec3) VectorShuffle 28 28 0 1 2
+              30:   24(fvec3) FAdd 29 27
+              31:    8(fvec4) Load 10(texColor) 
+              32:    8(fvec4) VectorShuffle 31 30 4 5 6 3
+                              Store 10(texColor) 32 
+              39:     38(ptr) AccessChain 36(alpha) 37
+              40:    7(float) Load 39 
+              41:    8(fvec4) Load 10(texColor) 
+              42:    7(float) CompositeExtract 41 3
+              43:    7(float) FAdd 42 40
+              44:    8(fvec4) Load 10(texColor) 
+              45:    8(fvec4) CompositeInsert 43 44 3
+                              Store 10(texColor) 45 
+              48:    8(fvec4) Load 10(texColor) 
+                              Store 47(gl_FragColor) 48 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.variableArrayIndex.frag.out b/Test/baseResults/spv.variableArrayIndex.frag.out
new file mode 100644
index 000000000..1b8a8c0e8
--- /dev/null
+++ b/Test/baseResults/spv.variableArrayIndex.frag.out
@@ -0,0 +1,147 @@
+spv.variableArrayIndex.frag
+WARNING: 0:3: varying deprecated in version 130; may be removed in future release
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 93
+
+                              Source GLSL 130
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 9  "iLocal"
+                              Name 11  "Count"
+                              Name 14  "lunarStruct1"
+                              MemberName 14(lunarStruct1) 0  "i"
+                              MemberName 14(lunarStruct1) 1  "f"
+                              Name 15  "lunarStruct2"
+                              MemberName 15(lunarStruct2) 0  "i"
+                              MemberName 15(lunarStruct2) 1  "f"
+                              MemberName 15(lunarStruct2) 2  "s1_1"
+                              Name 19  "lunarStruct3"
+                              MemberName 19(lunarStruct3) 0  "s2_1"
+                              MemberName 19(lunarStruct3) 1  "i"
+                              MemberName 19(lunarStruct3) 2  "f"
+                              MemberName 19(lunarStruct3) 3  "s1_1"
+                              Name 21  "foo3"
+                              Name 31  "scale"
+                              Name 35  "foo2"
+                              Name 37  "foo"
+                              Name 55  "gl_FragColor"
+                              Name 59  "sampler"
+                              Name 63  "coord"
+                              Name 69  "constructed"
+                              Decorate 55(gl_FragColor) BuiltIn FragColor
+                              Decorate 63(coord) Smooth 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeInt 32 1
+               8:             TypePointer Function 7(int)
+              10:             TypePointer UniformConstant 7(int)
+       11(Count):     10(ptr) Variable UniformConstant 
+              13:             TypeFloat 32
+14(lunarStruct1):             TypeStruct 7(int) 13(float)
+15(lunarStruct2):             TypeStruct 7(int) 13(float) 14(lunarStruct1)
+              16:             TypeInt 32 0
+              17:     16(int) Constant 3
+              18:             TypeArray 15(lunarStruct2) 17
+19(lunarStruct3):             TypeStruct 18 7(int) 13(float) 14(lunarStruct1)
+              20:             TypePointer UniformConstant 19(lunarStruct3)
+        21(foo3):     20(ptr) Variable UniformConstant 
+              22:      7(int) Constant 0
+              23:      7(int) Constant 1
+              26:             TypeBool
+              30:             TypePointer Function 13(float)
+              32:     16(int) Constant 5
+              33:             TypeArray 15(lunarStruct2) 32
+              34:             TypePointer UniformConstant 33
+        35(foo2):     34(ptr) Variable UniformConstant 
+              36:             TypePointer UniformConstant 14(lunarStruct1)
+         37(foo):     36(ptr) Variable UniformConstant 
+              42:      7(int) Constant 2
+              47:             TypePointer UniformConstant 13(float)
+              53:             TypeVector 13(float) 4
+              54:             TypePointer Output 53(fvec4)
+55(gl_FragColor):     54(ptr) Variable Output 
+              57:             TypeSampler13(float) 2D filter+texture
+              58:             TypePointer UniformConstant 57
+     59(sampler):     58(ptr) Variable UniformConstant 
+              61:             TypeVector 13(float) 2
+              62:             TypePointer Input 61(fvec2)
+       63(coord):     62(ptr) Variable Input 
+              67:             TypeArray 61(fvec2) 17
+              68:             TypePointer Function 67
+              73:   13(float) Constant 1065353216
+              74:   13(float) Constant 1073741824
+              75:   61(fvec2) ConstantComposite 73 74
+              79:             TypePointer Function 61(fvec2)
+         4(main):           2 Function None 3
+               5:             Label
+       9(iLocal):      8(ptr) Variable Function 
+       31(scale):     30(ptr) Variable Function 
+ 69(constructed):     68(ptr) Variable Function 
+              12:      7(int) Load 11(Count) 
+                              Store 9(iLocal) 12 
+              24:     10(ptr) AccessChain 21(foo3) 22 23 22
+              25:      7(int) Load 24 
+              27:    26(bool) SGreaterThan 25 22
+                              SelectionMerge 29 None
+                              BranchConditional 27 28 50 
+              28:               Label
+              38:     10(ptr)   AccessChain 37(foo) 22
+              39:      7(int)   Load 38 
+              40:     10(ptr)   AccessChain 21(foo3) 22 39 22
+              41:      7(int)   Load 40 
+              43:      7(int)   IAdd 41 42
+              44:      7(int)   Load 9(iLocal) 
+              45:      7(int)   IAdd 44 23
+                                Store 9(iLocal) 45 
+              46:      7(int)   IAdd 43 45
+              48:     47(ptr)   AccessChain 35(foo2) 46 42 23
+              49:   13(float)   Load 48 
+                                Store 31(scale) 49 
+                                Branch 29
+              50:               Label
+              51:     47(ptr)   AccessChain 21(foo3) 22 22 42 23
+              52:   13(float)   Load 51 
+                                Store 31(scale) 52 
+                                Branch 29
+              29:             Label
+              56:   13(float) Load 31(scale) 
+              60:          57 Load 59(sampler) 
+              64:   61(fvec2) Load 63(coord) 
+              65:   53(fvec4) TextureSample 60 64 
+              66:   53(fvec4) VectorTimesScalar 56 65
+                              Store 55(gl_FragColor) 66 
+              70:   61(fvec2) Load 63(coord) 
+              71:   13(float) Load 31(scale) 
+              72:   61(fvec2) CompositeConstruct 71 71
+              76:          67 CompositeConstruct 70 72 75
+                              Store 69(constructed) 76 
+              77:     10(ptr) AccessChain 37(foo) 22
+              78:      7(int) Load 77 
+              80:     79(ptr) AccessChain 69(constructed) 78
+              81:   61(fvec2) Load 80 
+              82:     10(ptr) AccessChain 37(foo) 22
+              83:      7(int) Load 82 
+              84:     79(ptr) AccessChain 69(constructed) 83
+              85:   61(fvec2) Load 84 
+              86:   13(float) CompositeExtract 81 0
+              87:   13(float) CompositeExtract 81 1
+              88:   13(float) CompositeExtract 85 0
+              89:   13(float) CompositeExtract 85 1
+              90:   53(fvec4) CompositeConstruct 86 87 88 89
+              91:   53(fvec4) Load 55(gl_FragColor) 
+              92:   53(fvec4) FAdd 91 90
+                              Store 55(gl_FragColor) 92 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.varyingArray.frag.out b/Test/baseResults/spv.varyingArray.frag.out
new file mode 100644
index 000000000..f904a4749
--- /dev/null
+++ b/Test/baseResults/spv.varyingArray.frag.out
@@ -0,0 +1,99 @@
+spv.varyingArray.frag
+WARNING: 0:3: varying deprecated in version 130; may be removed in future release
+WARNING: 0:4: varying deprecated in version 130; may be removed in future release
+WARNING: 0:6: varying deprecated in version 130; may be removed in future release
+WARNING: 0:8: varying deprecated in version 130; may be removed in future release
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 61
+
+                              Source GLSL 130
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 10  "texColor"
+                              Name 13  "texSampler2D"
+                              Name 19  "gl_TexCoord"
+                              Name 34  "color"
+                              Name 39  "alpha"
+                              Name 44  "gl_FragColor"
+                              Name 48  "foo"
+                              Decorate 19(gl_TexCoord) Smooth 
+                              Decorate 34(color) Smooth 
+                              Decorate 39(alpha) Smooth 
+                              Decorate 44(gl_FragColor) BuiltIn FragColor
+                              Decorate 48(foo) Smooth 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeVector 7(float) 4
+               9:             TypePointer Function 8(fvec4)
+              11:             TypeSampler7(float) 2D filter+texture
+              12:             TypePointer UniformConstant 11
+13(texSampler2D):     12(ptr) Variable UniformConstant 
+              15:             TypeInt 32 0
+              16:     15(int) Constant 6
+              17:             TypeArray 8(fvec4) 16
+              18:             TypePointer Input 17
+ 19(gl_TexCoord):     18(ptr) Variable Input 
+              20:             TypeInt 32 1
+              21:     20(int) Constant 4
+              22:             TypePointer Input 8(fvec4)
+              25:     20(int) Constant 5
+              29:             TypeVector 7(float) 2
+       34(color):     22(ptr) Variable Input 
+              38:             TypePointer Input 7(float)
+       39(alpha):     38(ptr) Variable Input 
+              43:             TypePointer Output 8(fvec4)
+44(gl_FragColor):     43(ptr) Variable Output 
+              45:     15(int) Constant 3
+              46:             TypeArray 8(fvec4) 45
+              47:             TypePointer Input 46
+         48(foo):     47(ptr) Variable Input 
+              49:     20(int) Constant 1
+              52:     20(int) Constant 0
+         4(main):           2 Function None 3
+               5:             Label
+    10(texColor):      9(ptr) Variable Function 
+              14:          11 Load 13(texSampler2D) 
+              23:     22(ptr) AccessChain 19(gl_TexCoord) 21
+              24:    8(fvec4) Load 23 
+              26:     22(ptr) AccessChain 19(gl_TexCoord) 25
+              27:    8(fvec4) Load 26 
+              28:    8(fvec4) FAdd 24 27
+              30:    7(float) CompositeExtract 28 0
+              31:    7(float) CompositeExtract 28 1
+              32:   29(fvec2) CompositeConstruct 30 31
+              33:    8(fvec4) TextureSample 14 32 
+                              Store 10(texColor) 33 
+              35:    8(fvec4) Load 34(color) 
+              36:    8(fvec4) Load 10(texColor) 
+              37:    8(fvec4) FAdd 36 35
+                              Store 10(texColor) 37 
+              40:    7(float) Load 39(alpha) 
+              41:    8(fvec4) Load 10(texColor) 
+              42:    8(fvec4) CompositeInsert 40 41 3
+                              Store 10(texColor) 42 
+              50:     22(ptr) AccessChain 48(foo) 49
+              51:    8(fvec4) Load 50 
+              53:     22(ptr) AccessChain 19(gl_TexCoord) 52
+              54:    8(fvec4) Load 53 
+              55:    8(fvec4) FAdd 51 54
+              56:     22(ptr) AccessChain 19(gl_TexCoord) 21
+              57:    8(fvec4) Load 56 
+              58:    8(fvec4) FAdd 55 57
+              59:    8(fvec4) Load 10(texColor) 
+              60:    8(fvec4) FAdd 58 59
+                              Store 44(gl_FragColor) 60 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.varyingArrayIndirect.frag.out b/Test/baseResults/spv.varyingArrayIndirect.frag.out
new file mode 100644
index 000000000..c147e8658
--- /dev/null
+++ b/Test/baseResults/spv.varyingArrayIndirect.frag.out
@@ -0,0 +1,109 @@
+spv.varyingArrayIndirect.frag
+WARNING: 0:3: varying deprecated in version 130; may be removed in future release
+WARNING: 0:4: varying deprecated in version 130; may be removed in future release
+WARNING: 0:6: varying deprecated in version 130; may be removed in future release
+WARNING: 0:8: varying deprecated in version 130; may be removed in future release
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 69
+
+                              Source GLSL 130
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 10  "texColor"
+                              Name 13  "texSampler2D"
+                              Name 19  "userIn"
+                              Name 22  "b"
+                              Name 30  "gl_TexCoord"
+                              Name 31  "a"
+                              Name 45  "color"
+                              Name 50  "alpha"
+                              Name 55  "gl_FragColor"
+                              Decorate 19(userIn) Smooth 
+                              Decorate 30(gl_TexCoord) Smooth 
+                              Decorate 45(color) Smooth 
+                              Decorate 50(alpha) Smooth 
+                              Decorate 55(gl_FragColor) BuiltIn FragColor
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeVector 7(float) 4
+               9:             TypePointer Function 8(fvec4)
+              11:             TypeSampler7(float) 2D filter+texture
+              12:             TypePointer UniformConstant 11
+13(texSampler2D):     12(ptr) Variable UniformConstant 
+              15:             TypeInt 32 0
+              16:     15(int) Constant 2
+              17:             TypeArray 8(fvec4) 16
+              18:             TypePointer Input 17
+      19(userIn):     18(ptr) Variable Input 
+              20:             TypeInt 32 1
+              21:             TypePointer UniformConstant 20(int)
+           22(b):     21(ptr) Variable UniformConstant 
+              24:             TypePointer Input 8(fvec4)
+              27:     15(int) Constant 6
+              28:             TypeArray 8(fvec4) 27
+              29:             TypePointer Input 28
+ 30(gl_TexCoord):     29(ptr) Variable Input 
+           31(a):     21(ptr) Variable UniformConstant 
+              36:     20(int) Constant 5
+              40:             TypeVector 7(float) 2
+       45(color):     24(ptr) Variable Input 
+              49:             TypePointer Input 7(float)
+       50(alpha):     49(ptr) Variable Input 
+              54:             TypePointer Output 8(fvec4)
+55(gl_FragColor):     54(ptr) Variable Output 
+              56:     20(int) Constant 0
+         4(main):           2 Function None 3
+               5:             Label
+    10(texColor):      9(ptr) Variable Function 
+              14:          11 Load 13(texSampler2D) 
+              23:     20(int) Load 22(b) 
+              25:     24(ptr) AccessChain 19(userIn) 23
+              26:    8(fvec4) Load 25 
+              32:     20(int) Load 31(a) 
+              33:     24(ptr) AccessChain 30(gl_TexCoord) 32
+              34:    8(fvec4) Load 33 
+              35:    8(fvec4) FAdd 26 34
+              37:     24(ptr) AccessChain 30(gl_TexCoord) 36
+              38:    8(fvec4) Load 37 
+              39:    8(fvec4) FAdd 35 38
+              41:    7(float) CompositeExtract 39 0
+              42:    7(float) CompositeExtract 39 1
+              43:   40(fvec2) CompositeConstruct 41 42
+              44:    8(fvec4) TextureSample 14 43 
+                              Store 10(texColor) 44 
+              46:    8(fvec4) Load 45(color) 
+              47:    8(fvec4) Load 10(texColor) 
+              48:    8(fvec4) FAdd 47 46
+                              Store 10(texColor) 48 
+              51:    7(float) Load 50(alpha) 
+              52:    8(fvec4) Load 10(texColor) 
+              53:    8(fvec4) CompositeInsert 51 52 3
+                              Store 10(texColor) 53 
+              57:     24(ptr) AccessChain 30(gl_TexCoord) 56
+              58:    8(fvec4) Load 57 
+              59:     20(int) Load 22(b) 
+              60:     24(ptr) AccessChain 30(gl_TexCoord) 59
+              61:    8(fvec4) Load 60 
+              62:    8(fvec4) FAdd 58 61
+              63:    8(fvec4) Load 10(texColor) 
+              64:    8(fvec4) FAdd 62 63
+              65:     20(int) Load 31(a) 
+              66:     24(ptr) AccessChain 19(userIn) 65
+              67:    8(fvec4) Load 66 
+              68:    8(fvec4) FAdd 64 67
+                              Store 55(gl_FragColor) 68 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.voidFunction.frag.out b/Test/baseResults/spv.voidFunction.frag.out
new file mode 100644
index 000000000..430ba7e64
--- /dev/null
+++ b/Test/baseResults/spv.voidFunction.frag.out
@@ -0,0 +1,81 @@
+spv.voidFunction.frag
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 43
+
+                              Source GLSL 120
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 7  "foo("
+                              Name 9  "foo2("
+                              Name 13  "bar"
+                              Name 23  "outColor"
+                              Name 25  "bigColor"
+                              Name 36  "gl_FragColor"
+                              Name 40  "BaseColor"
+                              Name 42  "d"
+                              Decorate 36(gl_FragColor) BuiltIn FragColor
+                              Decorate 40(BaseColor) Smooth 
+                              Decorate 40(BaseColor) NoStaticUse 
+                              Decorate 42(d) NoStaticUse 
+               2:             TypeVoid
+               3:             TypeFunction 2 
+              11:             TypeFloat 32
+              12:             TypePointer PrivateGlobal 11(float)
+         13(bar):     12(ptr) Variable PrivateGlobal 
+              14:   11(float) Constant 1073741824
+              16:   11(float) Constant 1065353216
+              21:             TypeVector 11(float) 4
+              22:             TypePointer Function 21(fvec4)
+              24:             TypePointer UniformConstant 21(fvec4)
+    25(bigColor):     24(ptr) Variable UniformConstant 
+              35:             TypePointer Output 21(fvec4)
+36(gl_FragColor):     35(ptr) Variable Output 
+              39:             TypePointer Input 21(fvec4)
+   40(BaseColor):     39(ptr) Variable Input 
+              41:             TypePointer UniformConstant 11(float)
+           42(d):     41(ptr) Variable UniformConstant 
+         4(main):           2 Function None 3
+               5:             Label
+    23(outColor):     22(ptr) Variable Function 
+                              Store 13(bar) 14 
+              26:   21(fvec4) Load 25(bigColor) 
+                              Store 23(outColor) 26 
+              27:           2 FunctionCall 7(foo() 
+              28:           2 FunctionCall 9(foo2() 
+              29:   11(float) Load 13(bar) 
+              30:   21(fvec4) Load 23(outColor) 
+              31:   11(float) CompositeExtract 30 0
+              32:   11(float) FAdd 31 29
+              33:   21(fvec4) Load 23(outColor) 
+              34:   21(fvec4) CompositeInsert 32 33 0
+                              Store 23(outColor) 34 
+              37:   21(fvec4) Load 23(outColor) 
+                              Store 36(gl_FragColor) 37 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
+         7(foo():           2 Function None 3
+               8:             Label
+              15:   11(float) Load 13(bar) 
+              17:   11(float) FAdd 15 16
+                              Store 13(bar) 17 
+                              Return
+                              FunctionEnd
+        9(foo2():           2 Function None 3
+              10:             Label
+              19:   11(float) Load 13(bar) 
+              20:   11(float) FAdd 19 16
+                              Store 13(bar) 20 
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.whileLoop.frag.out b/Test/baseResults/spv.whileLoop.frag.out
new file mode 100644
index 000000000..d448c1581
--- /dev/null
+++ b/Test/baseResults/spv.whileLoop.frag.out
@@ -0,0 +1,64 @@
+spv.whileLoop.frag
+
+
+
+Linked fragment stage:
+
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 32
+
+                              Source GLSL 110
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4
+                              Name 4  "main"
+                              Name 10  "color"
+                              Name 12  "BaseColor"
+                              Name 19  "d"
+                              Name 25  "bigColor"
+                              Name 30  "gl_FragColor"
+                              Decorate 12(BaseColor) Smooth 
+                              Decorate 30(gl_FragColor) BuiltIn FragColor
+               2:             TypeVoid
+               3:             TypeFunction 2 
+               7:             TypeFloat 32
+               8:             TypeVector 7(float) 4
+               9:             TypePointer Function 8(fvec4)
+              11:             TypePointer Input 8(fvec4)
+   12(BaseColor):     11(ptr) Variable Input 
+              18:             TypePointer UniformConstant 7(float)
+           19(d):     18(ptr) Variable UniformConstant 
+              21:             TypeBool
+              24:             TypePointer UniformConstant 8(fvec4)
+    25(bigColor):     24(ptr) Variable UniformConstant 
+              29:             TypePointer Output 8(fvec4)
+30(gl_FragColor):     29(ptr) Variable Output 
+         4(main):           2 Function None 3
+               5:             Label
+       10(color):      9(ptr) Variable Function 
+              13:    8(fvec4) Load 12(BaseColor) 
+                              Store 10(color) 13 
+                              Branch 14
+              14:             Label
+              16:    8(fvec4) Load 10(color) 
+              17:    7(float) CompositeExtract 16 0
+              20:    7(float) Load 19(d) 
+              22:    21(bool) FOrdLessThan 17 20
+                              LoopMerge 15 None
+                              BranchConditional 22 23 15 
+              23:               Label
+              26:    8(fvec4)   Load 25(bigColor) 
+              27:    8(fvec4)   Load 10(color) 
+              28:    8(fvec4)   FAdd 27 26
+                                Store 10(color) 28 
+                                Branch 14
+              15:             Label
+              31:    8(fvec4) Load 10(color) 
+                              Store 30(gl_FragColor) 31 
+                              Branch 6
+               6:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/spv.100ops.frag b/Test/spv.100ops.frag
new file mode 100644
index 000000000..b86d04230
--- /dev/null
+++ b/Test/spv.100ops.frag
@@ -0,0 +1,25 @@
+#version 100
+
+lowp float foo();
+
+uniform int low, high;
+
+lowp float face1 = 11.0;
+
+void main()
+{
+    int z = 3;
+
+    if (2 * low + 1 < high)
+        ++z;
+
+    gl_FragColor = face1 * vec4(z) + foo();
+}
+
+lowp float face2 = -2.0;
+
+lowp float foo()
+{
+    // testing if face2 initializer insert logic is correct in main
+    return face2;
+}
diff --git a/Test/spv.130.frag b/Test/spv.130.frag
new file mode 100644
index 000000000..5b27e0ccb
--- /dev/null
+++ b/Test/spv.130.frag
@@ -0,0 +1,119 @@
+#version 130
+#extension GL_ARB_texture_gather : enable
+
+vec3 a;
+float b;
+
+in vec4 i;
+out vec4 o;
+out ivec3 io;
+out uvec4 uo;
+
+flat in float fflat;
+smooth in float fsmooth;
+noperspective in float fnop;
+
+uniform samplerCube sampC;
+
+in vec4 gl_Color;
+flat in vec4 gl_Color;
+
+#extension GL_ARB_texture_rectangle : enable
+
+uniform sampler2D samp2D;
+uniform sampler2DShadow samp2DS;
+uniform sampler2DRect samp2DR;
+uniform sampler2DArray samp2DA;
+
+void bar3()
+{
+    o += textureGatherOffset(samp2D, vec2(0.3), ivec2(1));
+    o += textureGatherOffset(samp2DA, vec3(0.3), ivec2(1));
+}
+
+#extension GL_ARB_gpu_shader5 : enable
+
+void bar4()
+{
+    o += textureGatherOffset(samp2DR, vec2(0.3), ivec2(1));
+    o += textureGatherOffset(samp2DS, vec2(0.3), 1.3, ivec2(1));
+    o += textureGatherOffset(samp2D, vec2(0.3), ivec2(1), 2);
+}
+
+#extension GL_ARB_texture_cube_map_array : enable
+
+uniform  samplerCubeArray Sca;
+uniform isamplerCubeArray Isca;
+uniform usamplerCubeArray Usca;
+uniform samplerCubeArrayShadow Scas;
+
+void bar5()
+{
+    io = textureSize(Sca, 3);
+    o += texture(Sca, i);
+    io += texture(Isca, i, 0.7).xyz;
+    uo = texture(Usca, i);
+    
+    o += textureLod(Sca, i, 1.7);
+    a = textureSize(Scas, 3);
+    float f = texture(Scas, i, i.y);
+    ivec4 c = textureGrad(Isca, i, vec3(0.1), vec3(0.2));
+    o += vec4(a, f + c);
+}
+
+#extension GL_ARB_shading_language_420pack : enable
+
+const int ai[3] = { 10, 23, 32 };
+uniform layout(binding=0) sampler2D bounds;
+
+void bar6()
+{
+    mat4x3 m43;
+    float a1 = m43[3].y;
+    //int a2 = m43.length();  // ERROR until shading_language_420pack is fully implemented
+    const float b = 2 * a1;
+    //a.x = gl_MinProgramTexelOffset + gl_MaxProgramTexelOffset;    // ERROR until shading_language_420pack is fully implemented
+}
+
+
+#extension GL_ARB_texture_rectangle : enable
+#extension GL_ARB_shader_texture_lod : require
+
+uniform sampler2D s2D;
+uniform sampler2DRect s2DR;
+uniform sampler2DRectShadow s2DRS;
+uniform sampler1D s1D;
+uniform sampler2DShadow s2DS;
+
+uniform float f;
+uniform vec2 v2;
+uniform vec3 v3;
+uniform vec4 v4;
+
+void bar7()
+{
+    vec4 v;
+
+    o += texture2DRect(s2DR, v2);
+    o += texture2DRectProj(s2DR, v3);
+    o += texture2DRectProj(s2DR, v4);
+    o += shadow2DRect(s2DRS, v3);
+    o += shadow2DRectProj(s2DRS, v4);
+
+    o += texture1DGradARB(s1D, f, f, f);
+    o += texture2DProjGradARB(s2D, v, v2, v2);
+    o += shadow2DProjGradARB(s2DS, v, v2, v2);
+
+    o += shadow2DRectProjGradARB(s2DRS, v, v2, v2);
+}
+
+void main()
+{
+    o = textureGather(sampC, vec3(0.2));
+    o.y =  gl_ClipDistance[3];
+    bar3();
+    bar4();
+    bar5();
+    bar6();
+    bar7();
+}
\ No newline at end of file
diff --git a/Test/spv.140.frag b/Test/spv.140.frag
new file mode 100644
index 000000000..4c67d6b16
--- /dev/null
+++ b/Test/spv.140.frag
@@ -0,0 +1,41 @@
+#version 140
+
+in vec4 k;
+out vec4 o;
+
+in float gl_ClipDistance[5];
+
+layout(row_major) uniform;
+
+uniform sampler2D samp2Da[3];
+
+layout(std140) uniform bn {
+    layout(row_major) mat4 matra[4];
+    layout(column_major) mat4 matca[4];
+    layout(row_major) mat4 matr;
+    layout(column_major) mat4 matc;
+    mat4 matrdef;
+};
+
+uniform sampler2DRect sampR;
+uniform isamplerBuffer sampB;
+
+float foo();
+
+void main()
+{
+    o.y = gl_ClipDistance[2];
+    o.z = gl_ClipDistance[int(k)];
+    o.w = float(textureSize(sampR) + textureSize(sampB)) / 100.0;
+    o.z = foo();
+}
+
+// Test extra-function initializers
+
+float i1 = gl_FrontFacing ? -2.0 : 2.0;
+float i2 = 102;
+
+float foo()
+{
+    return i1 + i2;
+}
diff --git a/Test/spv.150.geom b/Test/spv.150.geom
new file mode 100644
index 000000000..0419265dc
--- /dev/null
+++ b/Test/spv.150.geom
@@ -0,0 +1,39 @@
+#version 150 core
+
+layout(triangles_adjacency) in;
+layout(max_vertices = 30) out;
+layout(stream = 3, triangle_strip) out;
+
+in fromVertex {
+    in vec3 color;
+} fromV[];
+
+out toFragment {
+    out vec3 color;
+} toF;
+
+out fromVertex {
+    vec3 color;
+};
+
+void main()
+{
+    color = fromV[0].color;
+    //?? gl_ClipDistance[3] = gl_in[1].gl_ClipDistance[2];
+    gl_Position = gl_in[0].gl_Position;
+    gl_PointSize = gl_in[3].gl_PointSize;
+    gl_PrimitiveID = gl_PrimitiveIDIn;
+    gl_Layer = 2;
+
+    EmitVertex();
+
+    color = 2 * fromV[0].color;
+    gl_Position = 2.0 * gl_in[0].gl_Position;
+    gl_PointSize = 2.0 * gl_in[3].gl_PointSize;
+    gl_PrimitiveID = gl_PrimitiveIDIn + 1;
+    gl_Layer = 3;
+
+    EmitVertex();
+
+    EndPrimitive();
+}
diff --git a/Test/spv.150.vert b/Test/spv.150.vert
new file mode 100644
index 000000000..065275f87
--- /dev/null
+++ b/Test/spv.150.vert
@@ -0,0 +1,39 @@
+#version 150 core
+
+in vec4 iv4;
+
+uniform float ps;
+uniform int ui;
+
+invariant gl_Position;
+
+struct s1 {
+    int a;
+    int a2;
+    vec4 b[3];
+};
+
+struct s2 {
+    int c;
+    s1 d[4];
+};
+
+out s2 s2out;
+
+void main()
+{
+    gl_Position = iv4;
+    gl_PointSize = ps;
+    gl_ClipDistance[2] = iv4.x;
+    int i;
+    s2out.d[i].b[2].w = ps;
+    
+    // test recovery from nonsupported built-ins    
+    //float n1 = noise1(2.4);
+    //n1 = noise1(vec4(n1));
+    //vec2 n2 = noise2(vec3(n1));
+    //vec3 n3 = noise3(n2);
+    //vec4 n4 = noise4(n3);
+}
+
+out float gl_ClipDistance[4];
diff --git a/Test/spv.300BuiltIns.vert b/Test/spv.300BuiltIns.vert
new file mode 100644
index 000000000..c8104de87
--- /dev/null
+++ b/Test/spv.300BuiltIns.vert
@@ -0,0 +1,17 @@
+#version 300 es
+
+in mediump float ps;
+
+invariant gl_Position;
+
+void main()
+{
+    mediump int i = (4 * gl_VertexID - 10);
+    mediump int j = (4 * gl_VertexID - 10);
+
+    gl_Position = vec4(ps);
+    gl_Position *= float(i);
+
+    gl_PointSize = ps; 
+    gl_PointSize *= float(j);
+}
diff --git a/Test/spv.300layout.frag b/Test/spv.300layout.frag
new file mode 100644
index 000000000..d80de3ab0
--- /dev/null
+++ b/Test/spv.300layout.frag
@@ -0,0 +1,22 @@
+#version 300 es
+
+precision mediump float;
+
+in vec4 pos;
+in vec3 color;
+
+layout(location = 7) out vec3 c;
+layout(LocatioN = 3) out vec4 p[2];
+
+struct S {
+    vec3 c;
+    float f;
+};
+
+in S s;
+
+void main()
+{
+    c = color + s.c;
+    p[1] = pos * s.f;
+}
diff --git a/Test/spv.300layout.vert b/Test/spv.300layout.vert
new file mode 100644
index 000000000..f5bb587ff
--- /dev/null
+++ b/Test/spv.300layout.vert
@@ -0,0 +1,49 @@
+#version 300 es
+
+layout(location = 7) in vec3 c;
+layout(LocatioN = 3) in vec4 p;
+layout(location = 9) in ivec2 aiv2;
+out vec4 pos;
+out vec3 color;
+flat out int iout;
+
+layout(shared, column_major, row_major) uniform; // default is now shared and row_major
+
+layout(std140) uniform Transform { // layout of this block is std140
+    mat4 M1; // row_major
+    layout(column_major) mat4 M2; // column major
+    mat3 N1; // row_major
+    int iuin;
+} tblock;
+
+uniform T2 { // layout of this block is shared
+    bool b;
+    mat4 t2m;
+};
+
+layout(column_major) uniform T3 { // shared and column_major
+    mat4 M3; // column_major
+    layout(row_major) mat4 M4; // row major
+    mat2x3 N2; // column_major
+    uvec3 uv3a[4];
+};
+
+uniform uint uiuin;
+
+struct S {
+    vec3 c;
+    float f;
+};
+
+out S s;
+
+void main()
+{
+    pos = p * (tblock.M1 + tblock.M2 + M4 + M3 + t2m);
+    color = c * tblock.N1;
+    iout = tblock.iuin + int(uiuin) + aiv2.y;
+    s.c = c;
+    s.f = p.x;
+    if (N2[1] != vec3(1.0) || uv3a[2] != uvec3(5))
+        ++s.c;
+}
diff --git a/Test/spv.300layoutp.vert b/Test/spv.300layoutp.vert
new file mode 100644
index 000000000..a0986e478
--- /dev/null
+++ b/Test/spv.300layoutp.vert
@@ -0,0 +1,49 @@
+#version 300 es
+
+layout(location = 7) in vec3 c;
+layout(LocatioN = 3) in vec4 p;
+layout(location = 9) in ivec2 aiv2;
+out vec4 pos;
+out vec3 color;
+flat out int iout;
+
+layout(shared, column_major, row_major) uniform; // default is now shared and row_major
+
+layout(std140) uniform Transform { // layout of this block is std140
+    mat4 M1; // row_major
+    layout(column_major) mat4 M2; // column major
+    mat3 N1; // row_major
+    int iuin;
+} tblock;
+
+uniform T2 { // layout of this block is shared
+    bool b;
+    mat4 t2m;
+};
+
+layout(column_major) uniform T3 { // shared and column_major
+    mat4 M3; // column_major
+    layout(row_major) mat4 M4; // row major
+    mat2x3 N2; // column_major
+    uvec3 uv3a[4];
+};
+
+uniform uint uiuin;
+
+struct S {
+    vec3 c;
+    float f;
+};
+
+out S s;
+
+void main()
+{
+    pos = p * (tblock.M1 * tblock.M2 * M4 * M3 * t2m);
+    color = c * tblock.N1;
+    iout = tblock.iuin + int(uiuin) + aiv2.y;
+    s.c = c;
+    s.f = p.x;
+    if (N2[1] != vec3(1.0) || uv3a[2] != uvec3(5))
+        ++s.c;
+}
diff --git a/Test/spv.310.comp b/Test/spv.310.comp
new file mode 100644
index 000000000..45116361d
--- /dev/null
+++ b/Test/spv.310.comp
@@ -0,0 +1,37 @@
+#version 310 es
+
+precision highp float;
+
+layout (local_size_x = 16, local_size_y = 32, local_size_z = 4) in;
+
+shared float s;
+shared int i;
+
+buffer outb {
+    float f;
+    float g;
+    float h;
+    vec3 uns[];  // this makes it look like the "second" set of 3 floats in a struct, which LLVM
+                 // takes advantage of when optimizing, giving confusing results, like thinking
+                 // &outbname.uns[18].x == &outbname[9].uns.x
+} outbname;
+
+buffer outbna {
+    int k;
+    vec4 na;
+} outbnamena;
+
+buffer outs {
+    vec4 va[];
+} outnames;
+
+void main()
+{
+    barrier();
+    outbname.f = s;
+    outbnamena.na = vec4(s);
+    s = outbname.uns[18].x;           // TODO: see note above
+    //outbname.uns[17] = vec3(3.0);   // TODO: see note above, this one bitcasts, which isn't handled
+    outbname.uns[i] = vec3(s);
+    outnames.va[gl_LocalInvocationID.x] = vec4(s);
+}
diff --git a/Test/spv.330.geom b/Test/spv.330.geom
new file mode 100644
index 000000000..ebd4ac66e
--- /dev/null
+++ b/Test/spv.330.geom
@@ -0,0 +1,26 @@
+#version 330 core
+#extension GL_ARB_separate_shader_objects : enable
+
+in gl_PerVertex
+{
+    float gl_ClipDistance[1];
+    vec4 gl_Position;
+} gl_in[];
+
+out gl_PerVertex
+{
+    vec4 gl_Position;
+    float gl_ClipDistance[1];
+};
+
+layout( triangles ) in;
+layout( triangle_strip, max_vertices = 3 ) out;
+
+void main()
+{
+    vec4 v;
+    gl_Position = gl_in[1].gl_Position;
+    gl_ClipDistance[0] = gl_in[1].gl_ClipDistance[0];
+    EmitVertex();
+    EndPrimitive();
+}
diff --git a/Test/spv.400.frag b/Test/spv.400.frag
new file mode 100644
index 000000000..f35537c97
--- /dev/null
+++ b/Test/spv.400.frag
@@ -0,0 +1,42 @@
+#version 400 core
+
+in vec2 c2D;
+flat in int i;
+out vec4 outp;
+out ivec4 ioutp;
+out uvec4 uoutp;
+uniform sampler2D arrayedSampler[5];
+uniform usampler2DRect samp2dr;
+uniform isampler2DArray isamp2DA;
+uniform sampler2DRectShadow u2drs;
+
+#extension GL_ARB_separate_shader_objects : enable
+
+layout(location = 6) in vec4 vl2;
+
+void foo23()
+{
+    const ivec2[3] offsets = ivec2[3](ivec2(1,2), ivec2(3,4), ivec2(15,16));
+
+    outp.x += textureProjGradOffset(u2drs, outp, vec2(0.0), vec2(0.0), offsets[1]);
+}
+
+void main()
+{
+    vec4 v;
+    v = texture(arrayedSampler[i], c2D);
+    outp.x = gl_ClipDistance[1];
+    outp.yzw = v.yzw;
+
+    ivec2 offsets[4];
+    const ivec2 constOffsets[4] = ivec2[4](ivec2(1,2), ivec2(3,4), ivec2(15,16), ivec2(-2,0));
+    uoutp = textureGatherOffsets(samp2dr, c2D, constOffsets, 2);
+    outp += textureGather(arrayedSampler[0], c2D);
+    ioutp = textureGatherOffset(isamp2DA, vec3(0.1), ivec2(1), 3);
+    ioutp += textureGatherOffset(isamp2DA, vec3(0.1), ivec2(1), 1+2);
+    ioutp += textureGatherOffset(isamp2DA, vec3(0.1), ivec2(i));
+
+    outp += gl_FragCoord + vl2;
+    foo23();
+}
+
diff --git a/Test/spv.400.tesc b/Test/spv.400.tesc
new file mode 100644
index 000000000..348e6214f
--- /dev/null
+++ b/Test/spv.400.tesc
@@ -0,0 +1,43 @@
+#version 400 core
+
+layout(vertices = 4) out;
+int outa[gl_out.length()];
+
+patch out vec4 patchOut;
+
+void main()
+{
+    barrier();
+
+    int a = gl_MaxTessControlInputComponents +
+            gl_MaxTessControlOutputComponents +
+            gl_MaxTessControlTextureImageUnits +
+            gl_MaxTessControlUniformComponents +
+            gl_MaxTessControlTotalOutputComponents;
+
+    vec4 p = gl_in[1].gl_Position;
+    float ps = gl_in[1].gl_PointSize;
+    float cd = gl_in[1].gl_ClipDistance[2];
+
+    int pvi = gl_PatchVerticesIn;
+    int pid = gl_PrimitiveID;
+    int iid = gl_InvocationID;
+
+    gl_out[1].gl_Position = p;
+    gl_out[1].gl_PointSize = ps;
+    gl_out[1].gl_ClipDistance[1] = cd;
+
+    gl_TessLevelOuter[3] = 3.2;
+    gl_TessLevelInner[1] = 1.3;
+}
+
+in vec2 inb[];
+in vec2 ind[gl_MaxPatchVertices];
+
+#extension GL_ARB_separate_shader_objects : enable
+
+layout(location = 3) in vec4 ivla[];
+layout(location = 4) in vec4 ivlb[];
+
+layout(location = 3) out vec4 ovla[];
+layout(location = 4) out vec4 ovlb[];
diff --git a/Test/spv.400.tese b/Test/spv.400.tese
new file mode 100644
index 000000000..da33f41ea
--- /dev/null
+++ b/Test/spv.400.tese
@@ -0,0 +1,52 @@
+#version 400 core
+
+layout(triangles, ccw) in;
+
+layout(fractional_odd_spacing) in;
+
+layout(point_mode) in;
+
+patch in vec4 patchIn;
+
+void main()
+{
+    int a = gl_MaxTessEvaluationInputComponents +
+            gl_MaxTessEvaluationOutputComponents +
+            gl_MaxTessEvaluationTextureImageUnits +
+            gl_MaxTessEvaluationUniformComponents +
+            gl_MaxTessPatchComponents +
+            gl_MaxPatchVertices +
+            gl_MaxTessGenLevel;
+
+    vec4 p = gl_in[1].gl_Position;
+    float ps = gl_in[1].gl_PointSize;
+    float cd = gl_in[1].gl_ClipDistance[2];
+
+    int pvi = gl_PatchVerticesIn;
+    int pid = gl_PrimitiveID;
+    vec3 tc = gl_TessCoord;
+    float tlo = gl_TessLevelOuter[3];
+    float tli = gl_TessLevelInner[1];
+
+    gl_Position = p;
+    gl_PointSize = ps;
+    gl_ClipDistance[2] = cd;
+}
+
+#extension GL_ARB_separate_shader_objects : enable
+
+in vec2 inb[];
+in vec2 ind[gl_MaxPatchVertices];
+
+in testblb {
+    int f;
+} blb[];
+
+in testbld {
+    int f;
+} bld[gl_MaxPatchVertices];
+
+layout(location = 23) in vec4 ivla[];
+layout(location = 24) in vec4 ivlb[];
+
+layout(location = 23) out vec4 ovla[2];
diff --git a/Test/spv.420.geom b/Test/spv.420.geom
new file mode 100644
index 000000000..afb04bc92
--- /dev/null
+++ b/Test/spv.420.geom
@@ -0,0 +1,43 @@
+#version 420 core
+
+layout(triangles) in;
+
+in gl_PerVertex {
+    float gl_PointSize;
+} gl_in[];
+
+out gl_PerVertex {
+    float gl_PointSize;
+};
+
+layout(line_strip) out;
+layout(max_vertices = 127) out;
+layout(invocations = 4) in;
+
+uniform sampler2D s2D;
+in vec2 coord[];
+uniform vec4 v4;
+uniform int i;
+
+void main()
+{
+    float p = gl_in[1].gl_PointSize;
+    gl_PointSize = p;
+    gl_ViewportIndex = 7;
+
+    EmitStreamVertex(1);
+    EndStreamPrimitive(0);
+    EmitVertex();
+    EndPrimitive();
+    int id = gl_InvocationID;
+
+    const ivec2 offsets[5] =
+    {
+        ivec2(0,1),
+        ivec2(1,-2),
+        ivec2(0,3),
+        ivec2(-3,0),
+        ivec2(2,1)
+    };
+    vec4 v = textureGatherOffset(s2D, coord[0], offsets[i].xy);
+}
diff --git a/Test/spv.430.vert b/Test/spv.430.vert
new file mode 100644
index 000000000..55cb60b13
--- /dev/null
+++ b/Test/spv.430.vert
@@ -0,0 +1,32 @@
+#version 430 core
+
+layout(location = 4) uniform vec4 uv4;
+
+out gl_PerVertex {
+    float gl_ClipDistance[];
+};
+
+const float cx = 4.20;
+const float dx = 4.20;
+in vec4 bad[10];
+highp in vec4 badorder;
+out invariant vec4 badorder2;
+out flat vec4 badorder3;
+
+uniform float f;
+
+void main()
+{
+    gl_ClipDistance[2] = 3.7;
+
+    if (bad[0].x == cx.x)
+        badorder3 = bad[0];
+
+    gl_ClipDistance[0] = f.x;
+}
+
+layout(binding = 3) uniform boundblock { int aoeu; } boundInst;
+layout(binding = 7) uniform anonblock { int aoeu; } ;
+layout(binding = 4) uniform sampler2D sampb1;
+layout(binding = 5) uniform sampler2D sampb2[10];
+layout(binding = 31) uniform sampler2D sampb4;
diff --git a/Test/spv.Operations.frag b/Test/spv.Operations.frag
new file mode 100644
index 000000000..820048f22
--- /dev/null
+++ b/Test/spv.Operations.frag
@@ -0,0 +1,166 @@
+#version 130
+
+uniform ivec4 uiv4;
+uniform vec4 uv4;
+uniform bool ub;
+uniform bvec4 ub41, ub42;
+uniform float uf;
+uniform int ui;
+
+#ifdef TEST_POST_110
+uniform uvec4 uuv4;
+uniform unsigned int uui;
+#endif
+
+void main()
+{
+    vec4 v;
+	float f;
+	bool b;
+	bvec4 bv4;
+	int i;
+#ifdef TEST_POST_110
+	uint u;
+#endif
+
+	// floating point
+    v = radians(uv4);
+    v += degrees(v);
+    v += (i = ui*ui, sin(v));
+    v += cos(v);
+    v += tan(v);
+    v += asin(v);
+    v += acos(v);
+
+    v += atan(v);
+    v += sinh(v);
+    v += cosh(v);
+    v += tanh(v);
+    v += asinh(v);
+    v += acosh(v);
+    v += atanh(v);
+
+    v += pow(v, v);
+    v += exp(v);
+    v += log(v);
+    v += exp2(v);
+    v += log2(v);
+    v += sqrt(v);
+    v += inversesqrt(v);
+    v += abs(v);
+    v += sign(v);
+    v += floor(v);
+
+#ifdef TEST_POST_110
+    v += trunc(v);
+    v += round(v);
+    v += roundEven(v);
+#endif
+
+    v += ceil(v);
+    v += fract(v);
+    v += mod(v, v);
+	v += mod(v, v.x);
+
+#ifdef TEST_POST_110
+    v += modf(v, v);
+#endif
+
+    v += min(v, uv4);
+    v += max(v, uv4);
+    v += clamp(v, uv4, uv4);
+    v += mix(v,v,v);
+
+#ifdef TEST_POST_110
+    v += mix(v,v,ub);
+    v += intBitsToFloat(v);
+    v += uintBitsToFloat(v);
+    v += fma(v);
+    v += frexp(v);
+    v += ldexp(v);
+    v += unpackUnorm2x16(v);
+    v += unpackUnorm4x8(v);
+    v += unpackSnorm4x8(v);
+#endif
+
+    v += step(v,v);
+    v += smoothstep(v,v,v);
+    v += step(uf,v);
+    v += smoothstep(uf,uf,v);
+    v += normalize(v);
+    v += faceforward(v, v, v);
+    v += reflect(v, v);
+    v += refract(v, v, uf);
+    v += dFdx(v);
+    v += dFdy(v);
+    v += fwidth(v);
+	//noise*(v);
+
+#ifdef TEST_POST_110
+	// signed integer
+	i += abs(ui);
+	i += sign(i);
+	i += min(i, ui);
+	i += max(i, ui);
+	i += clamp(i, ui, ui);
+
+	floatsBitsToInt(v);
+	packUnorm2x16(v);
+	packUnorm4x8(v);
+	packSnorm4x8(v);
+
+	// unsigned integer
+    u = abs(uui);
+    u += sign(u);
+    u += min(u, uui);
+    u += max(u, uui);
+    u += clamp(u, uui, uui);
+    u += floatsBitToInt(v);
+    u += packUnorm2x16(v);
+    u += packUnorm4x8(v);
+    u += packSnorm4x8(v);
+    u += floatBitsToUInt(v);
+#endif
+
+	// bool
+#ifdef TEST_POST_110
+	b = isnan(uf);
+    b = isinf(v);
+#endif
+	b = any(lessThan(v, uv4));
+	b = (b && any(lessThanEqual(v, uv4)));
+    b = (b && any(greaterThan(v, uv4)));
+    b = (b && any(greaterThanEqual(v, uv4)));
+    b = (b && any(equal(ub41, ub42)));
+    b = (b && any(notEqual(ub41, ub42)));
+    b = (b && any(ub41));
+    b = (b && all(ub41));
+    b = (b && any(not(ub41)));
+	
+	i = ((i + ui) * i - ui) / i;
+	i = i % ui;
+	if (i == ui || i != ui && i == ui ^^ i != 2)
+	    ++i;
+	
+	f = ((uf + uf) * uf - uf) / uf;
+
+	f += length(v);
+    f += distance(v, v);
+    f += dot(v, v);
+    f += dot(f, uf);
+	f += cross(v.xyz, v.xyz).x;
+
+	if (f == uf || f != uf && f != 2.0)
+	    ++f;
+
+    i &= ui;
+    i |= 0x42;
+    i ^= ui;
+    i %= 17;
+    i >>= 2;
+    i <<= ui;
+    i = ~i;
+    b = !b;
+
+    gl_FragColor = b ? vec4(i) + vec4(f) + v : v;
+}
diff --git a/Test/spv.aggOps.frag b/Test/spv.aggOps.frag
new file mode 100644
index 000000000..a0450dca9
--- /dev/null
+++ b/Test/spv.aggOps.frag
@@ -0,0 +1,51 @@
+#version 130
+
+uniform sampler2D sampler;
+varying mediump vec2 coord;
+
+varying vec4 u, w;
+
+struct s1 {
+    int i;
+    float f;
+};
+
+struct s2 {
+    int i;
+    float f;
+	s1 s1_1;
+};
+
+uniform s1 foo1;
+uniform s2 foo2a;
+uniform s2 foo2b;
+
+void main()
+{
+    vec4 v;
+    s1 a[3], b[3];
+    a = s1[3](s1(int(u.x), u.y), s1(int(u.z), u.w), s1(14, 14.0));
+    b = s1[3](s1(17, 17.0), s1(int(w.x), w.y), s1(int(w.z), w.w));
+
+    if (foo2a == foo2b)
+        v = texture2D(sampler, coord);
+    else
+        v = texture2D(sampler, 2.0*coord);
+
+    if (u == v)
+        v *= 3.0;
+
+    if (u != v)
+        v *= 4.0;
+
+    if (coord == v.yw)
+        v *= 5.0;
+
+    if (a == b)
+        v *= 6.0;
+
+    if (a != b)
+        v *= 7.0;
+
+	gl_FragColor =  v;
+}
diff --git a/Test/spv.always-discard.frag b/Test/spv.always-discard.frag
new file mode 100644
index 000000000..cea4ceec6
--- /dev/null
+++ b/Test/spv.always-discard.frag
@@ -0,0 +1,36 @@
+#version 110
+varying vec2 tex_coord;
+
+void main (void)
+{
+    vec4 white = vec4(1.0);
+    vec4 black = vec4(0.2);
+    vec4 color = white;
+
+    // First, cut out our circle
+    float x = tex_coord.x*2.0 - 1.0;
+    float y = tex_coord.y*2.0 - 1.0;
+
+    float radius = sqrt(x*x + y*y);
+    if (radius > 1.0) {
+        if (radius > 1.1) {
+            ++color;
+        }
+
+        gl_FragColor = color;
+
+        if (radius > 1.2) {
+            ++color;
+        }
+
+    }
+
+    discard;
+
+    // If we're near an edge, darken us a tiny bit
+    if (radius >= 0.75)
+        color -= abs(pow(radius, 16.0)/2.0);
+
+    gl_FragColor = color;
+
+}
diff --git a/Test/spv.always-discard2.frag b/Test/spv.always-discard2.frag
new file mode 100644
index 000000000..a619369d6
--- /dev/null
+++ b/Test/spv.always-discard2.frag
@@ -0,0 +1,19 @@
+#version 110
+varying vec2 tex_coord;
+
+void main (void)
+{
+    vec4 white = vec4(1.0);
+    vec4 black = vec4(0.2);
+    vec4 color = white;
+
+    // First, cut out our circle
+    float x = tex_coord.x*2.0 - 1.0;
+    float y = tex_coord.y*2.0 - 1.0;
+
+    discard;
+
+
+    gl_FragColor = color;
+
+}
diff --git a/Test/spv.conditionalDiscard.frag b/Test/spv.conditionalDiscard.frag
new file mode 100644
index 000000000..58e6fa5d5
--- /dev/null
+++ b/Test/spv.conditionalDiscard.frag
@@ -0,0 +1,14 @@
+#version 110
+
+uniform sampler2D tex;
+varying vec2 coord;
+
+void main (void)
+{
+    vec4 v = texture2D(tex, coord);
+
+    if (v == vec4(0.1,0.2,0.3,0.4))
+        discard;
+
+    gl_FragColor = v;
+}
diff --git a/Test/spv.conversion.frag b/Test/spv.conversion.frag
new file mode 100644
index 000000000..f17293b89
--- /dev/null
+++ b/Test/spv.conversion.frag
@@ -0,0 +1,112 @@
+#version 130
+
+uniform bool  u_b;
+uniform bvec2 u_b2;
+uniform bvec3 u_b3;
+uniform bvec4 u_b4;
+
+uniform int   u_i;
+uniform ivec2 u_i2;
+uniform ivec3 u_i3;
+uniform ivec4 u_i4;
+ 
+uniform float u_f;
+uniform vec2 u_f2;
+uniform vec3 u_f3;
+uniform vec4 u_f4;
+
+uniform bool  i_b;
+uniform bvec2 i_b2;
+uniform bvec3 i_b3;
+uniform bvec4 i_b4;
+
+flat in int   i_i;
+flat in ivec2 i_i2;
+flat in ivec3 i_i3;
+flat in ivec4 i_i4;
+
+in float i_f;
+in vec2 i_f2;
+in vec3 i_f3;
+in vec4 i_f4;
+
+void main()
+{
+    bool   b = bool(u_i) ^^ bool(u_f);
+    bvec2 b2 = bvec2(u_i, u_f);
+    bvec3 b3 = bvec3(u_i, u_f, i_i);
+    bvec4 b4 = bvec4(u_i, u_f, i_i, i_f);
+
+    int    i = int(u_f)    + int(b);
+    ivec2 i2 = ivec2(u_f2) + ivec2(b2);
+    ivec3 i3 = ivec3(u_f3) + ivec3(b3);
+    ivec4 i4 = ivec4(u_f4) + ivec4(b4);
+
+    float f = i;
+    vec2 f2 = i2;
+    vec3 f3 = i3;
+    vec4 f4 = i4;
+
+    f  += (float(i) + float(b));
+    f2 -= vec2(i2) + vec2(b2);
+    f3 /= vec3(i3) + vec3(b3);
+    f4 += vec4(i4) + vec4(b4);
+
+    f4 += vec4(bvec4(i_i4));
+    f4 += vec4(bvec4(u_f4));
+    
+    f  += f                 - i;
+    f2 += vec2(f, i)       + i2;
+    f3 += i3 + vec3(f, i, f);
+    f4 += vec4(b, i, f, i) + i4;
+    
+    f2 += vec2(f, i)       * i;
+    f3 += vec3(f, i, f)    + i;
+    f4 += i - vec4(b, i, f, i);
+
+    i2 += ivec2(f, i);
+    i3 += ivec3(f, i, f);
+    i4 += ivec4(b, i, f, i);
+
+    if (f < i || i < f ||
+        f2 == i2 ||
+        i3 != f3)
+        f = (b ? i : f2.x) + (b2.x ? f3.x : i2.y);
+
+    gl_FragColor = 
+        b || 
+        b2.x ||
+        b2.y ||
+        b3.x ||
+        b3.y ||
+        b3.z ||
+        b4.x ||
+        b4.y ||
+        b4.z ||
+        b4.w ? vec4(
+        i  +
+        i2.x +
+        i2.y +
+        i3.x +
+        i3.y +
+        i3.z +
+        i4.x +
+        i4.y +
+        i4.z +
+        i4.w +
+        f  +
+        f2.x +
+        f2.y +
+        f3.x +
+        f3.y +
+        f3.z +
+        f4.x +
+        f4.y +
+        f4.z +
+        f4.w) : vec4(1.0);
+
+    // with constants...
+    ivec4 cv2 = ivec4(1.0);
+    bvec4 cv5 = bvec4(cv2);
+    gl_FragColor += float(cv5);
+}
diff --git a/Test/spv.dataOut.frag b/Test/spv.dataOut.frag
new file mode 100644
index 000000000..258f534ea
--- /dev/null
+++ b/Test/spv.dataOut.frag
@@ -0,0 +1,8 @@
+#version 130 
+
+varying vec4 Color;
+
+void main()
+{
+    gl_FragData[1] = Color;
+}
diff --git a/Test/spv.dataOutIndirect.frag b/Test/spv.dataOutIndirect.frag
new file mode 100644
index 000000000..d6b8667d7
--- /dev/null
+++ b/Test/spv.dataOutIndirect.frag
@@ -0,0 +1,10 @@
+#version 130 
+
+varying vec4 Color;
+
+uniform int i;
+
+void main()
+{
+    gl_FragData[i] = Color;
+}
diff --git a/Test/spv.dataOutIndirect.vert b/Test/spv.dataOutIndirect.vert
new file mode 100644
index 000000000..7c647fc0a
--- /dev/null
+++ b/Test/spv.dataOutIndirect.vert
@@ -0,0 +1,12 @@
+#version 130
+
+attribute vec4 color;
+varying vec4 colorOut[6];
+
+void main()
+{
+    for (int i = 1; i < 5; ++i)
+        colorOut[i] = color;
+
+    gl_Position = colorOut[2];
+}
diff --git a/Test/spv.deepRvalue.frag b/Test/spv.deepRvalue.frag
new file mode 100644
index 000000000..4d8808667
--- /dev/null
+++ b/Test/spv.deepRvalue.frag
@@ -0,0 +1,36 @@
+#version 120
+
+uniform sampler2D sampler;
+
+vec4 v1 = vec4(2.0, 3.0, 5.0, 7.0);
+vec4 v2 = vec4(11.0, 13.0, 17.0, 19.0);
+vec4 v3 = vec4(23.0, 29.0, 31.0, 37.0);
+vec4 v4 = vec4(41.0, 43.0, 47.0, 53.0);
+
+struct str {
+    int a;
+    vec2 b[3];
+    bool c;
+};
+
+void main()
+{
+    mat4 m = mat4(v1, v2, v3, v4);
+
+    mat4 mm  = matrixCompMult(m, m);
+    float f = mm[1].w; // should be 19 * 19 = 361
+
+    // do a deep access to a spontaneous r-value
+    float g = matrixCompMult(m, m)[2].y;  // should be 29 * 29 = 841
+
+    float h = str(1, vec2[3](vec2(2.0, 3.0), vec2(4.0, 5.0), vec2(6.0, 7.0)), true).b[1][1];  // should be 5.0
+
+    float i = texture2D(sampler, vec2(0.5,0.5)).y;
+
+    i += (i > 0.1 ? v1 : v2)[3];
+
+    str t;
+    i += (t = str(1, vec2[3](vec2(2.0, 3.0), vec2(4.0, 5.0), vec2(6.0, 7.0)), true)).b[2].y;  // should be 7.0
+
+    gl_FragColor = vec4(f, g, h, i);
+}
diff --git a/Test/spv.depthOut.frag b/Test/spv.depthOut.frag
new file mode 100644
index 000000000..5a8927101
--- /dev/null
+++ b/Test/spv.depthOut.frag
@@ -0,0 +1,10 @@
+#version 130
+
+varying vec4 Color;
+varying float Depth;
+
+void main()
+{
+    gl_FragDepth = Depth;
+    gl_FragColor = Color;
+}
diff --git a/Test/spv.discard-dce.frag b/Test/spv.discard-dce.frag
new file mode 100644
index 000000000..f2fef4d11
--- /dev/null
+++ b/Test/spv.discard-dce.frag
@@ -0,0 +1,35 @@
+#version 110
+varying vec2 tex_coord;
+
+void main (void)
+{
+    vec4 white = vec4(1.0);
+    vec4 black = vec4(0.2);
+    vec4 color = white;
+
+    // First, cut out our circle
+    float x = tex_coord.x*2.0 - 1.0;
+    float y = tex_coord.y*2.0 - 1.0;
+
+    float radius = sqrt(x*x + y*y);
+    if (radius > 1.0) {
+        if (radius > 1.1) {
+            ++color;
+        }
+
+        gl_FragColor = color;
+
+        if (radius > 1.2) {
+            ++color;
+        }
+
+        discard;
+    }
+
+    // If we're near an edge, darken us a tiny bit
+    if (radius >= 0.75)
+        color -= abs(pow(radius, 16.0)/2.0);
+
+    gl_FragColor = color;
+
+}
diff --git a/Test/spv.doWhileLoop.frag b/Test/spv.doWhileLoop.frag
new file mode 100644
index 000000000..3d6f93c51
--- /dev/null
+++ b/Test/spv.doWhileLoop.frag
@@ -0,0 +1,16 @@
+#version 110
+
+uniform vec4 bigColor;
+varying vec4 BaseColor;
+uniform float d;
+
+void main()
+{
+    vec4 color = BaseColor;
+
+    do {
+        color += bigColor;
+    } while (color.x < d);
+
+    gl_FragColor = color;
+}
diff --git a/Test/spv.earlyReturnDiscard.frag b/Test/spv.earlyReturnDiscard.frag
new file mode 100644
index 000000000..718ea72f3
--- /dev/null
+++ b/Test/spv.earlyReturnDiscard.frag
@@ -0,0 +1,102 @@
+#version 110
+
+uniform float d;
+uniform vec4 bigColor, smallColor;
+uniform vec4 otherColor;
+
+varying float c;
+
+uniform float threshhold;
+uniform float threshhold2;
+uniform float threshhold3;
+
+uniform float minimum;
+
+varying vec4 BaseColor;
+
+uniform bool b;
+
+void main()
+{
+    vec4 color = BaseColor;
+    vec4 color2;
+
+    color2 = otherColor;
+
+    if (c > d)
+        color += bigColor;
+    else
+        color += smallColor;
+
+    if (color.z < minimum)
+        return;
+
+    color.z++;
+
+    if (color.z > threshhold)
+        discard;
+
+    color++;
+
+    // Two path, different rest
+    if (color.w > threshhold2) {
+        if (color.z > threshhold2)
+            return;
+        else if (b)
+            color.z++;
+        else {
+            if (color.x < minimum) {
+                discard;
+            } else {
+                color++;
+            }
+        }
+    } else {
+        if (b)
+            discard;
+        else
+            return;
+    }
+
+
+    // // Two path, shared rest
+    // if (color.w > threshhold2) {
+    //     if (color.z > threshhold2)
+    //         return;
+    //     else if (b)
+    //         color++;
+    //     else {
+    //         if (color.x < minimum) {
+    //             discard;
+    //         } else {
+    //             color++;
+    //         }
+    //     }
+    // } else {
+    //     if (b)
+    //         discard;
+    //     else
+    //         return;
+    // }
+
+
+    // // One path
+    // if (color.w > threshhold2) {
+    //     if (color.z > threshhold2)
+    //         return;
+    //     else {
+    //         if (color.x < minimum) {
+    //             discard;
+    //         } else {
+    //             color++;
+    //         }
+    //     }
+    // } else {
+    //     if (b)
+    //         discard;
+    //     else
+    //         return;
+    // }
+
+    gl_FragColor = color * color2;
+}
diff --git a/Test/spv.flowControl.frag b/Test/spv.flowControl.frag
new file mode 100644
index 000000000..eaa6fb1da
--- /dev/null
+++ b/Test/spv.flowControl.frag
@@ -0,0 +1,23 @@
+#version 120
+
+uniform float d;
+uniform vec4 bigColor, smallColor;
+uniform vec4 otherColor;
+
+varying float c;
+varying vec4 BaseColor;
+
+void main()
+{
+    vec4 color = BaseColor;
+    vec4 color2;
+
+    color2 = otherColor;
+
+    if (c > d)
+        color += bigColor;
+    else
+        color += smallColor;
+
+    gl_FragColor = color * color2;
+}
diff --git a/Test/spv.forLoop.frag b/Test/spv.forLoop.frag
new file mode 100644
index 000000000..117ecad15
--- /dev/null
+++ b/Test/spv.forLoop.frag
@@ -0,0 +1,41 @@
+#version 130
+
+uniform vec4 bigColor;
+in vec4 BaseColor;
+in float f;
+
+uniform int Count;
+uniform uvec4 v4;
+
+void main()
+{
+    vec4 color = BaseColor;
+
+    for (int i = 0; i < Count; ++i) {
+        color += bigColor;
+    }
+
+    gl_FragColor = color;
+
+    float sum = 0.0;
+    for (int i = 0; i < 4; ++i)
+        sum += v4[i];
+
+    vec4 tv4;
+
+    for (int i = 0; i < 4; ++i)
+        tv4[i] = v4[i] * 4u;
+
+    gl_FragColor += vec4(sum) + tv4;
+
+    vec4 r;
+    r.xyz = BaseColor.xyz;
+
+    for (int i = 0; i < Count; ++i)
+        r.w = f;
+
+    gl_FragColor.xyz += r.xyz;
+
+    for (int i = 0; i < 16; i += 4)
+        gl_FragColor *= f;
+}
diff --git a/Test/spv.forwardFun.frag b/Test/spv.forwardFun.frag
new file mode 100644
index 000000000..eb105829c
--- /dev/null
+++ b/Test/spv.forwardFun.frag
@@ -0,0 +1,39 @@
+#version 100
+
+precision mediump float;
+
+uniform vec4 bigColor;
+varying vec4 BaseColor;
+uniform float d;
+
+void bar();
+float foo(vec4);
+float unreachableReturn();
+
+void main()
+{
+    vec4 color = vec4(foo(BaseColor));
+
+    bar();
+    float f = unreachableReturn();
+    
+    gl_FragColor = color * f;
+}
+
+void bar()
+{
+}
+
+float unreachableReturn()
+{
+    bar();
+    if (d < 4.2)
+        return 1.2;
+    else
+        return 4.5;
+}
+
+float foo(vec4 bar)
+{
+    return bar.x + bar.y;
+}
diff --git a/Test/spv.functionCall.frag b/Test/spv.functionCall.frag
new file mode 100644
index 000000000..e1fc0e07f
--- /dev/null
+++ b/Test/spv.functionCall.frag
@@ -0,0 +1,44 @@
+#version 130
+
+uniform vec4 bigColor;
+varying vec4 BaseColor;
+uniform float d;
+
+float h = 0.0;
+
+float foo(vec4 bar)
+{
+    return bar.x + bar.y;
+}
+
+void bar()
+{
+}
+
+float unreachableReturn()
+{
+    if (d < 4.2)
+        return 1.2;
+    else
+        return 4.5;
+    // might be another return inserted here by builders, has to be correct type
+}
+
+float missingReturn()
+{
+    if (d < 4.5) {
+        h = d;
+        return 3.9;
+    }
+}
+
+void main()
+{
+    vec4 color = vec4(foo(BaseColor));
+
+    bar();
+    float f = unreachableReturn();
+    float g = missingReturn();
+    
+    gl_FragColor = color * f * h;
+}
diff --git a/Test/spv.functionSemantics.frag b/Test/spv.functionSemantics.frag
new file mode 100644
index 000000000..67ff5f516
--- /dev/null
+++ b/Test/spv.functionSemantics.frag
@@ -0,0 +1,63 @@
+#version 400
+
+uniform float u;
+
+int foo(int a, const int b, in int c, const in int d, out int e, inout int f)
+{
+    int sum = a + b + c + d + f; // no e, it is out only
+	// sum should be 47 now
+
+	a *= 64;
+	// no b, it is read only
+	c *= 64;
+	// no d, it is read only
+	e = 64 * 16; // e starts undefined
+	f *= 64;
+
+	sum += a + 64 * b + c + 64 * d + e + f; // everything has a value now, totaling of 64(1+2+4+8+16+32) = 64*63 = 4032
+	// sum should be 4032 + 47  = 4079
+	
+	return sum;
+}
+
+int foo2(float a, vec3 b, out int r)
+{
+    r = int(3.0 * a);
+    return int(5.0 * b.y);
+}
+
+int foo3()
+{
+    if (u > 3.2) {
+        discard;
+        return 1000000;
+    }
+
+    return 2000000;
+}
+
+void main()
+{
+    int e;
+	int t = 2;
+	struct s {
+	    ivec4 t;
+	} f;
+	f.t.y = 32;
+
+    // test the different qualifers
+    int color = foo(1, 2, t+t, 8, e, f.t.y);
+
+	color += 128 * (e + f.t.y); // right side should be 128(64(16 + 32)) = 393216
+	// sum should be 4079 + 393216 = 397295
+    
+    // test conversions
+    float arg;
+    float ret;
+    ret = foo2(4, ivec3(1,2,3), arg);  // ret = 10, param = 12.0
+    color += int(ret + arg); // adds 22, for total of 397317
+
+    color += foo3();         // theoretically, add 2000000, for total of 2397317
+
+    gl_FragColor = vec4(color);
+}
diff --git a/Test/spv.length.frag b/Test/spv.length.frag
new file mode 100644
index 000000000..74c286f33
--- /dev/null
+++ b/Test/spv.length.frag
@@ -0,0 +1,18 @@
+#version 120
+
+uniform vec4 u[3];
+
+#ifdef TEST_POST_110
+varying vec2 v[];
+#else
+varying vec2 v[2];
+#endif
+
+void main()
+{
+    int a[5];
+
+    vec2 t = v[0] + v[1];
+
+    gl_FragColor = vec4(u.length() * v.length() * a.length());
+}
diff --git a/Test/spv.localAggregates.frag b/Test/spv.localAggregates.frag
new file mode 100644
index 000000000..d8a7fb18d
--- /dev/null
+++ b/Test/spv.localAggregates.frag
@@ -0,0 +1,72 @@
+#version 130
+
+uniform sampler2D sampler;
+varying vec2 coord;
+varying vec4 color;
+
+struct s1 {
+    int i;
+    float f;
+};
+
+struct s2 {
+    int i;
+    float f;
+	s1 s1_1;
+	vec4 bleh;
+};
+
+struct s3 {
+	s2 s2_1;
+    int i;
+    float f;
+	s1 s1_1;
+};
+
+
+uniform s1 foo;
+uniform s2 foo2;
+uniform s3 foo3;
+
+uniform float[16] uFloatArray;
+uniform int condition;
+
+void main()
+{
+	s2 locals2;
+	s3 locals3;
+	float localFArray[16];
+	int localIArray[8];
+
+	locals2 = foo3.s2_1;
+
+	if (foo3.s2_1.i > 0) {
+		locals2.s1_1.f = 1.0;
+		localFArray[4] = coord.x;
+		localIArray[2] = foo3.s2_1.i;
+	} else {
+		locals2.s1_1.f = coord.x;
+		localFArray[4] = 1.0;
+		localIArray[2] = 0;
+	}
+
+	if (localIArray[2] == 0)
+		++localFArray[4];
+
+ 	float localArray[16];
+	int x = 5;
+	localArray[x] = coord.x;
+
+	float[16] a;
+
+	for (int i = 0; i < 16; i++)
+		a[i] = 0.0;
+	
+	if (condition == 1)
+		a = localArray;
+	
+	locals2.bleh = color;
+	locals2.bleh.z = coord.y;
+
+	gl_FragColor = locals2.bleh * (localFArray[4] + locals2.s1_1.f + localArray[x] + a[x]) * texture2D(sampler, coord);
+}
diff --git a/Test/spv.loops.frag b/Test/spv.loops.frag
new file mode 100644
index 000000000..ce2d2a0b2
--- /dev/null
+++ b/Test/spv.loops.frag
@@ -0,0 +1,320 @@
+#version 130
+uniform vec4 bigColor;
+uniform vec4 bigColor1_1;
+uniform vec4 bigColor1_2;
+uniform vec4 bigColor1_3;
+uniform vec4 bigColor2;
+uniform vec4 bigColor3;
+uniform vec4 bigColor4;
+uniform vec4 bigColor5;
+uniform vec4 bigColor6;
+uniform vec4 bigColor7;
+uniform vec4 bigColor8;
+
+varying vec4 BaseColor;
+
+uniform float d;
+uniform float d2;
+uniform float d3;
+uniform float d4;
+uniform float d5;
+uniform float d6;
+uniform float d7;
+uniform float d8;
+uniform float d9;
+uniform float d10;
+uniform float d11;
+uniform float d12;
+uniform float d13;
+uniform float d14;
+uniform float d15;
+uniform float d16;
+uniform float d17;
+uniform float d18;
+uniform float d19;
+uniform float d20;
+uniform float d21;
+uniform float d22;
+uniform float d23;
+uniform float d24;
+uniform float d25;
+uniform float d26;
+uniform float d27;
+uniform float d28;
+uniform float d29;
+uniform float d30;
+uniform float d31;
+uniform float d32;
+uniform float d33;
+uniform float d34;
+
+uniform int Count;
+
+void main()
+{
+    vec4 color = BaseColor;
+
+    // Not a real loop
+    while (true) {
+        if (color.x < 0.33) {
+            color += vec4(0.33);
+            break;
+        }
+        if (color.x < 0.66) {
+            color += vec4(0.66);
+            break;
+        }
+
+        color += vec4(0.33);
+        break;
+    }
+
+    // While
+    while (color.x < d) {
+        color += bigColor;
+    }
+
+    // While (latchy)
+    while (color.z < d) {
+        color += bigColor1_1;
+        if (color.w < d)
+            continue;
+
+        color += bigColor1_1;
+    }
+
+    // While (constant)
+    while (color.x < 42.0) {
+        ++color;
+    }
+
+    // While (complicated-conditional)
+    while (color.w < d2 && color.y < d3) {
+        color += bigColor1_2;
+    }
+
+    // While (multi-exit)
+    while (color.z < d3) {
+        color += bigColor1_3;
+        if (color.y < d4)
+            break;
+        color += bigColor1_3;
+    }
+
+    // For (dynamic)
+    for (int i = 0; i < Count; ++i) {
+        color += bigColor2;
+    }
+
+    // Do while
+    do {
+        color += bigColor3;
+    } while (color.x < d2);
+
+    // For (static)
+    for (int i = 0; i < 42; ++i) {
+        color.z += d3;
+    }
+
+    // For (static) flow-control
+    for (int i = 0; i < 100; ++i) {
+        if (color.z < 20.0)
+            color.x++;
+        else
+            color.y++;
+        if (color.w < 20.0)
+            if (color.z > color.y)
+                0;              // do nothing
+    }
+
+    // For (static) flow-control with latch merge
+    for (int i = 0; i < 120; ++i) {
+        if (color.z < 20.0)
+            color.x++;
+        else
+            color.y++;
+    }
+
+    // For (static) latchy
+    for (int i = 0; i < 42; ++i) {
+        color.z += d3;
+        if (color.x < d4)
+            continue;
+        ++color.w;
+    }
+
+    // For (static) multi-exit
+    for (int i = 0; i < 42; ++i) {
+        color.z += d3;
+        if (color.x < d4)
+            break;
+        ++color.w;
+    }
+
+    // Latchy
+    do {
+        color += bigColor4;
+        if (color.x < d4)
+            continue;
+        if (color.y < d4)
+            color.y += d4;
+        else
+            color.x += d4;
+    } while (color.z < d4);
+
+    // Do while flow control
+    do {
+        color += bigColor5;
+        if (color.y < d5)
+            color.y += d5;
+    } while (color.x < d5);
+
+    // If then loop
+    if (color.x < d6) {
+        while (color.y < d6)
+            color += bigColor6;
+    } else {
+        while (color.z < d6)
+            color.z += bigColor6.z;
+    }
+
+    // If then multi-exit
+    if (color.x < d6) {
+        while (color.y < d6) {
+            color += bigColor6;
+            if (d7 < 1.0)
+                break;
+        }
+
+    } else {
+        while (color.z < d6)
+            color.z += bigColor6.z;
+    }
+
+
+    // Multi-exit
+    do {
+       if (d7 < 0.0)
+           break;
+
+       color += bigColor7;
+
+       if (d7 < 1.0) {
+           color.z++;
+           break;
+       }
+
+       color += BaseColor;
+
+    } while (true);
+
+
+    // Multi-exit2
+    do {
+        // invariant conditional break at the top of the loop. This could be a
+        // situation where unswitching the loop has no real increases in code
+        // size.
+       if (d8 < 0.0)
+           break;
+
+       color += bigColor7;
+
+       if (d8 < 1.0) {
+           color.z++;
+           if (d8 < 2.0) {
+               color.y++;
+           } else {
+               color.x++;
+           }
+           break;
+       }
+
+       color += BaseColor;
+
+    } while (color.z < d8);
+
+    // Deep exit
+    while (color.w < d9) {
+        if (d9 > d8) {
+            if (color.x <= d7) {
+                if (color.z == 5.0)
+                    color.w++;
+                else
+                    break;
+            }
+        }
+
+    }
+
+    // No end loop-back.
+    while (color.z < d10) {
+        color.y++;
+        if (color.y < d11) {
+            color.z++;
+            if (color.w < d12)
+                color.w++;
+            else
+                color.x++;
+            continue;
+        }
+
+        color++;
+        break;
+    }
+
+    // Multi-continue
+    while (color.x < 10.0) {
+        color += bigColor8;
+
+        if (color.z < d8)
+            if (color.w < d6)
+                continue;
+
+        color.y += bigColor8.x;
+    }
+
+    color++;
+    gl_FragColor = color;
+
+    // Early Return
+    while (color.x < d14) {
+        if (color.y < d15) {
+            return;
+        }
+        else
+            color++;
+    }
+
+    color++;
+
+    while (color.w < d16) {
+        color.w++;
+    }
+
+
+    // While (complicated-conditional)
+    while (color.w < d2 && color.y < d3) {
+        color += bigColor1_2;
+        if (color.z < d3)
+            return;
+    }
+
+
+    do {
+        if (color.y < d18)
+            return;
+        color++;
+    } while (color.x < d17);
+
+    // Early Discard
+    while (color.y < d16) {
+        if (color.w < d16) {
+            discard;
+        } else
+            color++;
+    }
+
+    color++;
+
+    gl_FragColor = color;
+}
diff --git a/Test/spv.loopsArtificial.frag b/Test/spv.loopsArtificial.frag
new file mode 100644
index 000000000..2f196af8e
--- /dev/null
+++ b/Test/spv.loopsArtificial.frag
@@ -0,0 +1,96 @@
+#version 130
+uniform vec4 bigColor;
+uniform vec4 bigColor1_1;
+uniform vec4 bigColor1_2;
+uniform vec4 bigColor1_3;
+uniform vec4 bigColor2;
+uniform vec4 bigColor3;
+uniform vec4 bigColor4;
+uniform vec4 bigColor5;
+uniform vec4 bigColor6;
+uniform vec4 bigColor7;
+uniform vec4 bigColor8;
+
+varying vec4 BaseColor;
+
+uniform float d;
+uniform float d2;
+uniform float d3;
+uniform float d4;
+uniform float d5;
+uniform float d6;
+uniform float d7;
+uniform float d8;
+uniform float d9;
+uniform float d10;
+uniform float d11;
+uniform float d12;
+uniform float d13;
+uniform float d14;
+uniform float d15;
+uniform float d16;
+uniform float d17;
+uniform float d18;
+uniform float d19;
+uniform float d20;
+uniform float d21;
+uniform float d22;
+uniform float d23;
+uniform float d24;
+uniform float d25;
+uniform float d26;
+uniform float d27;
+uniform float d28;
+uniform float d29;
+uniform float d30;
+uniform float d31;
+uniform float d32;
+uniform float d33;
+uniform float d34;
+
+uniform int Count;
+
+void main()
+{
+    vec4 color = BaseColor;
+
+    // Latchy2
+    do {
+        color += bigColor4;
+        if (color.x < d4) {
+            color.z += 2.0;
+            if (color.z < d4) {
+                color.x++;
+                continue;
+            }
+        }
+        if (color.y < d4)
+            color.y += d4;
+        else
+            color.x += d4;
+    } while (color.z < d4);
+
+    // Immediate dominator
+    while (color.w < d13) {
+        if (color.z < d13)
+            color++;
+        else
+            color--;
+        // code from Latchy 2
+        color += bigColor4;
+        if (color.x < d4) {
+            color.z += 2.0;
+            if (color.z < d4) {
+                color.x++;
+                continue;
+            }
+        }
+        if (color.y < d4)
+            color.y += d4;
+        else
+            color.x += d4;
+    }
+
+    color++;
+    gl_FragColor = color;
+}
diff --git a/Test/spv.matFun.vert b/Test/spv.matFun.vert
new file mode 100644
index 000000000..e59499644
--- /dev/null
+++ b/Test/spv.matFun.vert
@@ -0,0 +1,26 @@
+#version 130
+
+uniform mat4 m4;
+uniform mat3 m3;
+
+in vec3 v3;
+
+vec3 xf(mat3 m, vec3 v)
+{
+    return v * m;
+}
+
+mat3 Mat3(mat4 m)
+{
+	return mat3(m[0].xyz, m[1].xyz, m[2].xyz);
+}
+
+vec3 mxv(mat4 m4, vec3 v)
+{
+	return v * Mat3(m4);
+}
+
+void main()
+{
+    gl_Position = vec4(mxv(m4, v3) + xf(m3, v3), 1.0);
+}
diff --git a/Test/spv.matrix.frag b/Test/spv.matrix.frag
new file mode 100644
index 000000000..150e0434f
--- /dev/null
+++ b/Test/spv.matrix.frag
@@ -0,0 +1,55 @@
+#version 130
+
+//#define TEST_POST_110
+
+uniform mat3 colorTransform;
+varying vec3 Color;
+uniform mat4 m, n;
+
+#ifdef TEST_POST_110
+uniform mat4x3 um43;
+uniform mat3x4 un34;
+#else
+uniform mat4 um43;
+uniform mat4 un34;
+#endif
+
+varying vec4 v;
+
+#ifdef TEST_POST_110
+varying vec3 u;
+#else
+varying vec4 u;
+#endif
+
+void main()
+{
+    gl_FragColor = vec4(un34[1]);
+    gl_FragColor += vec4(Color * colorTransform, 1.0);
+
+    if (m != n)
+        gl_FragColor += v;
+   else {
+        gl_FragColor += m * v;
+        gl_FragColor += v * (m - n);
+   }
+    
+#ifdef TEST_POST_110
+    mat3x4 m34 = outerProduct(v, u);
+    m34 += mat4(v.x);
+    m34 += mat4(u, u.x, u, u.x, u, u.x, u.x);
+#else
+    mat4 m34 = mat4(v.x*u.x, v.x*u.y, v.x*u.z, v.x*u.w, 
+                    v.y*u.x, v.y*u.y, v.y*u.z, v.y*u.w, 
+                    v.z*u.x, v.z*u.y, v.z*u.z, v.z*u.w, 
+                    v.w*u.x, v.w*u.y, v.w*u.z, v.w*u.w);
+    m34 += mat4(v.x);
+    m34 += mat4(u, u.x, u, u.x, u, u.x, u.x);
+
+#endif
+
+    if (m34 == un34)
+        gl_FragColor += m34 * u;
+    else
+        gl_FragColor += (un34 * um43) * v;
+}
diff --git a/Test/spv.matrix2.frag b/Test/spv.matrix2.frag
new file mode 100644
index 000000000..eb2c53c2e
--- /dev/null
+++ b/Test/spv.matrix2.frag
@@ -0,0 +1,50 @@
+#version 150
+
+uniform mat3 colorTransform;
+varying vec3 Color;
+uniform mat4 m, n;
+
+uniform mat4x3 um43;
+uniform mat3x4 un34;
+uniform mat2 um2;
+uniform mat3 um3;
+uniform mat4 um4;
+
+varying vec4 v;
+
+varying vec3 u;
+
+out vec4 FragColor;
+
+void main()
+{
+    mat3x4 m34 = outerProduct(v, u);
+
+    m34 += mat3x4(4.3);
+
+    FragColor = vec4(Color, 1.0);
+    FragColor *= vec4(FragColor * m34, 1.0);
+
+    m34 *= v.x;
+
+    mat4 m44 = mat4(un34);
+
+    m44 += m34 * um43;
+
+    FragColor += (-m44) * v;
+
+    FragColor *= matrixCompMult(m44, m44);
+
+    m34 = transpose(um43);
+    FragColor *= vec4(FragColor * m34, 1.0);
+    FragColor *= vec4(determinant(um4));
+    mat2 inv = inverse(um2);
+    FragColor *= vec4(inv[0][0], inv[1][0], inv[0][1], inv[1][1]);
+    mat3 inv3 = inverse(um3);
+    FragColor *= vec4(inv3[2][1]);
+
+    mat4 inv4 = inverse(um4);
+    FragColor *= inv4;
+
+    FragColor = vec4(FragColor * matrixCompMult(un34, un34), FragColor.w);
+}
diff --git a/Test/spv.newTexture.frag b/Test/spv.newTexture.frag
new file mode 100644
index 000000000..5e3fb4315
--- /dev/null
+++ b/Test/spv.newTexture.frag
@@ -0,0 +1,68 @@
+#version 430
+
+uniform sampler2D s2D;
+uniform sampler3D s3D;
+uniform samplerCube sCube;
+uniform samplerCubeShadow sCubeShadow;
+uniform sampler2DShadow s2DShadow;
+uniform sampler2DArray s2DArray;
+uniform sampler2DArrayShadow s2DArrayShadow;
+
+uniform isampler2D is2D;
+uniform isampler3D is3D;
+uniform isamplerCube isCube;
+uniform isampler2DArray is2DArray;
+uniform isampler2DMS is2Dms;
+
+uniform usampler2D us2D;
+uniform usampler3D us3D;
+uniform usamplerCube usCube;
+uniform usampler2DArray us2DArray;
+
+in float c1D;
+in vec2  c2D;
+in vec3  c3D;
+in vec4  c4D;
+
+flat in int   ic1D;
+flat in ivec2 ic2D;
+flat in ivec3 ic3D;
+flat in ivec4 ic4D;
+
+out vec4 FragData;
+
+void main()
+{
+    vec4 v = texture(s2D, c2D);
+    v += textureProj(s3D, c4D);
+    v += textureLod(s2DArray, c3D, 1.2);
+    v.y += textureOffset(s2DShadow, c3D, ivec2(3), c1D);
+    v += texelFetch(s3D, ic3D, ic1D);
+    v += texelFetchOffset(s2D, ic2D, 4, ic2D);
+    v.y += textureLodOffset(s2DShadow, c3D, c1D, ivec2(3));
+    v += textureProjLodOffset(s2D, c3D, c1D, ivec2(3));
+    v += textureGrad(sCube, c3D, c3D, c3D);
+    v.x += textureGradOffset(s2DArrayShadow, c4D, c2D, c2D, ivec2(3));
+    v += textureProjGrad(s3D, c4D, c3D, c3D);
+    v += textureProjGradOffset(s2D, c3D, c2D, c2D, ivec2(3));
+
+    ivec4 iv = texture(is2D, c2D);
+    v += vec4(iv);
+    iv = textureProjOffset(is2D, c4D, ivec2(3));
+    v += vec4(iv);
+    iv = textureProjLod(is2D, c3D, c1D);
+    v += vec4(iv);
+    iv = textureProjGrad(is2D, c3D, c2D, c2D);
+    v += vec4(iv);
+    iv = texture(is3D, c3D, 4.2);
+    v += vec4(iv);
+    iv = textureLod(isCube, c3D, c1D);
+    v += vec4(iv);
+    iv = texelFetch(is2DArray, ic3D, ic1D);
+    v += vec4(iv);
+
+    ivec2 iv2 = textureSize(sCubeShadow, 2);
+    // iv2 += textureSize(is2Dms);
+
+    FragData = v + vec4(iv2, 0.0, 0.0);
+}
diff --git a/Test/spv.nonSquare.vert b/Test/spv.nonSquare.vert
new file mode 100644
index 000000000..4de21a0ca
--- /dev/null
+++ b/Test/spv.nonSquare.vert
@@ -0,0 +1,25 @@
+#version 120
+
+attribute vec3 v3;
+attribute vec4 v4;
+
+uniform mat3x2 m32;
+
+const vec2 cv2 = vec2(10.0, 20.0);
+const mat2x4 m24 = mat2x4(3.0);
+const mat4x2 m42 = mat4x2(1.0, 2.0, 
+                          3.0, 4.0,
+                          5.0, 6.0, 
+                          7.0, 8.0);
+
+void main()
+{
+    mat2x3 m23;
+    vec2 a, b;
+
+    a = v3 * m23;
+    b = m32 * v3;
+
+    gl_Position = vec4(m23 * m32 * v3, m24[1][3]) + 
+                  (m24 * m42) * v4 + cv2 * m42 + m24 * cv2 + vec4(cv2[1], cv2.x, m42[2][1], m42[2][0]);
+}
diff --git a/Test/spv.precision.frag b/Test/spv.precision.frag
new file mode 100644
index 000000000..0c6cb12ba
--- /dev/null
+++ b/Test/spv.precision.frag
@@ -0,0 +1,50 @@
+#version 300 es
+precision mediump float;
+in lowp float lowfin;
+in mediump float mediumfin;
+in highp vec4 highfin;
+
+uniform highp int uniform_high;
+uniform mediump int uniform_medium;
+uniform lowp int uniform_low;
+uniform bvec2 ub2;
+
+out mediump vec4 mediumfout;
+
+highp float global_highp;
+
+lowp vec2 foo(mediump vec3 mv3)
+{
+    return highfin.xy;
+}
+
+bool boolfun(bvec2 bv2)
+{
+    return bv2 == bvec2(false, true);
+}
+
+void main()
+{
+    lowp int sum = uniform_medium + uniform_high;
+
+    sum += uniform_high;
+    sum += uniform_low;
+    
+    // test maxing precisions of args to get precision of builtin
+    lowp float arg1 = 3.2;
+    mediump float arg2 = 1023908.2;
+    lowp float d = distance(lowfin, mediumfin);
+
+    global_highp = length(highfin);
+
+    highp vec4 local_highp = vec4(global_highp);
+
+    mediumfout = vec4(sin(d)) + arg2 + local_highp;
+
+    sum += 4 + ((ivec2(uniform_low) * ivec2(uniform_high) + ivec2((/* comma operator */uniform_low, uniform_high)))).x;
+
+    mediumfout += vec4(sum);
+
+    if (boolfun(ub2))
+        ++mediumfout;
+}
diff --git a/Test/spv.prepost.frag b/Test/spv.prepost.frag
new file mode 100644
index 000000000..dfd456660
--- /dev/null
+++ b/Test/spv.prepost.frag
@@ -0,0 +1,38 @@
+#version 140
+
+void main()
+{
+    struct s {
+        float y[5];
+    } str;
+
+    float t;
+    int index = 5;  // all indexing is 4
+
+    str.y[4] = 2.0;             // 2.0
+    t = ++str.y[--index];       // 3.0
+    str.y[4] += t;              // 6.0
+    t = str.y[4]--;             // 5.0 (t = 6.0)
+    str.y[index++] += t;        // 11.0
+    --str.y[--index];           // 10.0
+
+    float x = str.y[4];
+	++x;
+	--x;
+	x++;
+	x--;
+
+	// x is 10.0
+
+	float y = x * ++x;  // 10 * 11
+	float z = y * x--;  // 110 * 11
+
+    // x is 10.0
+    // z is 1210.0
+
+    vec4 v = vec4(1.0, 2.0, 3.0, 4.0);
+    v.y = v.z--;  // (1,3,2,4)
+    v.x = --v.w;  // (3,3,2,3)
+
+    gl_FragColor = z * v;// (3630.0, 3630.0, 2420.0, 3630.0)
+}
diff --git a/Test/spv.qualifiers.vert b/Test/spv.qualifiers.vert
new file mode 100644
index 000000000..96eb17db1
--- /dev/null
+++ b/Test/spv.qualifiers.vert
@@ -0,0 +1,19 @@
+#version 430 core
+
+in vec4 inV;
+
+centroid out vec4 outVc;
+smooth out vec4 outVs;
+flat out vec4 outVf;
+noperspective out vec4 outVn;
+
+centroid noperspective out vec4 outVcn;
+
+void main()
+{
+    outVc = inV;
+    outVs = inV;
+    outVf = inV;
+    outVn = inV;
+    outVcn = inV;
+}
diff --git a/Test/spv.simpleFunctionCall.frag b/Test/spv.simpleFunctionCall.frag
new file mode 100644
index 000000000..59f0ccd58
--- /dev/null
+++ b/Test/spv.simpleFunctionCall.frag
@@ -0,0 +1,15 @@
+#version 150
+
+uniform vec4 bigColor;
+varying vec4 BaseColor;
+uniform float d;
+
+vec4 foo()
+{
+    return BaseColor;
+}
+
+void main()
+{
+    gl_FragColor = foo();
+}
diff --git a/Test/spv.simpleMat.vert b/Test/spv.simpleMat.vert
new file mode 100644
index 000000000..afbc0db1f
--- /dev/null
+++ b/Test/spv.simpleMat.vert
@@ -0,0 +1,19 @@
+#version 330
+
+uniform mat4 mvp;
+
+in vec4 v;
+in mat3 am3;
+in mat4 arraym[3];
+
+out float f;
+out vec4 glPos;
+//out mat4 mout[2];
+
+void main()
+{
+	//needs complex output blocks to work: gl_Position = mvp * v;
+    glPos = mvp * v;
+	f = am3[2][1] + arraym[1][2][3];
+    //mout[1] = arraym[2];
+}
diff --git a/Test/spv.structAssignment.frag b/Test/spv.structAssignment.frag
new file mode 100644
index 000000000..959f854ed
--- /dev/null
+++ b/Test/spv.structAssignment.frag
@@ -0,0 +1,39 @@
+#version 130
+
+uniform sampler2D sampler;
+varying mediump vec2 coord;
+
+struct lunarStruct1 {
+    int i;
+    float f;
+};
+
+struct lunarStruct2 {
+    int i;
+    float f;
+	lunarStruct1 s1_1;
+};
+
+struct lunarStruct3 {
+	lunarStruct2 s2_1;
+    int i;
+    float f;
+	lunarStruct1 s1_1;
+};
+
+
+uniform lunarStruct1 foo;
+uniform lunarStruct2 foo2;
+uniform lunarStruct3 foo3;
+
+void main()
+{
+	lunarStruct2 locals2;
+
+	if (foo3.s2_1.i > 0)
+		locals2 = foo3.s2_1;
+	else
+		locals2 = foo2;
+
+	gl_FragColor =  locals2.s1_1.f * texture2D(sampler, coord);
+}
diff --git a/Test/spv.structDeref.frag b/Test/spv.structDeref.frag
new file mode 100644
index 000000000..376e408f1
--- /dev/null
+++ b/Test/spv.structDeref.frag
@@ -0,0 +1,71 @@
+#version 130
+
+uniform sampler2D sampler;
+varying vec2 coord;
+
+struct s0 {
+    int i;
+};
+
+struct s00 {
+    s0 s0_0;
+};
+
+struct s1 {
+    int i;
+    float f;
+    s0 s0_1;
+};
+
+struct s2 {
+    int i;
+    float f;
+    s1 s1_1;
+};
+
+struct s3 {
+    s2[12] s2_1;
+    int i;
+    float f;
+    s1 s1_1;
+};
+
+
+uniform s0 foo0;
+uniform s1 foo1;
+uniform s2 foo2;
+uniform s3 foo3;
+
+uniform s00 foo00;
+
+void main()
+{
+    s0 locals0;
+    s2 locals2;
+    s00 locals00;
+
+    float[6] fArray;
+
+    s1[10] locals1Array;
+
+    if (foo3.s2_1[9].i > 0) {
+        locals2.f = 1.0;
+        locals2.s1_1 = s1(0, 1.0, s0(0));
+        fArray = float[6]( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
+        locals1Array[6] = foo1;
+        locals0 = s0(0);
+        locals00 = s00(s0(0));
+    } else {
+        locals2.f = coord.x;
+        locals2.s1_1 = s1(1, coord.y, foo0);
+        fArray = float[6]( 0.0, 1.0, 2.0, 3.0, 4.0, 5.0);
+        locals1Array[6] = locals2.s1_1;
+        locals0 = foo1.s0_1;
+        locals00 = foo00;
+    }
+
+    if (locals0.i > 5)
+        locals0 = locals00.s0_0;
+
+    gl_FragColor = (float(locals0.i) + locals1Array[6].f + fArray[3] + locals2.s1_1.f) * texture2D(sampler, coord);
+}
diff --git a/Test/spv.structure.frag b/Test/spv.structure.frag
new file mode 100644
index 000000000..97e79cb01
--- /dev/null
+++ b/Test/spv.structure.frag
@@ -0,0 +1,31 @@
+#version 130
+uniform sampler2D sampler;
+varying vec2 coord;
+
+struct lunarStruct1 {
+    int i;
+	float f[4];
+	vec4 color[5];
+};
+
+struct lunarStruct2 {
+    int i[5];
+    float f;
+	lunarStruct1 s1_1[7];
+};
+
+uniform lunarStruct1 foo;
+uniform lunarStruct2 foo2[5];
+
+void main()
+{
+	float scale = 0.0;
+
+	if (foo2[3].i[4] > 0)
+		scale = foo2[3].s1_1[2].color[3].x;
+	else
+		scale = foo2[3].s1_1[2].f[3];
+
+	gl_FragColor =  scale * texture2D(sampler, coord);
+}
+
diff --git a/Test/spv.switch.frag b/Test/spv.switch.frag
new file mode 100644
index 000000000..88b4b9815
--- /dev/null
+++ b/Test/spv.switch.frag
@@ -0,0 +1,133 @@
+#version 300 es
+precision mediump float;
+uniform int c, d;
+in float x;
+out float color;
+uniform vec4 v;
+
+vec4 foo1(vec4 v1, vec4 v2, int i1)
+{
+    switch (i1)
+    {
+    case 0:
+        return v1;
+    case 2:
+    case 1:
+        return v2;
+    case 3:
+        return v1 * v2;
+    }
+
+    return vec4(0.0);
+}
+
+vec4 foo2(vec4 v1, vec4 v2, int i1)
+{
+    switch (i1)
+    {
+    case 0:
+        return v1;
+    case 2:
+        return vec4(1.0);
+    case 1:
+        return v2;
+    case 3:
+        return v1 * v2;
+    }
+
+    return vec4(0.0);
+}
+
+void main()
+{
+    float f;
+    int a[2];
+    int local = c;
+
+    switch(++local)
+    {
+    }
+
+    switch (c) {
+    case 1:
+        f = sin(x);
+        break;
+    case 2:
+        f = cos(x);
+        break;
+    default:
+        f = tan(x);
+    }
+
+    switch (c) {
+    case 1:
+        f += sin(x);
+    case 2:
+        f += cos(x);
+        break;
+    default:
+        f += tan(x);
+    }
+
+    switch (c) {
+    case 1:
+        f += sin(x);
+        break;
+    case 2:
+        f += cos(x);
+        break;
+    }
+
+    switch (c) {
+    case 1:
+        f += sin(x);
+        break;
+    case 2:
+        switch (d) {
+        case 1:
+            f += x * x * x;
+            break;
+        case 2:
+            f += x * x;
+            break;
+        }
+        break;
+    default:
+        f += tan(x);
+    }
+
+    for (int i = 0; i < 10; ++i) {
+        switch (c) {
+        case 1:
+            f += sin(x);
+            for (int j = 20; j < 30; ++j) {
+                ++f;
+                if (f < 100.2)
+                    break;
+            }
+            break;
+        case 2:
+            f += cos(x);
+            break;
+            break;
+        default:
+            f += tan(x);
+        }
+
+        if (f < 3.43)
+            break;
+    }
+
+    switch (c) {
+    case 1:
+        f += sin(x);
+        break;
+    case 2:
+        // test no statements at end
+    }
+
+    color = f + float(local);
+
+    color += foo1(v,v,c).y;
+    color += foo2(v,v,c).z;
+}
diff --git a/Test/spv.swizzle.frag b/Test/spv.swizzle.frag
new file mode 100644
index 000000000..14f507ecd
--- /dev/null
+++ b/Test/spv.swizzle.frag
@@ -0,0 +1,52 @@
+#version 110
+
+uniform float blend;
+uniform vec4 u;
+uniform bool p;
+
+varying vec2 t;
+
+void main()
+{
+    float blendscale = 1.789;
+
+    vec4 w = u;
+    vec4 w_undef;       // test undef
+    vec4 w_dep = u;     // test dependent swizzles
+    vec4 w_reorder = u; // test reordering
+    vec4 w2 = u;
+    vec4 w_flow = u;    // test flowControl
+
+    w_reorder.z = blendscale;
+
+    w.wy = t;
+
+    w_reorder.x = blendscale;
+
+    w2.xyzw = u.zwxy;
+
+    w_reorder.y = blendscale;
+
+    w_dep.xy = w2.xz;
+    w_dep.zw = t;
+
+    w_undef.xy = u.zw;
+
+    if (p)
+        w_flow.x = t.x;
+    else
+        w_flow.x = t.y;
+
+    gl_FragColor = mix(w_reorder, w_undef, w * w2 * w_dep * w_flow);
+
+    vec2 c = t;
+    vec4 rep = vec4(0.0, 0.0, 0.0, 1.0);
+
+    if (c.x < 0.0)
+        c.x *= -1.0;
+
+    if (c.x <= 1.0)
+        rep.x = 3.4;
+
+    gl_FragColor += rep;
+}
diff --git a/Test/spv.test.frag b/Test/spv.test.frag
new file mode 100644
index 000000000..1b7d0e95e
--- /dev/null
+++ b/Test/spv.test.frag
@@ -0,0 +1,22 @@
+#version 110
+
+uniform sampler2D texSampler2D;
+uniform sampler3D texSampler3D;
+
+uniform float blend;
+uniform vec2 scale;
+uniform vec4 u;
+
+varying vec2 t;
+varying vec3 coords;
+
+void main()
+{  
+    float blendscale = 1.789;
+
+    vec4 v = texture2D(texSampler2D, (t + scale) / scale ).wzyx;
+
+	vec4 w = texture3D(texSampler3D, coords) + v;
+    
+    gl_FragColor = mix(w, u, blend * blendscale);
+}
diff --git a/Test/spv.test.vert b/Test/spv.test.vert
new file mode 100644
index 000000000..bbc6f1554
--- /dev/null
+++ b/Test/spv.test.vert
@@ -0,0 +1,14 @@
+#version 130
+
+uniform mat4 transform;
+
+attribute vec4 position;
+in vec2 uv_in;
+
+out vec2 uv;
+
+void main()
+{
+    uv = uv_in;
+    gl_Position = position + ftransform();
+}
diff --git a/Test/spv.texture.frag b/Test/spv.texture.frag
new file mode 100644
index 000000000..8e5391eef
--- /dev/null
+++ b/Test/spv.texture.frag
@@ -0,0 +1,73 @@
+#version 130
+
+uniform sampler1D       texSampler1D;
+uniform sampler2D       texSampler2D;
+uniform sampler3D       texSampler3D;
+uniform samplerCube	    texSamplerCube;
+uniform sampler1DShadow shadowSampler1D;
+uniform sampler2DShadow shadowSampler2D;
+
+uniform float blend;
+uniform vec2 scale;
+uniform vec4 u;
+
+varying vec2 t;
+varying vec2 coords2D;
+
+void main()
+{  
+    float blendscale = 1.789;
+    float bias       = 2.0;
+    float lod		 = 3.0;
+    float proj       = 2.0;
+    float coords1D   = 1.789;
+    vec3  coords3D   = vec3(1.789, 2.718, 3.453);
+    vec4  coords4D   = vec4(1.789, 2.718, 3.453, 2.0);
+    vec4  color      = vec4(0.0, 0.0, 0.0, 0.0);
+
+    color += texture1D    (texSampler1D, coords1D);
+    color += texture1D    (texSampler1D, coords1D, bias);
+    color += texture1DProj(texSampler1D, coords2D);
+    color += texture1DProj(texSampler1D, coords4D);
+    color += texture1DProj(texSampler1D, coords2D, bias);
+    color += texture1DProj(texSampler1D, coords4D, bias);
+    
+    color += texture2D        (texSampler2D, coords2D);
+    color += texture2D        (texSampler2D, coords2D, bias);
+    color += texture2DProj    (texSampler2D, coords3D);
+    color += texture2DProj    (texSampler2D, coords4D, bias);
+
+    color += texture3D        (texSampler3D, coords3D);
+    color += texture3D        (texSampler3D, coords3D, bias);
+    color += texture3DProj    (texSampler3D, coords4D);
+    color += texture3DProj    (texSampler3D, coords4D, bias);
+
+    color += textureCube    (texSamplerCube, coords3D);
+    color += textureCube    (texSamplerCube, coords3D, bias);
+    
+    color += shadow1D       (shadowSampler1D, coords3D);
+    color += shadow1D       (shadowSampler1D, coords3D, bias);
+    color += shadow2D       (shadowSampler2D, coords3D);
+    color += shadow2D       (shadowSampler2D, coords3D, bias);
+    color += shadow1DProj   (shadowSampler1D, coords4D);
+    color += shadow1DProj   (shadowSampler1D, coords4D, bias);
+    color += shadow2DProj   (shadowSampler2D, coords4D);
+    color += shadow2DProj   (shadowSampler2D, coords4D, bias);
+
+    ivec2 iCoords2D = ivec2(0, 5);
+    int iLod = 1;
+
+    color += texelFetch(texSampler2D, iCoords2D, iLod);
+
+    vec2 gradX = dFdx(coords2D);
+    vec2 gradY = dFdy(coords2D);
+    const ivec2 offset = ivec2(3, -7);
+
+    color += textureGrad(texSampler2D, coords2D, gradX, gradY);
+    color += textureProjGrad(texSampler2D, vec3(coords2D, proj), gradX, gradY);
+    color += textureGradOffset(texSampler2D, coords2D, gradX, gradY, offset);
+    color += textureProjGradOffset(texSampler2D, coords3D, gradX, gradY, offset);
+    color += textureGrad(shadowSampler2D, vec3(coords2D, lod), gradX, gradY);
+    
+    gl_FragColor = mix(color, u, blend * blendscale);
+}
\ No newline at end of file
diff --git a/Test/spv.texture.vert b/Test/spv.texture.vert
new file mode 100644
index 000000000..d2cbd7b95
--- /dev/null
+++ b/Test/spv.texture.vert
@@ -0,0 +1,39 @@
+#version 130
+
+uniform sampler1D       texSampler1D;
+uniform sampler2D       texSampler2D;
+uniform sampler3D       texSampler3D;
+uniform samplerCube	    texSamplerCube;
+uniform sampler1DShadow shadowSampler1D;
+uniform sampler2DShadow shadowSampler2D;
+
+in vec2 coords2D;
+
+void main()
+{  
+    float lod		 = 3.0;
+    float coords1D   = 1.789;
+    vec3  coords3D   = vec3(1.789, 2.718, 3.453);
+    vec4  coords4D   = vec4(1.789, 2.718, 3.453, 2.0);
+    vec4  color      = vec4(0.0, 0.0, 0.0, 0.0);
+
+    color += texture1DLod(texSampler1D, coords1D, lod);
+    color += texture1DProjLod(texSampler1D, coords2D, lod);
+    color += texture1DProjLod(texSampler1D, coords4D, lod);
+    
+    color += texture2DLod     (texSampler2D, coords2D, lod);
+    color += texture2DProjLod (texSampler2D, coords3D, lod);
+    color += texture2DProjLod (texSampler2D, coords4D, lod);
+
+    color += texture3DLod     (texSampler3D, coords3D, lod);
+    color += texture3DProjLod (texSampler3D, coords4D, lod);
+    
+    color += textureCubeLod (texSamplerCube, coords3D, lod);
+
+    color += shadow1DLod    (shadowSampler1D, coords3D, lod);
+    color += shadow2DLod    (shadowSampler2D, coords3D, lod);
+    color += shadow1DProjLod(shadowSampler1D, coords4D, lod);
+    color += shadow2DProjLod(shadowSampler2D, coords4D, lod);
+
+    gl_Position = color;
+}
diff --git a/Test/spv.types.frag b/Test/spv.types.frag
new file mode 100644
index 000000000..48701d890
--- /dev/null
+++ b/Test/spv.types.frag
@@ -0,0 +1,81 @@
+#version 130
+
+uniform bool  u_b;
+uniform bvec2 u_b2;
+uniform bvec3 u_b3;
+uniform bvec4 u_b4;
+
+uniform int   u_i;
+uniform ivec2 u_i2;
+uniform ivec3 u_i3;
+uniform ivec4 u_i4;
+ 
+uniform float u_f;
+uniform vec2 u_f2;
+uniform vec3 u_f3;
+uniform vec4 u_f4;
+
+uniform bool  i_b;
+uniform bvec2 i_b2;
+uniform bvec3 i_b3;
+uniform bvec4 i_b4;
+
+flat in int   i_i;
+flat in ivec2 i_i2;
+flat in ivec3 i_i3;
+flat in ivec4 i_i4;
+
+in float i_f;
+in vec2 i_f2;
+in vec3 i_f3;
+in vec4 i_f4;
+
+void main()
+{
+    bool  b = u_b && i_b;
+    bvec2 b2 = bvec2(u_b2.x && i_b2.x && u_b2.y && i_b2.y);
+    bvec3 b3 = bvec3(u_b3.x && i_b3.x && u_b3.y && i_b3.y && u_b3.z && i_b3.z);
+    bvec4 b4 = bvec4(u_b4.x && i_b4.x && u_b4.y && i_b4.y && u_b4.z && i_b4.z && u_b4.w && i_b4.w);
+
+    int   i = u_i + i_i;
+    ivec2 i2 = u_i2 + i_i2;
+    ivec3 i3 = u_i3 + i_i3;
+    ivec4 i4 = u_i4 + i_i4;
+
+    float f = u_f + i_f;
+    vec2  f2 = u_f2 + i_f2;
+    vec3  f3 = u_f3 + i_f3;
+    vec4  f4 = u_f4 + i_f4;
+
+    gl_FragColor = 
+        b || 
+        b2.x ||
+        b2.y ||
+        b3.x ||
+        b3.y ||
+        b3.z ||
+        b4.x ||
+        b4.y ||
+        b4.z ||
+        b4.w ? vec4(
+        i  +
+        i2.x +
+        i2.y +
+        i3.x +
+        i3.y +
+        i3.z +
+        i4.x +
+        i4.y +
+        i4.z +
+        i4.w +
+        f  +
+        f2.x +
+        f2.y +
+        f3.x +
+        f3.y +
+        f3.z +
+        f4.x +
+        f4.y +
+        f4.z +
+        f4.w) : vec4(1.0);        
+}
diff --git a/Test/spv.uint.frag b/Test/spv.uint.frag
new file mode 100644
index 000000000..551ef16f6
--- /dev/null
+++ b/Test/spv.uint.frag
@@ -0,0 +1,99 @@
+#version 300 es
+precision mediump float;
+flat in uvec2 t;
+in float f;
+in vec2 tc;
+
+uniform uvec4 v;
+uniform int i;
+uniform bool b;
+
+out uvec4 c;
+
+uniform mediump usampler2D usampler;
+
+void main()
+{
+    int count = 1;
+
+    uint u = t.y + 3u;
+    const uint cu1 = 0xFFFFFFFFU;
+    const uint cu2 = -1u;              // 0xFFFFFFFF
+    const uint cu3 = 1U;
+    const uint cu4 = 1u;
+
+    if (cu1 == cu2)
+        count *= 2;  // 2
+    if (cu3 == cu4)
+        count *= 3;  // 6
+    if (cu2 == cu3)
+        count *= 5;  // not done
+
+    const  int  cshiftedii      = 0xFFFFFFFF  >> 10;
+    const uint cushiftedui      = 0xFFFFFFFFu >> 10;
+    const  int  cshiftediu      = 0xFFFFFFFF  >> 10u;
+    const uint cushifteduu      = 0xFFFFFFFFu >> 10u;
+
+    if (cshiftedii == cshiftediu)
+        count *= 7;  // 42
+    if (cushiftedui == cushifteduu)
+        count *= 11; // 462
+    if (cshiftedii == int(cushiftedui))
+        count *= 13; // not done
+
+     int shiftedii      = 0xFFFFFFFF  >> 10;
+    uint shiftedui      = 0xFFFFFFFFu >> 10;
+     int shiftediu      = 0xFFFFFFFF  >> 10u;
+    uint shifteduu      = 0xFFFFFFFFu >> 10u;
+
+    if (shiftedii == shiftediu)
+        c = texture(usampler, tc);
+    if (shiftedui == shifteduu)
+        c = texture(usampler, tc + float(1u));
+    if (shiftedii == int(shiftedui))
+        c = texture(usampler, tc - vec2(2u));
+
+    if (t.x > 4u) {
+        float af = float(u);
+        bool ab = bool(u);
+        int ai = int(u);
+
+        c += uvec4(uint(af), uint(ab), uint(ai), count);
+    }
+
+    const uint cmask1 = 0x0A1u;
+    const uint cmask2 = 0xA10u;
+    const uint cmask3 = cmask1 << 4;
+    const uint cmask4 = 0xAB1u;
+
+    if (cmask3 == cmask2)
+        count *= 17;  // 7854
+
+    if ((cmask3 & cmask1) != 0u)
+        count *= 19; // not done
+
+    if ((cmask1 | cmask3) == cmask4)
+        count *= 23; // 180642
+
+    if ((cmask1 ^ cmask4) == 0xA10u)
+        count *= 27; // 4877334
+
+    uint mask1 = 0x0A1u;
+    uint mask2 = 0xA10u;
+    uint mask3 = mask1 << 4;
+    uint mask4 = 0xAB1u;
+
+    if (mask3 == mask2)
+        count *= 2;  // 9754668
+
+    if ((mask3 & mask1) != 0u)
+        count *= 3;  // not done
+
+    if ((mask1 | mask3) == mask4)
+        count *= 5;  // 48773340
+
+    if ((mask1 ^ mask4) == 0xA10u)
+        count *= 7;  // 341413380
+
+    c += uvec4(count);	
+}
diff --git a/Test/spv.uniformArray.frag b/Test/spv.uniformArray.frag
new file mode 100644
index 000000000..7db287642
--- /dev/null
+++ b/Test/spv.uniformArray.frag
@@ -0,0 +1,16 @@
+#version 130
+uniform sampler2D texSampler2D;
+uniform vec3 inColor;
+uniform vec4 color[6];
+uniform float alpha[16];
+
+void main()
+{
+	vec4 texColor = color[1] + color[1];
+
+	texColor.xyz += inColor;
+
+	texColor.a += alpha[12];
+
+    gl_FragColor = texColor;
+}
diff --git a/Test/spv.variableArrayIndex.frag b/Test/spv.variableArrayIndex.frag
new file mode 100644
index 000000000..63b49c784
--- /dev/null
+++ b/Test/spv.variableArrayIndex.frag
@@ -0,0 +1,48 @@
+#version 130
+uniform sampler2D sampler;
+varying vec2 coord;
+
+struct lunarStruct1 {
+    int i;
+    float f;
+};
+
+struct lunarStruct2 {
+    int i;
+    float f;
+    lunarStruct1 s1_1;
+};
+
+struct lunarStruct3 {
+    lunarStruct2 s2_1[3];
+    int i;
+    float f;
+    lunarStruct1 s1_1;
+};
+
+
+uniform lunarStruct1 foo;
+uniform lunarStruct2 foo2[5];
+uniform lunarStruct3 foo3;
+uniform int Count;
+
+void main()
+{
+    float scale;
+    int iLocal = Count;
+
+    if (foo3.s2_1[1].i > 0)
+        scale = foo2[foo3.s2_1[foo.i].i + 2 + ++iLocal].s1_1.f;
+    else
+        scale = foo3.s2_1[0].s1_1.f;
+
+    //for (int i = 0; i < iLocal; ++i) {
+    //	scale += foo2[i].f;
+    //}
+
+    gl_FragColor =  scale * texture2D(sampler, coord);
+
+    vec2[3] constructed = vec2[3](coord, vec2(scale), vec2(1.0, 2.0));
+    gl_FragColor += vec4(constructed[foo.i], constructed[foo.i]);
+}
+
diff --git a/Test/spv.varyingArray.frag b/Test/spv.varyingArray.frag
new file mode 100644
index 000000000..3bd152fe9
--- /dev/null
+++ b/Test/spv.varyingArray.frag
@@ -0,0 +1,19 @@
+#version 130
+uniform sampler2D texSampler2D;
+varying vec4 color;
+varying float alpha;
+
+varying vec4 gl_TexCoord[6];
+
+varying vec4 foo[3];
+
+void main()
+{
+	vec4 texColor = texture2D(texSampler2D, vec2(gl_TexCoord[4] + gl_TexCoord[5]));
+
+	texColor += color;
+
+	texColor.a = alpha;
+
+    gl_FragColor = foo[1] + gl_TexCoord[0] + gl_TexCoord[4] + texColor;
+}
diff --git a/Test/spv.varyingArrayIndirect.frag b/Test/spv.varyingArrayIndirect.frag
new file mode 100644
index 000000000..d45e601b4
--- /dev/null
+++ b/Test/spv.varyingArrayIndirect.frag
@@ -0,0 +1,21 @@
+#version 130
+uniform sampler2D texSampler2D;
+varying vec4 color;
+varying float alpha;
+
+varying vec4 gl_TexCoord[6];
+
+varying  vec4 userIn[2];
+
+uniform int a, b;
+
+void main()
+{
+	vec4 texColor = texture2D(texSampler2D, vec2(userIn[b] + gl_TexCoord[a] + gl_TexCoord[5]));
+
+	texColor += color;
+
+	texColor.a = alpha;
+
+    gl_FragColor = gl_TexCoord[0] + gl_TexCoord[b] + texColor + userIn[a];
+}
diff --git a/Test/spv.voidFunction.frag b/Test/spv.voidFunction.frag
new file mode 100644
index 000000000..4767f7ab1
--- /dev/null
+++ b/Test/spv.voidFunction.frag
@@ -0,0 +1,34 @@
+#version 120
+
+uniform vec4 bigColor;
+varying vec4 BaseColor;
+uniform float d;
+
+float bar = 2.0;
+
+void foo()
+{
+    bar++;
+
+	return;
+}
+
+void foo2()
+{
+    bar++;
+}
+
+void main()
+{
+	vec4 outColor = bigColor;
+
+	foo();
+
+	foo2();
+
+	outColor.x += bar;
+
+    gl_FragColor = outColor;
+
+	return;
+}
diff --git a/Test/spv.whileLoop.frag b/Test/spv.whileLoop.frag
new file mode 100644
index 000000000..a9541f917
--- /dev/null
+++ b/Test/spv.whileLoop.frag
@@ -0,0 +1,16 @@
+#version 110
+
+uniform vec4 bigColor;
+varying vec4 BaseColor;
+uniform float d;
+
+void main()
+{
+    vec4 color = BaseColor;
+
+    while (color.x < d) {
+        color += bigColor;
+    }
+
+    gl_FragColor = color;
+}
diff --git a/Test/test-spirv-list b/Test/test-spirv-list
index b5726393f..e732a4134 100644
--- a/Test/test-spirv-list
+++ b/Test/test-spirv-list
@@ -7,3 +7,74 @@ spv.for-continue-break.vert
 spv.for-simple.vert
 spv.while-continue-break.vert
 spv.while-simple.vert
+# vulkan-specific tests
+spv.set.vert
+spv.double.comp
+# snapshot of some LunarGLASS tests, so glslang can stand on its own and tests can now evolve separately
+spv.100ops.frag
+spv.130.frag
+spv.140.frag
+spv.140.vert
+spv.150.geom
+spv.150.vert
+spv.300BuiltIns.vert
+spv.300layout.frag
+spv.300layout.vert
+spv.300layoutp.vert
+spv.310.comp
+spv.330.geom
+spv.400.frag
+spv.400.tesc
+spv.400.tese
+spv.420.geom
+spv.430.vert
+spv.aggOps.frag
+spv.always-discard.frag
+spv.always-discard2.frag
+spv.conditionalDiscard.frag
+spv.conversion.frag
+spv.dataOut.frag
+spv.dataOutIndirect.frag
+spv.dataOutIndirect.vert
+spv.deepRvalue.frag
+spv.depthOut.frag
+spv.discard-dce.frag
+spv.doWhileLoop.frag
+spv.earlyReturnDiscard.frag
+spv.flowControl.frag
+spv.forLoop.frag
+spv.forwardFun.frag
+spv.functionCall.frag
+spv.functionSemantics.frag
+spv.length.frag
+spv.localAggregates.frag
+spv.loops.frag
+spv.loopsArtificial.frag
+spv.matFun.vert
+spv.matrix.frag
+spv.matrix2.frag
+spv.newTexture.frag
+spv.nonSquare.vert
+spv.Operations.frag
+spv.precision.frag
+spv.prepost.frag
+spv.qualifiers.vert
+spv.simpleFunctionCall.frag
+spv.simpleMat.vert
+spv.structAssignment.frag
+spv.structDeref.frag
+spv.structure.frag
+spv.switch.frag
+spv.swizzle.frag
+spv.test.frag
+spv.test.vert
+spv.texture.frag
+spv.texture.vert
+spv.types.frag
+spv.uint.frag
+spv.uniformArray.frag
+spv.variableArrayIndex.frag
+spv.varyingArray.frag
+spv.varyingArrayIndirect.frag
+spv.voidFunction.frag
+spv.whileLoop.frag
-- 
GitLab