Eliminate unused local variables during SkSL optimization.

This can eliminate const variables which have been completely folded
away, unnecessary synthetic variables created during codegen/inlining,
or code that simply didn't need to exist at all.

Change-Id: I37a65e455e6527a6a6c2f4dde918f48d84dc2638
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/383496
Commit-Queue: John Stiles <johnstiles@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
diff --git a/src/sksl/SkSLCompiler.cpp b/src/sksl/SkSLCompiler.cpp
index 4c65075..d12873e 100644
--- a/src/sksl/SkSLCompiler.cpp
+++ b/src/sksl/SkSLCompiler.cpp
@@ -595,6 +595,86 @@
     return madeChanges;
 }
 
+bool Compiler::removeDeadLocalVariables(Program& program, ProgramUsage* usage) {
+    class DeadLocalVariableEliminator : public ProgramWriter {
+    public:
+        DeadLocalVariableEliminator(const Context& context, ProgramUsage* usage)
+                : fContext(context)
+                , fUsage(usage) {}
+
+        using ProgramWriter::visitProgramElement;
+
+        bool visitExpressionPtr(std::unique_ptr<Expression>& expr) override {
+            // We don't need to look inside expressions at all.
+            return false;
+        }
+
+        bool visitStatementPtr(std::unique_ptr<Statement>& stmt) override {
+            if (stmt->is<VarDeclaration>()) {
+                VarDeclaration& varDecl = stmt->as<VarDeclaration>();
+                const Variable* var = &varDecl.var();
+                ProgramUsage::VariableCounts* counts = fUsage->fVariableCounts.find(var);
+                SkASSERT(counts);
+                SkASSERT(counts->fDeclared);
+                if (CanEliminate(var, *counts)) {
+                    if (var->initialValue()) {
+                        // The variable has an initial-value expression, which might have side
+                        // effects. ExpressionStatement::Make will preserve side effects, but
+                        // replaces pure expressions with Nop.
+                        fUsage->remove(stmt.get());
+                        stmt = ExpressionStatement::Make(fContext, std::move(varDecl.value()));
+                        fUsage->add(stmt.get());
+                    } else {
+                        // The variable has no initial-value and can be cleanly eliminated.
+                        fUsage->remove(stmt.get());
+                        stmt = std::make_unique<Nop>();
+                    }
+                    fMadeChanges = true;
+                }
+                return false;
+            }
+            return INHERITED::visitStatementPtr(stmt);
+        }
+
+        static bool CanEliminate(const Variable* var, const ProgramUsage::VariableCounts& counts) {
+            if (!counts.fDeclared || counts.fRead || var->storage() != VariableStorage::kLocal) {
+                return false;
+            }
+            if (var->initialValue()) {
+                SkASSERT(counts.fWrite >= 1);
+                return counts.fWrite == 1;
+            } else {
+                return counts.fWrite == 0;
+            }
+        }
+
+        bool fMadeChanges = false;
+        const Context& fContext;
+        ProgramUsage* fUsage;
+
+        using INHERITED = ProgramWriter;
+    };
+
+    DeadLocalVariableEliminator visitor{*fContext, usage};
+
+    if (program.fConfig->fSettings.fRemoveDeadVariables) {
+        for (auto& [var, counts] : usage->fVariableCounts) {
+            if (DeadLocalVariableEliminator::CanEliminate(var, counts)) {
+                // This program contains at least one dead local variable.
+                // Scan the program for any dead local variables and eliminate them all.
+                for (std::unique_ptr<ProgramElement>& pe : program.ownedElements()) {
+                    if (pe->is<FunctionDefinition>()) {
+                        visitor.visitProgramElement(*pe);
+                    }
+                }
+                break;
+            }
+        }
+    }
+
+    return visitor.fMadeChanges;
+}
+
 bool Compiler::optimize(Program& program) {
     // The optimizer only needs to run when it is enabled.
     if (!program.fConfig->fSettings.fOptimize) {
@@ -608,6 +688,7 @@
         bool madeChanges = fInliner.analyze(program.ownedElements(), program.fSymbols, usage);
 
         madeChanges |= this->removeDeadFunctions(program, usage);
+        madeChanges |= this->removeDeadLocalVariables(program, usage);
 
         if (program.fConfig->fKind != ProgramKind::kFragmentProcessor) {
             madeChanges |= this->removeDeadGlobalVariables(program, usage);
diff --git a/src/sksl/SkSLCompiler.h b/src/sksl/SkSLCompiler.h
index 659ad05..9a1f5ae 100644
--- a/src/sksl/SkSLCompiler.h
+++ b/src/sksl/SkSLCompiler.h
@@ -190,8 +190,9 @@
     /** Eliminates unused functions from a Program, according to the stats in ProgramUsage. */
     bool removeDeadFunctions(Program& program, ProgramUsage* usage);
 
-    /** Eliminates unreferenced globals from a Program, according to the stats in ProgramUsage. */
+    /** Eliminates unreferenced variables from a Program, according to the stats in ProgramUsage. */
     bool removeDeadGlobalVariables(Program& program, ProgramUsage* usage);
+    bool removeDeadLocalVariables(Program& program, ProgramUsage* usage);
 
     Position position(int offset);
 
diff --git a/src/sksl/ir/SkSLProgram.h b/src/sksl/ir/SkSLProgram.h
index 66e0380..75c7eeb 100644
--- a/src/sksl/ir/SkSLProgram.h
+++ b/src/sksl/ir/SkSLProgram.h
@@ -195,6 +195,7 @@
 
     // Can be used to iterate over *just* the elements owned by the Program, not shared builtins.
     // The iterator's value type is 'std::unique_ptr<ProgramElement>', and mutation is allowed.
+    std::vector<std::unique_ptr<ProgramElement>>& ownedElements() { return fElements; }
     const std::vector<std::unique_ptr<ProgramElement>>& ownedElements() const { return fElements; }
 
     std::unique_ptr<String> fSource;
diff --git a/tests/sksl/inliner/InlineWithNestedCalls.glsl b/tests/sksl/inliner/InlineWithNestedCalls.glsl
index 678aeca..3c0c464 100644
--- a/tests/sksl/inliner/InlineWithNestedCalls.glsl
+++ b/tests/sksl/inliner/InlineWithNestedCalls.glsl
@@ -1,7 +1,6 @@
 
 out vec4 sk_FragColor;
 void main() {
-    float _1_y = 123.0;
     float z = 0.0;
     float _0_y = z;
     ++_0_y;
diff --git a/tests/sksl/metal/SwizzleHelper.metal b/tests/sksl/metal/SwizzleHelper.metal
index 1615c78..f510293 100644
--- a/tests/sksl/metal/SwizzleHelper.metal
+++ b/tests/sksl/metal/SwizzleHelper.metal
@@ -34,7 +34,6 @@
     (void)_out;
     float2 a = float2(1.0);
     float3 b = float3(2.0);
-    float4x4 c = float4x4(3.0);
     float3x3 d = float3x3(4.0);
     _out.sk_FragColor =     _skOutParamHelper0_fn(_out, _globals, a.x, b, _globals.glob, d);
     return _out;
diff --git a/tests/sksl/shared/Assignment.asm.frag b/tests/sksl/shared/Assignment.asm.frag
index 5073148..0e8e893 100644
--- a/tests/sksl/shared/Assignment.asm.frag
+++ b/tests/sksl/shared/Assignment.asm.frag
@@ -26,7 +26,6 @@
 OpName %af4 "af4"
 OpName %s "s"
 OpName %l "l"
-OpName %r "r"
 OpDecorate %sk_FragColor RelaxedPrecision
 OpDecorate %sk_FragColor Location 0
 OpDecorate %sk_FragColor Index 0
@@ -58,12 +57,12 @@
 OpDecorate %_arr_v4float_int_1 ArrayStride 16
 OpDecorate %98 RelaxedPrecision
 OpDecorate %102 RelaxedPrecision
-OpDecorate %123 RelaxedPrecision
+OpDecorate %122 RelaxedPrecision
+OpDecorate %130 RelaxedPrecision
 OpDecorate %131 RelaxedPrecision
 OpDecorate %132 RelaxedPrecision
-OpDecorate %133 RelaxedPrecision
-OpDecorate %136 RelaxedPrecision
-OpDecorate %140 RelaxedPrecision
+OpDecorate %135 RelaxedPrecision
+OpDecorate %139 RelaxedPrecision
 %float = OpTypeFloat 32
 %v4float = OpTypeVector %float 4
 %_ptr_Output_v4float = OpTypePointer Output %v4float
@@ -126,7 +125,7 @@
 %99 = OpConstantComposite %v2float %float_5 %float_5
 %103 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
 %_ptr_Private_float = OpTypePointer Private %float
-%117 = OpConstantComposite %v4float %float_2 %float_2 %float_2 %float_2
+%116 = OpConstantComposite %v4float %float_2 %float_2 %float_2 %float_2
 %_ptr_Function_v3float = OpTypePointer Function %v3float
 %_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
 %_entrypoint = OpFunction %void None %24
@@ -147,7 +146,6 @@
 %af4 = OpVariable %_ptr_Function__arr_v4float_int_1 Function
 %s = OpVariable %_ptr_Function_S Function
 %l = OpVariable %_ptr_Function_float Function
-%r = OpVariable %_ptr_Function_float Function
 OpStore %i %int_0
 OpStore %i4 %39
 %54 = OpCompositeConstruct %v3float %float_1 %float_2 %float_3
@@ -193,44 +191,44 @@
 %104 = OpAccessChain %_ptr_Private_float %globalStruct %int_0
 OpStore %104 %float_0
 OpStore %l %float_0
-%108 = OpAccessChain %_ptr_Function_int %ai %int_0
-%109 = OpLoad %int %108
-%110 = OpAccessChain %_ptr_Function_v4int %ai4 %int_0
-%111 = OpLoad %v4int %110
-%112 = OpCompositeExtract %int %111 0
-%113 = OpIAdd %int %109 %112
-OpStore %108 %113
-%114 = OpAccessChain %_ptr_Function_float %s %int_0
-OpStore %114 %float_1
-%115 = OpAccessChain %_ptr_Function_float %s %int_1 %int_0
-OpStore %115 %float_2
-%116 = OpAccessChain %_ptr_Function_v4float %s %int_2
-OpStore %116 %87
-%118 = OpAccessChain %_ptr_Function_v4float %s %int_3 %int_0
-OpStore %118 %117
-%119 = OpAccessChain %_ptr_Function_v4float %af4 %int_0
-%120 = OpLoad %v4float %119
-%121 = OpAccessChain %_ptr_Function_v3float %ah2x4 %int_0 %int_0
-%123 = OpLoad %v3float %121
-%124 = OpCompositeExtract %float %123 0
-%125 = OpVectorTimesScalar %v4float %120 %124
-OpStore %119 %125
-%126 = OpAccessChain %_ptr_Function_int %i4 %int_1
-%127 = OpLoad %int %126
-%128 = OpLoad %int %i
-%129 = OpIMul %int %127 %128
-OpStore %126 %129
-%130 = OpAccessChain %_ptr_Function_float %x %int_1
-%131 = OpLoad %float %130
-%132 = OpLoad %float %l
-%133 = OpFMul %float %131 %132
-OpStore %130 %133
-%134 = OpAccessChain %_ptr_Function_float %s %int_0
-%135 = OpLoad %float %134
-%136 = OpLoad %float %l
-%137 = OpFMul %float %135 %136
-OpStore %134 %137
-%138 = OpAccessChain %_ptr_Uniform_v4float %19 %int_0
-%140 = OpLoad %v4float %138
-OpReturnValue %140
+%107 = OpAccessChain %_ptr_Function_int %ai %int_0
+%108 = OpLoad %int %107
+%109 = OpAccessChain %_ptr_Function_v4int %ai4 %int_0
+%110 = OpLoad %v4int %109
+%111 = OpCompositeExtract %int %110 0
+%112 = OpIAdd %int %108 %111
+OpStore %107 %112
+%113 = OpAccessChain %_ptr_Function_float %s %int_0
+OpStore %113 %float_1
+%114 = OpAccessChain %_ptr_Function_float %s %int_1 %int_0
+OpStore %114 %float_2
+%115 = OpAccessChain %_ptr_Function_v4float %s %int_2
+OpStore %115 %87
+%117 = OpAccessChain %_ptr_Function_v4float %s %int_3 %int_0
+OpStore %117 %116
+%118 = OpAccessChain %_ptr_Function_v4float %af4 %int_0
+%119 = OpLoad %v4float %118
+%120 = OpAccessChain %_ptr_Function_v3float %ah2x4 %int_0 %int_0
+%122 = OpLoad %v3float %120
+%123 = OpCompositeExtract %float %122 0
+%124 = OpVectorTimesScalar %v4float %119 %123
+OpStore %118 %124
+%125 = OpAccessChain %_ptr_Function_int %i4 %int_1
+%126 = OpLoad %int %125
+%127 = OpLoad %int %i
+%128 = OpIMul %int %126 %127
+OpStore %125 %128
+%129 = OpAccessChain %_ptr_Function_float %x %int_1
+%130 = OpLoad %float %129
+%131 = OpLoad %float %l
+%132 = OpFMul %float %130 %131
+OpStore %129 %132
+%133 = OpAccessChain %_ptr_Function_float %s %int_0
+%134 = OpLoad %float %133
+%135 = OpLoad %float %l
+%136 = OpFMul %float %134 %135
+OpStore %133 %136
+%137 = OpAccessChain %_ptr_Uniform_v4float %19 %int_0
+%139 = OpLoad %v4float %137
+OpReturnValue %139
 OpFunctionEnd
diff --git a/tests/sksl/shared/Assignment.glsl b/tests/sksl/shared/Assignment.glsl
index c51df52..8d4d3a2 100644
--- a/tests/sksl/shared/Assignment.glsl
+++ b/tests/sksl/shared/Assignment.glsl
@@ -36,7 +36,6 @@
     globalVar = vec4(0.0);
     globalStruct.f = 0.0;
     float l;
-    float r;
     l = 0.0;
     ai[0] += ai4[0].x;
     s.f = 1.0;
diff --git a/tests/sksl/shared/Assignment.metal b/tests/sksl/shared/Assignment.metal
index d4a5bfe..153f4ec 100644
--- a/tests/sksl/shared/Assignment.metal
+++ b/tests/sksl/shared/Assignment.metal
@@ -50,7 +50,6 @@
     _globals.globalVar = float4(0.0);
     _globals.globalStruct.f = 0.0;
     float l;
-    float r;
     l = 0.0;
     ai[0] += ai4[0].x;
     s.f = 1.0;
diff --git a/tests/sksl/shared/ConstVariableComparison.asm.frag b/tests/sksl/shared/ConstVariableComparison.asm.frag
index a6a7836..7f7af94 100644
--- a/tests/sksl/shared/ConstVariableComparison.asm.frag
+++ b/tests/sksl/shared/ConstVariableComparison.asm.frag
@@ -10,7 +10,6 @@
 OpMemberName %_UniformBuffer 1 "colorRed"
 OpName %_entrypoint "_entrypoint"
 OpName %main "main"
-OpName %a "a"
 OpName %b "b"
 OpName %c "c"
 OpDecorate %sk_FragColor RelaxedPrecision
@@ -25,8 +24,8 @@
 OpDecorate %_UniformBuffer Block
 OpDecorate %10 Binding 0
 OpDecorate %10 DescriptorSet 0
+OpDecorate %39 RelaxedPrecision
 OpDecorate %42 RelaxedPrecision
-OpDecorate %45 RelaxedPrecision
 %float = OpTypeFloat 32
 %v4float = OpTypeVector %float 4
 %_ptr_Output_v4float = OpTypePointer Output %v4float
@@ -41,10 +40,8 @@
 %15 = OpTypeFunction %void
 %18 = OpTypeFunction %v4float
 %_ptr_Function_v4float = OpTypePointer Function %v4float
-%float_0 = OpConstant %float 0
-%23 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
 %float_1 = OpConstant %float 1
-%26 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
 %v4bool = OpTypeVector %bool 4
 %_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
 %int = OpTypeInt 32 1
@@ -58,28 +55,26 @@
 OpFunctionEnd
 %main = OpFunction %v4float None %18
 %19 = OpLabel
-%a = OpVariable %_ptr_Function_v4float Function
 %b = OpVariable %_ptr_Function_v4float Function
 %c = OpVariable %_ptr_Function_v4float Function
-OpStore %a %23
-OpStore %b %26
-%29 = OpLoad %v4float %b
-%28 = OpExtInst %v4float %1 FAbs %29
-OpStore %c %28
-%30 = OpLoad %v4float %b
-%31 = OpLoad %v4float %c
-%32 = OpFOrdNotEqual %v4bool %30 %31
-%34 = OpAny %bool %32
-OpSelectionMerge %37 None
-OpBranchConditional %34 %35 %36
-%35 = OpLabel
-%38 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
-%42 = OpLoad %v4float %38
+OpStore %b %23
+%26 = OpLoad %v4float %b
+%25 = OpExtInst %v4float %1 FAbs %26
+OpStore %c %25
+%27 = OpLoad %v4float %b
+%28 = OpLoad %v4float %c
+%29 = OpFOrdNotEqual %v4bool %27 %28
+%31 = OpAny %bool %29
+OpSelectionMerge %34 None
+OpBranchConditional %31 %32 %33
+%32 = OpLabel
+%35 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
+%39 = OpLoad %v4float %35
+OpReturnValue %39
+%33 = OpLabel
+%40 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
+%42 = OpLoad %v4float %40
 OpReturnValue %42
-%36 = OpLabel
-%43 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
-%45 = OpLoad %v4float %43
-OpReturnValue %45
-%37 = OpLabel
+%34 = OpLabel
 OpUnreachable
 OpFunctionEnd
diff --git a/tests/sksl/shared/ConstVariableComparison.glsl b/tests/sksl/shared/ConstVariableComparison.glsl
index 4f9c201..6ee8a96 100644
--- a/tests/sksl/shared/ConstVariableComparison.glsl
+++ b/tests/sksl/shared/ConstVariableComparison.glsl
@@ -3,7 +3,6 @@
 uniform vec4 colorGreen;
 uniform vec4 colorRed;
 vec4 main() {
-    const vec4 a = vec4(0.0);
     const vec4 b = vec4(1.0);
     vec4 c = abs(b);
     if (b != c) {
diff --git a/tests/sksl/shared/ConstVariableComparison.metal b/tests/sksl/shared/ConstVariableComparison.metal
index 817814b..d679750 100644
--- a/tests/sksl/shared/ConstVariableComparison.metal
+++ b/tests/sksl/shared/ConstVariableComparison.metal
@@ -14,7 +14,6 @@
 fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
     Outputs _out;
     (void)_out;
-    const float4 a = float4(0.0);
     const float4 b = float4(1.0);
     float4 c = abs(b);
     if (any(b != c)) {
diff --git a/tests/sksl/shared/DeadIfStatement.asm.frag b/tests/sksl/shared/DeadIfStatement.asm.frag
index 80bb740..1346196 100644
--- a/tests/sksl/shared/DeadIfStatement.asm.frag
+++ b/tests/sksl/shared/DeadIfStatement.asm.frag
@@ -10,7 +10,6 @@
 OpMemberName %_UniformBuffer 1 "colorRed"
 OpName %_entrypoint "_entrypoint"
 OpName %main "main"
-OpName %x "x"
 OpDecorate %sk_FragColor RelaxedPrecision
 OpDecorate %sk_FragColor Location 0
 OpDecorate %sk_FragColor Index 0
@@ -23,7 +22,7 @@
 OpDecorate %_UniformBuffer Block
 OpDecorate %10 Binding 0
 OpDecorate %10 DescriptorSet 0
-OpDecorate %27 RelaxedPrecision
+OpDecorate %24 RelaxedPrecision
 %float = OpTypeFloat 32
 %v4float = OpTypeVector %float 4
 %_ptr_Output_v4float = OpTypePointer Output %v4float
@@ -37,8 +36,6 @@
 %void = OpTypeVoid
 %15 = OpTypeFunction %void
 %18 = OpTypeFunction %v4float
-%_ptr_Function_bool = OpTypePointer Function %bool
-%true = OpConstantTrue %bool
 %_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
 %int = OpTypeInt 32 1
 %int_0 = OpConstant %int 0
@@ -50,9 +47,7 @@
 OpFunctionEnd
 %main = OpFunction %v4float None %18
 %19 = OpLabel
-%x = OpVariable %_ptr_Function_bool Function
-OpStore %x %true
-%23 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
-%27 = OpLoad %v4float %23
-OpReturnValue %27
+%20 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
+%24 = OpLoad %v4float %20
+OpReturnValue %24
 OpFunctionEnd
diff --git a/tests/sksl/shared/DeadIfStatement.glsl b/tests/sksl/shared/DeadIfStatement.glsl
index a0ff1a0..f06fb46 100644
--- a/tests/sksl/shared/DeadIfStatement.glsl
+++ b/tests/sksl/shared/DeadIfStatement.glsl
@@ -3,6 +3,5 @@
 uniform vec4 colorGreen;
 uniform vec4 colorRed;
 vec4 main() {
-    const bool x = true;
     return colorGreen;
 }
diff --git a/tests/sksl/shared/DeadIfStatement.metal b/tests/sksl/shared/DeadIfStatement.metal
index 9ba5609..5473d1f 100644
--- a/tests/sksl/shared/DeadIfStatement.metal
+++ b/tests/sksl/shared/DeadIfStatement.metal
@@ -14,7 +14,6 @@
 fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
     Outputs _out;
     (void)_out;
-    const bool x = true;
     _out.sk_FragColor = _uniforms.colorGreen;
     return _out;
 }
diff --git a/tests/sksl/shared/DeadStripFunctions.asm.frag b/tests/sksl/shared/DeadStripFunctions.asm.frag
index d7d12e8..e569b95 100644
--- a/tests/sksl/shared/DeadStripFunctions.asm.frag
+++ b/tests/sksl/shared/DeadStripFunctions.asm.frag
@@ -12,8 +12,6 @@
 OpName %unpremul "unpremul"
 OpName %live_fn "live_fn"
 OpName %main "main"
-OpName %TRUE "TRUE"
-OpName %FALSE "FALSE"
 OpName %a "a"
 OpName %b "b"
 OpDecorate %sk_FragColor RelaxedPrecision
@@ -34,11 +32,11 @@
 OpDecorate %44 RelaxedPrecision
 OpDecorate %45 RelaxedPrecision
 OpDecorate %46 RelaxedPrecision
-OpDecorate %66 RelaxedPrecision
-OpDecorate %74 RelaxedPrecision
+OpDecorate %62 RelaxedPrecision
+OpDecorate %70 RelaxedPrecision
+OpDecorate %82 RelaxedPrecision
+OpDecorate %85 RelaxedPrecision
 OpDecorate %86 RelaxedPrecision
-OpDecorate %89 RelaxedPrecision
-OpDecorate %90 RelaxedPrecision
 %float = OpTypeFloat 32
 %v4float = OpTypeVector %float 4
 %_ptr_Output_v4float = OpTypePointer Output %v4float
@@ -58,16 +56,14 @@
 %float_1 = OpConstant %float 1
 %40 = OpTypeFunction %v4float %_ptr_Function_v4float %_ptr_Function_v4float
 %47 = OpTypeFunction %v4float
-%_ptr_Function_bool = OpTypePointer Function %bool
-%true = OpConstantTrue %bool
-%false = OpConstantFalse %bool
 %float_3 = OpConstant %float 3
-%57 = OpConstantComposite %v4float %float_3 %float_3 %float_3 %float_3
+%52 = OpConstantComposite %v4float %float_3 %float_3 %float_3 %float_3
 %float_n5 = OpConstant %float -5
-%60 = OpConstantComposite %v4float %float_n5 %float_n5 %float_n5 %float_n5
-%63 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%55 = OpConstantComposite %v4float %float_n5 %float_n5 %float_n5 %float_n5
+%58 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%false = OpConstantFalse %bool
 %float_0 = OpConstant %float 0
-%68 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
+%64 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
 %v4bool = OpTypeVector %bool 4
 %_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
 %int = OpTypeInt 32 1
@@ -108,48 +104,44 @@
 OpFunctionEnd
 %main = OpFunction %v4float None %47
 %48 = OpLabel
-%TRUE = OpVariable %_ptr_Function_bool Function
-%FALSE = OpVariable %_ptr_Function_bool Function
 %a = OpVariable %_ptr_Function_v4float Function
 %b = OpVariable %_ptr_Function_v4float Function
-%58 = OpVariable %_ptr_Function_v4float Function
-%61 = OpVariable %_ptr_Function_v4float Function
-%64 = OpVariable %_ptr_Function_v4float Function
-%78 = OpVariable %_ptr_Function_v4float Function
-OpStore %TRUE %true
-OpStore %FALSE %false
-OpStore %58 %57
-OpStore %61 %60
-%62 = OpFunctionCall %v4float %live_fn %58 %61
-OpStore %a %62
-OpStore %64 %63
-%65 = OpFunctionCall %v4float %unpremul %64
-OpStore %b %65
-%66 = OpLoad %v4float %a
-%69 = OpFOrdNotEqual %v4bool %66 %68
-%71 = OpAny %bool %69
-OpSelectionMerge %73 None
-OpBranchConditional %71 %72 %73
-%72 = OpLabel
-%74 = OpLoad %v4float %b
-%75 = OpFOrdNotEqual %v4bool %74 %68
-%76 = OpAny %bool %75
-OpBranch %73
-%73 = OpLabel
-%77 = OpPhi %bool %false %48 %76 %72
-OpSelectionMerge %81 None
-OpBranchConditional %77 %79 %80
-%79 = OpLabel
-%82 = OpAccessChain %_ptr_Uniform_v4float %12 %int_0
-%86 = OpLoad %v4float %82
-OpStore %78 %86
-OpBranch %81
-%80 = OpLabel
-%87 = OpAccessChain %_ptr_Uniform_v4float %12 %int_1
-%89 = OpLoad %v4float %87
-OpStore %78 %89
-OpBranch %81
-%81 = OpLabel
-%90 = OpLoad %v4float %78
-OpReturnValue %90
+%53 = OpVariable %_ptr_Function_v4float Function
+%56 = OpVariable %_ptr_Function_v4float Function
+%59 = OpVariable %_ptr_Function_v4float Function
+%74 = OpVariable %_ptr_Function_v4float Function
+OpStore %53 %52
+OpStore %56 %55
+%57 = OpFunctionCall %v4float %live_fn %53 %56
+OpStore %a %57
+OpStore %59 %58
+%60 = OpFunctionCall %v4float %unpremul %59
+OpStore %b %60
+%62 = OpLoad %v4float %a
+%65 = OpFOrdNotEqual %v4bool %62 %64
+%67 = OpAny %bool %65
+OpSelectionMerge %69 None
+OpBranchConditional %67 %68 %69
+%68 = OpLabel
+%70 = OpLoad %v4float %b
+%71 = OpFOrdNotEqual %v4bool %70 %64
+%72 = OpAny %bool %71
+OpBranch %69
+%69 = OpLabel
+%73 = OpPhi %bool %false %48 %72 %68
+OpSelectionMerge %77 None
+OpBranchConditional %73 %75 %76
+%75 = OpLabel
+%78 = OpAccessChain %_ptr_Uniform_v4float %12 %int_0
+%82 = OpLoad %v4float %78
+OpStore %74 %82
+OpBranch %77
+%76 = OpLabel
+%83 = OpAccessChain %_ptr_Uniform_v4float %12 %int_1
+%85 = OpLoad %v4float %83
+OpStore %74 %85
+OpBranch %77
+%77 = OpLabel
+%86 = OpLoad %v4float %74
+OpReturnValue %86
 OpFunctionEnd
diff --git a/tests/sksl/shared/DeadStripFunctions.glsl b/tests/sksl/shared/DeadStripFunctions.glsl
index 429abee..3379e6c 100644
--- a/tests/sksl/shared/DeadStripFunctions.glsl
+++ b/tests/sksl/shared/DeadStripFunctions.glsl
@@ -9,8 +9,6 @@
     return a + b;
 }
 vec4 main() {
-    const bool TRUE = true;
-    const bool FALSE = false;
     vec4 a;
     vec4 b;
     {
diff --git a/tests/sksl/shared/DeadStripFunctions.metal b/tests/sksl/shared/DeadStripFunctions.metal
index 607e658..93e8435 100644
--- a/tests/sksl/shared/DeadStripFunctions.metal
+++ b/tests/sksl/shared/DeadStripFunctions.metal
@@ -20,8 +20,6 @@
 fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
     Outputs _out;
     (void)_out;
-    const bool TRUE = true;
-    const bool FALSE = false;
     float4 a;
     float4 b;
     {
diff --git a/tests/sksl/shared/GaussianBlur.asm.frag b/tests/sksl/shared/GaussianBlur.asm.frag
index b70fb1f..aed0adb 100644
--- a/tests/sksl/shared/GaussianBlur.asm.frag
+++ b/tests/sksl/shared/GaussianBlur.asm.frag
@@ -16,9 +16,7 @@
 OpName %uTextureSampler_0_Stage1 "uTextureSampler_0_Stage1"
 OpName %vLocalCoord_Stage0 "vLocalCoord_Stage0"
 OpName %MatrixEffect_Stage1_c0_c0 "MatrixEffect_Stage1_c0_c0"
-OpName %_output "_output"
 OpName %_0_coords "_0_coords"
-OpName %_1_output "_1_output"
 OpName %_2_inCoord "_2_inCoord"
 OpName %_3_subsetCoord "_3_subsetCoord"
 OpName %_4_clampedCoord "_4_clampedCoord"
@@ -56,142 +54,142 @@
 OpDecorate %uTextureSampler_0_Stage1 Binding 0
 OpDecorate %uTextureSampler_0_Stage1 DescriptorSet 0
 OpDecorate %vLocalCoord_Stage0 Location 0
-OpDecorate %69 RelaxedPrecision
-OpDecorate %102 RelaxedPrecision
-OpDecorate %103 RelaxedPrecision
-OpDecorate %119 RelaxedPrecision
-OpDecorate %125 RelaxedPrecision
-OpDecorate %126 RelaxedPrecision
-OpDecorate %133 RelaxedPrecision
-OpDecorate %136 RelaxedPrecision
-OpDecorate %139 RelaxedPrecision
-OpDecorate %142 RelaxedPrecision
-OpDecorate %143 RelaxedPrecision
-OpDecorate %149 RelaxedPrecision
-OpDecorate %152 RelaxedPrecision
-OpDecorate %155 RelaxedPrecision
-OpDecorate %158 RelaxedPrecision
-OpDecorate %159 RelaxedPrecision
-OpDecorate %165 RelaxedPrecision
-OpDecorate %168 RelaxedPrecision
-OpDecorate %171 RelaxedPrecision
-OpDecorate %174 RelaxedPrecision
-OpDecorate %175 RelaxedPrecision
-OpDecorate %181 RelaxedPrecision
-OpDecorate %184 RelaxedPrecision
-OpDecorate %187 RelaxedPrecision
-OpDecorate %190 RelaxedPrecision
-OpDecorate %191 RelaxedPrecision
-OpDecorate %197 RelaxedPrecision
-OpDecorate %200 RelaxedPrecision
-OpDecorate %203 RelaxedPrecision
-OpDecorate %206 RelaxedPrecision
-OpDecorate %207 RelaxedPrecision
-OpDecorate %213 RelaxedPrecision
-OpDecorate %216 RelaxedPrecision
-OpDecorate %219 RelaxedPrecision
-OpDecorate %222 RelaxedPrecision
-OpDecorate %223 RelaxedPrecision
-OpDecorate %229 RelaxedPrecision
-OpDecorate %232 RelaxedPrecision
-OpDecorate %235 RelaxedPrecision
-OpDecorate %238 RelaxedPrecision
-OpDecorate %239 RelaxedPrecision
-OpDecorate %245 RelaxedPrecision
-OpDecorate %248 RelaxedPrecision
-OpDecorate %251 RelaxedPrecision
-OpDecorate %254 RelaxedPrecision
-OpDecorate %255 RelaxedPrecision
-OpDecorate %261 RelaxedPrecision
-OpDecorate %264 RelaxedPrecision
-OpDecorate %267 RelaxedPrecision
-OpDecorate %270 RelaxedPrecision
-OpDecorate %271 RelaxedPrecision
-OpDecorate %277 RelaxedPrecision
-OpDecorate %280 RelaxedPrecision
-OpDecorate %283 RelaxedPrecision
-OpDecorate %286 RelaxedPrecision
-OpDecorate %287 RelaxedPrecision
-OpDecorate %293 RelaxedPrecision
-OpDecorate %296 RelaxedPrecision
-OpDecorate %299 RelaxedPrecision
-OpDecorate %302 RelaxedPrecision
-OpDecorate %303 RelaxedPrecision
-OpDecorate %309 RelaxedPrecision
-OpDecorate %312 RelaxedPrecision
-OpDecorate %315 RelaxedPrecision
-OpDecorate %318 RelaxedPrecision
-OpDecorate %319 RelaxedPrecision
-OpDecorate %325 RelaxedPrecision
-OpDecorate %328 RelaxedPrecision
-OpDecorate %331 RelaxedPrecision
-OpDecorate %334 RelaxedPrecision
-OpDecorate %335 RelaxedPrecision
-OpDecorate %341 RelaxedPrecision
-OpDecorate %344 RelaxedPrecision
-OpDecorate %347 RelaxedPrecision
-OpDecorate %350 RelaxedPrecision
-OpDecorate %351 RelaxedPrecision
-OpDecorate %357 RelaxedPrecision
-OpDecorate %360 RelaxedPrecision
-OpDecorate %363 RelaxedPrecision
-OpDecorate %366 RelaxedPrecision
-OpDecorate %367 RelaxedPrecision
-OpDecorate %373 RelaxedPrecision
-OpDecorate %376 RelaxedPrecision
-OpDecorate %379 RelaxedPrecision
-OpDecorate %382 RelaxedPrecision
-OpDecorate %383 RelaxedPrecision
-OpDecorate %389 RelaxedPrecision
-OpDecorate %392 RelaxedPrecision
-OpDecorate %395 RelaxedPrecision
-OpDecorate %398 RelaxedPrecision
-OpDecorate %399 RelaxedPrecision
-OpDecorate %405 RelaxedPrecision
-OpDecorate %408 RelaxedPrecision
-OpDecorate %411 RelaxedPrecision
-OpDecorate %414 RelaxedPrecision
-OpDecorate %415 RelaxedPrecision
-OpDecorate %421 RelaxedPrecision
-OpDecorate %424 RelaxedPrecision
-OpDecorate %427 RelaxedPrecision
-OpDecorate %430 RelaxedPrecision
-OpDecorate %431 RelaxedPrecision
-OpDecorate %437 RelaxedPrecision
-OpDecorate %440 RelaxedPrecision
-OpDecorate %443 RelaxedPrecision
-OpDecorate %446 RelaxedPrecision
-OpDecorate %447 RelaxedPrecision
-OpDecorate %453 RelaxedPrecision
-OpDecorate %456 RelaxedPrecision
-OpDecorate %459 RelaxedPrecision
-OpDecorate %462 RelaxedPrecision
-OpDecorate %463 RelaxedPrecision
-OpDecorate %469 RelaxedPrecision
-OpDecorate %472 RelaxedPrecision
-OpDecorate %475 RelaxedPrecision
-OpDecorate %478 RelaxedPrecision
-OpDecorate %479 RelaxedPrecision
-OpDecorate %485 RelaxedPrecision
-OpDecorate %488 RelaxedPrecision
-OpDecorate %491 RelaxedPrecision
-OpDecorate %494 RelaxedPrecision
-OpDecorate %495 RelaxedPrecision
-OpDecorate %501 RelaxedPrecision
-OpDecorate %504 RelaxedPrecision
-OpDecorate %507 RelaxedPrecision
-OpDecorate %510 RelaxedPrecision
-OpDecorate %511 RelaxedPrecision
-OpDecorate %517 RelaxedPrecision
-OpDecorate %520 RelaxedPrecision
+OpDecorate %67 RelaxedPrecision
+OpDecorate %100 RelaxedPrecision
+OpDecorate %101 RelaxedPrecision
+OpDecorate %117 RelaxedPrecision
+OpDecorate %123 RelaxedPrecision
+OpDecorate %124 RelaxedPrecision
+OpDecorate %131 RelaxedPrecision
+OpDecorate %134 RelaxedPrecision
+OpDecorate %137 RelaxedPrecision
+OpDecorate %140 RelaxedPrecision
+OpDecorate %141 RelaxedPrecision
+OpDecorate %147 RelaxedPrecision
+OpDecorate %150 RelaxedPrecision
+OpDecorate %153 RelaxedPrecision
+OpDecorate %156 RelaxedPrecision
+OpDecorate %157 RelaxedPrecision
+OpDecorate %163 RelaxedPrecision
+OpDecorate %166 RelaxedPrecision
+OpDecorate %169 RelaxedPrecision
+OpDecorate %172 RelaxedPrecision
+OpDecorate %173 RelaxedPrecision
+OpDecorate %179 RelaxedPrecision
+OpDecorate %182 RelaxedPrecision
+OpDecorate %185 RelaxedPrecision
+OpDecorate %188 RelaxedPrecision
+OpDecorate %189 RelaxedPrecision
+OpDecorate %195 RelaxedPrecision
+OpDecorate %198 RelaxedPrecision
+OpDecorate %201 RelaxedPrecision
+OpDecorate %204 RelaxedPrecision
+OpDecorate %205 RelaxedPrecision
+OpDecorate %211 RelaxedPrecision
+OpDecorate %214 RelaxedPrecision
+OpDecorate %217 RelaxedPrecision
+OpDecorate %220 RelaxedPrecision
+OpDecorate %221 RelaxedPrecision
+OpDecorate %227 RelaxedPrecision
+OpDecorate %230 RelaxedPrecision
+OpDecorate %233 RelaxedPrecision
+OpDecorate %236 RelaxedPrecision
+OpDecorate %237 RelaxedPrecision
+OpDecorate %243 RelaxedPrecision
+OpDecorate %246 RelaxedPrecision
+OpDecorate %249 RelaxedPrecision
+OpDecorate %252 RelaxedPrecision
+OpDecorate %253 RelaxedPrecision
+OpDecorate %259 RelaxedPrecision
+OpDecorate %262 RelaxedPrecision
+OpDecorate %265 RelaxedPrecision
+OpDecorate %268 RelaxedPrecision
+OpDecorate %269 RelaxedPrecision
+OpDecorate %275 RelaxedPrecision
+OpDecorate %278 RelaxedPrecision
+OpDecorate %281 RelaxedPrecision
+OpDecorate %284 RelaxedPrecision
+OpDecorate %285 RelaxedPrecision
+OpDecorate %291 RelaxedPrecision
+OpDecorate %294 RelaxedPrecision
+OpDecorate %297 RelaxedPrecision
+OpDecorate %300 RelaxedPrecision
+OpDecorate %301 RelaxedPrecision
+OpDecorate %307 RelaxedPrecision
+OpDecorate %310 RelaxedPrecision
+OpDecorate %313 RelaxedPrecision
+OpDecorate %316 RelaxedPrecision
+OpDecorate %317 RelaxedPrecision
+OpDecorate %323 RelaxedPrecision
+OpDecorate %326 RelaxedPrecision
+OpDecorate %329 RelaxedPrecision
+OpDecorate %332 RelaxedPrecision
+OpDecorate %333 RelaxedPrecision
+OpDecorate %339 RelaxedPrecision
+OpDecorate %342 RelaxedPrecision
+OpDecorate %345 RelaxedPrecision
+OpDecorate %348 RelaxedPrecision
+OpDecorate %349 RelaxedPrecision
+OpDecorate %355 RelaxedPrecision
+OpDecorate %358 RelaxedPrecision
+OpDecorate %361 RelaxedPrecision
+OpDecorate %364 RelaxedPrecision
+OpDecorate %365 RelaxedPrecision
+OpDecorate %371 RelaxedPrecision
+OpDecorate %374 RelaxedPrecision
+OpDecorate %377 RelaxedPrecision
+OpDecorate %380 RelaxedPrecision
+OpDecorate %381 RelaxedPrecision
+OpDecorate %387 RelaxedPrecision
+OpDecorate %390 RelaxedPrecision
+OpDecorate %393 RelaxedPrecision
+OpDecorate %396 RelaxedPrecision
+OpDecorate %397 RelaxedPrecision
+OpDecorate %403 RelaxedPrecision
+OpDecorate %406 RelaxedPrecision
+OpDecorate %409 RelaxedPrecision
+OpDecorate %412 RelaxedPrecision
+OpDecorate %413 RelaxedPrecision
+OpDecorate %419 RelaxedPrecision
+OpDecorate %422 RelaxedPrecision
+OpDecorate %425 RelaxedPrecision
+OpDecorate %428 RelaxedPrecision
+OpDecorate %429 RelaxedPrecision
+OpDecorate %435 RelaxedPrecision
+OpDecorate %438 RelaxedPrecision
+OpDecorate %441 RelaxedPrecision
+OpDecorate %444 RelaxedPrecision
+OpDecorate %445 RelaxedPrecision
+OpDecorate %451 RelaxedPrecision
+OpDecorate %454 RelaxedPrecision
+OpDecorate %457 RelaxedPrecision
+OpDecorate %460 RelaxedPrecision
+OpDecorate %461 RelaxedPrecision
+OpDecorate %467 RelaxedPrecision
+OpDecorate %470 RelaxedPrecision
+OpDecorate %473 RelaxedPrecision
+OpDecorate %476 RelaxedPrecision
+OpDecorate %477 RelaxedPrecision
+OpDecorate %483 RelaxedPrecision
+OpDecorate %486 RelaxedPrecision
+OpDecorate %489 RelaxedPrecision
+OpDecorate %492 RelaxedPrecision
+OpDecorate %493 RelaxedPrecision
+OpDecorate %499 RelaxedPrecision
+OpDecorate %502 RelaxedPrecision
+OpDecorate %505 RelaxedPrecision
+OpDecorate %508 RelaxedPrecision
+OpDecorate %509 RelaxedPrecision
+OpDecorate %515 RelaxedPrecision
+OpDecorate %518 RelaxedPrecision
+OpDecorate %521 RelaxedPrecision
 OpDecorate %523 RelaxedPrecision
+OpDecorate %524 RelaxedPrecision
 OpDecorate %525 RelaxedPrecision
 OpDecorate %526 RelaxedPrecision
 OpDecorate %527 RelaxedPrecision
 OpDecorate %528 RelaxedPrecision
 OpDecorate %529 RelaxedPrecision
-OpDecorate %530 RelaxedPrecision
-OpDecorate %531 RelaxedPrecision
 %float = OpTypeFloat 32
 %v4float = OpTypeVector %float 4
 %v2float = OpTypeVector %float 2
@@ -231,646 +229,644 @@
 %int_5 = OpConstant %int 5
 %int_4 = OpConstant %int 4
 %void = OpTypeVoid
-%105 = OpTypeFunction %void
-%109 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%103 = OpTypeFunction %void
+%107 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
 %float_0 = OpConstant %float 0
-%113 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
+%111 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
 %float_12 = OpConstant %float 12
 %_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-%123 = OpConstantComposite %v2float %float_0 %float_0
+%121 = OpConstantComposite %v2float %float_0 %float_0
 %int_2 = OpConstant %int 2
 %MatrixEffect_Stage1_c0_c0 = OpFunction %v4float None %26
 %29 = OpFunctionParameter %_ptr_Function_v4float
 %30 = OpFunctionParameter %_ptr_Function_v2float
 %31 = OpLabel
-%_output = OpVariable %_ptr_Function_v4float Function
 %_0_coords = OpVariable %_ptr_Function_v2float Function
-%_1_output = OpVariable %_ptr_Function_v4float Function
 %_2_inCoord = OpVariable %_ptr_Function_v2float Function
 %_3_subsetCoord = OpVariable %_ptr_Function_v2float Function
 %_4_clampedCoord = OpVariable %_ptr_Function_v2float Function
 %_5_textureColor = OpVariable %_ptr_Function_v4float Function
 %_6_snappedX = OpVariable %_ptr_Function_float Function
-%35 = OpAccessChain %_ptr_Uniform_mat3v3float %4 %int_3
-%37 = OpLoad %mat3v3float %35
-%38 = OpLoad %v2float %30
-%39 = OpCompositeExtract %float %38 0
-%40 = OpCompositeExtract %float %38 1
-%42 = OpCompositeConstruct %v3float %39 %40 %float_1
-%43 = OpMatrixTimesVector %v3float %37 %42
-%44 = OpVectorShuffle %v2float %43 %43 0 1
-OpStore %_0_coords %44
-%47 = OpLoad %v2float %_0_coords
-OpStore %_2_inCoord %47
-%48 = OpLoad %v2float %_2_inCoord
-%50 = OpAccessChain %_ptr_Uniform_v4float %4 %int_6
-%52 = OpLoad %v4float %50
-%53 = OpVectorShuffle %v2float %52 %52 0 1
-%54 = OpFMul %v2float %48 %53
-OpStore %_2_inCoord %54
-%56 = OpLoad %v2float %_2_inCoord
-%57 = OpCompositeExtract %float %56 0
-%58 = OpAccessChain %_ptr_Function_float %_3_subsetCoord %int_0
-OpStore %58 %57
-%61 = OpLoad %v2float %_2_inCoord
-%62 = OpCompositeExtract %float %61 1
-%63 = OpAccessChain %_ptr_Function_float %_3_subsetCoord %int_1
-OpStore %63 %62
-%66 = OpLoad %v2float %_3_subsetCoord
-OpStore %_4_clampedCoord %66
-%69 = OpLoad %22 %uTextureSampler_0_Stage1
-%70 = OpLoad %v2float %_4_clampedCoord
-%71 = OpAccessChain %_ptr_Uniform_v4float %4 %int_6
-%72 = OpLoad %v4float %71
-%73 = OpVectorShuffle %v2float %72 %72 2 3
-%74 = OpFMul %v2float %70 %73
-%68 = OpImageSampleImplicitLod %v4float %69 %74
-OpStore %_5_textureColor %68
-%77 = OpLoad %v2float %_2_inCoord
-%78 = OpCompositeExtract %float %77 0
-%80 = OpFAdd %float %78 %float_0_00100000005
-%76 = OpExtInst %float %1 Floor %80
-%82 = OpFAdd %float %76 %float_0_5
-OpStore %_6_snappedX %82
-%84 = OpLoad %float %_6_snappedX
-%86 = OpAccessChain %_ptr_Uniform_v4float %4 %int_5
-%87 = OpLoad %v4float %86
-%88 = OpCompositeExtract %float %87 0
-%89 = OpFOrdLessThan %bool %84 %88
-OpSelectionMerge %91 None
-OpBranchConditional %89 %91 %90
-%90 = OpLabel
-%92 = OpLoad %float %_6_snappedX
-%93 = OpAccessChain %_ptr_Uniform_v4float %4 %int_5
-%94 = OpLoad %v4float %93
-%95 = OpCompositeExtract %float %94 2
-%96 = OpFOrdGreaterThan %bool %92 %95
-OpBranch %91
-%91 = OpLabel
-%97 = OpPhi %bool %true %31 %96 %90
-OpSelectionMerge %99 None
-OpBranchConditional %97 %98 %99
-%98 = OpLabel
-%101 = OpAccessChain %_ptr_Uniform_v4float %4 %int_4
-%102 = OpLoad %v4float %101
-OpStore %_5_textureColor %102
-OpBranch %99
-%99 = OpLabel
-%103 = OpLoad %v4float %_5_textureColor
-OpReturnValue %103
+%34 = OpAccessChain %_ptr_Uniform_mat3v3float %4 %int_3
+%36 = OpLoad %mat3v3float %34
+%37 = OpLoad %v2float %30
+%38 = OpCompositeExtract %float %37 0
+%39 = OpCompositeExtract %float %37 1
+%41 = OpCompositeConstruct %v3float %38 %39 %float_1
+%42 = OpMatrixTimesVector %v3float %36 %41
+%43 = OpVectorShuffle %v2float %42 %42 0 1
+OpStore %_0_coords %43
+%45 = OpLoad %v2float %_0_coords
+OpStore %_2_inCoord %45
+%46 = OpLoad %v2float %_2_inCoord
+%48 = OpAccessChain %_ptr_Uniform_v4float %4 %int_6
+%50 = OpLoad %v4float %48
+%51 = OpVectorShuffle %v2float %50 %50 0 1
+%52 = OpFMul %v2float %46 %51
+OpStore %_2_inCoord %52
+%54 = OpLoad %v2float %_2_inCoord
+%55 = OpCompositeExtract %float %54 0
+%56 = OpAccessChain %_ptr_Function_float %_3_subsetCoord %int_0
+OpStore %56 %55
+%59 = OpLoad %v2float %_2_inCoord
+%60 = OpCompositeExtract %float %59 1
+%61 = OpAccessChain %_ptr_Function_float %_3_subsetCoord %int_1
+OpStore %61 %60
+%64 = OpLoad %v2float %_3_subsetCoord
+OpStore %_4_clampedCoord %64
+%67 = OpLoad %22 %uTextureSampler_0_Stage1
+%68 = OpLoad %v2float %_4_clampedCoord
+%69 = OpAccessChain %_ptr_Uniform_v4float %4 %int_6
+%70 = OpLoad %v4float %69
+%71 = OpVectorShuffle %v2float %70 %70 2 3
+%72 = OpFMul %v2float %68 %71
+%66 = OpImageSampleImplicitLod %v4float %67 %72
+OpStore %_5_textureColor %66
+%75 = OpLoad %v2float %_2_inCoord
+%76 = OpCompositeExtract %float %75 0
+%78 = OpFAdd %float %76 %float_0_00100000005
+%74 = OpExtInst %float %1 Floor %78
+%80 = OpFAdd %float %74 %float_0_5
+OpStore %_6_snappedX %80
+%82 = OpLoad %float %_6_snappedX
+%84 = OpAccessChain %_ptr_Uniform_v4float %4 %int_5
+%85 = OpLoad %v4float %84
+%86 = OpCompositeExtract %float %85 0
+%87 = OpFOrdLessThan %bool %82 %86
+OpSelectionMerge %89 None
+OpBranchConditional %87 %89 %88
+%88 = OpLabel
+%90 = OpLoad %float %_6_snappedX
+%91 = OpAccessChain %_ptr_Uniform_v4float %4 %int_5
+%92 = OpLoad %v4float %91
+%93 = OpCompositeExtract %float %92 2
+%94 = OpFOrdGreaterThan %bool %90 %93
+OpBranch %89
+%89 = OpLabel
+%95 = OpPhi %bool %true %31 %94 %88
+OpSelectionMerge %97 None
+OpBranchConditional %95 %96 %97
+%96 = OpLabel
+%99 = OpAccessChain %_ptr_Uniform_v4float %4 %int_4
+%100 = OpLoad %v4float %99
+OpStore %_5_textureColor %100
+OpBranch %97
+%97 = OpLabel
+%101 = OpLoad %v4float %_5_textureColor
+OpReturnValue %101
 OpFunctionEnd
-%main = OpFunction %void None %105
-%106 = OpLabel
+%main = OpFunction %void None %103
+%104 = OpLabel
 %outputColor_Stage0 = OpVariable %_ptr_Function_v4float Function
 %outputCoverage_Stage0 = OpVariable %_ptr_Function_v4float Function
 %output_Stage1 = OpVariable %_ptr_Function_v4float Function
 %_7_output = OpVariable %_ptr_Function_v4float Function
 %_8_coord = OpVariable %_ptr_Function_v2float Function
 %_9_coordSampled = OpVariable %_ptr_Function_v2float Function
-%127 = OpVariable %_ptr_Function_v4float Function
-%129 = OpVariable %_ptr_Function_v2float Function
-%144 = OpVariable %_ptr_Function_v4float Function
-%146 = OpVariable %_ptr_Function_v2float Function
-%160 = OpVariable %_ptr_Function_v4float Function
-%162 = OpVariable %_ptr_Function_v2float Function
-%176 = OpVariable %_ptr_Function_v4float Function
-%178 = OpVariable %_ptr_Function_v2float Function
-%192 = OpVariable %_ptr_Function_v4float Function
-%194 = OpVariable %_ptr_Function_v2float Function
-%208 = OpVariable %_ptr_Function_v4float Function
-%210 = OpVariable %_ptr_Function_v2float Function
-%224 = OpVariable %_ptr_Function_v4float Function
-%226 = OpVariable %_ptr_Function_v2float Function
-%240 = OpVariable %_ptr_Function_v4float Function
-%242 = OpVariable %_ptr_Function_v2float Function
-%256 = OpVariable %_ptr_Function_v4float Function
-%258 = OpVariable %_ptr_Function_v2float Function
-%272 = OpVariable %_ptr_Function_v4float Function
-%274 = OpVariable %_ptr_Function_v2float Function
-%288 = OpVariable %_ptr_Function_v4float Function
-%290 = OpVariable %_ptr_Function_v2float Function
-%304 = OpVariable %_ptr_Function_v4float Function
-%306 = OpVariable %_ptr_Function_v2float Function
-%320 = OpVariable %_ptr_Function_v4float Function
-%322 = OpVariable %_ptr_Function_v2float Function
-%336 = OpVariable %_ptr_Function_v4float Function
-%338 = OpVariable %_ptr_Function_v2float Function
-%352 = OpVariable %_ptr_Function_v4float Function
-%354 = OpVariable %_ptr_Function_v2float Function
-%368 = OpVariable %_ptr_Function_v4float Function
-%370 = OpVariable %_ptr_Function_v2float Function
-%384 = OpVariable %_ptr_Function_v4float Function
-%386 = OpVariable %_ptr_Function_v2float Function
-%400 = OpVariable %_ptr_Function_v4float Function
-%402 = OpVariable %_ptr_Function_v2float Function
-%416 = OpVariable %_ptr_Function_v4float Function
-%418 = OpVariable %_ptr_Function_v2float Function
-%432 = OpVariable %_ptr_Function_v4float Function
-%434 = OpVariable %_ptr_Function_v2float Function
-%448 = OpVariable %_ptr_Function_v4float Function
-%450 = OpVariable %_ptr_Function_v2float Function
-%464 = OpVariable %_ptr_Function_v4float Function
-%466 = OpVariable %_ptr_Function_v2float Function
-%480 = OpVariable %_ptr_Function_v4float Function
-%482 = OpVariable %_ptr_Function_v2float Function
-%496 = OpVariable %_ptr_Function_v4float Function
-%498 = OpVariable %_ptr_Function_v2float Function
-%512 = OpVariable %_ptr_Function_v4float Function
-%514 = OpVariable %_ptr_Function_v2float Function
-OpStore %outputColor_Stage0 %109
-OpStore %outputCoverage_Stage0 %109
-OpStore %_7_output %113
-%115 = OpLoad %v2float %vLocalCoord_Stage0
-%117 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
-%119 = OpLoad %v2float %117
-%120 = OpVectorTimesScalar %v2float %119 %float_12
-%121 = OpFSub %v2float %115 %120
-OpStore %_8_coord %121
-OpStore %_9_coordSampled %123
-%124 = OpLoad %v2float %_8_coord
-OpStore %_9_coordSampled %124
-%125 = OpLoad %v4float %_7_output
-%126 = OpLoad %v4float %outputColor_Stage0
+%125 = OpVariable %_ptr_Function_v4float Function
+%127 = OpVariable %_ptr_Function_v2float Function
+%142 = OpVariable %_ptr_Function_v4float Function
+%144 = OpVariable %_ptr_Function_v2float Function
+%158 = OpVariable %_ptr_Function_v4float Function
+%160 = OpVariable %_ptr_Function_v2float Function
+%174 = OpVariable %_ptr_Function_v4float Function
+%176 = OpVariable %_ptr_Function_v2float Function
+%190 = OpVariable %_ptr_Function_v4float Function
+%192 = OpVariable %_ptr_Function_v2float Function
+%206 = OpVariable %_ptr_Function_v4float Function
+%208 = OpVariable %_ptr_Function_v2float Function
+%222 = OpVariable %_ptr_Function_v4float Function
+%224 = OpVariable %_ptr_Function_v2float Function
+%238 = OpVariable %_ptr_Function_v4float Function
+%240 = OpVariable %_ptr_Function_v2float Function
+%254 = OpVariable %_ptr_Function_v4float Function
+%256 = OpVariable %_ptr_Function_v2float Function
+%270 = OpVariable %_ptr_Function_v4float Function
+%272 = OpVariable %_ptr_Function_v2float Function
+%286 = OpVariable %_ptr_Function_v4float Function
+%288 = OpVariable %_ptr_Function_v2float Function
+%302 = OpVariable %_ptr_Function_v4float Function
+%304 = OpVariable %_ptr_Function_v2float Function
+%318 = OpVariable %_ptr_Function_v4float Function
+%320 = OpVariable %_ptr_Function_v2float Function
+%334 = OpVariable %_ptr_Function_v4float Function
+%336 = OpVariable %_ptr_Function_v2float Function
+%350 = OpVariable %_ptr_Function_v4float Function
+%352 = OpVariable %_ptr_Function_v2float Function
+%366 = OpVariable %_ptr_Function_v4float Function
+%368 = OpVariable %_ptr_Function_v2float Function
+%382 = OpVariable %_ptr_Function_v4float Function
+%384 = OpVariable %_ptr_Function_v2float Function
+%398 = OpVariable %_ptr_Function_v4float Function
+%400 = OpVariable %_ptr_Function_v2float Function
+%414 = OpVariable %_ptr_Function_v4float Function
+%416 = OpVariable %_ptr_Function_v2float Function
+%430 = OpVariable %_ptr_Function_v4float Function
+%432 = OpVariable %_ptr_Function_v2float Function
+%446 = OpVariable %_ptr_Function_v4float Function
+%448 = OpVariable %_ptr_Function_v2float Function
+%462 = OpVariable %_ptr_Function_v4float Function
+%464 = OpVariable %_ptr_Function_v2float Function
+%478 = OpVariable %_ptr_Function_v4float Function
+%480 = OpVariable %_ptr_Function_v2float Function
+%494 = OpVariable %_ptr_Function_v4float Function
+%496 = OpVariable %_ptr_Function_v2float Function
+%510 = OpVariable %_ptr_Function_v4float Function
+%512 = OpVariable %_ptr_Function_v2float Function
+OpStore %outputColor_Stage0 %107
+OpStore %outputCoverage_Stage0 %107
+OpStore %_7_output %111
+%113 = OpLoad %v2float %vLocalCoord_Stage0
+%115 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
+%117 = OpLoad %v2float %115
+%118 = OpVectorTimesScalar %v2float %117 %float_12
+%119 = OpFSub %v2float %113 %118
+OpStore %_8_coord %119
+OpStore %_9_coordSampled %121
+%122 = OpLoad %v2float %_8_coord
+OpStore %_9_coordSampled %122
+%123 = OpLoad %v4float %_7_output
+%124 = OpLoad %v4float %outputColor_Stage0
+OpStore %125 %124
+%126 = OpLoad %v2float %_9_coordSampled
 OpStore %127 %126
-%128 = OpLoad %v2float %_9_coordSampled
-OpStore %129 %128
-%130 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %127 %129
-%132 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_0
-%133 = OpLoad %v4float %132
-%134 = OpCompositeExtract %float %133 0
-%135 = OpVectorTimesScalar %v4float %130 %134
-%136 = OpFAdd %v4float %125 %135
-OpStore %_7_output %136
-%137 = OpLoad %v2float %_8_coord
-%138 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
-%139 = OpLoad %v2float %138
-%140 = OpFAdd %v2float %137 %139
-OpStore %_8_coord %140
-%141 = OpLoad %v2float %_8_coord
-OpStore %_9_coordSampled %141
-%142 = OpLoad %v4float %_7_output
-%143 = OpLoad %v4float %outputColor_Stage0
+%128 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %125 %127
+%130 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_0
+%131 = OpLoad %v4float %130
+%132 = OpCompositeExtract %float %131 0
+%133 = OpVectorTimesScalar %v4float %128 %132
+%134 = OpFAdd %v4float %123 %133
+OpStore %_7_output %134
+%135 = OpLoad %v2float %_8_coord
+%136 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
+%137 = OpLoad %v2float %136
+%138 = OpFAdd %v2float %135 %137
+OpStore %_8_coord %138
+%139 = OpLoad %v2float %_8_coord
+OpStore %_9_coordSampled %139
+%140 = OpLoad %v4float %_7_output
+%141 = OpLoad %v4float %outputColor_Stage0
+OpStore %142 %141
+%143 = OpLoad %v2float %_9_coordSampled
 OpStore %144 %143
-%145 = OpLoad %v2float %_9_coordSampled
-OpStore %146 %145
-%147 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %144 %146
-%148 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_0
-%149 = OpLoad %v4float %148
-%150 = OpCompositeExtract %float %149 1
-%151 = OpVectorTimesScalar %v4float %147 %150
-%152 = OpFAdd %v4float %142 %151
-OpStore %_7_output %152
-%153 = OpLoad %v2float %_8_coord
-%154 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
-%155 = OpLoad %v2float %154
-%156 = OpFAdd %v2float %153 %155
-OpStore %_8_coord %156
-%157 = OpLoad %v2float %_8_coord
-OpStore %_9_coordSampled %157
-%158 = OpLoad %v4float %_7_output
-%159 = OpLoad %v4float %outputColor_Stage0
+%145 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %142 %144
+%146 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_0
+%147 = OpLoad %v4float %146
+%148 = OpCompositeExtract %float %147 1
+%149 = OpVectorTimesScalar %v4float %145 %148
+%150 = OpFAdd %v4float %140 %149
+OpStore %_7_output %150
+%151 = OpLoad %v2float %_8_coord
+%152 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
+%153 = OpLoad %v2float %152
+%154 = OpFAdd %v2float %151 %153
+OpStore %_8_coord %154
+%155 = OpLoad %v2float %_8_coord
+OpStore %_9_coordSampled %155
+%156 = OpLoad %v4float %_7_output
+%157 = OpLoad %v4float %outputColor_Stage0
+OpStore %158 %157
+%159 = OpLoad %v2float %_9_coordSampled
 OpStore %160 %159
-%161 = OpLoad %v2float %_9_coordSampled
-OpStore %162 %161
-%163 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %160 %162
-%164 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_0
-%165 = OpLoad %v4float %164
-%166 = OpCompositeExtract %float %165 2
-%167 = OpVectorTimesScalar %v4float %163 %166
-%168 = OpFAdd %v4float %158 %167
-OpStore %_7_output %168
-%169 = OpLoad %v2float %_8_coord
-%170 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
-%171 = OpLoad %v2float %170
-%172 = OpFAdd %v2float %169 %171
-OpStore %_8_coord %172
-%173 = OpLoad %v2float %_8_coord
-OpStore %_9_coordSampled %173
-%174 = OpLoad %v4float %_7_output
-%175 = OpLoad %v4float %outputColor_Stage0
+%161 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %158 %160
+%162 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_0
+%163 = OpLoad %v4float %162
+%164 = OpCompositeExtract %float %163 2
+%165 = OpVectorTimesScalar %v4float %161 %164
+%166 = OpFAdd %v4float %156 %165
+OpStore %_7_output %166
+%167 = OpLoad %v2float %_8_coord
+%168 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
+%169 = OpLoad %v2float %168
+%170 = OpFAdd %v2float %167 %169
+OpStore %_8_coord %170
+%171 = OpLoad %v2float %_8_coord
+OpStore %_9_coordSampled %171
+%172 = OpLoad %v4float %_7_output
+%173 = OpLoad %v4float %outputColor_Stage0
+OpStore %174 %173
+%175 = OpLoad %v2float %_9_coordSampled
 OpStore %176 %175
-%177 = OpLoad %v2float %_9_coordSampled
-OpStore %178 %177
-%179 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %176 %178
-%180 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_0
-%181 = OpLoad %v4float %180
-%182 = OpCompositeExtract %float %181 3
-%183 = OpVectorTimesScalar %v4float %179 %182
-%184 = OpFAdd %v4float %174 %183
-OpStore %_7_output %184
-%185 = OpLoad %v2float %_8_coord
-%186 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
-%187 = OpLoad %v2float %186
-%188 = OpFAdd %v2float %185 %187
-OpStore %_8_coord %188
-%189 = OpLoad %v2float %_8_coord
-OpStore %_9_coordSampled %189
-%190 = OpLoad %v4float %_7_output
-%191 = OpLoad %v4float %outputColor_Stage0
+%177 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %174 %176
+%178 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_0
+%179 = OpLoad %v4float %178
+%180 = OpCompositeExtract %float %179 3
+%181 = OpVectorTimesScalar %v4float %177 %180
+%182 = OpFAdd %v4float %172 %181
+OpStore %_7_output %182
+%183 = OpLoad %v2float %_8_coord
+%184 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
+%185 = OpLoad %v2float %184
+%186 = OpFAdd %v2float %183 %185
+OpStore %_8_coord %186
+%187 = OpLoad %v2float %_8_coord
+OpStore %_9_coordSampled %187
+%188 = OpLoad %v4float %_7_output
+%189 = OpLoad %v4float %outputColor_Stage0
+OpStore %190 %189
+%191 = OpLoad %v2float %_9_coordSampled
 OpStore %192 %191
-%193 = OpLoad %v2float %_9_coordSampled
-OpStore %194 %193
-%195 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %192 %194
-%196 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_1
-%197 = OpLoad %v4float %196
-%198 = OpCompositeExtract %float %197 0
-%199 = OpVectorTimesScalar %v4float %195 %198
-%200 = OpFAdd %v4float %190 %199
-OpStore %_7_output %200
-%201 = OpLoad %v2float %_8_coord
-%202 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
-%203 = OpLoad %v2float %202
-%204 = OpFAdd %v2float %201 %203
-OpStore %_8_coord %204
-%205 = OpLoad %v2float %_8_coord
-OpStore %_9_coordSampled %205
-%206 = OpLoad %v4float %_7_output
-%207 = OpLoad %v4float %outputColor_Stage0
+%193 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %190 %192
+%194 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_1
+%195 = OpLoad %v4float %194
+%196 = OpCompositeExtract %float %195 0
+%197 = OpVectorTimesScalar %v4float %193 %196
+%198 = OpFAdd %v4float %188 %197
+OpStore %_7_output %198
+%199 = OpLoad %v2float %_8_coord
+%200 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
+%201 = OpLoad %v2float %200
+%202 = OpFAdd %v2float %199 %201
+OpStore %_8_coord %202
+%203 = OpLoad %v2float %_8_coord
+OpStore %_9_coordSampled %203
+%204 = OpLoad %v4float %_7_output
+%205 = OpLoad %v4float %outputColor_Stage0
+OpStore %206 %205
+%207 = OpLoad %v2float %_9_coordSampled
 OpStore %208 %207
-%209 = OpLoad %v2float %_9_coordSampled
-OpStore %210 %209
-%211 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %208 %210
-%212 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_1
-%213 = OpLoad %v4float %212
-%214 = OpCompositeExtract %float %213 1
-%215 = OpVectorTimesScalar %v4float %211 %214
-%216 = OpFAdd %v4float %206 %215
-OpStore %_7_output %216
-%217 = OpLoad %v2float %_8_coord
-%218 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
-%219 = OpLoad %v2float %218
-%220 = OpFAdd %v2float %217 %219
-OpStore %_8_coord %220
-%221 = OpLoad %v2float %_8_coord
-OpStore %_9_coordSampled %221
-%222 = OpLoad %v4float %_7_output
-%223 = OpLoad %v4float %outputColor_Stage0
+%209 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %206 %208
+%210 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_1
+%211 = OpLoad %v4float %210
+%212 = OpCompositeExtract %float %211 1
+%213 = OpVectorTimesScalar %v4float %209 %212
+%214 = OpFAdd %v4float %204 %213
+OpStore %_7_output %214
+%215 = OpLoad %v2float %_8_coord
+%216 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
+%217 = OpLoad %v2float %216
+%218 = OpFAdd %v2float %215 %217
+OpStore %_8_coord %218
+%219 = OpLoad %v2float %_8_coord
+OpStore %_9_coordSampled %219
+%220 = OpLoad %v4float %_7_output
+%221 = OpLoad %v4float %outputColor_Stage0
+OpStore %222 %221
+%223 = OpLoad %v2float %_9_coordSampled
 OpStore %224 %223
-%225 = OpLoad %v2float %_9_coordSampled
-OpStore %226 %225
-%227 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %224 %226
-%228 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_1
-%229 = OpLoad %v4float %228
-%230 = OpCompositeExtract %float %229 2
-%231 = OpVectorTimesScalar %v4float %227 %230
-%232 = OpFAdd %v4float %222 %231
-OpStore %_7_output %232
-%233 = OpLoad %v2float %_8_coord
-%234 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
-%235 = OpLoad %v2float %234
-%236 = OpFAdd %v2float %233 %235
-OpStore %_8_coord %236
-%237 = OpLoad %v2float %_8_coord
-OpStore %_9_coordSampled %237
-%238 = OpLoad %v4float %_7_output
-%239 = OpLoad %v4float %outputColor_Stage0
+%225 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %222 %224
+%226 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_1
+%227 = OpLoad %v4float %226
+%228 = OpCompositeExtract %float %227 2
+%229 = OpVectorTimesScalar %v4float %225 %228
+%230 = OpFAdd %v4float %220 %229
+OpStore %_7_output %230
+%231 = OpLoad %v2float %_8_coord
+%232 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
+%233 = OpLoad %v2float %232
+%234 = OpFAdd %v2float %231 %233
+OpStore %_8_coord %234
+%235 = OpLoad %v2float %_8_coord
+OpStore %_9_coordSampled %235
+%236 = OpLoad %v4float %_7_output
+%237 = OpLoad %v4float %outputColor_Stage0
+OpStore %238 %237
+%239 = OpLoad %v2float %_9_coordSampled
 OpStore %240 %239
-%241 = OpLoad %v2float %_9_coordSampled
-OpStore %242 %241
-%243 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %240 %242
-%244 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_1
-%245 = OpLoad %v4float %244
-%246 = OpCompositeExtract %float %245 3
-%247 = OpVectorTimesScalar %v4float %243 %246
-%248 = OpFAdd %v4float %238 %247
-OpStore %_7_output %248
-%249 = OpLoad %v2float %_8_coord
-%250 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
-%251 = OpLoad %v2float %250
-%252 = OpFAdd %v2float %249 %251
-OpStore %_8_coord %252
-%253 = OpLoad %v2float %_8_coord
-OpStore %_9_coordSampled %253
-%254 = OpLoad %v4float %_7_output
-%255 = OpLoad %v4float %outputColor_Stage0
+%241 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %238 %240
+%242 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_1
+%243 = OpLoad %v4float %242
+%244 = OpCompositeExtract %float %243 3
+%245 = OpVectorTimesScalar %v4float %241 %244
+%246 = OpFAdd %v4float %236 %245
+OpStore %_7_output %246
+%247 = OpLoad %v2float %_8_coord
+%248 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
+%249 = OpLoad %v2float %248
+%250 = OpFAdd %v2float %247 %249
+OpStore %_8_coord %250
+%251 = OpLoad %v2float %_8_coord
+OpStore %_9_coordSampled %251
+%252 = OpLoad %v4float %_7_output
+%253 = OpLoad %v4float %outputColor_Stage0
+OpStore %254 %253
+%255 = OpLoad %v2float %_9_coordSampled
 OpStore %256 %255
-%257 = OpLoad %v2float %_9_coordSampled
-OpStore %258 %257
-%259 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %256 %258
-%260 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_2
-%261 = OpLoad %v4float %260
-%262 = OpCompositeExtract %float %261 0
-%263 = OpVectorTimesScalar %v4float %259 %262
-%264 = OpFAdd %v4float %254 %263
-OpStore %_7_output %264
-%265 = OpLoad %v2float %_8_coord
-%266 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
-%267 = OpLoad %v2float %266
-%268 = OpFAdd %v2float %265 %267
-OpStore %_8_coord %268
-%269 = OpLoad %v2float %_8_coord
-OpStore %_9_coordSampled %269
-%270 = OpLoad %v4float %_7_output
-%271 = OpLoad %v4float %outputColor_Stage0
+%257 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %254 %256
+%258 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_2
+%259 = OpLoad %v4float %258
+%260 = OpCompositeExtract %float %259 0
+%261 = OpVectorTimesScalar %v4float %257 %260
+%262 = OpFAdd %v4float %252 %261
+OpStore %_7_output %262
+%263 = OpLoad %v2float %_8_coord
+%264 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
+%265 = OpLoad %v2float %264
+%266 = OpFAdd %v2float %263 %265
+OpStore %_8_coord %266
+%267 = OpLoad %v2float %_8_coord
+OpStore %_9_coordSampled %267
+%268 = OpLoad %v4float %_7_output
+%269 = OpLoad %v4float %outputColor_Stage0
+OpStore %270 %269
+%271 = OpLoad %v2float %_9_coordSampled
 OpStore %272 %271
-%273 = OpLoad %v2float %_9_coordSampled
-OpStore %274 %273
-%275 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %272 %274
-%276 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_2
-%277 = OpLoad %v4float %276
-%278 = OpCompositeExtract %float %277 1
-%279 = OpVectorTimesScalar %v4float %275 %278
-%280 = OpFAdd %v4float %270 %279
-OpStore %_7_output %280
-%281 = OpLoad %v2float %_8_coord
-%282 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
-%283 = OpLoad %v2float %282
-%284 = OpFAdd %v2float %281 %283
-OpStore %_8_coord %284
-%285 = OpLoad %v2float %_8_coord
-OpStore %_9_coordSampled %285
-%286 = OpLoad %v4float %_7_output
-%287 = OpLoad %v4float %outputColor_Stage0
+%273 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %270 %272
+%274 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_2
+%275 = OpLoad %v4float %274
+%276 = OpCompositeExtract %float %275 1
+%277 = OpVectorTimesScalar %v4float %273 %276
+%278 = OpFAdd %v4float %268 %277
+OpStore %_7_output %278
+%279 = OpLoad %v2float %_8_coord
+%280 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
+%281 = OpLoad %v2float %280
+%282 = OpFAdd %v2float %279 %281
+OpStore %_8_coord %282
+%283 = OpLoad %v2float %_8_coord
+OpStore %_9_coordSampled %283
+%284 = OpLoad %v4float %_7_output
+%285 = OpLoad %v4float %outputColor_Stage0
+OpStore %286 %285
+%287 = OpLoad %v2float %_9_coordSampled
 OpStore %288 %287
-%289 = OpLoad %v2float %_9_coordSampled
-OpStore %290 %289
-%291 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %288 %290
-%292 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_2
-%293 = OpLoad %v4float %292
-%294 = OpCompositeExtract %float %293 2
-%295 = OpVectorTimesScalar %v4float %291 %294
-%296 = OpFAdd %v4float %286 %295
-OpStore %_7_output %296
-%297 = OpLoad %v2float %_8_coord
-%298 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
-%299 = OpLoad %v2float %298
-%300 = OpFAdd %v2float %297 %299
-OpStore %_8_coord %300
-%301 = OpLoad %v2float %_8_coord
-OpStore %_9_coordSampled %301
-%302 = OpLoad %v4float %_7_output
-%303 = OpLoad %v4float %outputColor_Stage0
+%289 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %286 %288
+%290 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_2
+%291 = OpLoad %v4float %290
+%292 = OpCompositeExtract %float %291 2
+%293 = OpVectorTimesScalar %v4float %289 %292
+%294 = OpFAdd %v4float %284 %293
+OpStore %_7_output %294
+%295 = OpLoad %v2float %_8_coord
+%296 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
+%297 = OpLoad %v2float %296
+%298 = OpFAdd %v2float %295 %297
+OpStore %_8_coord %298
+%299 = OpLoad %v2float %_8_coord
+OpStore %_9_coordSampled %299
+%300 = OpLoad %v4float %_7_output
+%301 = OpLoad %v4float %outputColor_Stage0
+OpStore %302 %301
+%303 = OpLoad %v2float %_9_coordSampled
 OpStore %304 %303
-%305 = OpLoad %v2float %_9_coordSampled
-OpStore %306 %305
-%307 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %304 %306
-%308 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_2
-%309 = OpLoad %v4float %308
-%310 = OpCompositeExtract %float %309 3
-%311 = OpVectorTimesScalar %v4float %307 %310
-%312 = OpFAdd %v4float %302 %311
-OpStore %_7_output %312
-%313 = OpLoad %v2float %_8_coord
-%314 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
-%315 = OpLoad %v2float %314
-%316 = OpFAdd %v2float %313 %315
-OpStore %_8_coord %316
-%317 = OpLoad %v2float %_8_coord
-OpStore %_9_coordSampled %317
-%318 = OpLoad %v4float %_7_output
-%319 = OpLoad %v4float %outputColor_Stage0
+%305 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %302 %304
+%306 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_2
+%307 = OpLoad %v4float %306
+%308 = OpCompositeExtract %float %307 3
+%309 = OpVectorTimesScalar %v4float %305 %308
+%310 = OpFAdd %v4float %300 %309
+OpStore %_7_output %310
+%311 = OpLoad %v2float %_8_coord
+%312 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
+%313 = OpLoad %v2float %312
+%314 = OpFAdd %v2float %311 %313
+OpStore %_8_coord %314
+%315 = OpLoad %v2float %_8_coord
+OpStore %_9_coordSampled %315
+%316 = OpLoad %v4float %_7_output
+%317 = OpLoad %v4float %outputColor_Stage0
+OpStore %318 %317
+%319 = OpLoad %v2float %_9_coordSampled
 OpStore %320 %319
-%321 = OpLoad %v2float %_9_coordSampled
-OpStore %322 %321
-%323 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %320 %322
-%324 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_3
-%325 = OpLoad %v4float %324
-%326 = OpCompositeExtract %float %325 0
-%327 = OpVectorTimesScalar %v4float %323 %326
-%328 = OpFAdd %v4float %318 %327
-OpStore %_7_output %328
-%329 = OpLoad %v2float %_8_coord
-%330 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
-%331 = OpLoad %v2float %330
-%332 = OpFAdd %v2float %329 %331
-OpStore %_8_coord %332
-%333 = OpLoad %v2float %_8_coord
-OpStore %_9_coordSampled %333
-%334 = OpLoad %v4float %_7_output
-%335 = OpLoad %v4float %outputColor_Stage0
+%321 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %318 %320
+%322 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_3
+%323 = OpLoad %v4float %322
+%324 = OpCompositeExtract %float %323 0
+%325 = OpVectorTimesScalar %v4float %321 %324
+%326 = OpFAdd %v4float %316 %325
+OpStore %_7_output %326
+%327 = OpLoad %v2float %_8_coord
+%328 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
+%329 = OpLoad %v2float %328
+%330 = OpFAdd %v2float %327 %329
+OpStore %_8_coord %330
+%331 = OpLoad %v2float %_8_coord
+OpStore %_9_coordSampled %331
+%332 = OpLoad %v4float %_7_output
+%333 = OpLoad %v4float %outputColor_Stage0
+OpStore %334 %333
+%335 = OpLoad %v2float %_9_coordSampled
 OpStore %336 %335
-%337 = OpLoad %v2float %_9_coordSampled
-OpStore %338 %337
-%339 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %336 %338
-%340 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_3
-%341 = OpLoad %v4float %340
-%342 = OpCompositeExtract %float %341 1
-%343 = OpVectorTimesScalar %v4float %339 %342
-%344 = OpFAdd %v4float %334 %343
-OpStore %_7_output %344
-%345 = OpLoad %v2float %_8_coord
-%346 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
-%347 = OpLoad %v2float %346
-%348 = OpFAdd %v2float %345 %347
-OpStore %_8_coord %348
-%349 = OpLoad %v2float %_8_coord
-OpStore %_9_coordSampled %349
-%350 = OpLoad %v4float %_7_output
-%351 = OpLoad %v4float %outputColor_Stage0
+%337 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %334 %336
+%338 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_3
+%339 = OpLoad %v4float %338
+%340 = OpCompositeExtract %float %339 1
+%341 = OpVectorTimesScalar %v4float %337 %340
+%342 = OpFAdd %v4float %332 %341
+OpStore %_7_output %342
+%343 = OpLoad %v2float %_8_coord
+%344 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
+%345 = OpLoad %v2float %344
+%346 = OpFAdd %v2float %343 %345
+OpStore %_8_coord %346
+%347 = OpLoad %v2float %_8_coord
+OpStore %_9_coordSampled %347
+%348 = OpLoad %v4float %_7_output
+%349 = OpLoad %v4float %outputColor_Stage0
+OpStore %350 %349
+%351 = OpLoad %v2float %_9_coordSampled
 OpStore %352 %351
-%353 = OpLoad %v2float %_9_coordSampled
-OpStore %354 %353
-%355 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %352 %354
-%356 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_3
-%357 = OpLoad %v4float %356
-%358 = OpCompositeExtract %float %357 2
-%359 = OpVectorTimesScalar %v4float %355 %358
-%360 = OpFAdd %v4float %350 %359
-OpStore %_7_output %360
-%361 = OpLoad %v2float %_8_coord
-%362 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
-%363 = OpLoad %v2float %362
-%364 = OpFAdd %v2float %361 %363
-OpStore %_8_coord %364
-%365 = OpLoad %v2float %_8_coord
-OpStore %_9_coordSampled %365
-%366 = OpLoad %v4float %_7_output
-%367 = OpLoad %v4float %outputColor_Stage0
+%353 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %350 %352
+%354 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_3
+%355 = OpLoad %v4float %354
+%356 = OpCompositeExtract %float %355 2
+%357 = OpVectorTimesScalar %v4float %353 %356
+%358 = OpFAdd %v4float %348 %357
+OpStore %_7_output %358
+%359 = OpLoad %v2float %_8_coord
+%360 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
+%361 = OpLoad %v2float %360
+%362 = OpFAdd %v2float %359 %361
+OpStore %_8_coord %362
+%363 = OpLoad %v2float %_8_coord
+OpStore %_9_coordSampled %363
+%364 = OpLoad %v4float %_7_output
+%365 = OpLoad %v4float %outputColor_Stage0
+OpStore %366 %365
+%367 = OpLoad %v2float %_9_coordSampled
 OpStore %368 %367
-%369 = OpLoad %v2float %_9_coordSampled
-OpStore %370 %369
-%371 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %368 %370
-%372 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_3
-%373 = OpLoad %v4float %372
-%374 = OpCompositeExtract %float %373 3
-%375 = OpVectorTimesScalar %v4float %371 %374
-%376 = OpFAdd %v4float %366 %375
-OpStore %_7_output %376
-%377 = OpLoad %v2float %_8_coord
-%378 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
-%379 = OpLoad %v2float %378
-%380 = OpFAdd %v2float %377 %379
-OpStore %_8_coord %380
-%381 = OpLoad %v2float %_8_coord
-OpStore %_9_coordSampled %381
-%382 = OpLoad %v4float %_7_output
-%383 = OpLoad %v4float %outputColor_Stage0
+%369 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %366 %368
+%370 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_3
+%371 = OpLoad %v4float %370
+%372 = OpCompositeExtract %float %371 3
+%373 = OpVectorTimesScalar %v4float %369 %372
+%374 = OpFAdd %v4float %364 %373
+OpStore %_7_output %374
+%375 = OpLoad %v2float %_8_coord
+%376 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
+%377 = OpLoad %v2float %376
+%378 = OpFAdd %v2float %375 %377
+OpStore %_8_coord %378
+%379 = OpLoad %v2float %_8_coord
+OpStore %_9_coordSampled %379
+%380 = OpLoad %v4float %_7_output
+%381 = OpLoad %v4float %outputColor_Stage0
+OpStore %382 %381
+%383 = OpLoad %v2float %_9_coordSampled
 OpStore %384 %383
-%385 = OpLoad %v2float %_9_coordSampled
-OpStore %386 %385
-%387 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %384 %386
-%388 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_4
-%389 = OpLoad %v4float %388
-%390 = OpCompositeExtract %float %389 0
-%391 = OpVectorTimesScalar %v4float %387 %390
-%392 = OpFAdd %v4float %382 %391
-OpStore %_7_output %392
-%393 = OpLoad %v2float %_8_coord
-%394 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
-%395 = OpLoad %v2float %394
-%396 = OpFAdd %v2float %393 %395
-OpStore %_8_coord %396
-%397 = OpLoad %v2float %_8_coord
-OpStore %_9_coordSampled %397
-%398 = OpLoad %v4float %_7_output
-%399 = OpLoad %v4float %outputColor_Stage0
+%385 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %382 %384
+%386 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_4
+%387 = OpLoad %v4float %386
+%388 = OpCompositeExtract %float %387 0
+%389 = OpVectorTimesScalar %v4float %385 %388
+%390 = OpFAdd %v4float %380 %389
+OpStore %_7_output %390
+%391 = OpLoad %v2float %_8_coord
+%392 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
+%393 = OpLoad %v2float %392
+%394 = OpFAdd %v2float %391 %393
+OpStore %_8_coord %394
+%395 = OpLoad %v2float %_8_coord
+OpStore %_9_coordSampled %395
+%396 = OpLoad %v4float %_7_output
+%397 = OpLoad %v4float %outputColor_Stage0
+OpStore %398 %397
+%399 = OpLoad %v2float %_9_coordSampled
 OpStore %400 %399
-%401 = OpLoad %v2float %_9_coordSampled
-OpStore %402 %401
-%403 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %400 %402
-%404 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_4
-%405 = OpLoad %v4float %404
-%406 = OpCompositeExtract %float %405 1
-%407 = OpVectorTimesScalar %v4float %403 %406
-%408 = OpFAdd %v4float %398 %407
-OpStore %_7_output %408
-%409 = OpLoad %v2float %_8_coord
-%410 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
-%411 = OpLoad %v2float %410
-%412 = OpFAdd %v2float %409 %411
-OpStore %_8_coord %412
-%413 = OpLoad %v2float %_8_coord
-OpStore %_9_coordSampled %413
-%414 = OpLoad %v4float %_7_output
-%415 = OpLoad %v4float %outputColor_Stage0
+%401 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %398 %400
+%402 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_4
+%403 = OpLoad %v4float %402
+%404 = OpCompositeExtract %float %403 1
+%405 = OpVectorTimesScalar %v4float %401 %404
+%406 = OpFAdd %v4float %396 %405
+OpStore %_7_output %406
+%407 = OpLoad %v2float %_8_coord
+%408 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
+%409 = OpLoad %v2float %408
+%410 = OpFAdd %v2float %407 %409
+OpStore %_8_coord %410
+%411 = OpLoad %v2float %_8_coord
+OpStore %_9_coordSampled %411
+%412 = OpLoad %v4float %_7_output
+%413 = OpLoad %v4float %outputColor_Stage0
+OpStore %414 %413
+%415 = OpLoad %v2float %_9_coordSampled
 OpStore %416 %415
-%417 = OpLoad %v2float %_9_coordSampled
-OpStore %418 %417
-%419 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %416 %418
-%420 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_4
-%421 = OpLoad %v4float %420
-%422 = OpCompositeExtract %float %421 2
-%423 = OpVectorTimesScalar %v4float %419 %422
-%424 = OpFAdd %v4float %414 %423
-OpStore %_7_output %424
-%425 = OpLoad %v2float %_8_coord
-%426 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
-%427 = OpLoad %v2float %426
-%428 = OpFAdd %v2float %425 %427
-OpStore %_8_coord %428
-%429 = OpLoad %v2float %_8_coord
-OpStore %_9_coordSampled %429
-%430 = OpLoad %v4float %_7_output
-%431 = OpLoad %v4float %outputColor_Stage0
+%417 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %414 %416
+%418 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_4
+%419 = OpLoad %v4float %418
+%420 = OpCompositeExtract %float %419 2
+%421 = OpVectorTimesScalar %v4float %417 %420
+%422 = OpFAdd %v4float %412 %421
+OpStore %_7_output %422
+%423 = OpLoad %v2float %_8_coord
+%424 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
+%425 = OpLoad %v2float %424
+%426 = OpFAdd %v2float %423 %425
+OpStore %_8_coord %426
+%427 = OpLoad %v2float %_8_coord
+OpStore %_9_coordSampled %427
+%428 = OpLoad %v4float %_7_output
+%429 = OpLoad %v4float %outputColor_Stage0
+OpStore %430 %429
+%431 = OpLoad %v2float %_9_coordSampled
 OpStore %432 %431
-%433 = OpLoad %v2float %_9_coordSampled
-OpStore %434 %433
-%435 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %432 %434
-%436 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_4
-%437 = OpLoad %v4float %436
-%438 = OpCompositeExtract %float %437 3
-%439 = OpVectorTimesScalar %v4float %435 %438
-%440 = OpFAdd %v4float %430 %439
-OpStore %_7_output %440
-%441 = OpLoad %v2float %_8_coord
-%442 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
-%443 = OpLoad %v2float %442
-%444 = OpFAdd %v2float %441 %443
-OpStore %_8_coord %444
-%445 = OpLoad %v2float %_8_coord
-OpStore %_9_coordSampled %445
-%446 = OpLoad %v4float %_7_output
-%447 = OpLoad %v4float %outputColor_Stage0
+%433 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %430 %432
+%434 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_4
+%435 = OpLoad %v4float %434
+%436 = OpCompositeExtract %float %435 3
+%437 = OpVectorTimesScalar %v4float %433 %436
+%438 = OpFAdd %v4float %428 %437
+OpStore %_7_output %438
+%439 = OpLoad %v2float %_8_coord
+%440 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
+%441 = OpLoad %v2float %440
+%442 = OpFAdd %v2float %439 %441
+OpStore %_8_coord %442
+%443 = OpLoad %v2float %_8_coord
+OpStore %_9_coordSampled %443
+%444 = OpLoad %v4float %_7_output
+%445 = OpLoad %v4float %outputColor_Stage0
+OpStore %446 %445
+%447 = OpLoad %v2float %_9_coordSampled
 OpStore %448 %447
-%449 = OpLoad %v2float %_9_coordSampled
-OpStore %450 %449
-%451 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %448 %450
-%452 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_5
-%453 = OpLoad %v4float %452
-%454 = OpCompositeExtract %float %453 0
-%455 = OpVectorTimesScalar %v4float %451 %454
-%456 = OpFAdd %v4float %446 %455
-OpStore %_7_output %456
-%457 = OpLoad %v2float %_8_coord
-%458 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
-%459 = OpLoad %v2float %458
-%460 = OpFAdd %v2float %457 %459
-OpStore %_8_coord %460
-%461 = OpLoad %v2float %_8_coord
-OpStore %_9_coordSampled %461
-%462 = OpLoad %v4float %_7_output
-%463 = OpLoad %v4float %outputColor_Stage0
+%449 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %446 %448
+%450 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_5
+%451 = OpLoad %v4float %450
+%452 = OpCompositeExtract %float %451 0
+%453 = OpVectorTimesScalar %v4float %449 %452
+%454 = OpFAdd %v4float %444 %453
+OpStore %_7_output %454
+%455 = OpLoad %v2float %_8_coord
+%456 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
+%457 = OpLoad %v2float %456
+%458 = OpFAdd %v2float %455 %457
+OpStore %_8_coord %458
+%459 = OpLoad %v2float %_8_coord
+OpStore %_9_coordSampled %459
+%460 = OpLoad %v4float %_7_output
+%461 = OpLoad %v4float %outputColor_Stage0
+OpStore %462 %461
+%463 = OpLoad %v2float %_9_coordSampled
 OpStore %464 %463
-%465 = OpLoad %v2float %_9_coordSampled
-OpStore %466 %465
-%467 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %464 %466
-%468 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_5
-%469 = OpLoad %v4float %468
-%470 = OpCompositeExtract %float %469 1
-%471 = OpVectorTimesScalar %v4float %467 %470
-%472 = OpFAdd %v4float %462 %471
-OpStore %_7_output %472
-%473 = OpLoad %v2float %_8_coord
-%474 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
-%475 = OpLoad %v2float %474
-%476 = OpFAdd %v2float %473 %475
-OpStore %_8_coord %476
-%477 = OpLoad %v2float %_8_coord
-OpStore %_9_coordSampled %477
-%478 = OpLoad %v4float %_7_output
-%479 = OpLoad %v4float %outputColor_Stage0
+%465 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %462 %464
+%466 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_5
+%467 = OpLoad %v4float %466
+%468 = OpCompositeExtract %float %467 1
+%469 = OpVectorTimesScalar %v4float %465 %468
+%470 = OpFAdd %v4float %460 %469
+OpStore %_7_output %470
+%471 = OpLoad %v2float %_8_coord
+%472 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
+%473 = OpLoad %v2float %472
+%474 = OpFAdd %v2float %471 %473
+OpStore %_8_coord %474
+%475 = OpLoad %v2float %_8_coord
+OpStore %_9_coordSampled %475
+%476 = OpLoad %v4float %_7_output
+%477 = OpLoad %v4float %outputColor_Stage0
+OpStore %478 %477
+%479 = OpLoad %v2float %_9_coordSampled
 OpStore %480 %479
-%481 = OpLoad %v2float %_9_coordSampled
-OpStore %482 %481
-%483 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %480 %482
-%484 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_5
-%485 = OpLoad %v4float %484
-%486 = OpCompositeExtract %float %485 2
-%487 = OpVectorTimesScalar %v4float %483 %486
-%488 = OpFAdd %v4float %478 %487
-OpStore %_7_output %488
-%489 = OpLoad %v2float %_8_coord
-%490 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
-%491 = OpLoad %v2float %490
-%492 = OpFAdd %v2float %489 %491
-OpStore %_8_coord %492
-%493 = OpLoad %v2float %_8_coord
-OpStore %_9_coordSampled %493
-%494 = OpLoad %v4float %_7_output
-%495 = OpLoad %v4float %outputColor_Stage0
+%481 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %478 %480
+%482 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_5
+%483 = OpLoad %v4float %482
+%484 = OpCompositeExtract %float %483 2
+%485 = OpVectorTimesScalar %v4float %481 %484
+%486 = OpFAdd %v4float %476 %485
+OpStore %_7_output %486
+%487 = OpLoad %v2float %_8_coord
+%488 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
+%489 = OpLoad %v2float %488
+%490 = OpFAdd %v2float %487 %489
+OpStore %_8_coord %490
+%491 = OpLoad %v2float %_8_coord
+OpStore %_9_coordSampled %491
+%492 = OpLoad %v4float %_7_output
+%493 = OpLoad %v4float %outputColor_Stage0
+OpStore %494 %493
+%495 = OpLoad %v2float %_9_coordSampled
 OpStore %496 %495
-%497 = OpLoad %v2float %_9_coordSampled
-OpStore %498 %497
-%499 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %496 %498
-%500 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_5
-%501 = OpLoad %v4float %500
-%502 = OpCompositeExtract %float %501 3
-%503 = OpVectorTimesScalar %v4float %499 %502
-%504 = OpFAdd %v4float %494 %503
-OpStore %_7_output %504
-%505 = OpLoad %v2float %_8_coord
-%506 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
-%507 = OpLoad %v2float %506
-%508 = OpFAdd %v2float %505 %507
-OpStore %_8_coord %508
-%509 = OpLoad %v2float %_8_coord
-OpStore %_9_coordSampled %509
-%510 = OpLoad %v4float %_7_output
-%511 = OpLoad %v4float %outputColor_Stage0
+%497 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %494 %496
+%498 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_5
+%499 = OpLoad %v4float %498
+%500 = OpCompositeExtract %float %499 3
+%501 = OpVectorTimesScalar %v4float %497 %500
+%502 = OpFAdd %v4float %492 %501
+OpStore %_7_output %502
+%503 = OpLoad %v2float %_8_coord
+%504 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
+%505 = OpLoad %v2float %504
+%506 = OpFAdd %v2float %503 %505
+OpStore %_8_coord %506
+%507 = OpLoad %v2float %_8_coord
+OpStore %_9_coordSampled %507
+%508 = OpLoad %v4float %_7_output
+%509 = OpLoad %v4float %outputColor_Stage0
+OpStore %510 %509
+%511 = OpLoad %v2float %_9_coordSampled
 OpStore %512 %511
-%513 = OpLoad %v2float %_9_coordSampled
-OpStore %514 %513
-%515 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %512 %514
-%516 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_6
-%517 = OpLoad %v4float %516
-%518 = OpCompositeExtract %float %517 0
-%519 = OpVectorTimesScalar %v4float %515 %518
-%520 = OpFAdd %v4float %510 %519
-OpStore %_7_output %520
-%521 = OpLoad %v2float %_8_coord
-%522 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
-%523 = OpLoad %v2float %522
-%524 = OpFAdd %v2float %521 %523
-OpStore %_8_coord %524
-%525 = OpLoad %v4float %_7_output
-%526 = OpLoad %v4float %outputColor_Stage0
-%527 = OpFMul %v4float %525 %526
-OpStore %_7_output %527
-%528 = OpLoad %v4float %_7_output
-OpStore %output_Stage1 %528
-%529 = OpLoad %v4float %output_Stage1
-%530 = OpLoad %v4float %outputCoverage_Stage0
-%531 = OpFMul %v4float %529 %530
-OpStore %sk_FragColor %531
+%513 = OpFunctionCall %v4float %MatrixEffect_Stage1_c0_c0 %510 %512
+%514 = OpAccessChain %_ptr_Uniform_v4float %4 %int_2 %int_6
+%515 = OpLoad %v4float %514
+%516 = OpCompositeExtract %float %515 0
+%517 = OpVectorTimesScalar %v4float %513 %516
+%518 = OpFAdd %v4float %508 %517
+OpStore %_7_output %518
+%519 = OpLoad %v2float %_8_coord
+%520 = OpAccessChain %_ptr_Uniform_v2float %4 %int_1
+%521 = OpLoad %v2float %520
+%522 = OpFAdd %v2float %519 %521
+OpStore %_8_coord %522
+%523 = OpLoad %v4float %_7_output
+%524 = OpLoad %v4float %outputColor_Stage0
+%525 = OpFMul %v4float %523 %524
+OpStore %_7_output %525
+%526 = OpLoad %v4float %_7_output
+OpStore %output_Stage1 %526
+%527 = OpLoad %v4float %output_Stage1
+%528 = OpLoad %v4float %outputCoverage_Stage0
+%529 = OpFMul %v4float %527 %528
+OpStore %sk_FragColor %529
 OpReturn
 OpFunctionEnd
diff --git a/tests/sksl/shared/GaussianBlur.glsl b/tests/sksl/shared/GaussianBlur.glsl
index 9328b30..efba9ba 100644
--- a/tests/sksl/shared/GaussianBlur.glsl
+++ b/tests/sksl/shared/GaussianBlur.glsl
@@ -12,9 +12,7 @@
 };
 layout (location = 0) in vec2 vLocalCoord_Stage0;
 vec4 MatrixEffect_Stage1_c0_c0(vec4 _input, vec2 _coords) {
-    vec4 _output;
     vec2 _0_coords = (umatrix_Stage1_c0_c0 * vec3(_coords, 1.0)).xy;
-    vec4 _1_output;
     vec2 _2_inCoord = _0_coords;
     _2_inCoord *= unorm_Stage1_c0_c0_c0.xy;
     vec2 _3_subsetCoord;
diff --git a/tests/sksl/shared/GaussianBlur.metal b/tests/sksl/shared/GaussianBlur.metal
index 911b64e..bfdb37a 100644
--- a/tests/sksl/shared/GaussianBlur.metal
+++ b/tests/sksl/shared/GaussianBlur.metal
@@ -23,9 +23,7 @@
     sampler uTextureSampler_0_Stage1Smplr;
 };
 float4 MatrixEffect_Stage1_c0_c0(thread Globals& _globals, float4 _input, float2 _coords) {
-    float4 _output;
     float2 _0_coords = (_globals._anonInterface0->umatrix_Stage1_c0_c0 * float3(_coords, 1.0)).xy;
-    float4 _1_output;
     float2 _2_inCoord = _0_coords;
     _2_inCoord *= _globals._anonInterface0->unorm_Stage1_c0_c0_c0.xy;
     float2 _3_subsetCoord;
diff --git a/tests/sksl/shared/GeometricIntrinsics.asm.frag b/tests/sksl/shared/GeometricIntrinsics.asm.frag
index 4c14e79..4ff12e7 100644
--- a/tests/sksl/shared/GeometricIntrinsics.asm.frag
+++ b/tests/sksl/shared/GeometricIntrinsics.asm.frag
@@ -10,9 +10,7 @@
 OpName %_entrypoint "_entrypoint"
 OpName %main "main"
 OpName %_0_x "_0_x"
-OpName %x "x"
 OpName %_1_x "_1_x"
-OpName %y "y"
 OpDecorate %sk_FragColor RelaxedPrecision
 OpDecorate %sk_FragColor Location 0
 OpDecorate %sk_FragColor Index 0
@@ -23,7 +21,7 @@
 OpDecorate %_UniformBuffer Block
 OpDecorate %10 Binding 0
 OpDecorate %10 DescriptorSet 0
-OpDecorate %58 RelaxedPrecision
+OpDecorate %54 RelaxedPrecision
 %float = OpTypeFloat 32
 %v4float = OpTypeVector %float 4
 %_ptr_Output_v4float = OpTypePointer Output %v4float
@@ -42,10 +40,10 @@
 %float_2 = OpConstant %float 2
 %v2float = OpTypeVector %float 2
 %_ptr_Function_v2float = OpTypePointer Function %v2float
-%37 = OpConstantComposite %v2float %float_1 %float_2
+%35 = OpConstantComposite %v2float %float_1 %float_2
 %float_3 = OpConstant %float 3
 %float_4 = OpConstant %float 4
-%45 = OpConstantComposite %v2float %float_3 %float_4
+%43 = OpConstantComposite %v2float %float_3 %float_4
 %_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
 %int = OpTypeInt 32 1
 %int_0 = OpConstant %int 0
@@ -58,9 +56,7 @@
 %main = OpFunction %v4float None %18
 %19 = OpLabel
 %_0_x = OpVariable %_ptr_Function_float Function
-%x = OpVariable %_ptr_Function_float Function
 %_1_x = OpVariable %_ptr_Function_v2float Function
-%y = OpVariable %_ptr_Function_v2float Function
 OpStore %_0_x %float_1
 %24 = OpLoad %float %_0_x
 %23 = OpExtInst %float %1 Length %24
@@ -74,27 +70,23 @@
 %31 = OpLoad %float %_0_x
 %30 = OpExtInst %float %1 Normalize %31
 OpStore %_0_x %30
-%33 = OpLoad %float %_0_x
-OpStore %x %33
-OpStore %_1_x %37
-%39 = OpLoad %v2float %_1_x
-%38 = OpExtInst %float %1 Length %39
-%40 = OpCompositeConstruct %v2float %38 %38
-OpStore %_1_x %40
-%42 = OpLoad %v2float %_1_x
-%41 = OpExtInst %float %1 Distance %42 %45
-%46 = OpCompositeConstruct %v2float %41 %41
-OpStore %_1_x %46
-%48 = OpLoad %v2float %_1_x
-%47 = OpDot %float %48 %45
-%49 = OpCompositeConstruct %v2float %47 %47
-OpStore %_1_x %49
-%51 = OpLoad %v2float %_1_x
-%50 = OpExtInst %v2float %1 Normalize %51
-OpStore %_1_x %50
-%53 = OpLoad %v2float %_1_x
-OpStore %y %53
-%54 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
-%58 = OpLoad %v4float %54
-OpReturnValue %58
+OpStore %_1_x %35
+%37 = OpLoad %v2float %_1_x
+%36 = OpExtInst %float %1 Length %37
+%38 = OpCompositeConstruct %v2float %36 %36
+OpStore %_1_x %38
+%40 = OpLoad %v2float %_1_x
+%39 = OpExtInst %float %1 Distance %40 %43
+%44 = OpCompositeConstruct %v2float %39 %39
+OpStore %_1_x %44
+%46 = OpLoad %v2float %_1_x
+%45 = OpDot %float %46 %43
+%47 = OpCompositeConstruct %v2float %45 %45
+OpStore %_1_x %47
+%49 = OpLoad %v2float %_1_x
+%48 = OpExtInst %v2float %1 Normalize %49
+OpStore %_1_x %48
+%50 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
+%54 = OpLoad %v4float %50
+OpReturnValue %54
 OpFunctionEnd
diff --git a/tests/sksl/shared/GeometricIntrinsics.glsl b/tests/sksl/shared/GeometricIntrinsics.glsl
index ed5e9da..170c133 100644
--- a/tests/sksl/shared/GeometricIntrinsics.glsl
+++ b/tests/sksl/shared/GeometricIntrinsics.glsl
@@ -7,12 +7,10 @@
     _0_x = distance(_0_x, 2.0);
     _0_x = dot(_0_x, 2.0);
     _0_x = normalize(_0_x);
-    float x = _0_x;
     vec2 _1_x = vec2(1.0, 2.0);
     _1_x = vec2(length(_1_x));
     _1_x = vec2(distance(_1_x, vec2(3.0, 4.0)));
     _1_x = vec2(dot(_1_x, vec2(3.0, 4.0)));
     _1_x = normalize(_1_x);
-    vec2 y = _1_x;
     return colorGreen;
 }
diff --git a/tests/sksl/shared/GeometricIntrinsics.metal b/tests/sksl/shared/GeometricIntrinsics.metal
index f6df03b..2410bd5 100644
--- a/tests/sksl/shared/GeometricIntrinsics.metal
+++ b/tests/sksl/shared/GeometricIntrinsics.metal
@@ -18,13 +18,11 @@
     _0_x = abs(_0_x - 2.0);
     _0_x = (_0_x * 2.0);
     _0_x = sign(_0_x);
-    float x = _0_x;
     float2 _1_x = float2(1.0, 2.0);
     _1_x = float2(length(_1_x));
     _1_x = float2(distance(_1_x, float2(3.0, 4.0)));
     _1_x = float2(dot(_1_x, float2(3.0, 4.0)));
     _1_x = normalize(_1_x);
-    float2 y = _1_x;
     _out.sk_FragColor = _uniforms.colorGreen;
     return _out;
 }
diff --git a/tests/sksl/shared/Matrices.asm.frag b/tests/sksl/shared/Matrices.asm.frag
index 332b33b..4873bd1 100644
--- a/tests/sksl/shared/Matrices.asm.frag
+++ b/tests/sksl/shared/Matrices.asm.frag
@@ -10,29 +10,19 @@
 OpMemberName %_UniformBuffer 1 "colorRed"
 OpName %_entrypoint "_entrypoint"
 OpName %test_half "test_half"
-OpName %v1 "v1"
-OpName %v2 "v2"
 OpName %m1 "m1"
-OpName %m2 "m2"
 OpName %m3 "m3"
 OpName %m4 "m4"
 OpName %m5 "m5"
 OpName %m6 "m6"
-OpName %m7 "m7"
-OpName %m9 "m9"
 OpName %m10 "m10"
 OpName %m11 "m11"
 OpName %main "main"
-OpName %_0_v1 "_0_v1"
-OpName %_1_v2 "_1_v2"
 OpName %_2_m1 "_2_m1"
-OpName %_3_m2 "_3_m2"
 OpName %_4_m3 "_4_m3"
 OpName %_5_m4 "_5_m4"
 OpName %_6_m5 "_6_m5"
 OpName %_7_m6 "_7_m6"
-OpName %_8_m7 "_8_m7"
-OpName %_9_m9 "_9_m9"
 OpName %_10_m10 "_10_m10"
 OpName %_11_m11 "_11_m11"
 OpDecorate %sk_FragColor RelaxedPrecision
@@ -47,62 +37,43 @@
 OpDecorate %_UniformBuffer Block
 OpDecorate %11 Binding 0
 OpDecorate %11 DescriptorSet 0
-OpDecorate %27 RelaxedPrecision
-OpDecorate %28 RelaxedPrecision
+OpDecorate %30 RelaxedPrecision
+OpDecorate %31 RelaxedPrecision
 OpDecorate %29 RelaxedPrecision
-OpDecorate %25 RelaxedPrecision
-OpDecorate %25 RelaxedPrecision
-OpDecorate %36 RelaxedPrecision
+OpDecorate %33 RelaxedPrecision
 OpDecorate %37 RelaxedPrecision
 OpDecorate %38 RelaxedPrecision
 OpDecorate %35 RelaxedPrecision
 OpDecorate %35 RelaxedPrecision
+OpDecorate %39 RelaxedPrecision
+OpDecorate %40 RelaxedPrecision
 OpDecorate %47 RelaxedPrecision
-OpDecorate %48 RelaxedPrecision
-OpDecorate %46 RelaxedPrecision
+OpDecorate %50 RelaxedPrecision
 OpDecorate %51 RelaxedPrecision
-OpDecorate %59 RelaxedPrecision
-OpDecorate %62 RelaxedPrecision
-OpDecorate %63 RelaxedPrecision
-OpDecorate %61 RelaxedPrecision
-OpDecorate %61 RelaxedPrecision
-OpDecorate %64 RelaxedPrecision
-OpDecorate %65 RelaxedPrecision
+OpDecorate %49 RelaxedPrecision
+OpDecorate %49 RelaxedPrecision
+OpDecorate %54 RelaxedPrecision
+OpDecorate %55 RelaxedPrecision
+OpDecorate %53 RelaxedPrecision
+OpDecorate %56 RelaxedPrecision
+OpDecorate %57 RelaxedPrecision
+OpDecorate %69 RelaxedPrecision
+OpDecorate %70 RelaxedPrecision
+OpDecorate %71 RelaxedPrecision
 OpDecorate %72 RelaxedPrecision
+OpDecorate %68 RelaxedPrecision
+OpDecorate %68 RelaxedPrecision
 OpDecorate %75 RelaxedPrecision
 OpDecorate %76 RelaxedPrecision
+OpDecorate %77 RelaxedPrecision
+OpDecorate %78 RelaxedPrecision
 OpDecorate %74 RelaxedPrecision
 OpDecorate %74 RelaxedPrecision
 OpDecorate %79 RelaxedPrecision
 OpDecorate %80 RelaxedPrecision
-OpDecorate %78 RelaxedPrecision
-OpDecorate %81 RelaxedPrecision
-OpDecorate %82 RelaxedPrecision
-OpDecorate %96 RelaxedPrecision
-OpDecorate %97 RelaxedPrecision
-OpDecorate %95 RelaxedPrecision
-OpDecorate %101 RelaxedPrecision
-OpDecorate %102 RelaxedPrecision
-OpDecorate %103 RelaxedPrecision
-OpDecorate %100 RelaxedPrecision
-OpDecorate %100 RelaxedPrecision
-OpDecorate %108 RelaxedPrecision
-OpDecorate %109 RelaxedPrecision
-OpDecorate %110 RelaxedPrecision
-OpDecorate %111 RelaxedPrecision
-OpDecorate %107 RelaxedPrecision
-OpDecorate %107 RelaxedPrecision
-OpDecorate %114 RelaxedPrecision
-OpDecorate %115 RelaxedPrecision
-OpDecorate %116 RelaxedPrecision
-OpDecorate %117 RelaxedPrecision
-OpDecorate %113 RelaxedPrecision
-OpDecorate %113 RelaxedPrecision
-OpDecorate %118 RelaxedPrecision
-OpDecorate %119 RelaxedPrecision
-OpDecorate %237 RelaxedPrecision
-OpDecorate %240 RelaxedPrecision
-OpDecorate %241 RelaxedPrecision
+OpDecorate %169 RelaxedPrecision
+OpDecorate %172 RelaxedPrecision
+OpDecorate %173 RelaxedPrecision
 %float = OpTypeFloat 32
 %v4float = OpTypeVector %float 4
 %_ptr_Output_v4float = OpTypePointer Output %v4float
@@ -116,31 +87,21 @@
 %void = OpTypeVoid
 %16 = OpTypeFunction %void
 %19 = OpTypeFunction %bool
-%v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-%float_1 = OpConstant %float 1
-%float_0 = OpConstant %float 0
-%mat3v3float = OpTypeMatrix %v3float 3
-%float_2 = OpConstant %float 2
-%32 = OpConstantComposite %v3float %float_2 %float_2 %float_2
 %v2float = OpTypeVector %float 2
 %mat2v2float = OpTypeMatrix %v2float 2
 %_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
+%float_1 = OpConstant %float 1
+%float_2 = OpConstant %float 2
 %float_3 = OpConstant %float 3
 %float_4 = OpConstant %float 4
-%50 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
+%float_0 = OpConstant %float 0
 %int = OpTypeInt 32 1
 %int_0 = OpConstant %int 0
 %_ptr_Function_v2float = OpTypePointer Function %v2float
-%float_5 = OpConstant %float 5
-%float_6 = OpConstant %float 6
-%float_7 = OpConstant %float 7
-%float_8 = OpConstant %float 8
-%_ptr_Function_mat3v3float = OpTypePointer Function %mat3v3float
 %mat4v4float = OpTypeMatrix %v4float 4
 %_ptr_Function_mat4v4float = OpTypePointer Function %mat4v4float
 %true = OpConstantTrue %bool
-%134 = OpTypeFunction %v4float
+%95 = OpTypeFunction %v4float
 %false = OpConstantFalse %bool
 %_ptr_Function_v4float = OpTypePointer Function %v4float
 %_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
@@ -153,239 +114,171 @@
 OpFunctionEnd
 %test_half = OpFunction %bool None %19
 %20 = OpLabel
-%v1 = OpVariable %_ptr_Function_v3float Function
-%v2 = OpVariable %_ptr_Function_v3float Function
 %m1 = OpVariable %_ptr_Function_mat2v2float Function
-%m2 = OpVariable %_ptr_Function_mat2v2float Function
 %m3 = OpVariable %_ptr_Function_mat2v2float Function
 %m4 = OpVariable %_ptr_Function_mat2v2float Function
 %m5 = OpVariable %_ptr_Function_mat2v2float Function
 %m6 = OpVariable %_ptr_Function_mat2v2float Function
-%m7 = OpVariable %_ptr_Function_mat2v2float Function
-%m9 = OpVariable %_ptr_Function_mat3v3float Function
 %m10 = OpVariable %_ptr_Function_mat4v4float Function
 %m11 = OpVariable %_ptr_Function_mat4v4float Function
-%27 = OpCompositeConstruct %v3float %float_1 %float_0 %float_0
-%28 = OpCompositeConstruct %v3float %float_0 %float_1 %float_0
-%29 = OpCompositeConstruct %v3float %float_0 %float_0 %float_1
-%25 = OpCompositeConstruct %mat3v3float %27 %28 %29
-%33 = OpMatrixTimesVector %v3float %25 %32
-OpStore %v1 %33
-%36 = OpCompositeConstruct %v3float %float_1 %float_0 %float_0
-%37 = OpCompositeConstruct %v3float %float_0 %float_1 %float_0
-%38 = OpCompositeConstruct %v3float %float_0 %float_0 %float_1
-%35 = OpCompositeConstruct %mat3v3float %36 %37 %38
-%39 = OpVectorTimesMatrix %v3float %32 %35
-OpStore %v2 %39
-%47 = OpCompositeConstruct %v2float %float_1 %float_2
-%48 = OpCompositeConstruct %v2float %float_3 %float_4
-%46 = OpCompositeConstruct %mat2v2float %47 %48
-OpStore %m1 %46
-%52 = OpCompositeExtract %float %50 0
-%53 = OpCompositeExtract %float %50 1
-%54 = OpCompositeExtract %float %50 2
-%55 = OpCompositeExtract %float %50 3
-%56 = OpCompositeConstruct %v2float %52 %53
-%57 = OpCompositeConstruct %v2float %54 %55
-%51 = OpCompositeConstruct %mat2v2float %56 %57
-OpStore %m2 %51
-%59 = OpLoad %mat2v2float %m1
-OpStore %m3 %59
-%62 = OpCompositeConstruct %v2float %float_1 %float_0
-%63 = OpCompositeConstruct %v2float %float_0 %float_1
-%61 = OpCompositeConstruct %mat2v2float %62 %63
-OpStore %m4 %61
-%64 = OpLoad %mat2v2float %m3
-%65 = OpLoad %mat2v2float %m4
-%66 = OpMatrixTimesMatrix %mat2v2float %64 %65
-OpStore %m3 %66
-%70 = OpAccessChain %_ptr_Function_v2float %m1 %int_0
-%72 = OpLoad %v2float %70
-%73 = OpCompositeExtract %float %72 0
-%75 = OpCompositeConstruct %v2float %73 %float_0
-%76 = OpCompositeConstruct %v2float %float_0 %73
-%74 = OpCompositeConstruct %mat2v2float %75 %76
-OpStore %m5 %74
-%79 = OpCompositeConstruct %v2float %float_1 %float_2
-%80 = OpCompositeConstruct %v2float %float_3 %float_4
-%78 = OpCompositeConstruct %mat2v2float %79 %80
-OpStore %m6 %78
-%81 = OpLoad %mat2v2float %m6
-%82 = OpLoad %mat2v2float %m5
-%83 = OpCompositeExtract %v2float %81 0
-%84 = OpCompositeExtract %v2float %82 0
-%85 = OpFAdd %v2float %83 %84
-%86 = OpCompositeExtract %v2float %81 1
-%87 = OpCompositeExtract %v2float %82 1
-%88 = OpFAdd %v2float %86 %87
-%89 = OpCompositeConstruct %mat2v2float %85 %88
-OpStore %m6 %89
-%96 = OpCompositeConstruct %v2float %float_5 %float_6
-%97 = OpCompositeConstruct %v2float %float_7 %float_8
-%95 = OpCompositeConstruct %mat2v2float %96 %97
-OpStore %m7 %95
-%101 = OpCompositeConstruct %v3float %float_1 %float_0 %float_0
-%102 = OpCompositeConstruct %v3float %float_0 %float_1 %float_0
-%103 = OpCompositeConstruct %v3float %float_0 %float_0 %float_1
-%100 = OpCompositeConstruct %mat3v3float %101 %102 %103
-OpStore %m9 %100
-%108 = OpCompositeConstruct %v4float %float_1 %float_0 %float_0 %float_0
-%109 = OpCompositeConstruct %v4float %float_0 %float_1 %float_0 %float_0
-%110 = OpCompositeConstruct %v4float %float_0 %float_0 %float_1 %float_0
-%111 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %float_1
-%107 = OpCompositeConstruct %mat4v4float %108 %109 %110 %111
-OpStore %m10 %107
-%114 = OpCompositeConstruct %v4float %float_2 %float_0 %float_0 %float_0
-%115 = OpCompositeConstruct %v4float %float_0 %float_2 %float_0 %float_0
-%116 = OpCompositeConstruct %v4float %float_0 %float_0 %float_2 %float_0
-%117 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %float_2
-%113 = OpCompositeConstruct %mat4v4float %114 %115 %116 %117
-OpStore %m11 %113
-%118 = OpLoad %mat4v4float %m11
-%119 = OpLoad %mat4v4float %m10
-%120 = OpCompositeExtract %v4float %118 0
-%121 = OpCompositeExtract %v4float %119 0
-%122 = OpFSub %v4float %120 %121
-%123 = OpCompositeExtract %v4float %118 1
-%124 = OpCompositeExtract %v4float %119 1
-%125 = OpFSub %v4float %123 %124
-%126 = OpCompositeExtract %v4float %118 2
-%127 = OpCompositeExtract %v4float %119 2
-%128 = OpFSub %v4float %126 %127
-%129 = OpCompositeExtract %v4float %118 3
-%130 = OpCompositeExtract %v4float %119 3
-%131 = OpFSub %v4float %129 %130
-%132 = OpCompositeConstruct %mat4v4float %122 %125 %128 %131
-OpStore %m11 %132
+%30 = OpCompositeConstruct %v2float %float_1 %float_2
+%31 = OpCompositeConstruct %v2float %float_3 %float_4
+%29 = OpCompositeConstruct %mat2v2float %30 %31
+OpStore %m1 %29
+%33 = OpLoad %mat2v2float %m1
+OpStore %m3 %33
+%37 = OpCompositeConstruct %v2float %float_1 %float_0
+%38 = OpCompositeConstruct %v2float %float_0 %float_1
+%35 = OpCompositeConstruct %mat2v2float %37 %38
+OpStore %m4 %35
+%39 = OpLoad %mat2v2float %m3
+%40 = OpLoad %mat2v2float %m4
+%41 = OpMatrixTimesMatrix %mat2v2float %39 %40
+OpStore %m3 %41
+%45 = OpAccessChain %_ptr_Function_v2float %m1 %int_0
+%47 = OpLoad %v2float %45
+%48 = OpCompositeExtract %float %47 0
+%50 = OpCompositeConstruct %v2float %48 %float_0
+%51 = OpCompositeConstruct %v2float %float_0 %48
+%49 = OpCompositeConstruct %mat2v2float %50 %51
+OpStore %m5 %49
+%54 = OpCompositeConstruct %v2float %float_1 %float_2
+%55 = OpCompositeConstruct %v2float %float_3 %float_4
+%53 = OpCompositeConstruct %mat2v2float %54 %55
+OpStore %m6 %53
+%56 = OpLoad %mat2v2float %m6
+%57 = OpLoad %mat2v2float %m5
+%58 = OpCompositeExtract %v2float %56 0
+%59 = OpCompositeExtract %v2float %57 0
+%60 = OpFAdd %v2float %58 %59
+%61 = OpCompositeExtract %v2float %56 1
+%62 = OpCompositeExtract %v2float %57 1
+%63 = OpFAdd %v2float %61 %62
+%64 = OpCompositeConstruct %mat2v2float %60 %63
+OpStore %m6 %64
+%69 = OpCompositeConstruct %v4float %float_1 %float_0 %float_0 %float_0
+%70 = OpCompositeConstruct %v4float %float_0 %float_1 %float_0 %float_0
+%71 = OpCompositeConstruct %v4float %float_0 %float_0 %float_1 %float_0
+%72 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %float_1
+%68 = OpCompositeConstruct %mat4v4float %69 %70 %71 %72
+OpStore %m10 %68
+%75 = OpCompositeConstruct %v4float %float_2 %float_0 %float_0 %float_0
+%76 = OpCompositeConstruct %v4float %float_0 %float_2 %float_0 %float_0
+%77 = OpCompositeConstruct %v4float %float_0 %float_0 %float_2 %float_0
+%78 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %float_2
+%74 = OpCompositeConstruct %mat4v4float %75 %76 %77 %78
+OpStore %m11 %74
+%79 = OpLoad %mat4v4float %m11
+%80 = OpLoad %mat4v4float %m10
+%81 = OpCompositeExtract %v4float %79 0
+%82 = OpCompositeExtract %v4float %80 0
+%83 = OpFSub %v4float %81 %82
+%84 = OpCompositeExtract %v4float %79 1
+%85 = OpCompositeExtract %v4float %80 1
+%86 = OpFSub %v4float %84 %85
+%87 = OpCompositeExtract %v4float %79 2
+%88 = OpCompositeExtract %v4float %80 2
+%89 = OpFSub %v4float %87 %88
+%90 = OpCompositeExtract %v4float %79 3
+%91 = OpCompositeExtract %v4float %80 3
+%92 = OpFSub %v4float %90 %91
+%93 = OpCompositeConstruct %mat4v4float %83 %86 %89 %92
+OpStore %m11 %93
 OpReturnValue %true
 OpFunctionEnd
-%main = OpFunction %v4float None %134
-%135 = OpLabel
-%_0_v1 = OpVariable %_ptr_Function_v3float Function
-%_1_v2 = OpVariable %_ptr_Function_v3float Function
+%main = OpFunction %v4float None %95
+%96 = OpLabel
 %_2_m1 = OpVariable %_ptr_Function_mat2v2float Function
-%_3_m2 = OpVariable %_ptr_Function_mat2v2float Function
 %_4_m3 = OpVariable %_ptr_Function_mat2v2float Function
 %_5_m4 = OpVariable %_ptr_Function_mat2v2float Function
 %_6_m5 = OpVariable %_ptr_Function_mat2v2float Function
 %_7_m6 = OpVariable %_ptr_Function_mat2v2float Function
-%_8_m7 = OpVariable %_ptr_Function_mat2v2float Function
-%_9_m9 = OpVariable %_ptr_Function_mat3v3float Function
 %_10_m10 = OpVariable %_ptr_Function_mat4v4float Function
 %_11_m11 = OpVariable %_ptr_Function_mat4v4float Function
-%230 = OpVariable %_ptr_Function_v4float Function
-%138 = OpCompositeConstruct %v3float %float_1 %float_0 %float_0
-%139 = OpCompositeConstruct %v3float %float_0 %float_1 %float_0
-%140 = OpCompositeConstruct %v3float %float_0 %float_0 %float_1
-%137 = OpCompositeConstruct %mat3v3float %138 %139 %140
-%141 = OpMatrixTimesVector %v3float %137 %32
-OpStore %_0_v1 %141
-%144 = OpCompositeConstruct %v3float %float_1 %float_0 %float_0
-%145 = OpCompositeConstruct %v3float %float_0 %float_1 %float_0
-%146 = OpCompositeConstruct %v3float %float_0 %float_0 %float_1
-%143 = OpCompositeConstruct %mat3v3float %144 %145 %146
-%147 = OpVectorTimesMatrix %v3float %32 %143
-OpStore %_1_v2 %147
-%150 = OpCompositeConstruct %v2float %float_1 %float_2
-%151 = OpCompositeConstruct %v2float %float_3 %float_4
-%149 = OpCompositeConstruct %mat2v2float %150 %151
-OpStore %_2_m1 %149
-%154 = OpCompositeExtract %float %50 0
-%155 = OpCompositeExtract %float %50 1
-%156 = OpCompositeExtract %float %50 2
-%157 = OpCompositeExtract %float %50 3
-%158 = OpCompositeConstruct %v2float %154 %155
-%159 = OpCompositeConstruct %v2float %156 %157
-%153 = OpCompositeConstruct %mat2v2float %158 %159
-OpStore %_3_m2 %153
-%161 = OpLoad %mat2v2float %_2_m1
-OpStore %_4_m3 %161
-%164 = OpCompositeConstruct %v2float %float_1 %float_0
-%165 = OpCompositeConstruct %v2float %float_0 %float_1
-%163 = OpCompositeConstruct %mat2v2float %164 %165
-OpStore %_5_m4 %163
-%166 = OpLoad %mat2v2float %_4_m3
-%167 = OpLoad %mat2v2float %_5_m4
-%168 = OpMatrixTimesMatrix %mat2v2float %166 %167
-OpStore %_4_m3 %168
-%170 = OpAccessChain %_ptr_Function_v2float %_2_m1 %int_0
-%171 = OpLoad %v2float %170
-%172 = OpCompositeExtract %float %171 0
-%174 = OpCompositeConstruct %v2float %172 %float_0
-%175 = OpCompositeConstruct %v2float %float_0 %172
-%173 = OpCompositeConstruct %mat2v2float %174 %175
-OpStore %_6_m5 %173
-%178 = OpCompositeConstruct %v2float %float_1 %float_2
-%179 = OpCompositeConstruct %v2float %float_3 %float_4
-%177 = OpCompositeConstruct %mat2v2float %178 %179
-OpStore %_7_m6 %177
-%180 = OpLoad %mat2v2float %_7_m6
-%181 = OpLoad %mat2v2float %_6_m5
-%182 = OpCompositeExtract %v2float %180 0
-%183 = OpCompositeExtract %v2float %181 0
-%184 = OpFAdd %v2float %182 %183
-%185 = OpCompositeExtract %v2float %180 1
-%186 = OpCompositeExtract %v2float %181 1
-%187 = OpFAdd %v2float %185 %186
-%188 = OpCompositeConstruct %mat2v2float %184 %187
-OpStore %_7_m6 %188
-%191 = OpCompositeConstruct %v2float %float_5 %float_6
-%192 = OpCompositeConstruct %v2float %float_7 %float_8
-%190 = OpCompositeConstruct %mat2v2float %191 %192
-OpStore %_8_m7 %190
-%195 = OpCompositeConstruct %v3float %float_1 %float_0 %float_0
-%196 = OpCompositeConstruct %v3float %float_0 %float_1 %float_0
-%197 = OpCompositeConstruct %v3float %float_0 %float_0 %float_1
-%194 = OpCompositeConstruct %mat3v3float %195 %196 %197
-OpStore %_9_m9 %194
-%200 = OpCompositeConstruct %v4float %float_1 %float_0 %float_0 %float_0
-%201 = OpCompositeConstruct %v4float %float_0 %float_1 %float_0 %float_0
-%202 = OpCompositeConstruct %v4float %float_0 %float_0 %float_1 %float_0
-%203 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %float_1
-%199 = OpCompositeConstruct %mat4v4float %200 %201 %202 %203
-OpStore %_10_m10 %199
-%206 = OpCompositeConstruct %v4float %float_2 %float_0 %float_0 %float_0
-%207 = OpCompositeConstruct %v4float %float_0 %float_2 %float_0 %float_0
-%208 = OpCompositeConstruct %v4float %float_0 %float_0 %float_2 %float_0
-%209 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %float_2
-%205 = OpCompositeConstruct %mat4v4float %206 %207 %208 %209
-OpStore %_11_m11 %205
-%210 = OpLoad %mat4v4float %_11_m11
-%211 = OpLoad %mat4v4float %_10_m10
-%212 = OpCompositeExtract %v4float %210 0
-%213 = OpCompositeExtract %v4float %211 0
-%214 = OpFSub %v4float %212 %213
-%215 = OpCompositeExtract %v4float %210 1
-%216 = OpCompositeExtract %v4float %211 1
-%217 = OpFSub %v4float %215 %216
-%218 = OpCompositeExtract %v4float %210 2
-%219 = OpCompositeExtract %v4float %211 2
-%220 = OpFSub %v4float %218 %219
-%221 = OpCompositeExtract %v4float %210 3
-%222 = OpCompositeExtract %v4float %211 3
-%223 = OpFSub %v4float %221 %222
-%224 = OpCompositeConstruct %mat4v4float %214 %217 %220 %223
-OpStore %_11_m11 %224
-OpSelectionMerge %227 None
-OpBranchConditional %true %226 %227
-%226 = OpLabel
-%228 = OpFunctionCall %bool %test_half
-OpBranch %227
-%227 = OpLabel
-%229 = OpPhi %bool %false %135 %228 %226
-OpSelectionMerge %234 None
-OpBranchConditional %229 %232 %233
-%232 = OpLabel
-%235 = OpAccessChain %_ptr_Uniform_v4float %11 %int_0
-%237 = OpLoad %v4float %235
-OpStore %230 %237
-OpBranch %234
-%233 = OpLabel
-%238 = OpAccessChain %_ptr_Uniform_v4float %11 %int_1
-%240 = OpLoad %v4float %238
-OpStore %230 %240
-OpBranch %234
-%234 = OpLabel
-%241 = OpLoad %v4float %230
-OpReturnValue %241
+%162 = OpVariable %_ptr_Function_v4float Function
+%99 = OpCompositeConstruct %v2float %float_1 %float_2
+%100 = OpCompositeConstruct %v2float %float_3 %float_4
+%98 = OpCompositeConstruct %mat2v2float %99 %100
+OpStore %_2_m1 %98
+%102 = OpLoad %mat2v2float %_2_m1
+OpStore %_4_m3 %102
+%105 = OpCompositeConstruct %v2float %float_1 %float_0
+%106 = OpCompositeConstruct %v2float %float_0 %float_1
+%104 = OpCompositeConstruct %mat2v2float %105 %106
+OpStore %_5_m4 %104
+%107 = OpLoad %mat2v2float %_4_m3
+%108 = OpLoad %mat2v2float %_5_m4
+%109 = OpMatrixTimesMatrix %mat2v2float %107 %108
+OpStore %_4_m3 %109
+%111 = OpAccessChain %_ptr_Function_v2float %_2_m1 %int_0
+%112 = OpLoad %v2float %111
+%113 = OpCompositeExtract %float %112 0
+%115 = OpCompositeConstruct %v2float %113 %float_0
+%116 = OpCompositeConstruct %v2float %float_0 %113
+%114 = OpCompositeConstruct %mat2v2float %115 %116
+OpStore %_6_m5 %114
+%119 = OpCompositeConstruct %v2float %float_1 %float_2
+%120 = OpCompositeConstruct %v2float %float_3 %float_4
+%118 = OpCompositeConstruct %mat2v2float %119 %120
+OpStore %_7_m6 %118
+%121 = OpLoad %mat2v2float %_7_m6
+%122 = OpLoad %mat2v2float %_6_m5
+%123 = OpCompositeExtract %v2float %121 0
+%124 = OpCompositeExtract %v2float %122 0
+%125 = OpFAdd %v2float %123 %124
+%126 = OpCompositeExtract %v2float %121 1
+%127 = OpCompositeExtract %v2float %122 1
+%128 = OpFAdd %v2float %126 %127
+%129 = OpCompositeConstruct %mat2v2float %125 %128
+OpStore %_7_m6 %129
+%132 = OpCompositeConstruct %v4float %float_1 %float_0 %float_0 %float_0
+%133 = OpCompositeConstruct %v4float %float_0 %float_1 %float_0 %float_0
+%134 = OpCompositeConstruct %v4float %float_0 %float_0 %float_1 %float_0
+%135 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %float_1
+%131 = OpCompositeConstruct %mat4v4float %132 %133 %134 %135
+OpStore %_10_m10 %131
+%138 = OpCompositeConstruct %v4float %float_2 %float_0 %float_0 %float_0
+%139 = OpCompositeConstruct %v4float %float_0 %float_2 %float_0 %float_0
+%140 = OpCompositeConstruct %v4float %float_0 %float_0 %float_2 %float_0
+%141 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %float_2
+%137 = OpCompositeConstruct %mat4v4float %138 %139 %140 %141
+OpStore %_11_m11 %137
+%142 = OpLoad %mat4v4float %_11_m11
+%143 = OpLoad %mat4v4float %_10_m10
+%144 = OpCompositeExtract %v4float %142 0
+%145 = OpCompositeExtract %v4float %143 0
+%146 = OpFSub %v4float %144 %145
+%147 = OpCompositeExtract %v4float %142 1
+%148 = OpCompositeExtract %v4float %143 1
+%149 = OpFSub %v4float %147 %148
+%150 = OpCompositeExtract %v4float %142 2
+%151 = OpCompositeExtract %v4float %143 2
+%152 = OpFSub %v4float %150 %151
+%153 = OpCompositeExtract %v4float %142 3
+%154 = OpCompositeExtract %v4float %143 3
+%155 = OpFSub %v4float %153 %154
+%156 = OpCompositeConstruct %mat4v4float %146 %149 %152 %155
+OpStore %_11_m11 %156
+OpSelectionMerge %159 None
+OpBranchConditional %true %158 %159
+%158 = OpLabel
+%160 = OpFunctionCall %bool %test_half
+OpBranch %159
+%159 = OpLabel
+%161 = OpPhi %bool %false %96 %160 %158
+OpSelectionMerge %166 None
+OpBranchConditional %161 %164 %165
+%164 = OpLabel
+%167 = OpAccessChain %_ptr_Uniform_v4float %11 %int_0
+%169 = OpLoad %v4float %167
+OpStore %162 %169
+OpBranch %166
+%165 = OpLabel
+%170 = OpAccessChain %_ptr_Uniform_v4float %11 %int_1
+%172 = OpLoad %v4float %170
+OpStore %162 %172
+OpBranch %166
+%166 = OpLabel
+%173 = OpLoad %v4float %162
+OpReturnValue %173
 OpFunctionEnd
diff --git a/tests/sksl/shared/Matrices.glsl b/tests/sksl/shared/Matrices.glsl
index 2b93b73..8982fa7 100644
--- a/tests/sksl/shared/Matrices.glsl
+++ b/tests/sksl/shared/Matrices.glsl
@@ -3,36 +3,26 @@
 uniform vec4 colorGreen;
 uniform vec4 colorRed;
 bool test_half() {
-    vec3 v1 = mat3(1.0) * vec3(2.0);
-    vec3 v2 = vec3(2.0) * mat3(1.0);
     mat2 m1 = mat2(1.0, 2.0, 3.0, 4.0);
-    mat2 m2 = mat2(vec4(0.0));
     mat2 m3 = m1;
     mat2 m4 = mat2(1.0);
     m3 *= m4;
     mat2 m5 = mat2(m1[0].x);
     mat2 m6 = mat2(1.0, 2.0, 3.0, 4.0);
     m6 += m5;
-    mat2 m7 = mat2(5.0, 6.0, 7.0, 8.0);
-    mat3 m9 = mat3(1.0);
     mat4 m10 = mat4(1.0);
     mat4 m11 = mat4(2.0);
     m11 -= m10;
     return true;
 }
 vec4 main() {
-    vec3 _0_v1 = mat3(1.0) * vec3(2.0);
-    vec3 _1_v2 = vec3(2.0) * mat3(1.0);
     mat2 _2_m1 = mat2(1.0, 2.0, 3.0, 4.0);
-    mat2 _3_m2 = mat2(vec4(0.0));
     mat2 _4_m3 = _2_m1;
     mat2 _5_m4 = mat2(1.0);
     _4_m3 *= _5_m4;
     mat2 _6_m5 = mat2(_2_m1[0].x);
     mat2 _7_m6 = mat2(1.0, 2.0, 3.0, 4.0);
     _7_m6 += _6_m5;
-    mat2 _8_m7 = mat2(5.0, 6.0, 7.0, 8.0);
-    mat3 _9_m9 = mat3(1.0);
     mat4 _10_m10 = mat4(1.0);
     mat4 _11_m11 = mat4(2.0);
     _11_m11 -= _10_m10;
diff --git a/tests/sksl/shared/Matrices.metal b/tests/sksl/shared/Matrices.metal
index 1f317e5..dd85263 100644
--- a/tests/sksl/shared/Matrices.metal
+++ b/tests/sksl/shared/Matrices.metal
@@ -10,27 +10,19 @@
 struct Outputs {
     float4 sk_FragColor [[color(0)]];
 };
-float2x2 float2x2_from_float4(float4 x0) {
-    return float2x2(float2(x0[0], x0[1]), float2(x0[2], x0[3]));
-}
 thread float2x2& operator*=(thread float2x2& left, thread const float2x2& right) {
     left = left * right;
     return left;
 }
 
 bool test_half() {
-    float3 v1 = float3x3(1.0) * float3(2.0);
-    float3 v2 = float3(2.0) * float3x3(1.0);
     float2x2 m1 = float2x2(float2(1.0, 2.0), float2(3.0, 4.0));
-    float2x2 m2 = float2x2_from_float4(float4(0.0));
     float2x2 m3 = m1;
     float2x2 m4 = float2x2(1.0);
     m3 *= m4;
     float2x2 m5 = float2x2(m1[0].x);
     float2x2 m6 = float2x2(float2(1.0, 2.0), float2(3.0, 4.0));
     m6 += m5;
-    float2x2 m7 = float2x2(float2(5.0, 6.0), float2(7.0, 8.0));
-    float3x3 m9 = float3x3(1.0);
     float4x4 m10 = float4x4(1.0);
     float4x4 m11 = float4x4(2.0);
     m11 -= m10;
@@ -39,18 +31,13 @@
 fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
     Outputs _out;
     (void)_out;
-    float3 _0_v1 = float3x3(1.0) * float3(2.0);
-    float3 _1_v2 = float3(2.0) * float3x3(1.0);
     float2x2 _2_m1 = float2x2(float2(1.0, 2.0), float2(3.0, 4.0));
-    float2x2 _3_m2 = float2x2_from_float4(float4(0.0));
     float2x2 _4_m3 = _2_m1;
     float2x2 _5_m4 = float2x2(1.0);
     _4_m3 *= _5_m4;
     float2x2 _6_m5 = float2x2(_2_m1[0].x);
     float2x2 _7_m6 = float2x2(float2(1.0, 2.0), float2(3.0, 4.0));
     _7_m6 += _6_m5;
-    float2x2 _8_m7 = float2x2(float2(5.0, 6.0), float2(7.0, 8.0));
-    float3x3 _9_m9 = float3x3(1.0);
     float4x4 _10_m10 = float4x4(1.0);
     float4x4 _11_m11 = float4x4(2.0);
     _11_m11 -= _10_m10;
diff --git a/tests/sksl/shared/OperatorsES3.asm.frag b/tests/sksl/shared/OperatorsES3.asm.frag
index 2d30582..f7ded27 100644
--- a/tests/sksl/shared/OperatorsES3.asm.frag
+++ b/tests/sksl/shared/OperatorsES3.asm.frag
@@ -13,11 +13,6 @@
 OpName %x "x"
 OpName %y "y"
 OpName %z "z"
-OpName %b "b"
-OpName %c "c"
-OpName %d "d"
-OpName %e "e"
-OpName %f "f"
 OpDecorate %sk_FragColor RelaxedPrecision
 OpDecorate %sk_FragColor Location 0
 OpDecorate %sk_FragColor Index 0
@@ -30,15 +25,9 @@
 OpDecorate %_UniformBuffer Block
 OpDecorate %10 Binding 0
 OpDecorate %10 DescriptorSet 0
-OpDecorate %81 RelaxedPrecision
-OpDecorate %82 RelaxedPrecision
-OpDecorate %85 RelaxedPrecision
-OpDecorate %88 RelaxedPrecision
-OpDecorate %91 RelaxedPrecision
-OpDecorate %94 RelaxedPrecision
-OpDecorate %142 RelaxedPrecision
-OpDecorate %144 RelaxedPrecision
-OpDecorate %145 RelaxedPrecision
+OpDecorate %103 RelaxedPrecision
+OpDecorate %105 RelaxedPrecision
+OpDecorate %106 RelaxedPrecision
 %float = OpTypeFloat 32
 %v4float = OpTypeVector %float 4
 %_ptr_Output_v4float = OpTypePointer Output %v4float
@@ -61,10 +50,6 @@
 %int_2 = OpConstant %int 2
 %int_4 = OpConstant %int 4
 %int_1 = OpConstant %int 1
-%_ptr_Function_bool = OpTypePointer Function %bool
-%true = OpConstantTrue %bool
-%float_4 = OpConstant %float 4
-%false = OpConstantFalse %bool
 %float_12 = OpConstant %float 12
 %float_10 = OpConstant %float 10
 %int_0 = OpConstant %int 0
@@ -72,6 +57,7 @@
 %int_5 = OpConstant %int 5
 %float_6 = OpConstant %float 6
 %int_6 = OpConstant %int 6
+%false = OpConstantFalse %bool
 %_ptr_Function_v4float = OpTypePointer Function %v4float
 %_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
 %_entrypoint = OpFunction %void None %15
@@ -85,12 +71,7 @@
 %x = OpVariable %_ptr_Function_float Function
 %y = OpVariable %_ptr_Function_float Function
 %z = OpVariable %_ptr_Function_int Function
-%b = OpVariable %_ptr_Function_bool Function
-%c = OpVariable %_ptr_Function_bool Function
-%d = OpVariable %_ptr_Function_bool Function
-%e = OpVariable %_ptr_Function_bool Function
-%f = OpVariable %_ptr_Function_bool Function
-%135 = OpVariable %_ptr_Function_v4float Function
+%96 = OpVariable %_ptr_Function_v4float Function
 OpStore %x %float_1
 OpStore %y %float_2
 OpStore %z %int_3
@@ -121,118 +102,70 @@
 %53 = OpShiftRightArithmetic %int %52 %int_2
 %55 = OpShiftLeftLogical %int %53 %int_1
 OpStore %z %55
+%56 = OpLoad %float %x
+%58 = OpFAdd %float %56 %float_12
+OpStore %x %58
 %59 = OpLoad %float %x
-%61 = OpFOrdGreaterThan %bool %59 %float_4
-%62 = OpLoad %float %x
-%63 = OpFOrdLessThan %bool %62 %float_2
-%64 = OpLogicalEqual %bool %61 %63
-OpSelectionMerge %66 None
-OpBranchConditional %64 %66 %65
-%65 = OpLabel
-%68 = OpExtInst %float %1 Sqrt %float_2
-%69 = OpFOrdGreaterThanEqual %bool %float_2 %68
-OpSelectionMerge %71 None
-OpBranchConditional %69 %70 %71
-%70 = OpLabel
-%72 = OpLoad %float %y
-%73 = OpLoad %float %x
-%74 = OpFOrdLessThanEqual %bool %72 %73
-OpBranch %71
-%71 = OpLabel
-%75 = OpPhi %bool %false %65 %74 %70
-OpBranch %66
-%66 = OpLabel
-%76 = OpPhi %bool %true %19 %75 %71
-OpStore %b %76
-%78 = OpExtInst %float %1 Sqrt %float_2
-%79 = OpFOrdGreaterThan %bool %78 %float_2
-OpStore %c %79
-%81 = OpLoad %bool %b
-%82 = OpLoad %bool %c
-%83 = OpLogicalNotEqual %bool %81 %82
-OpStore %d %83
-%85 = OpLoad %bool %b
-OpSelectionMerge %87 None
-OpBranchConditional %85 %86 %87
-%86 = OpLabel
-%88 = OpLoad %bool %c
-OpBranch %87
-%87 = OpLabel
-%89 = OpPhi %bool %false %66 %88 %86
-OpStore %e %89
-%91 = OpLoad %bool %b
-OpSelectionMerge %93 None
-OpBranchConditional %91 %93 %92
-%92 = OpLabel
-%94 = OpLoad %bool %c
-OpBranch %93
-%93 = OpLabel
-%95 = OpPhi %bool %true %87 %94 %92
-OpStore %f %95
-%96 = OpLoad %float %x
-%98 = OpFAdd %float %96 %float_12
-OpStore %x %98
-%99 = OpLoad %float %x
-%100 = OpFSub %float %99 %float_12
-OpStore %x %100
-%101 = OpLoad %float %x
-%102 = OpLoad %float %y
-%104 = OpFDiv %float %102 %float_10
-OpStore %y %104
-%105 = OpFMul %float %101 %104
-OpStore %x %105
-%106 = OpLoad %int %z
-%108 = OpBitwiseOr %int %106 %int_0
-OpStore %z %108
-%109 = OpLoad %int %z
-%111 = OpBitwiseAnd %int %109 %int_n1
-OpStore %z %111
-%112 = OpLoad %int %z
-%113 = OpBitwiseXor %int %112 %int_0
-OpStore %z %113
-%114 = OpLoad %int %z
-%115 = OpShiftRightArithmetic %int %114 %int_2
-OpStore %z %115
-%116 = OpLoad %int %z
-%117 = OpShiftLeftLogical %int %116 %int_4
-OpStore %z %117
-%118 = OpLoad %int %z
-%120 = OpSMod %int %118 %int_5
-OpStore %z %120
+%60 = OpFSub %float %59 %float_12
+OpStore %x %60
+%61 = OpLoad %float %x
+%62 = OpLoad %float %y
+%64 = OpFDiv %float %62 %float_10
+OpStore %y %64
+%65 = OpFMul %float %61 %64
+OpStore %x %65
+%66 = OpLoad %int %z
+%68 = OpBitwiseOr %int %66 %int_0
+OpStore %z %68
+%69 = OpLoad %int %z
+%71 = OpBitwiseAnd %int %69 %int_n1
+OpStore %z %71
+%72 = OpLoad %int %z
+%73 = OpBitwiseXor %int %72 %int_0
+OpStore %z %73
+%74 = OpLoad %int %z
+%75 = OpShiftRightArithmetic %int %74 %int_2
+OpStore %z %75
+%76 = OpLoad %int %z
+%77 = OpShiftLeftLogical %int %76 %int_4
+OpStore %z %77
+%78 = OpLoad %int %z
+%80 = OpSMod %int %78 %int_5
+OpStore %z %80
 OpStore %x %float_6
 OpStore %y %float_6
 OpStore %z %int_6
-%123 = OpLoad %float %x
-%124 = OpFOrdEqual %bool %123 %float_6
-OpSelectionMerge %126 None
-OpBranchConditional %124 %125 %126
-%125 = OpLabel
-%127 = OpLoad %float %y
-%128 = OpFOrdEqual %bool %127 %float_6
-OpBranch %126
-%126 = OpLabel
-%129 = OpPhi %bool %false %93 %128 %125
-OpSelectionMerge %131 None
-OpBranchConditional %129 %130 %131
-%130 = OpLabel
-%132 = OpLoad %int %z
-%133 = OpIEqual %bool %132 %int_6
-OpBranch %131
-%131 = OpLabel
-%134 = OpPhi %bool %false %126 %133 %130
-OpSelectionMerge %139 None
-OpBranchConditional %134 %137 %138
-%137 = OpLabel
-%140 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
-%142 = OpLoad %v4float %140
-OpStore %135 %142
-OpBranch %139
-%138 = OpLabel
-%143 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
-%144 = OpLoad %v4float %143
-OpStore %135 %144
-OpBranch %139
-%139 = OpLabel
-%145 = OpLoad %v4float %135
-OpReturnValue %145
+%84 = OpLoad %float %x
+%85 = OpFOrdEqual %bool %84 %float_6
+OpSelectionMerge %87 None
+OpBranchConditional %85 %86 %87
+%86 = OpLabel
+%88 = OpLoad %float %y
+%89 = OpFOrdEqual %bool %88 %float_6
+OpBranch %87
+%87 = OpLabel
+%90 = OpPhi %bool %false %19 %89 %86
+OpSelectionMerge %92 None
+OpBranchConditional %90 %91 %92
+%91 = OpLabel
+%93 = OpLoad %int %z
+%94 = OpIEqual %bool %93 %int_6
+OpBranch %92
+%92 = OpLabel
+%95 = OpPhi %bool %false %87 %94 %91
+OpSelectionMerge %100 None
+OpBranchConditional %95 %98 %99
+%98 = OpLabel
+%101 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
+%103 = OpLoad %v4float %101
+OpStore %96 %103
+OpBranch %100
+%99 = OpLabel
+%104 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
+%105 = OpLoad %v4float %104
+OpStore %96 %105
+OpBranch %100
+%100 = OpLabel
+%106 = OpLoad %v4float %96
+OpReturnValue %106
 OpFunctionEnd
diff --git a/tests/sksl/shared/OperatorsES3.glsl b/tests/sksl/shared/OperatorsES3.glsl
index 130106d..6be98ec 100644
--- a/tests/sksl/shared/OperatorsES3.glsl
+++ b/tests/sksl/shared/OperatorsES3.glsl
@@ -9,11 +9,6 @@
     x = (x - x) + ((y * x) * x) * (y - x);
     y = (x / y) / x;
     z = (((z / 2) % 3 << 4) >> 2) << 1;
-    bool b = x > 4.0 == x < 2.0 || 2.0 >= sqrt(2.0) && y <= x;
-    bool c = sqrt(2.0) > 2.0;
-    bool d = b ^^ c;
-    bool e = b && c;
-    bool f = b || c;
     x += 12.0;
     x -= 12.0;
     x *= (y /= 10.0);
diff --git a/tests/sksl/shared/OperatorsES3.metal b/tests/sksl/shared/OperatorsES3.metal
index 39ee3d8..a16d320 100644
--- a/tests/sksl/shared/OperatorsES3.metal
+++ b/tests/sksl/shared/OperatorsES3.metal
@@ -20,11 +20,6 @@
     x = (x - x) + ((y * x) * x) * (y - x);
     y = (x / y) / x;
     z = (((z / 2) % 3 << 4) >> 2) << 1;
-    bool b = x > 4.0 == x < 2.0 || 2.0 >= sqrt(2.0) && y <= x;
-    bool c = sqrt(2.0) > 2.0;
-    bool d = b != c;
-    bool e = b && c;
-    bool f = b || c;
     x += 12.0;
     x -= 12.0;
     x *= (y /= 10.0);
diff --git a/tests/sksl/shared/Ossfuzz26167.asm.frag b/tests/sksl/shared/Ossfuzz26167.asm.frag
index b2b4c28..e5618fe 100644
--- a/tests/sksl/shared/Ossfuzz26167.asm.frag
+++ b/tests/sksl/shared/Ossfuzz26167.asm.frag
@@ -5,8 +5,6 @@
 OpExecutionMode %main OriginUpperLeft
 OpName %sk_Clockwise "sk_Clockwise"
 OpName %main "main"
-OpName %_0_y "_0_y"
-OpName %_1_z "_1_z"
 OpDecorate %sk_Clockwise RelaxedPrecision
 OpDecorate %sk_Clockwise BuiltIn FrontFacing
 %bool = OpTypeBool
@@ -14,16 +12,8 @@
 %sk_Clockwise = OpVariable %_ptr_Input_bool Input
 %void = OpTypeVoid
 %7 = OpTypeFunction %void
-%float = OpTypeFloat 32
-%_ptr_Function_float = OpTypePointer Function %float
-%float_0 = OpConstant %float 0
 %false = OpConstantFalse %bool
 %main = OpFunction %void None %7
 %8 = OpLabel
-%_0_y = OpVariable %_ptr_Function_float Function
-%_1_z = OpVariable %_ptr_Function_float Function
-OpStore %_0_y %float_0
-%14 = OpLoad %float %_0_y
-OpStore %_1_z %14
 OpReturn
 OpFunctionEnd
diff --git a/tests/sksl/shared/Ossfuzz26167.glsl b/tests/sksl/shared/Ossfuzz26167.glsl
index 220ea53..041b24b 100644
--- a/tests/sksl/shared/Ossfuzz26167.glsl
+++ b/tests/sksl/shared/Ossfuzz26167.glsl
@@ -1,6 +1,4 @@
 
 void main() {
-    float _0_y = 0.0;
-    float _1_z = _0_y;
     false;
 }
diff --git a/tests/sksl/shared/Ossfuzz26167.metal b/tests/sksl/shared/Ossfuzz26167.metal
index ecaee12..54215c8 100644
--- a/tests/sksl/shared/Ossfuzz26167.metal
+++ b/tests/sksl/shared/Ossfuzz26167.metal
@@ -9,8 +9,6 @@
 fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
     Outputs _out;
     (void)_out;
-    float _0_y = 0.0;
-    float _1_z = _0_y;
     false;
     return _out;
 }
diff --git a/tests/sksl/shared/OutParams.asm.frag b/tests/sksl/shared/OutParams.asm.frag
index 3e6164a..19f5e17 100644
--- a/tests/sksl/shared/OutParams.asm.frag
+++ b/tests/sksl/shared/OutParams.asm.frag
@@ -11,7 +11,6 @@
 OpMemberName %_UniformBuffer 2 "colorWhite"
 OpName %_entrypoint "_entrypoint"
 OpName %main "main"
-OpName %result "result"
 OpName %h "h"
 OpName %h2 "h2"
 OpName %h3 "h3"
@@ -49,84 +48,84 @@
 OpDecorate %_UniformBuffer Block
 OpDecorate %10 Binding 0
 OpDecorate %10 DescriptorSet 0
-OpDecorate %28 RelaxedPrecision
-OpDecorate %35 RelaxedPrecision
-OpDecorate %42 RelaxedPrecision
-OpDecorate %47 RelaxedPrecision
-OpDecorate %51 RelaxedPrecision
-OpDecorate %56 RelaxedPrecision
-OpDecorate %60 RelaxedPrecision
-OpDecorate %62 RelaxedPrecision
-OpDecorate %66 RelaxedPrecision
-OpDecorate %71 RelaxedPrecision
+OpDecorate %26 RelaxedPrecision
+OpDecorate %33 RelaxedPrecision
+OpDecorate %40 RelaxedPrecision
+OpDecorate %46 RelaxedPrecision
+OpDecorate %50 RelaxedPrecision
+OpDecorate %55 RelaxedPrecision
+OpDecorate %59 RelaxedPrecision
+OpDecorate %61 RelaxedPrecision
+OpDecorate %65 RelaxedPrecision
+OpDecorate %70 RelaxedPrecision
+OpDecorate %74 RelaxedPrecision
 OpDecorate %75 RelaxedPrecision
-OpDecorate %76 RelaxedPrecision
-OpDecorate %73 RelaxedPrecision
-OpDecorate %73 RelaxedPrecision
-OpDecorate %81 RelaxedPrecision
+OpDecorate %72 RelaxedPrecision
+OpDecorate %72 RelaxedPrecision
+OpDecorate %80 RelaxedPrecision
+OpDecorate %83 RelaxedPrecision
 OpDecorate %84 RelaxedPrecision
 OpDecorate %85 RelaxedPrecision
-OpDecorate %86 RelaxedPrecision
-OpDecorate %83 RelaxedPrecision
-OpDecorate %83 RelaxedPrecision
-OpDecorate %91 RelaxedPrecision
+OpDecorate %82 RelaxedPrecision
+OpDecorate %82 RelaxedPrecision
+OpDecorate %90 RelaxedPrecision
+OpDecorate %93 RelaxedPrecision
 OpDecorate %94 RelaxedPrecision
 OpDecorate %95 RelaxedPrecision
 OpDecorate %96 RelaxedPrecision
-OpDecorate %97 RelaxedPrecision
-OpDecorate %93 RelaxedPrecision
-OpDecorate %93 RelaxedPrecision
-OpDecorate %99 RelaxedPrecision
-OpDecorate %104 RelaxedPrecision
-OpDecorate %110 RelaxedPrecision
-OpDecorate %118 RelaxedPrecision
-OpDecorate %125 RelaxedPrecision
-OpDecorate %133 RelaxedPrecision
-OpDecorate %141 RelaxedPrecision
-OpDecorate %146 RelaxedPrecision
-OpDecorate %153 RelaxedPrecision
-OpDecorate %159 RelaxedPrecision
-OpDecorate %163 RelaxedPrecision
-OpDecorate %168 RelaxedPrecision
-OpDecorate %173 RelaxedPrecision
-OpDecorate %177 RelaxedPrecision
-OpDecorate %183 RelaxedPrecision
-OpDecorate %188 RelaxedPrecision
-OpDecorate %195 RelaxedPrecision
-OpDecorate %203 RelaxedPrecision
-OpDecorate %211 RelaxedPrecision
-OpDecorate %218 RelaxedPrecision
-OpDecorate %225 RelaxedPrecision
-OpDecorate %233 RelaxedPrecision
-OpDecorate %241 RelaxedPrecision
-OpDecorate %246 RelaxedPrecision
-OpDecorate %251 RelaxedPrecision
-OpDecorate %253 RelaxedPrecision
-OpDecorate %259 RelaxedPrecision
+OpDecorate %92 RelaxedPrecision
+OpDecorate %92 RelaxedPrecision
+OpDecorate %98 RelaxedPrecision
+OpDecorate %103 RelaxedPrecision
+OpDecorate %109 RelaxedPrecision
+OpDecorate %117 RelaxedPrecision
+OpDecorate %124 RelaxedPrecision
+OpDecorate %132 RelaxedPrecision
+OpDecorate %140 RelaxedPrecision
+OpDecorate %145 RelaxedPrecision
+OpDecorate %152 RelaxedPrecision
+OpDecorate %158 RelaxedPrecision
+OpDecorate %162 RelaxedPrecision
+OpDecorate %167 RelaxedPrecision
+OpDecorate %172 RelaxedPrecision
+OpDecorate %176 RelaxedPrecision
+OpDecorate %182 RelaxedPrecision
+OpDecorate %187 RelaxedPrecision
+OpDecorate %194 RelaxedPrecision
+OpDecorate %202 RelaxedPrecision
+OpDecorate %210 RelaxedPrecision
+OpDecorate %217 RelaxedPrecision
+OpDecorate %224 RelaxedPrecision
+OpDecorate %232 RelaxedPrecision
+OpDecorate %240 RelaxedPrecision
+OpDecorate %245 RelaxedPrecision
+OpDecorate %250 RelaxedPrecision
+OpDecorate %252 RelaxedPrecision
+OpDecorate %258 RelaxedPrecision
+OpDecorate %262 RelaxedPrecision
 OpDecorate %263 RelaxedPrecision
-OpDecorate %264 RelaxedPrecision
+OpDecorate %265 RelaxedPrecision
 OpDecorate %266 RelaxedPrecision
-OpDecorate %267 RelaxedPrecision
+OpDecorate %268 RelaxedPrecision
 OpDecorate %269 RelaxedPrecision
-OpDecorate %270 RelaxedPrecision
-OpDecorate %272 RelaxedPrecision
-OpDecorate %274 RelaxedPrecision
-OpDecorate %276 RelaxedPrecision
-OpDecorate %278 RelaxedPrecision
-OpDecorate %280 RelaxedPrecision
-OpDecorate %282 RelaxedPrecision
-OpDecorate %284 RelaxedPrecision
-OpDecorate %287 RelaxedPrecision
-OpDecorate %314 RelaxedPrecision
-OpDecorate %329 RelaxedPrecision
-OpDecorate %332 RelaxedPrecision
-OpDecorate %335 RelaxedPrecision
-OpDecorate %340 RelaxedPrecision
-OpDecorate %345 RelaxedPrecision
-OpDecorate %349 RelaxedPrecision
-OpDecorate %355 RelaxedPrecision
+OpDecorate %271 RelaxedPrecision
+OpDecorate %273 RelaxedPrecision
+OpDecorate %275 RelaxedPrecision
+OpDecorate %277 RelaxedPrecision
+OpDecorate %279 RelaxedPrecision
+OpDecorate %281 RelaxedPrecision
+OpDecorate %283 RelaxedPrecision
+OpDecorate %286 RelaxedPrecision
+OpDecorate %313 RelaxedPrecision
+OpDecorate %328 RelaxedPrecision
+OpDecorate %331 RelaxedPrecision
+OpDecorate %334 RelaxedPrecision
+OpDecorate %339 RelaxedPrecision
+OpDecorate %344 RelaxedPrecision
+OpDecorate %348 RelaxedPrecision
+OpDecorate %354 RelaxedPrecision
+OpDecorate %356 RelaxedPrecision
 OpDecorate %357 RelaxedPrecision
-OpDecorate %358 RelaxedPrecision
 %float = OpTypeFloat 32
 %v4float = OpTypeVector %float 4
 %_ptr_Output_v4float = OpTypePointer Output %v4float
@@ -140,7 +139,6 @@
 %void = OpTypeVoid
 %15 = OpTypeFunction %void
 %18 = OpTypeFunction %v4float
-%_ptr_Function_v4float = OpTypePointer Function %v4float
 %_ptr_Function_float = OpTypePointer Function %float
 %_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
 %int = OpTypeInt 32 1
@@ -150,6 +148,7 @@
 %_ptr_Function_v2float = OpTypePointer Function %v2float
 %v3float = OpTypeVector %float 3
 %_ptr_Function_v3float = OpTypePointer Function %v3float
+%_ptr_Function_v4float = OpTypePointer Function %v4float
 %int_1 = OpConstant %int 1
 %mat2v2float = OpTypeMatrix %v2float 2
 %_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
@@ -184,7 +183,6 @@
 OpFunctionEnd
 %main = OpFunction %v4float None %18
 %19 = OpLabel
-%result = OpVariable %_ptr_Function_v4float Function
 %h = OpVariable %_ptr_Function_float Function
 %h2 = OpVariable %_ptr_Function_v2float Function
 %h3 = OpVariable %_ptr_Function_v3float Function
@@ -208,351 +206,351 @@
 %b3 = OpVariable %_ptr_Function_v3bool Function
 %b4 = OpVariable %_ptr_Function_v4bool Function
 %ok = OpVariable %_ptr_Function_bool Function
-%350 = OpVariable %_ptr_Function_v4float Function
-%24 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%28 = OpLoad %v4float %24
-%29 = OpCompositeExtract %float %28 0
-OpStore %h %29
-%34 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%35 = OpLoad %v4float %34
-%36 = OpCompositeExtract %float %35 1
-%37 = OpCompositeConstruct %v2float %36 %36
-OpStore %h2 %37
-%41 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%42 = OpLoad %v4float %41
-%43 = OpCompositeExtract %float %42 2
-%44 = OpCompositeConstruct %v3float %43 %43 %43
-OpStore %h3 %44
-%46 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%47 = OpLoad %v4float %46
-%48 = OpCompositeExtract %float %47 3
-%49 = OpCompositeConstruct %v4float %48 %48 %48 %48
-OpStore %h4 %49
-%50 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%51 = OpLoad %v4float %50
-%52 = OpCompositeExtract %float %51 0
-%53 = OpAccessChain %_ptr_Function_float %h3 %int_1
-OpStore %53 %52
-%55 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%56 = OpLoad %v4float %55
-%57 = OpCompositeExtract %float %56 1
-%58 = OpCompositeConstruct %v2float %57 %57
-%59 = OpLoad %v3float %h3
-%60 = OpVectorShuffle %v3float %59 %58 3 1 4
-OpStore %h3 %60
-%61 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%62 = OpLoad %v4float %61
-%63 = OpCompositeExtract %float %62 3
-%64 = OpCompositeConstruct %v4float %63 %63 %63 %63
-%65 = OpLoad %v4float %h4
-%66 = OpVectorShuffle %v4float %65 %64 6 7 4 5
-OpStore %h4 %66
-%70 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%71 = OpLoad %v4float %70
-%72 = OpCompositeExtract %float %71 0
-%75 = OpCompositeConstruct %v2float %72 %float_0
-%76 = OpCompositeConstruct %v2float %float_0 %72
-%73 = OpCompositeConstruct %mat2v2float %75 %76
-OpStore %h2x2 %73
-%80 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%81 = OpLoad %v4float %80
-%82 = OpCompositeExtract %float %81 1
-%84 = OpCompositeConstruct %v3float %82 %float_0 %float_0
-%85 = OpCompositeConstruct %v3float %float_0 %82 %float_0
-%86 = OpCompositeConstruct %v3float %float_0 %float_0 %82
-%83 = OpCompositeConstruct %mat3v3float %84 %85 %86
-OpStore %h3x3 %83
-%90 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%91 = OpLoad %v4float %90
-%92 = OpCompositeExtract %float %91 2
-%94 = OpCompositeConstruct %v4float %92 %float_0 %float_0 %float_0
-%95 = OpCompositeConstruct %v4float %float_0 %92 %float_0 %float_0
-%96 = OpCompositeConstruct %v4float %float_0 %float_0 %92 %float_0
-%97 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %92
-%93 = OpCompositeConstruct %mat4v4float %94 %95 %96 %97
-OpStore %h4x4 %93
-%98 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%99 = OpLoad %v4float %98
-%100 = OpCompositeExtract %float %99 2
-%101 = OpCompositeConstruct %v3float %100 %100 %100
-%102 = OpAccessChain %_ptr_Function_v3float %h3x3 %int_1
-OpStore %102 %101
-%103 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%104 = OpLoad %v4float %103
-%105 = OpCompositeExtract %float %104 0
-%107 = OpAccessChain %_ptr_Function_v4float %h4x4 %int_3
-%108 = OpAccessChain %_ptr_Function_float %107 %int_3
-OpStore %108 %105
-%109 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%110 = OpLoad %v4float %109
-%111 = OpCompositeExtract %float %110 0
-%113 = OpAccessChain %_ptr_Function_v2float %h2x2 %int_0
-%114 = OpAccessChain %_ptr_Function_float %113 %int_0
-OpStore %114 %111
-%117 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%118 = OpLoad %v4float %117
-%119 = OpCompositeExtract %float %118 0
-%120 = OpConvertFToS %int %119
-OpStore %i %120
-%124 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%125 = OpLoad %v4float %124
-%126 = OpCompositeExtract %float %125 1
-%127 = OpConvertFToS %int %126
-%128 = OpCompositeConstruct %v2int %127 %127
-OpStore %i2 %128
-%132 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%133 = OpLoad %v4float %132
-%134 = OpCompositeExtract %float %133 2
-%135 = OpConvertFToS %int %134
-%136 = OpCompositeConstruct %v3int %135 %135 %135
-OpStore %i3 %136
-%140 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%141 = OpLoad %v4float %140
-%142 = OpCompositeExtract %float %141 3
-%143 = OpConvertFToS %int %142
-%144 = OpCompositeConstruct %v4int %143 %143 %143 %143
-OpStore %i4 %144
-%145 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%146 = OpLoad %v4float %145
-%147 = OpCompositeExtract %float %146 2
-%148 = OpConvertFToS %int %147
-%149 = OpCompositeConstruct %v3int %148 %148 %148
-%150 = OpLoad %v4int %i4
-%151 = OpVectorShuffle %v4int %150 %149 4 5 6 3
-OpStore %i4 %151
-%152 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%153 = OpLoad %v4float %152
-%154 = OpCompositeExtract %float %153 0
-%155 = OpConvertFToS %int %154
-%156 = OpAccessChain %_ptr_Function_int %i2 %int_1
-OpStore %156 %155
-%158 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%159 = OpLoad %v4float %158
-%160 = OpCompositeExtract %float %159 0
-OpStore %f %160
-%162 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%163 = OpLoad %v4float %162
-%164 = OpCompositeExtract %float %163 1
-%165 = OpCompositeConstruct %v2float %164 %164
-OpStore %f2 %165
-%167 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%168 = OpLoad %v4float %167
-%169 = OpCompositeExtract %float %168 2
-%170 = OpCompositeConstruct %v3float %169 %169 %169
-OpStore %f3 %170
-%172 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%173 = OpLoad %v4float %172
-%174 = OpCompositeExtract %float %173 3
-%175 = OpCompositeConstruct %v4float %174 %174 %174 %174
-OpStore %f4 %175
-%176 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%177 = OpLoad %v4float %176
-%178 = OpCompositeExtract %float %177 1
-%179 = OpCompositeConstruct %v2float %178 %178
-%180 = OpLoad %v3float %f3
-%181 = OpVectorShuffle %v3float %180 %179 3 4 2
-OpStore %f3 %181
-%182 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%183 = OpLoad %v4float %182
-%184 = OpCompositeExtract %float %183 0
-%185 = OpAccessChain %_ptr_Function_float %f2 %int_0
-OpStore %185 %184
-%187 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%188 = OpLoad %v4float %187
-%189 = OpCompositeExtract %float %188 0
-%191 = OpCompositeConstruct %v2float %189 %float_0
-%192 = OpCompositeConstruct %v2float %float_0 %189
-%190 = OpCompositeConstruct %mat2v2float %191 %192
-OpStore %f2x2 %190
-%194 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%195 = OpLoad %v4float %194
-%196 = OpCompositeExtract %float %195 1
-%198 = OpCompositeConstruct %v3float %196 %float_0 %float_0
-%199 = OpCompositeConstruct %v3float %float_0 %196 %float_0
-%200 = OpCompositeConstruct %v3float %float_0 %float_0 %196
-%197 = OpCompositeConstruct %mat3v3float %198 %199 %200
-OpStore %f3x3 %197
-%202 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%203 = OpLoad %v4float %202
-%204 = OpCompositeExtract %float %203 2
-%206 = OpCompositeConstruct %v4float %204 %float_0 %float_0 %float_0
-%207 = OpCompositeConstruct %v4float %float_0 %204 %float_0 %float_0
-%208 = OpCompositeConstruct %v4float %float_0 %float_0 %204 %float_0
-%209 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %204
-%205 = OpCompositeConstruct %mat4v4float %206 %207 %208 %209
-OpStore %f4x4 %205
-%210 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%211 = OpLoad %v4float %210
-%212 = OpCompositeExtract %float %211 0
-%213 = OpAccessChain %_ptr_Function_v2float %f2x2 %int_0
-%214 = OpAccessChain %_ptr_Function_float %213 %int_0
-OpStore %214 %212
-%217 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%218 = OpLoad %v4float %217
-%219 = OpCompositeExtract %float %218 0
-%220 = OpFUnordNotEqual %bool %219 %float_0
-OpStore %b %220
-%224 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%225 = OpLoad %v4float %224
-%226 = OpCompositeExtract %float %225 1
-%227 = OpFUnordNotEqual %bool %226 %float_0
-%228 = OpCompositeConstruct %v2bool %227 %227
-OpStore %b2 %228
-%232 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%233 = OpLoad %v4float %232
-%234 = OpCompositeExtract %float %233 2
-%235 = OpFUnordNotEqual %bool %234 %float_0
-%236 = OpCompositeConstruct %v3bool %235 %235 %235
-OpStore %b3 %236
-%240 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%241 = OpLoad %v4float %240
-%242 = OpCompositeExtract %float %241 3
-%243 = OpFUnordNotEqual %bool %242 %float_0
-%244 = OpCompositeConstruct %v4bool %243 %243 %243 %243
-OpStore %b4 %244
-%245 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%246 = OpLoad %v4float %245
-%247 = OpCompositeExtract %float %246 1
-%248 = OpFUnordNotEqual %bool %247 %float_0
-%249 = OpCompositeConstruct %v2bool %248 %248
-%250 = OpLoad %v4bool %b4
-%251 = OpVectorShuffle %v4bool %250 %249 4 1 2 5
-OpStore %b4 %251
-%252 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%253 = OpLoad %v4float %252
-%254 = OpCompositeExtract %float %253 0
-%255 = OpFUnordNotEqual %bool %254 %float_0
-%256 = OpAccessChain %_ptr_Function_bool %b3 %int_2
-OpStore %256 %255
+%349 = OpVariable %_ptr_Function_v4float Function
+%22 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%26 = OpLoad %v4float %22
+%27 = OpCompositeExtract %float %26 0
+OpStore %h %27
+%32 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%33 = OpLoad %v4float %32
+%34 = OpCompositeExtract %float %33 1
+%35 = OpCompositeConstruct %v2float %34 %34
+OpStore %h2 %35
+%39 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%40 = OpLoad %v4float %39
+%41 = OpCompositeExtract %float %40 2
+%42 = OpCompositeConstruct %v3float %41 %41 %41
+OpStore %h3 %42
+%45 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%46 = OpLoad %v4float %45
+%47 = OpCompositeExtract %float %46 3
+%48 = OpCompositeConstruct %v4float %47 %47 %47 %47
+OpStore %h4 %48
+%49 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%50 = OpLoad %v4float %49
+%51 = OpCompositeExtract %float %50 0
+%52 = OpAccessChain %_ptr_Function_float %h3 %int_1
+OpStore %52 %51
+%54 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%55 = OpLoad %v4float %54
+%56 = OpCompositeExtract %float %55 1
+%57 = OpCompositeConstruct %v2float %56 %56
+%58 = OpLoad %v3float %h3
+%59 = OpVectorShuffle %v3float %58 %57 3 1 4
+OpStore %h3 %59
+%60 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%61 = OpLoad %v4float %60
+%62 = OpCompositeExtract %float %61 3
+%63 = OpCompositeConstruct %v4float %62 %62 %62 %62
+%64 = OpLoad %v4float %h4
+%65 = OpVectorShuffle %v4float %64 %63 6 7 4 5
+OpStore %h4 %65
+%69 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%70 = OpLoad %v4float %69
+%71 = OpCompositeExtract %float %70 0
+%74 = OpCompositeConstruct %v2float %71 %float_0
+%75 = OpCompositeConstruct %v2float %float_0 %71
+%72 = OpCompositeConstruct %mat2v2float %74 %75
+OpStore %h2x2 %72
+%79 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%80 = OpLoad %v4float %79
+%81 = OpCompositeExtract %float %80 1
+%83 = OpCompositeConstruct %v3float %81 %float_0 %float_0
+%84 = OpCompositeConstruct %v3float %float_0 %81 %float_0
+%85 = OpCompositeConstruct %v3float %float_0 %float_0 %81
+%82 = OpCompositeConstruct %mat3v3float %83 %84 %85
+OpStore %h3x3 %82
+%89 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%90 = OpLoad %v4float %89
+%91 = OpCompositeExtract %float %90 2
+%93 = OpCompositeConstruct %v4float %91 %float_0 %float_0 %float_0
+%94 = OpCompositeConstruct %v4float %float_0 %91 %float_0 %float_0
+%95 = OpCompositeConstruct %v4float %float_0 %float_0 %91 %float_0
+%96 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %91
+%92 = OpCompositeConstruct %mat4v4float %93 %94 %95 %96
+OpStore %h4x4 %92
+%97 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%98 = OpLoad %v4float %97
+%99 = OpCompositeExtract %float %98 2
+%100 = OpCompositeConstruct %v3float %99 %99 %99
+%101 = OpAccessChain %_ptr_Function_v3float %h3x3 %int_1
+OpStore %101 %100
+%102 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%103 = OpLoad %v4float %102
+%104 = OpCompositeExtract %float %103 0
+%106 = OpAccessChain %_ptr_Function_v4float %h4x4 %int_3
+%107 = OpAccessChain %_ptr_Function_float %106 %int_3
+OpStore %107 %104
+%108 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%109 = OpLoad %v4float %108
+%110 = OpCompositeExtract %float %109 0
+%112 = OpAccessChain %_ptr_Function_v2float %h2x2 %int_0
+%113 = OpAccessChain %_ptr_Function_float %112 %int_0
+OpStore %113 %110
+%116 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%117 = OpLoad %v4float %116
+%118 = OpCompositeExtract %float %117 0
+%119 = OpConvertFToS %int %118
+OpStore %i %119
+%123 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%124 = OpLoad %v4float %123
+%125 = OpCompositeExtract %float %124 1
+%126 = OpConvertFToS %int %125
+%127 = OpCompositeConstruct %v2int %126 %126
+OpStore %i2 %127
+%131 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%132 = OpLoad %v4float %131
+%133 = OpCompositeExtract %float %132 2
+%134 = OpConvertFToS %int %133
+%135 = OpCompositeConstruct %v3int %134 %134 %134
+OpStore %i3 %135
+%139 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%140 = OpLoad %v4float %139
+%141 = OpCompositeExtract %float %140 3
+%142 = OpConvertFToS %int %141
+%143 = OpCompositeConstruct %v4int %142 %142 %142 %142
+OpStore %i4 %143
+%144 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%145 = OpLoad %v4float %144
+%146 = OpCompositeExtract %float %145 2
+%147 = OpConvertFToS %int %146
+%148 = OpCompositeConstruct %v3int %147 %147 %147
+%149 = OpLoad %v4int %i4
+%150 = OpVectorShuffle %v4int %149 %148 4 5 6 3
+OpStore %i4 %150
+%151 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%152 = OpLoad %v4float %151
+%153 = OpCompositeExtract %float %152 0
+%154 = OpConvertFToS %int %153
+%155 = OpAccessChain %_ptr_Function_int %i2 %int_1
+OpStore %155 %154
+%157 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%158 = OpLoad %v4float %157
+%159 = OpCompositeExtract %float %158 0
+OpStore %f %159
+%161 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%162 = OpLoad %v4float %161
+%163 = OpCompositeExtract %float %162 1
+%164 = OpCompositeConstruct %v2float %163 %163
+OpStore %f2 %164
+%166 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%167 = OpLoad %v4float %166
+%168 = OpCompositeExtract %float %167 2
+%169 = OpCompositeConstruct %v3float %168 %168 %168
+OpStore %f3 %169
+%171 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%172 = OpLoad %v4float %171
+%173 = OpCompositeExtract %float %172 3
+%174 = OpCompositeConstruct %v4float %173 %173 %173 %173
+OpStore %f4 %174
+%175 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%176 = OpLoad %v4float %175
+%177 = OpCompositeExtract %float %176 1
+%178 = OpCompositeConstruct %v2float %177 %177
+%179 = OpLoad %v3float %f3
+%180 = OpVectorShuffle %v3float %179 %178 3 4 2
+OpStore %f3 %180
+%181 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%182 = OpLoad %v4float %181
+%183 = OpCompositeExtract %float %182 0
+%184 = OpAccessChain %_ptr_Function_float %f2 %int_0
+OpStore %184 %183
+%186 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%187 = OpLoad %v4float %186
+%188 = OpCompositeExtract %float %187 0
+%190 = OpCompositeConstruct %v2float %188 %float_0
+%191 = OpCompositeConstruct %v2float %float_0 %188
+%189 = OpCompositeConstruct %mat2v2float %190 %191
+OpStore %f2x2 %189
+%193 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%194 = OpLoad %v4float %193
+%195 = OpCompositeExtract %float %194 1
+%197 = OpCompositeConstruct %v3float %195 %float_0 %float_0
+%198 = OpCompositeConstruct %v3float %float_0 %195 %float_0
+%199 = OpCompositeConstruct %v3float %float_0 %float_0 %195
+%196 = OpCompositeConstruct %mat3v3float %197 %198 %199
+OpStore %f3x3 %196
+%201 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%202 = OpLoad %v4float %201
+%203 = OpCompositeExtract %float %202 2
+%205 = OpCompositeConstruct %v4float %203 %float_0 %float_0 %float_0
+%206 = OpCompositeConstruct %v4float %float_0 %203 %float_0 %float_0
+%207 = OpCompositeConstruct %v4float %float_0 %float_0 %203 %float_0
+%208 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %203
+%204 = OpCompositeConstruct %mat4v4float %205 %206 %207 %208
+OpStore %f4x4 %204
+%209 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%210 = OpLoad %v4float %209
+%211 = OpCompositeExtract %float %210 0
+%212 = OpAccessChain %_ptr_Function_v2float %f2x2 %int_0
+%213 = OpAccessChain %_ptr_Function_float %212 %int_0
+OpStore %213 %211
+%216 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%217 = OpLoad %v4float %216
+%218 = OpCompositeExtract %float %217 0
+%219 = OpFUnordNotEqual %bool %218 %float_0
+OpStore %b %219
+%223 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%224 = OpLoad %v4float %223
+%225 = OpCompositeExtract %float %224 1
+%226 = OpFUnordNotEqual %bool %225 %float_0
+%227 = OpCompositeConstruct %v2bool %226 %226
+OpStore %b2 %227
+%231 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%232 = OpLoad %v4float %231
+%233 = OpCompositeExtract %float %232 2
+%234 = OpFUnordNotEqual %bool %233 %float_0
+%235 = OpCompositeConstruct %v3bool %234 %234 %234
+OpStore %b3 %235
+%239 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%240 = OpLoad %v4float %239
+%241 = OpCompositeExtract %float %240 3
+%242 = OpFUnordNotEqual %bool %241 %float_0
+%243 = OpCompositeConstruct %v4bool %242 %242 %242 %242
+OpStore %b4 %243
+%244 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%245 = OpLoad %v4float %244
+%246 = OpCompositeExtract %float %245 1
+%247 = OpFUnordNotEqual %bool %246 %float_0
+%248 = OpCompositeConstruct %v2bool %247 %247
+%249 = OpLoad %v4bool %b4
+%250 = OpVectorShuffle %v4bool %249 %248 4 1 2 5
+OpStore %b4 %250
+%251 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%252 = OpLoad %v4float %251
+%253 = OpCompositeExtract %float %252 0
+%254 = OpFUnordNotEqual %bool %253 %float_0
+%255 = OpAccessChain %_ptr_Function_bool %b3 %int_2
+OpStore %255 %254
 OpStore %ok %true
-%259 = OpLoad %bool %ok
-OpSelectionMerge %261 None
-OpBranchConditional %259 %260 %261
+%258 = OpLoad %bool %ok
+OpSelectionMerge %260 None
+OpBranchConditional %258 %259 %260
+%259 = OpLabel
+%262 = OpLoad %float %h
+%263 = OpLoad %v2float %h2
+%264 = OpCompositeExtract %float %263 0
+%265 = OpFMul %float %262 %264
+%266 = OpLoad %v3float %h3
+%267 = OpCompositeExtract %float %266 0
+%268 = OpFMul %float %265 %267
+%269 = OpLoad %v4float %h4
+%270 = OpCompositeExtract %float %269 0
+%271 = OpFMul %float %268 %270
+%272 = OpAccessChain %_ptr_Function_v2float %h2x2 %int_0
+%273 = OpLoad %v2float %272
+%274 = OpCompositeExtract %float %273 0
+%275 = OpFMul %float %271 %274
+%276 = OpAccessChain %_ptr_Function_v3float %h3x3 %int_0
+%277 = OpLoad %v3float %276
+%278 = OpCompositeExtract %float %277 0
+%279 = OpFMul %float %275 %278
+%280 = OpAccessChain %_ptr_Function_v4float %h4x4 %int_0
+%281 = OpLoad %v4float %280
+%282 = OpCompositeExtract %float %281 0
+%283 = OpFMul %float %279 %282
+%284 = OpFOrdEqual %bool %float_1 %283
+OpBranch %260
 %260 = OpLabel
-%263 = OpLoad %float %h
-%264 = OpLoad %v2float %h2
-%265 = OpCompositeExtract %float %264 0
-%266 = OpFMul %float %263 %265
-%267 = OpLoad %v3float %h3
-%268 = OpCompositeExtract %float %267 0
-%269 = OpFMul %float %266 %268
-%270 = OpLoad %v4float %h4
-%271 = OpCompositeExtract %float %270 0
-%272 = OpFMul %float %269 %271
-%273 = OpAccessChain %_ptr_Function_v2float %h2x2 %int_0
-%274 = OpLoad %v2float %273
-%275 = OpCompositeExtract %float %274 0
-%276 = OpFMul %float %272 %275
-%277 = OpAccessChain %_ptr_Function_v3float %h3x3 %int_0
-%278 = OpLoad %v3float %277
-%279 = OpCompositeExtract %float %278 0
-%280 = OpFMul %float %276 %279
-%281 = OpAccessChain %_ptr_Function_v4float %h4x4 %int_0
-%282 = OpLoad %v4float %281
-%283 = OpCompositeExtract %float %282 0
-%284 = OpFMul %float %280 %283
-%285 = OpFOrdEqual %bool %float_1 %284
-OpBranch %261
-%261 = OpLabel
-%286 = OpPhi %bool %false %19 %285 %260
-OpStore %ok %286
-%287 = OpLoad %bool %ok
-OpSelectionMerge %289 None
-OpBranchConditional %287 %288 %289
+%285 = OpPhi %bool %false %19 %284 %259
+OpStore %ok %285
+%286 = OpLoad %bool %ok
+OpSelectionMerge %288 None
+OpBranchConditional %286 %287 %288
+%287 = OpLabel
+%289 = OpLoad %float %f
+%290 = OpLoad %v2float %f2
+%291 = OpCompositeExtract %float %290 0
+%292 = OpFMul %float %289 %291
+%293 = OpLoad %v3float %f3
+%294 = OpCompositeExtract %float %293 0
+%295 = OpFMul %float %292 %294
+%296 = OpLoad %v4float %f4
+%297 = OpCompositeExtract %float %296 0
+%298 = OpFMul %float %295 %297
+%299 = OpAccessChain %_ptr_Function_v2float %f2x2 %int_0
+%300 = OpLoad %v2float %299
+%301 = OpCompositeExtract %float %300 0
+%302 = OpFMul %float %298 %301
+%303 = OpAccessChain %_ptr_Function_v3float %f3x3 %int_0
+%304 = OpLoad %v3float %303
+%305 = OpCompositeExtract %float %304 0
+%306 = OpFMul %float %302 %305
+%307 = OpAccessChain %_ptr_Function_v4float %f4x4 %int_0
+%308 = OpLoad %v4float %307
+%309 = OpCompositeExtract %float %308 0
+%310 = OpFMul %float %306 %309
+%311 = OpFOrdEqual %bool %float_1 %310
+OpBranch %288
 %288 = OpLabel
-%290 = OpLoad %float %f
-%291 = OpLoad %v2float %f2
-%292 = OpCompositeExtract %float %291 0
-%293 = OpFMul %float %290 %292
-%294 = OpLoad %v3float %f3
-%295 = OpCompositeExtract %float %294 0
-%296 = OpFMul %float %293 %295
-%297 = OpLoad %v4float %f4
-%298 = OpCompositeExtract %float %297 0
-%299 = OpFMul %float %296 %298
-%300 = OpAccessChain %_ptr_Function_v2float %f2x2 %int_0
-%301 = OpLoad %v2float %300
-%302 = OpCompositeExtract %float %301 0
-%303 = OpFMul %float %299 %302
-%304 = OpAccessChain %_ptr_Function_v3float %f3x3 %int_0
-%305 = OpLoad %v3float %304
-%306 = OpCompositeExtract %float %305 0
-%307 = OpFMul %float %303 %306
-%308 = OpAccessChain %_ptr_Function_v4float %f4x4 %int_0
-%309 = OpLoad %v4float %308
-%310 = OpCompositeExtract %float %309 0
-%311 = OpFMul %float %307 %310
-%312 = OpFOrdEqual %bool %float_1 %311
-OpBranch %289
-%289 = OpLabel
-%313 = OpPhi %bool %false %261 %312 %288
-OpStore %ok %313
-%314 = OpLoad %bool %ok
-OpSelectionMerge %316 None
-OpBranchConditional %314 %315 %316
+%312 = OpPhi %bool %false %260 %311 %287
+OpStore %ok %312
+%313 = OpLoad %bool %ok
+OpSelectionMerge %315 None
+OpBranchConditional %313 %314 %315
+%314 = OpLabel
+%316 = OpLoad %int %i
+%317 = OpLoad %v2int %i2
+%318 = OpCompositeExtract %int %317 0
+%319 = OpIMul %int %316 %318
+%320 = OpLoad %v3int %i3
+%321 = OpCompositeExtract %int %320 0
+%322 = OpIMul %int %319 %321
+%323 = OpLoad %v4int %i4
+%324 = OpCompositeExtract %int %323 0
+%325 = OpIMul %int %322 %324
+%326 = OpIEqual %bool %int_1 %325
+OpBranch %315
 %315 = OpLabel
-%317 = OpLoad %int %i
-%318 = OpLoad %v2int %i2
-%319 = OpCompositeExtract %int %318 0
-%320 = OpIMul %int %317 %319
-%321 = OpLoad %v3int %i3
-%322 = OpCompositeExtract %int %321 0
-%323 = OpIMul %int %320 %322
-%324 = OpLoad %v4int %i4
-%325 = OpCompositeExtract %int %324 0
-%326 = OpIMul %int %323 %325
-%327 = OpIEqual %bool %int_1 %326
-OpBranch %316
-%316 = OpLabel
-%328 = OpPhi %bool %false %289 %327 %315
-OpStore %ok %328
-%329 = OpLoad %bool %ok
-OpSelectionMerge %331 None
-OpBranchConditional %329 %330 %331
-%330 = OpLabel
-%332 = OpLoad %bool %b
-OpSelectionMerge %334 None
-OpBranchConditional %332 %333 %334
+%327 = OpPhi %bool %false %288 %326 %314
+OpStore %ok %327
+%328 = OpLoad %bool %ok
+OpSelectionMerge %330 None
+OpBranchConditional %328 %329 %330
+%329 = OpLabel
+%331 = OpLoad %bool %b
+OpSelectionMerge %333 None
+OpBranchConditional %331 %332 %333
+%332 = OpLabel
+%334 = OpLoad %v2bool %b2
+%335 = OpCompositeExtract %bool %334 0
+OpBranch %333
 %333 = OpLabel
-%335 = OpLoad %v2bool %b2
-%336 = OpCompositeExtract %bool %335 0
-OpBranch %334
-%334 = OpLabel
-%337 = OpPhi %bool %false %330 %336 %333
-OpSelectionMerge %339 None
-OpBranchConditional %337 %338 %339
+%336 = OpPhi %bool %false %329 %335 %332
+OpSelectionMerge %338 None
+OpBranchConditional %336 %337 %338
+%337 = OpLabel
+%339 = OpLoad %v3bool %b3
+%340 = OpCompositeExtract %bool %339 0
+OpBranch %338
 %338 = OpLabel
-%340 = OpLoad %v3bool %b3
-%341 = OpCompositeExtract %bool %340 0
-OpBranch %339
-%339 = OpLabel
-%342 = OpPhi %bool %false %334 %341 %338
-OpSelectionMerge %344 None
-OpBranchConditional %342 %343 %344
+%341 = OpPhi %bool %false %333 %340 %337
+OpSelectionMerge %343 None
+OpBranchConditional %341 %342 %343
+%342 = OpLabel
+%344 = OpLoad %v4bool %b4
+%345 = OpCompositeExtract %bool %344 0
+OpBranch %343
 %343 = OpLabel
-%345 = OpLoad %v4bool %b4
-%346 = OpCompositeExtract %bool %345 0
-OpBranch %344
-%344 = OpLabel
-%347 = OpPhi %bool %false %339 %346 %343
-OpBranch %331
-%331 = OpLabel
-%348 = OpPhi %bool %false %316 %347 %344
-OpStore %ok %348
-%349 = OpLoad %bool %ok
-OpSelectionMerge %353 None
-OpBranchConditional %349 %351 %352
+%346 = OpPhi %bool %false %338 %345 %342
+OpBranch %330
+%330 = OpLabel
+%347 = OpPhi %bool %false %315 %346 %343
+OpStore %ok %347
+%348 = OpLoad %bool %ok
+OpSelectionMerge %352 None
+OpBranchConditional %348 %350 %351
+%350 = OpLabel
+%353 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
+%354 = OpLoad %v4float %353
+OpStore %349 %354
+OpBranch %352
 %351 = OpLabel
-%354 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
-%355 = OpLoad %v4float %354
-OpStore %350 %355
-OpBranch %353
+%355 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
+%356 = OpLoad %v4float %355
+OpStore %349 %356
+OpBranch %352
 %352 = OpLabel
-%356 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
-%357 = OpLoad %v4float %356
-OpStore %350 %357
-OpBranch %353
-%353 = OpLabel
-%358 = OpLoad %v4float %350
-OpReturnValue %358
+%357 = OpLoad %v4float %349
+OpReturnValue %357
 OpFunctionEnd
diff --git a/tests/sksl/shared/OutParams.glsl b/tests/sksl/shared/OutParams.glsl
index 1f29c2c..382f652 100644
--- a/tests/sksl/shared/OutParams.glsl
+++ b/tests/sksl/shared/OutParams.glsl
@@ -4,7 +4,6 @@
 uniform vec4 colorRed;
 uniform vec4 colorWhite;
 vec4 main() {
-    vec4 result;
     float h;
     h = colorWhite.x;
     false;
diff --git a/tests/sksl/shared/OutParams.metal b/tests/sksl/shared/OutParams.metal
index 8bdb2bd..5f2b1c7 100644
--- a/tests/sksl/shared/OutParams.metal
+++ b/tests/sksl/shared/OutParams.metal
@@ -15,7 +15,6 @@
 fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
     Outputs _out;
     (void)_out;
-    float4 result;
     float h;
     h = _uniforms.colorWhite.x;
     false;
diff --git a/tests/sksl/shared/ScopedSymbol.asm.frag b/tests/sksl/shared/ScopedSymbol.asm.frag
index e8718c5..b4a67d5 100644
--- a/tests/sksl/shared/ScopedSymbol.asm.frag
+++ b/tests/sksl/shared/ScopedSymbol.asm.frag
@@ -5,7 +5,6 @@
 OpExecutionMode %main OriginUpperLeft
 OpName %sk_Clockwise "sk_Clockwise"
 OpName %main "main"
-OpName %x "x"
 OpDecorate %sk_Clockwise RelaxedPrecision
 OpDecorate %sk_Clockwise BuiltIn FrontFacing
 %bool = OpTypeBool
@@ -13,10 +12,7 @@
 %sk_Clockwise = OpVariable %_ptr_Input_bool Input
 %void = OpTypeVoid
 %7 = OpTypeFunction %void
-%int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
 %main = OpFunction %void None %7
 %8 = OpLabel
-%x = OpVariable %_ptr_Function_int Function
 OpReturn
 OpFunctionEnd
diff --git a/tests/sksl/shared/ScopedSymbol.glsl b/tests/sksl/shared/ScopedSymbol.glsl
index cd55abe..2933520 100644
--- a/tests/sksl/shared/ScopedSymbol.glsl
+++ b/tests/sksl/shared/ScopedSymbol.glsl
@@ -1,4 +1,3 @@
 
 void main() {
-    int x;
 }
diff --git a/tests/sksl/shared/ScopedSymbol.metal b/tests/sksl/shared/ScopedSymbol.metal
index fa417c5..2402b80 100644
--- a/tests/sksl/shared/ScopedSymbol.metal
+++ b/tests/sksl/shared/ScopedSymbol.metal
@@ -9,6 +9,5 @@
 fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
     Outputs _out;
     (void)_out;
-    int x;
     return _out;
 }
diff --git a/tests/sksl/shared/StaticIf.asm.frag b/tests/sksl/shared/StaticIf.asm.frag
index fe4509c..73002d3 100644
--- a/tests/sksl/shared/StaticIf.asm.frag
+++ b/tests/sksl/shared/StaticIf.asm.frag
@@ -11,8 +11,6 @@
 OpName %_entrypoint "_entrypoint"
 OpName %main "main"
 OpName %result "result"
-OpName %x "x"
-OpName %y "y"
 OpDecorate %sk_FragColor RelaxedPrecision
 OpDecorate %sk_FragColor Location 0
 OpDecorate %sk_FragColor Index 0
@@ -26,8 +24,8 @@
 OpDecorate %10 Binding 0
 OpDecorate %10 DescriptorSet 0
 OpDecorate %26 RelaxedPrecision
-OpDecorate %34 RelaxedPrecision
-OpDecorate %35 RelaxedPrecision
+OpDecorate %29 RelaxedPrecision
+OpDecorate %30 RelaxedPrecision
 %float = OpTypeFloat 32
 %v4float = OpTypeVector %float 4
 %_ptr_Output_v4float = OpTypePointer Output %v4float
@@ -45,9 +43,6 @@
 %_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
 %int = OpTypeInt 32 1
 %int_0 = OpConstant %int 0
-%_ptr_Function_float = OpTypePointer Function %float
-%float_5 = OpConstant %float 5
-%float_10 = OpConstant %float 10
 %int_1 = OpConstant %int 1
 %_entrypoint = OpFunction %void None %15
 %16 = OpLabel
@@ -58,16 +53,12 @@
 %main = OpFunction %v4float None %18
 %19 = OpLabel
 %result = OpVariable %_ptr_Function_v4float Function
-%x = OpVariable %_ptr_Function_float Function
-%y = OpVariable %_ptr_Function_float Function
 %22 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
 %26 = OpLoad %v4float %22
 OpStore %result %26
-OpStore %x %float_5
-OpStore %y %float_10
-%32 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
-%34 = OpLoad %v4float %32
-OpStore %result %34
-%35 = OpLoad %v4float %result
-OpReturnValue %35
+%27 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
+%29 = OpLoad %v4float %27
+OpStore %result %29
+%30 = OpLoad %v4float %result
+OpReturnValue %30
 OpFunctionEnd
diff --git a/tests/sksl/shared/StaticIf.glsl b/tests/sksl/shared/StaticIf.glsl
index 1271dc1..106039a 100644
--- a/tests/sksl/shared/StaticIf.glsl
+++ b/tests/sksl/shared/StaticIf.glsl
@@ -4,8 +4,6 @@
 uniform vec4 colorGreen;
 vec4 main() {
     vec4 result = colorRed;
-    const float x = 5.0;
-    const float y = 10.0;
     {
         result = colorGreen;
     }
diff --git a/tests/sksl/shared/StaticIf.metal b/tests/sksl/shared/StaticIf.metal
index 664f99b..4704651 100644
--- a/tests/sksl/shared/StaticIf.metal
+++ b/tests/sksl/shared/StaticIf.metal
@@ -15,8 +15,6 @@
     Outputs _out;
     (void)_out;
     float4 result = _uniforms.colorRed;
-    const float x = 5.0;
-    const float y = 10.0;
     {
         result = _uniforms.colorGreen;
     }
diff --git a/tests/sksl/shared/SwizzleByConstantIndex.asm.frag b/tests/sksl/shared/SwizzleByConstantIndex.asm.frag
index e396324..7492532 100644
--- a/tests/sksl/shared/SwizzleByConstantIndex.asm.frag
+++ b/tests/sksl/shared/SwizzleByConstantIndex.asm.frag
@@ -17,10 +17,6 @@
 OpName %_3_z "_3_z"
 OpName %_4_w "_4_w"
 OpName %a "a"
-OpName %_5_ZERO "_5_ZERO"
-OpName %_6_ONE "_6_ONE"
-OpName %_7_TWO "_7_TWO"
-OpName %_8_THREE "_8_THREE"
 OpName %_9_x "_9_x"
 OpName %_10_y "_10_y"
 OpName %_11_z "_11_z"
@@ -55,28 +51,28 @@
 OpDecorate %42 RelaxedPrecision
 OpDecorate %43 RelaxedPrecision
 OpDecorate %44 RelaxedPrecision
+OpDecorate %48 RelaxedPrecision
+OpDecorate %52 RelaxedPrecision
 OpDecorate %56 RelaxedPrecision
 OpDecorate %60 RelaxedPrecision
+OpDecorate %63 RelaxedPrecision
 OpDecorate %64 RelaxedPrecision
-OpDecorate %68 RelaxedPrecision
-OpDecorate %71 RelaxedPrecision
-OpDecorate %72 RelaxedPrecision
-OpDecorate %73 RelaxedPrecision
-OpDecorate %74 RelaxedPrecision
-OpDecorate %83 RelaxedPrecision
-OpDecorate %86 RelaxedPrecision
+OpDecorate %65 RelaxedPrecision
+OpDecorate %66 RelaxedPrecision
+OpDecorate %75 RelaxedPrecision
+OpDecorate %78 RelaxedPrecision
+OpDecorate %81 RelaxedPrecision
+OpDecorate %84 RelaxedPrecision
+OpDecorate %87 RelaxedPrecision
+OpDecorate %88 RelaxedPrecision
 OpDecorate %89 RelaxedPrecision
-OpDecorate %92 RelaxedPrecision
-OpDecorate %95 RelaxedPrecision
-OpDecorate %96 RelaxedPrecision
-OpDecorate %97 RelaxedPrecision
-OpDecorate %98 RelaxedPrecision
-OpDecorate %101 RelaxedPrecision
-OpDecorate %111 RelaxedPrecision
-OpDecorate %117 RelaxedPrecision
-OpDecorate %126 RelaxedPrecision
-OpDecorate %128 RelaxedPrecision
-OpDecorate %129 RelaxedPrecision
+OpDecorate %90 RelaxedPrecision
+OpDecorate %93 RelaxedPrecision
+OpDecorate %103 RelaxedPrecision
+OpDecorate %109 RelaxedPrecision
+OpDecorate %119 RelaxedPrecision
+OpDecorate %122 RelaxedPrecision
+OpDecorate %123 RelaxedPrecision
 %float = OpTypeFloat 32
 %v4float = OpTypeVector %float 4
 %_ptr_Output_v4float = OpTypePointer Output %v4float
@@ -95,21 +91,19 @@
 %int = OpTypeInt 32 1
 %int_0 = OpConstant %int 0
 %_ptr_Function_float = OpTypePointer Function %float
-%_ptr_Function_int = OpTypePointer Function %int
-%int_1 = OpConstant %int 1
-%int_2 = OpConstant %int 2
-%int_3 = OpConstant %int 3
 %float_0 = OpConstant %float 0
 %float_1 = OpConstant %float 1
 %float_2 = OpConstant %float 2
 %float_3 = OpConstant %float 3
-%81 = OpConstantComposite %v4float %float_0 %float_1 %float_2 %float_3
+%73 = OpConstantComposite %v4float %float_0 %float_1 %float_2 %float_3
 %false = OpConstantFalse %bool
 %float_n1_25 = OpConstant %float -1.25
 %float_0_75 = OpConstant %float 0.75
 %float_2_25 = OpConstant %float 2.25
-%105 = OpConstantComposite %v4float %float_n1_25 %float_0 %float_0_75 %float_2_25
+%97 = OpConstantComposite %v4float %float_n1_25 %float_0 %float_0_75 %float_2_25
 %v4bool = OpTypeVector %bool 4
+%int_1 = OpConstant %int 1
+%int_2 = OpConstant %int 2
 %_entrypoint = OpFunction %void None %15
 %16 = OpLabel
 %17 = OpFunctionCall %v4float %main
@@ -124,10 +118,6 @@
 %_3_z = OpVariable %_ptr_Function_float Function
 %_4_w = OpVariable %_ptr_Function_float Function
 %a = OpVariable %_ptr_Function_v4float Function
-%_5_ZERO = OpVariable %_ptr_Function_int Function
-%_6_ONE = OpVariable %_ptr_Function_int Function
-%_7_TWO = OpVariable %_ptr_Function_int Function
-%_8_THREE = OpVariable %_ptr_Function_int Function
 %_9_x = OpVariable %_ptr_Function_float Function
 %_10_y = OpVariable %_ptr_Function_float Function
 %_11_z = OpVariable %_ptr_Function_float Function
@@ -139,7 +129,7 @@
 %_16_z = OpVariable %_ptr_Function_float Function
 %_17_w = OpVariable %_ptr_Function_float Function
 %c = OpVariable %_ptr_Function_v4float Function
-%121 = OpVariable %_ptr_Function_v4float Function
+%113 = OpVariable %_ptr_Function_v4float Function
 %22 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
 %26 = OpLoad %v4float %22
 OpStore %_0_v %26
@@ -161,85 +151,81 @@
 %44 = OpLoad %float %_4_w
 %45 = OpCompositeConstruct %v4float %41 %42 %43 %44
 OpStore %a %45
-OpStore %_5_ZERO %int_0
-OpStore %_6_ONE %int_1
-OpStore %_7_TWO %int_2
-OpStore %_8_THREE %int_3
+%47 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
+%48 = OpLoad %v4float %47
+%49 = OpCompositeExtract %float %48 0
+OpStore %_9_x %49
+%51 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
+%52 = OpLoad %v4float %51
+%53 = OpCompositeExtract %float %52 1
+OpStore %_10_y %53
 %55 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
 %56 = OpLoad %v4float %55
-%57 = OpCompositeExtract %float %56 0
-OpStore %_9_x %57
+%57 = OpCompositeExtract %float %56 2
+OpStore %_11_z %57
 %59 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
 %60 = OpLoad %v4float %59
-%61 = OpCompositeExtract %float %60 1
-OpStore %_10_y %61
-%63 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
-%64 = OpLoad %v4float %63
-%65 = OpCompositeExtract %float %64 2
-OpStore %_11_z %65
-%67 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
-%68 = OpLoad %v4float %67
-%69 = OpCompositeExtract %float %68 3
-OpStore %_12_w %69
-%71 = OpLoad %float %_9_x
-%72 = OpLoad %float %_10_y
-%73 = OpLoad %float %_11_z
-%74 = OpLoad %float %_12_w
-%75 = OpCompositeConstruct %v4float %71 %72 %73 %74
-OpStore %b %75
-OpStore %_13_v %81
-%83 = OpLoad %v4float %_13_v
-%84 = OpCompositeExtract %float %83 0
-OpStore %_14_x %84
-%86 = OpLoad %v4float %_13_v
-%87 = OpCompositeExtract %float %86 1
-OpStore %_15_y %87
-%89 = OpLoad %v4float %_13_v
-%90 = OpCompositeExtract %float %89 2
-OpStore %_16_z %90
-%92 = OpLoad %v4float %_13_v
-%93 = OpCompositeExtract %float %92 3
-OpStore %_17_w %93
-%95 = OpLoad %float %_14_x
-%96 = OpLoad %float %_15_y
-%97 = OpLoad %float %_16_z
-%98 = OpLoad %float %_17_w
-%99 = OpCompositeConstruct %v4float %95 %96 %97 %98
-OpStore %c %99
-%101 = OpLoad %v4float %a
-%106 = OpFOrdEqual %v4bool %101 %105
-%108 = OpAll %bool %106
-OpSelectionMerge %110 None
-OpBranchConditional %108 %109 %110
-%109 = OpLabel
-%111 = OpLoad %v4float %b
-%112 = OpFOrdEqual %v4bool %111 %105
-%113 = OpAll %bool %112
-OpBranch %110
-%110 = OpLabel
-%114 = OpPhi %bool %false %19 %113 %109
+%61 = OpCompositeExtract %float %60 3
+OpStore %_12_w %61
+%63 = OpLoad %float %_9_x
+%64 = OpLoad %float %_10_y
+%65 = OpLoad %float %_11_z
+%66 = OpLoad %float %_12_w
+%67 = OpCompositeConstruct %v4float %63 %64 %65 %66
+OpStore %b %67
+OpStore %_13_v %73
+%75 = OpLoad %v4float %_13_v
+%76 = OpCompositeExtract %float %75 0
+OpStore %_14_x %76
+%78 = OpLoad %v4float %_13_v
+%79 = OpCompositeExtract %float %78 1
+OpStore %_15_y %79
+%81 = OpLoad %v4float %_13_v
+%82 = OpCompositeExtract %float %81 2
+OpStore %_16_z %82
+%84 = OpLoad %v4float %_13_v
+%85 = OpCompositeExtract %float %84 3
+OpStore %_17_w %85
+%87 = OpLoad %float %_14_x
+%88 = OpLoad %float %_15_y
+%89 = OpLoad %float %_16_z
+%90 = OpLoad %float %_17_w
+%91 = OpCompositeConstruct %v4float %87 %88 %89 %90
+OpStore %c %91
+%93 = OpLoad %v4float %a
+%98 = OpFOrdEqual %v4bool %93 %97
+%100 = OpAll %bool %98
+OpSelectionMerge %102 None
+OpBranchConditional %100 %101 %102
+%101 = OpLabel
+%103 = OpLoad %v4float %b
+%104 = OpFOrdEqual %v4bool %103 %97
+%105 = OpAll %bool %104
+OpBranch %102
+%102 = OpLabel
+%106 = OpPhi %bool %false %19 %105 %101
+OpSelectionMerge %108 None
+OpBranchConditional %106 %107 %108
+%107 = OpLabel
+%109 = OpLoad %v4float %c
+%110 = OpFOrdEqual %v4bool %109 %73
+%111 = OpAll %bool %110
+OpBranch %108
+%108 = OpLabel
+%112 = OpPhi %bool %false %102 %111 %107
 OpSelectionMerge %116 None
-OpBranchConditional %114 %115 %116
+OpBranchConditional %112 %114 %115
+%114 = OpLabel
+%117 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
+%119 = OpLoad %v4float %117
+OpStore %113 %119
+OpBranch %116
 %115 = OpLabel
-%117 = OpLoad %v4float %c
-%118 = OpFOrdEqual %v4bool %117 %81
-%119 = OpAll %bool %118
+%120 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
+%122 = OpLoad %v4float %120
+OpStore %113 %122
 OpBranch %116
 %116 = OpLabel
-%120 = OpPhi %bool %false %110 %119 %115
-OpSelectionMerge %124 None
-OpBranchConditional %120 %122 %123
-%122 = OpLabel
-%125 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
-%126 = OpLoad %v4float %125
-OpStore %121 %126
-OpBranch %124
-%123 = OpLabel
-%127 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
-%128 = OpLoad %v4float %127
-OpStore %121 %128
-OpBranch %124
-%124 = OpLabel
-%129 = OpLoad %v4float %121
-OpReturnValue %129
+%123 = OpLoad %v4float %113
+OpReturnValue %123
 OpFunctionEnd
diff --git a/tests/sksl/shared/SwizzleByConstantIndex.glsl b/tests/sksl/shared/SwizzleByConstantIndex.glsl
index 239be9c..bbda597 100644
--- a/tests/sksl/shared/SwizzleByConstantIndex.glsl
+++ b/tests/sksl/shared/SwizzleByConstantIndex.glsl
@@ -10,10 +10,6 @@
     float _3_z = _0_v.z;
     float _4_w = _0_v.w;
     vec4 a = vec4(_1_x, _2_y, _3_z, _4_w);
-    const int _5_ZERO = 0;
-    const int _6_ONE = 1;
-    const int _7_TWO = 2;
-    const int _8_THREE = 3;
     float _9_x = testInputs.x;
     float _10_y = testInputs.y;
     float _11_z = testInputs.z;
diff --git a/tests/sksl/shared/SwizzleByConstantIndex.metal b/tests/sksl/shared/SwizzleByConstantIndex.metal
index e4bc8b5..735db41 100644
--- a/tests/sksl/shared/SwizzleByConstantIndex.metal
+++ b/tests/sksl/shared/SwizzleByConstantIndex.metal
@@ -21,10 +21,6 @@
     float _3_z = _0_v.z;
     float _4_w = _0_v.w;
     float4 a = float4(_1_x, _2_y, _3_z, _4_w);
-    const int _5_ZERO = 0;
-    const int _6_ONE = 1;
-    const int _7_TWO = 2;
-    const int _8_THREE = 3;
     float _9_x = _uniforms.testInputs.x;
     float _10_y = _uniforms.testInputs.y;
     float _11_z = _uniforms.testInputs.z;
diff --git a/tests/sksl/shared/TernaryExpression.asm.frag b/tests/sksl/shared/TernaryExpression.asm.frag
index 03a0354..b3b56c9 100644
--- a/tests/sksl/shared/TernaryExpression.asm.frag
+++ b/tests/sksl/shared/TernaryExpression.asm.frag
@@ -10,8 +10,6 @@
 OpMemberName %_UniformBuffer 1 "colorRed"
 OpName %_entrypoint "_entrypoint"
 OpName %main "main"
-OpName %TRUE "TRUE"
-OpName %FALSE "FALSE"
 OpName %ok "ok"
 OpDecorate %sk_FragColor RelaxedPrecision
 OpDecorate %sk_FragColor Location 0
@@ -25,14 +23,14 @@
 OpDecorate %_UniformBuffer Block
 OpDecorate %10 Binding 0
 OpDecorate %10 DescriptorSet 0
-OpDecorate %26 RelaxedPrecision
-OpDecorate %33 RelaxedPrecision
-OpDecorate %39 RelaxedPrecision
-OpDecorate %43 RelaxedPrecision
-OpDecorate %48 RelaxedPrecision
-OpDecorate %55 RelaxedPrecision
-OpDecorate %58 RelaxedPrecision
-OpDecorate %59 RelaxedPrecision
+OpDecorate %24 RelaxedPrecision
+OpDecorate %31 RelaxedPrecision
+OpDecorate %37 RelaxedPrecision
+OpDecorate %41 RelaxedPrecision
+OpDecorate %46 RelaxedPrecision
+OpDecorate %53 RelaxedPrecision
+OpDecorate %56 RelaxedPrecision
+OpDecorate %57 RelaxedPrecision
 %float = OpTypeFloat 32
 %v4float = OpTypeVector %float 4
 %_ptr_Output_v4float = OpTypePointer Output %v4float
@@ -63,53 +61,49 @@
 OpFunctionEnd
 %main = OpFunction %v4float None %18
 %19 = OpLabel
-%TRUE = OpVariable %_ptr_Function_bool Function
-%FALSE = OpVariable %_ptr_Function_bool Function
 %ok = OpVariable %_ptr_Function_bool Function
-%49 = OpVariable %_ptr_Function_v4float Function
-OpStore %TRUE %true
-OpStore %FALSE %false
+%47 = OpVariable %_ptr_Function_v4float Function
 OpStore %ok %true
-%26 = OpLoad %bool %ok
-OpSelectionMerge %28 None
-OpBranchConditional %26 %27 %28
-%27 = OpLabel
-%29 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
-%33 = OpLoad %v4float %29
-%34 = OpCompositeExtract %float %33 1
-%36 = OpFOrdEqual %bool %34 %float_1
-%37 = OpSelect %bool %36 %true %false
-OpBranch %28
-%28 = OpLabel
-%38 = OpPhi %bool %false %19 %37 %27
-OpStore %ok %38
-%39 = OpLoad %bool %ok
-OpSelectionMerge %41 None
-OpBranchConditional %39 %40 %41
-%40 = OpLabel
-%42 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
-%43 = OpLoad %v4float %42
-%44 = OpCompositeExtract %float %43 0
-%45 = OpFOrdEqual %bool %44 %float_1
-%46 = OpSelect %bool %45 %false %true
-OpBranch %41
-%41 = OpLabel
-%47 = OpPhi %bool %false %28 %46 %40
-OpStore %ok %47
-%48 = OpLoad %bool %ok
-OpSelectionMerge %53 None
-OpBranchConditional %48 %51 %52
+%24 = OpLoad %bool %ok
+OpSelectionMerge %26 None
+OpBranchConditional %24 %25 %26
+%25 = OpLabel
+%27 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
+%31 = OpLoad %v4float %27
+%32 = OpCompositeExtract %float %31 1
+%34 = OpFOrdEqual %bool %32 %float_1
+%35 = OpSelect %bool %34 %true %false
+OpBranch %26
+%26 = OpLabel
+%36 = OpPhi %bool %false %19 %35 %25
+OpStore %ok %36
+%37 = OpLoad %bool %ok
+OpSelectionMerge %39 None
+OpBranchConditional %37 %38 %39
+%38 = OpLabel
+%40 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
+%41 = OpLoad %v4float %40
+%42 = OpCompositeExtract %float %41 0
+%43 = OpFOrdEqual %bool %42 %float_1
+%44 = OpSelect %bool %43 %false %true
+OpBranch %39
+%39 = OpLabel
+%45 = OpPhi %bool %false %26 %44 %38
+OpStore %ok %45
+%46 = OpLoad %bool %ok
+OpSelectionMerge %51 None
+OpBranchConditional %46 %49 %50
+%49 = OpLabel
+%52 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
+%53 = OpLoad %v4float %52
+OpStore %47 %53
+OpBranch %51
+%50 = OpLabel
+%54 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
+%56 = OpLoad %v4float %54
+OpStore %47 %56
+OpBranch %51
 %51 = OpLabel
-%54 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
-%55 = OpLoad %v4float %54
-OpStore %49 %55
-OpBranch %53
-%52 = OpLabel
-%56 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
-%58 = OpLoad %v4float %56
-OpStore %49 %58
-OpBranch %53
-%53 = OpLabel
-%59 = OpLoad %v4float %49
-OpReturnValue %59
+%57 = OpLoad %v4float %47
+OpReturnValue %57
 OpFunctionEnd
diff --git a/tests/sksl/shared/TernaryExpression.glsl b/tests/sksl/shared/TernaryExpression.glsl
index f3c6800..c88bdcc 100644
--- a/tests/sksl/shared/TernaryExpression.glsl
+++ b/tests/sksl/shared/TernaryExpression.glsl
@@ -3,8 +3,6 @@
 uniform vec4 colorGreen;
 uniform vec4 colorRed;
 vec4 main() {
-    const bool TRUE = true;
-    const bool FALSE = false;
     bool ok = true;
     ok = ok && (colorGreen.y == 1.0 ? true : false);
     ok = ok && (colorGreen.x == 1.0 ? false : true);
diff --git a/tests/sksl/shared/TernaryExpression.metal b/tests/sksl/shared/TernaryExpression.metal
index 0587b5b..f4fcda6 100644
--- a/tests/sksl/shared/TernaryExpression.metal
+++ b/tests/sksl/shared/TernaryExpression.metal
@@ -14,8 +14,6 @@
 fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
     Outputs _out;
     (void)_out;
-    const bool TRUE = true;
-    const bool FALSE = false;
     bool ok = true;
     ok = ok && (_uniforms.colorGreen.y == 1.0 ? true : false);
     ok = ok && (_uniforms.colorGreen.x == 1.0 ? false : true);
diff --git a/tests/sksl/shared/UnusedVariables.asm.frag b/tests/sksl/shared/UnusedVariables.asm.frag
index 8f67a99..a9f0fb3 100644
--- a/tests/sksl/shared/UnusedVariables.asm.frag
+++ b/tests/sksl/shared/UnusedVariables.asm.frag
@@ -7,11 +7,9 @@
 OpName %sk_Clockwise "sk_Clockwise"
 OpName %_entrypoint "_entrypoint"
 OpName %main "main"
-OpName %a "a"
 OpName %b "b"
 OpName %c "c"
 OpName %d "d"
-OpName %e "e"
 OpDecorate %sk_FragColor RelaxedPrecision
 OpDecorate %sk_FragColor Location 0
 OpDecorate %sk_FragColor Index 0
@@ -28,9 +26,9 @@
 %12 = OpTypeFunction %void
 %15 = OpTypeFunction %v4float
 %_ptr_Function_float = OpTypePointer Function %float
-%float_1 = OpConstant %float 1
 %float_2 = OpConstant %float 2
 %float_3 = OpConstant %float 3
+%float_1 = OpConstant %float 1
 %float_0 = OpConstant %float 0
 %float_5 = OpConstant %float 5
 %float_4 = OpConstant %float 4
@@ -42,36 +40,31 @@
 OpFunctionEnd
 %main = OpFunction %v4float None %15
 %16 = OpLabel
-%a = OpVariable %_ptr_Function_float Function
 %b = OpVariable %_ptr_Function_float Function
 %c = OpVariable %_ptr_Function_float Function
 %d = OpVariable %_ptr_Function_float Function
-%e = OpVariable %_ptr_Function_float Function
-OpStore %a %float_1
 OpStore %b %float_2
 OpStore %c %float_3
-%25 = OpLoad %float %c
-OpStore %d %25
+%23 = OpLoad %float %c
+OpStore %d %23
+%24 = OpLoad %float %b
+%26 = OpFAdd %float %24 %float_1
+OpStore %b %26
 %27 = OpLoad %float %d
-OpStore %e %27
-%28 = OpLoad %float %b
-%29 = OpFAdd %float %28 %float_1
-OpStore %b %29
-%30 = OpLoad %float %d
-%31 = OpFAdd %float %30 %float_1
-OpStore %d %31
-%32 = OpLoad %float %b
-%33 = OpFOrdEqual %bool %32 %float_2
-%34 = OpSelect %float %33 %float_1 %float_0
-%36 = OpLoad %float %b
-%37 = OpFOrdEqual %bool %36 %float_3
-%38 = OpSelect %float %37 %float_1 %float_0
-%39 = OpLoad %float %d
-%41 = OpFOrdEqual %bool %39 %float_5
-%42 = OpSelect %float %41 %float_1 %float_0
-%43 = OpLoad %float %d
-%45 = OpFOrdEqual %bool %43 %float_4
-%46 = OpSelect %float %45 %float_1 %float_0
-%47 = OpCompositeConstruct %v4float %34 %38 %42 %46
-OpReturnValue %47
+%28 = OpFAdd %float %27 %float_1
+OpStore %d %28
+%29 = OpLoad %float %b
+%30 = OpFOrdEqual %bool %29 %float_2
+%31 = OpSelect %float %30 %float_1 %float_0
+%33 = OpLoad %float %b
+%34 = OpFOrdEqual %bool %33 %float_3
+%35 = OpSelect %float %34 %float_1 %float_0
+%36 = OpLoad %float %d
+%38 = OpFOrdEqual %bool %36 %float_5
+%39 = OpSelect %float %38 %float_1 %float_0
+%40 = OpLoad %float %d
+%42 = OpFOrdEqual %bool %40 %float_4
+%43 = OpSelect %float %42 %float_1 %float_0
+%44 = OpCompositeConstruct %v4float %31 %35 %39 %43
+OpReturnValue %44
 OpFunctionEnd
diff --git a/tests/sksl/shared/UnusedVariables.glsl b/tests/sksl/shared/UnusedVariables.glsl
index ee26cbb..2b72aff 100644
--- a/tests/sksl/shared/UnusedVariables.glsl
+++ b/tests/sksl/shared/UnusedVariables.glsl
@@ -1,11 +1,9 @@
 
 out vec4 sk_FragColor;
 vec4 main() {
-    float a = 1.0;
     float b = 2.0;
     float c = 3.0;
     float d = c;
-    float e = d;
     b++;
     d++;
     return vec4(float(b == 2.0), float(b == 3.0), float(d == 5.0), float(d == 4.0));
diff --git a/tests/sksl/shared/UnusedVariables.metal b/tests/sksl/shared/UnusedVariables.metal
index 9f0aad8..f8d5c51 100644
--- a/tests/sksl/shared/UnusedVariables.metal
+++ b/tests/sksl/shared/UnusedVariables.metal
@@ -9,11 +9,9 @@
 fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
     Outputs _out;
     (void)_out;
-    float a = 1.0;
     float b = 2.0;
     float c = 3.0;
     float d = c;
-    float e = d;
     b++;
     d++;
     _out.sk_FragColor = float4(float(b == 2.0), float(b == 3.0), float(d == 5.0), float(d == 4.0));