tint/resolver: Evaluate const-expr swizzles

Bug: chromium:1341475
Change-Id: I2ac44824b08c460df759a96d0ba96f6045b60f74
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/95765
Reviewed-by: Dan Sinclair <dsinclair@chromium.org>
Commit-Queue: Ben Clayton <bclayton@google.com>
diff --git a/src/tint/resolver/resolver.cc b/src/tint/resolver/resolver.cc
index 42cd0bb..9891f29 100644
--- a/src/tint/resolver/resolver.cc
+++ b/src/tint/resolver/resolver.cc
@@ -1976,7 +1976,8 @@
             ret = builder_->create<sem::Reference>(ret, ref->StorageClass(), ref->Access());
         }
 
-        return builder_->create<sem::StructMemberAccess>(expr, ret, current_statement_, object,
+        sem::Constant* val = nullptr;  // TODO(crbug.com/tint/1611): Add structure support.
+        return builder_->create<sem::StructMemberAccess>(expr, ret, current_statement_, val, object,
                                                          member, has_side_effects, source_var);
     }
 
@@ -2043,7 +2044,8 @@
             // the swizzle.
             ret = builder_->create<sem::Vector>(vec->type(), static_cast<uint32_t>(size));
         }
-        return builder_->create<sem::Swizzle>(expr, ret, current_statement_, object,
+        auto* val = EvaluateSwizzleValue(object, ret, swizzle);
+        return builder_->create<sem::Swizzle>(expr, ret, current_statement_, val, object,
                                               std::move(swizzle), has_side_effects, source_var);
     }
 
diff --git a/src/tint/resolver/resolver.h b/src/tint/resolver/resolver.h
index 7c1f838..9a9811f 100644
--- a/src/tint/resolver/resolver.h
+++ b/src/tint/resolver/resolver.h
@@ -218,6 +218,9 @@
         const sem::Type* ty);  // Note: ty is not an array or structure
     const sem::Constant* EvaluateIndexValue(const sem::Expression* obj, const sem::Expression* idx);
     const sem::Constant* EvaluateLiteralValue(const ast::LiteralExpression*, const sem::Type*);
+    const sem::Constant* EvaluateSwizzleValue(const sem::Expression* vector,
+                                              const sem::Type* type,
+                                              const std::vector<uint32_t>& indices);
     const sem::Constant* EvaluateUnaryValue(const sem::Expression*,
                                             const IntrinsicTable::UnaryOperator&);
 
diff --git a/src/tint/resolver/resolver_constants.cc b/src/tint/resolver/resolver_constants.cc
index 0c314cb..30c00e2 100644
--- a/src/tint/resolver/resolver_constants.cc
+++ b/src/tint/resolver/resolver_constants.cc
@@ -19,6 +19,7 @@
 #include "src/tint/sem/abstract_float.h"
 #include "src/tint/sem/abstract_int.h"
 #include "src/tint/sem/constant.h"
+#include "src/tint/sem/member_accessor_expression.h"
 #include "src/tint/sem/type_constructor.h"
 #include "src/tint/utils/compiler_macros.h"
 #include "src/tint/utils/transform.h"
@@ -537,6 +538,22 @@
     return obj_val->Index(static_cast<size_t>(idx));
 }
 
+const sem::Constant* Resolver::EvaluateSwizzleValue(const sem::Expression* vec_expr,
+                                                    const sem::Type* type,
+                                                    const std::vector<uint32_t>& indices) {
+    auto* vec_val = vec_expr->ConstantValue();
+    if (!vec_val) {
+        return nullptr;
+    }
+    if (indices.size() == 1) {
+        return static_cast<const Constant*>(vec_val->Index(indices[0]));
+    } else {
+        auto values = utils::Transform(
+            indices, [&](uint32_t i) { return static_cast<const Constant*>(vec_val->Index(i)); });
+        return CreateComposite(*builder_, type, std::move(values));
+    }
+}
+
 const sem::Constant* Resolver::EvaluateBitcastValue(const sem::Expression*, const sem::Type*) {
     // TODO(crbug.com/tint/1581): Implement @const intrinsics
     return nullptr;
diff --git a/src/tint/resolver/resolver_constants_test.cc b/src/tint/resolver/resolver_constants_test.cc
index ff8a189..b8ef1b1 100644
--- a/src/tint/resolver/resolver_constants_test.cc
+++ b/src/tint/resolver/resolver_constants_test.cc
@@ -20,6 +20,7 @@
 #include "src/tint/resolver/resolver_test_helper.h"
 #include "src/tint/sem/expression.h"
 #include "src/tint/sem/index_accessor_expression.h"
+#include "src/tint/sem/member_accessor_expression.h"
 #include "src/tint/sem/test_helper.h"
 
 using namespace tint::number_suffixes;  // NOLINT
@@ -1869,6 +1870,63 @@
     EXPECT_EQ(sem->ConstantValue()->As<i32>(), 1_i);
 }
 
+TEST_F(ResolverConstantsTest, Vec3_Swizzle_Scalar) {
+    auto* expr = MemberAccessor(vec3<i32>(1_i, 2_i, 3_i), "y");
+    WrapInFunction(expr);
+
+    EXPECT_TRUE(r()->Resolve()) << r()->error();
+
+    auto* sem = Sem().Get(expr);
+    ASSERT_NE(sem, nullptr);
+    ASSERT_TRUE(sem->Type()->Is<sem::I32>());
+    EXPECT_TYPE(sem->ConstantValue()->Type(), sem->Type());
+    EXPECT_TRUE(sem->ConstantValue()->AllEqual());
+    EXPECT_FALSE(sem->ConstantValue()->AnyZero());
+    EXPECT_FALSE(sem->ConstantValue()->AllZero());
+    EXPECT_EQ(sem->ConstantValue()->As<i32>(), 2_i);
+}
+
+TEST_F(ResolverConstantsTest, Vec3_Swizzle_Vector) {
+    auto* expr = MemberAccessor(vec3<i32>(1_i, 2_i, 3_i), "zx");
+    WrapInFunction(expr);
+
+    EXPECT_TRUE(r()->Resolve()) << r()->error();
+
+    auto* sem = Sem().Get(expr);
+    ASSERT_NE(sem, nullptr);
+    auto* vec = sem->Type()->As<sem::Vector>();
+    ASSERT_NE(vec, nullptr);
+    EXPECT_EQ(vec->Width(), 2u);
+    EXPECT_TYPE(sem->ConstantValue()->Type(), sem->Type());
+
+    EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
+    EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
+    EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<f32>(), 3._a);
+
+    EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
+    EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
+    EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<f32>(), 1._a);
+}
+
+TEST_F(ResolverConstantsTest, Vec3_Swizzle_Chain) {
+    auto* expr =  // (1, 2, 3) -> (2, 3, 1) -> (3, 2) -> 2
+        MemberAccessor(MemberAccessor(MemberAccessor(vec3<i32>(1_i, 2_i, 3_i), "gbr"), "yx"), "y");
+    WrapInFunction(expr);
+
+    EXPECT_TRUE(r()->Resolve()) << r()->error();
+
+    auto* sem = Sem().Get(expr);
+    ASSERT_NE(sem, nullptr);
+    ASSERT_TRUE(sem->Type()->Is<sem::I32>());
+    EXPECT_TYPE(sem->ConstantValue()->Type(), sem->Type());
+    EXPECT_TRUE(sem->ConstantValue()->AllEqual());
+    EXPECT_FALSE(sem->ConstantValue()->AnyZero());
+    EXPECT_FALSE(sem->ConstantValue()->AllZero());
+    EXPECT_EQ(sem->ConstantValue()->As<i32>(), 2_i);
+}
+
 TEST_F(ResolverConstantsTest, Mat3x2_Index) {
     auto* expr = IndexAccessor(
         mat3x2<f32>(vec2<f32>(1._a, 2._a), vec2<f32>(3._a, 4._a), vec2<f32>(5._a, 6._a)), 2_i);
diff --git a/src/tint/sem/expression.h b/src/tint/sem/expression.h
index 05e5dac..45a67ca 100644
--- a/src/tint/sem/expression.h
+++ b/src/tint/sem/expression.h
@@ -35,7 +35,7 @@
     /// @param declaration the AST node
     /// @param type the resolved type of the expression
     /// @param statement the statement that owns this expression
-    /// @param constant the constant value of the expression. May be invalid
+    /// @param constant the constant value of the expression. May be null
     /// @param has_side_effects true if this expression may have side-effects
     /// @param source_var the (optional) source variable for this expression
     Expression(const ast::Expression* declaration,
diff --git a/src/tint/sem/index_accessor_expression.h b/src/tint/sem/index_accessor_expression.h
index 233b0fa..3ba10ea 100644
--- a/src/tint/sem/index_accessor_expression.h
+++ b/src/tint/sem/index_accessor_expression.h
@@ -35,7 +35,7 @@
     /// @param object the object expression that is being indexed
     /// @param index the index expression
     /// @param statement the statement that owns this expression
-    /// @param constant the constant value of the expression. May be invalid
+    /// @param constant the constant value of the expression. May be null
     /// @param has_side_effects whether this expression may have side effects
     /// @param source_var the (optional) source variable for this expression
     IndexAccessorExpression(const ast::IndexAccessorExpression* declaration,
diff --git a/src/tint/sem/member_accessor_expression.cc b/src/tint/sem/member_accessor_expression.cc
index f9929c7..7c31b0e 100644
--- a/src/tint/sem/member_accessor_expression.cc
+++ b/src/tint/sem/member_accessor_expression.cc
@@ -26,32 +26,36 @@
 MemberAccessorExpression::MemberAccessorExpression(const ast::MemberAccessorExpression* declaration,
                                                    const sem::Type* type,
                                                    const Statement* statement,
+                                                   const Constant* constant,
                                                    const Expression* object,
                                                    bool has_side_effects,
                                                    const Variable* source_var /* = nullptr */)
-    : Base(declaration, type, statement, nullptr, has_side_effects, source_var), object_(object) {}
+    : Base(declaration, type, statement, constant, has_side_effects, source_var), object_(object) {}
 
 MemberAccessorExpression::~MemberAccessorExpression() = default;
 
 StructMemberAccess::StructMemberAccess(const ast::MemberAccessorExpression* declaration,
                                        const sem::Type* type,
                                        const Statement* statement,
+                                       const Constant* constant,
                                        const Expression* object,
                                        const StructMember* member,
                                        bool has_side_effects,
                                        const Variable* source_var /* = nullptr */)
-    : Base(declaration, type, statement, object, has_side_effects, source_var), member_(member) {}
+    : Base(declaration, type, statement, constant, object, has_side_effects, source_var),
+      member_(member) {}
 
 StructMemberAccess::~StructMemberAccess() = default;
 
 Swizzle::Swizzle(const ast::MemberAccessorExpression* declaration,
                  const sem::Type* type,
                  const Statement* statement,
+                 const Constant* constant,
                  const Expression* object,
                  std::vector<uint32_t> indices,
                  bool has_side_effects,
                  const Variable* source_var /* = nullptr */)
-    : Base(declaration, type, statement, object, has_side_effects, source_var),
+    : Base(declaration, type, statement, constant, object, has_side_effects, source_var),
       indices_(std::move(indices)) {}
 
 Swizzle::~Swizzle() = default;
diff --git a/src/tint/sem/member_accessor_expression.h b/src/tint/sem/member_accessor_expression.h
index 3d60816..d8484a8 100644
--- a/src/tint/sem/member_accessor_expression.h
+++ b/src/tint/sem/member_accessor_expression.h
@@ -38,12 +38,14 @@
     /// @param declaration the AST node
     /// @param type the resolved type of the expression
     /// @param statement the statement that owns this expression
+    /// @param constant the constant value of the expression. May be null.
     /// @param object the object that holds the member being accessed
     /// @param has_side_effects whether this expression may have side effects
     /// @param source_var the (optional) source variable for this expression
     MemberAccessorExpression(const ast::MemberAccessorExpression* declaration,
                              const sem::Type* type,
                              const Statement* statement,
+                             const Constant* constant,
                              const Expression* object,
                              bool has_side_effects,
                              const Variable* source_var = nullptr);
@@ -67,6 +69,7 @@
     /// @param declaration the AST node
     /// @param type the resolved type of the expression
     /// @param statement the statement that owns this expression
+    /// @param constant the constant value of the expression. May be null
     /// @param object the object that holds the member being accessed
     /// @param member the structure member
     /// @param has_side_effects whether this expression may have side effects
@@ -74,6 +77,7 @@
     StructMemberAccess(const ast::MemberAccessorExpression* declaration,
                        const sem::Type* type,
                        const Statement* statement,
+                       const Constant* constant,
                        const Expression* object,
                        const StructMember* member,
                        bool has_side_effects,
@@ -97,6 +101,7 @@
     /// @param declaration the AST node
     /// @param type the resolved type of the expression
     /// @param statement the statement that owns this expression
+    /// @param constant the constant value of the expression. May be null
     /// @param object the object that holds the member being accessed
     /// @param indices the swizzle indices
     /// @param has_side_effects whether this expression may have side effects
@@ -104,6 +109,7 @@
     Swizzle(const ast::MemberAccessorExpression* declaration,
             const sem::Type* type,
             const Statement* statement,
+            const Constant* constant,
             const Expression* object,
             std::vector<uint32_t> indices,
             bool has_side_effects,
diff --git a/src/tint/sem/variable.h b/src/tint/sem/variable.h
index 28e8f97..e5a5cec 100644
--- a/src/tint/sem/variable.h
+++ b/src/tint/sem/variable.h
@@ -47,7 +47,7 @@
     /// @param type the variable type
     /// @param storage_class the variable storage class
     /// @param access the variable access control type
-    /// @param constant_value the constant value for the variable. May be invalid
+    /// @param constant_value the constant value for the variable. May be null
     Variable(const ast::Variable* declaration,
              const sem::Type* type,
              ast::StorageClass storage_class,
@@ -105,7 +105,7 @@
     /// @param storage_class the variable storage class
     /// @param access the variable access control type
     /// @param statement the statement that declared this local variable
-    /// @param constant_value the constant value for the variable. May be invalid
+    /// @param constant_value the constant value for the variable. May be null
     LocalVariable(const ast::Variable* declaration,
                   const sem::Type* type,
                   ast::StorageClass storage_class,
@@ -139,7 +139,7 @@
     /// @param type the variable type
     /// @param storage_class the variable storage class
     /// @param access the variable access control type
-    /// @param constant_value the constant value for the variable. May be invalid
+    /// @param constant_value the constant value for the variable. May be null
     /// @param binding_point the optional resource binding point of the variable
     GlobalVariable(const ast::Variable* declaration,
                    const sem::Type* type,
diff --git a/test/tint/access/let/matrix.spvasm.expected.glsl b/test/tint/access/let/matrix.spvasm.expected.glsl
index f4bf9cc..28576b7 100644
--- a/test/tint/access/let/matrix.spvasm.expected.glsl
+++ b/test/tint/access/let/matrix.spvasm.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void main_1() {
-  float x_24 = vec3(4.0f, 5.0f, 6.0f).y;
+  float x_24 = 5.0f;
   return;
 }
 
diff --git a/test/tint/access/let/matrix.spvasm.expected.hlsl b/test/tint/access/let/matrix.spvasm.expected.hlsl
index 164f020..a78b2e6 100644
--- a/test/tint/access/let/matrix.spvasm.expected.hlsl
+++ b/test/tint/access/let/matrix.spvasm.expected.hlsl
@@ -1,5 +1,5 @@
 void main_1() {
-  const float x_24 = float3(4.0f, 5.0f, 6.0f).y;
+  const float x_24 = 5.0f;
   return;
 }
 
diff --git a/test/tint/access/let/matrix.spvasm.expected.msl b/test/tint/access/let/matrix.spvasm.expected.msl
index ca54fa6..bbb7ba6 100644
--- a/test/tint/access/let/matrix.spvasm.expected.msl
+++ b/test/tint/access/let/matrix.spvasm.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void main_1() {
-  float const x_24 = float3(4.0f, 5.0f, 6.0f)[1];
+  float const x_24 = 5.0f;
   return;
 }
 
diff --git a/test/tint/access/let/matrix.spvasm.expected.spvasm b/test/tint/access/let/matrix.spvasm.expected.spvasm
index 7556cb3..a95383c 100644
--- a/test/tint/access/let/matrix.spvasm.expected.spvasm
+++ b/test/tint/access/let/matrix.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 28
+; Bound: 10
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -12,31 +12,13 @@
        %void = OpTypeVoid
           %1 = OpTypeFunction %void
       %float = OpTypeFloat 32
-    %v3float = OpTypeVector %float 3
-%mat3v3float = OpTypeMatrix %v3float 3
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-         %11 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %float_4 = OpConstant %float 4
     %float_5 = OpConstant %float 5
-    %float_6 = OpConstant %float 6
-         %15 = OpConstantComposite %v3float %float_4 %float_5 %float_6
-    %float_7 = OpConstant %float 7
-    %float_8 = OpConstant %float 8
-    %float_9 = OpConstant %float 9
-         %19 = OpConstantComposite %v3float %float_7 %float_8 %float_9
-         %20 = OpConstantComposite %mat3v3float %11 %15 %19
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
      %main_1 = OpFunction %void None %1
           %4 = OpLabel
-         %23 = OpCompositeExtract %v3float %20 1
-         %24 = OpCompositeExtract %float %23 1
                OpReturn
                OpFunctionEnd
        %main = OpFunction %void None %1
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %main_1
+          %8 = OpLabel
+          %9 = OpFunctionCall %void %main_1
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/access/let/vector.spvasm.expected.glsl b/test/tint/access/let/vector.spvasm.expected.glsl
index 6d744cd..6edf308 100644
--- a/test/tint/access/let/vector.spvasm.expected.glsl
+++ b/test/tint/access/let/vector.spvasm.expected.glsl
@@ -1,9 +1,9 @@
 #version 310 es
 
 void main_1() {
-  float x_11 = vec3(1.0f, 2.0f, 3.0f).y;
-  vec2 x_13 = vec2(vec3(1.0f, 2.0f, 3.0f).x, vec3(1.0f, 2.0f, 3.0f).z);
-  vec3 x_14 = vec3(vec3(1.0f, 2.0f, 3.0f).x, vec3(1.0f, 2.0f, 3.0f).z, vec3(1.0f, 2.0f, 3.0f).y);
+  float x_11 = 2.0f;
+  vec2 x_13 = vec2(1.0f, 3.0f);
+  vec3 x_14 = vec3(1.0f, 3.0f, 2.0f);
   return;
 }
 
diff --git a/test/tint/access/let/vector.spvasm.expected.hlsl b/test/tint/access/let/vector.spvasm.expected.hlsl
index cc37e54..d5e689b 100644
--- a/test/tint/access/let/vector.spvasm.expected.hlsl
+++ b/test/tint/access/let/vector.spvasm.expected.hlsl
@@ -1,7 +1,7 @@
 void main_1() {
-  const float x_11 = float3(1.0f, 2.0f, 3.0f).y;
-  const float2 x_13 = float2(float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).z);
-  const float3 x_14 = float3(float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).z, float3(1.0f, 2.0f, 3.0f).y);
+  const float x_11 = 2.0f;
+  const float2 x_13 = float2(1.0f, 3.0f);
+  const float3 x_14 = float3(1.0f, 3.0f, 2.0f);
   return;
 }
 
diff --git a/test/tint/access/let/vector.spvasm.expected.msl b/test/tint/access/let/vector.spvasm.expected.msl
index 354e9b1..1277c5a 100644
--- a/test/tint/access/let/vector.spvasm.expected.msl
+++ b/test/tint/access/let/vector.spvasm.expected.msl
@@ -2,9 +2,9 @@
 
 using namespace metal;
 void main_1() {
-  float const x_11 = float3(1.0f, 2.0f, 3.0f)[1];
-  float2 const x_13 = float2(float3(1.0f, 2.0f, 3.0f)[0], float3(1.0f, 2.0f, 3.0f)[2]);
-  float3 const x_14 = float3(float3(1.0f, 2.0f, 3.0f)[0], float3(1.0f, 2.0f, 3.0f)[2], float3(1.0f, 2.0f, 3.0f)[1]);
+  float const x_11 = 2.0f;
+  float2 const x_13 = float2(1.0f, 3.0f);
+  float3 const x_14 = float3(1.0f, 3.0f, 2.0f);
   return;
 }
 
diff --git a/test/tint/access/let/vector.spvasm.expected.spvasm b/test/tint/access/let/vector.spvasm.expected.spvasm
index 5b2e162..58ec939 100644
--- a/test/tint/access/let/vector.spvasm.expected.spvasm
+++ b/test/tint/access/let/vector.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 23
+; Bound: 16
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -12,26 +12,19 @@
        %void = OpTypeVoid
           %1 = OpTypeFunction %void
       %float = OpTypeFloat 32
-    %v3float = OpTypeVector %float 3
-    %float_1 = OpConstant %float 1
     %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-         %10 = OpConstantComposite %v3float %float_1 %float_2 %float_3
     %v2float = OpTypeVector %float 2
+    %float_1 = OpConstant %float 1
+    %float_3 = OpConstant %float 3
+         %10 = OpConstantComposite %v2float %float_1 %float_3
+    %v3float = OpTypeVector %float 3
+         %12 = OpConstantComposite %v3float %float_1 %float_3 %float_2
      %main_1 = OpFunction %void None %1
           %4 = OpLabel
-         %11 = OpCompositeExtract %float %10 1
-         %13 = OpCompositeExtract %float %10 0
-         %14 = OpCompositeExtract %float %10 2
-         %15 = OpCompositeConstruct %v2float %13 %14
-         %16 = OpCompositeExtract %float %10 0
-         %17 = OpCompositeExtract %float %10 2
-         %18 = OpCompositeExtract %float %10 1
-         %19 = OpCompositeConstruct %v3float %16 %17 %18
                OpReturn
                OpFunctionEnd
        %main = OpFunction %void None %1
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %main_1
+         %14 = OpLabel
+         %15 = OpFunctionCall %void %main_1
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/bug/chromium/1341475.wgsl b/test/tint/bug/chromium/1341475.wgsl
new file mode 100644
index 0000000..864442b1
--- /dev/null
+++ b/test/tint/bug/chromium/1341475.wgsl
@@ -0,0 +1,4 @@
+@compute @workgroup_size(1)
+fn main() {
+    _ = mix(1.0, vec2(1.0).y, 1.0);
+}
diff --git a/test/tint/bug/chromium/1341475.wgsl.expected.glsl b/test/tint/bug/chromium/1341475.wgsl.expected.glsl
new file mode 100644
index 0000000..f009847
--- /dev/null
+++ b/test/tint/bug/chromium/1341475.wgsl.expected.glsl
@@ -0,0 +1,11 @@
+#version 310 es
+
+void tint_symbol() {
+  mix(1.0f, 1.0f, 1.0f);
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol();
+  return;
+}
diff --git a/test/tint/bug/chromium/1341475.wgsl.expected.hlsl b/test/tint/bug/chromium/1341475.wgsl.expected.hlsl
new file mode 100644
index 0000000..01c8800
--- /dev/null
+++ b/test/tint/bug/chromium/1341475.wgsl.expected.hlsl
@@ -0,0 +1,5 @@
+[numthreads(1, 1, 1)]
+void main() {
+  lerp(1.0f, 1.0f, 1.0f);
+  return;
+}
diff --git a/test/tint/bug/chromium/1341475.wgsl.expected.msl b/test/tint/bug/chromium/1341475.wgsl.expected.msl
new file mode 100644
index 0000000..5e194ff
--- /dev/null
+++ b/test/tint/bug/chromium/1341475.wgsl.expected.msl
@@ -0,0 +1,8 @@
+#include <metal_stdlib>
+
+using namespace metal;
+kernel void tint_symbol() {
+  mix(1.0f, 1.0f, 1.0f);
+  return;
+}
+
diff --git a/test/tint/bug/chromium/1341475.wgsl.expected.spvasm b/test/tint/bug/chromium/1341475.wgsl.expected.spvasm
new file mode 100644
index 0000000..784c1de
--- /dev/null
+++ b/test/tint/bug/chromium/1341475.wgsl.expected.spvasm
@@ -0,0 +1,20 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 9
+; Schema: 0
+               OpCapability Shader
+          %7 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
+               OpName %main "main"
+       %void = OpTypeVoid
+          %1 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %float_1 = OpConstant %float 1
+       %main = OpFunction %void None %1
+          %4 = OpLabel
+          %5 = OpExtInst %float %7 FMix %float_1 %float_1 %float_1
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/bug/chromium/1341475.wgsl.expected.wgsl b/test/tint/bug/chromium/1341475.wgsl.expected.wgsl
new file mode 100644
index 0000000..f77126b
--- /dev/null
+++ b/test/tint/bug/chromium/1341475.wgsl.expected.wgsl
@@ -0,0 +1,4 @@
+@compute @workgroup_size(1)
+fn main() {
+  _ = mix(1.0, vec2(1.0).y, 1.0);
+}
diff --git a/test/tint/bug/tint/749.spvasm.expected.glsl b/test/tint/bug/tint/749.spvasm.expected.glsl
index 96a7c14..ea9ce91 100644
--- a/test/tint/bug/tint/749.spvasm.expected.glsl
+++ b/test/tint/bug/tint/749.spvasm.expected.glsl
@@ -22,7 +22,7 @@
   int x_932 = temp;
   temp = 0;
   temp = x_932;
-  vec3 x_523 = vec3(vec3(1.0f, 2.0f, 3.0f).z, vec3(1.0f, 2.0f, 3.0f).y, vec3(1.0f, 2.0f, 3.0f).z);
+  vec3 x_523 = vec3(3.0f, 2.0f, 3.0f);
   int x_933 = i;
   i = 0;
   i = x_933;
@@ -46,7 +46,7 @@
   int x_938 = j;
   j = 0;
   j = x_938;
-  vec3 x_525 = vec3(x_523.z, vec3(1.0f, 2.0f, 3.0f).x, x_523.y);
+  vec3 x_525 = vec3(x_523.z, 1.0f, x_523.y);
   int x_939 = i;
   i = 0;
   i = x_939;
@@ -136,7 +136,7 @@
   int x_955 = param_3;
   param_3 = 0;
   param_3 = x_955;
-  vec3 x_534 = vec3(vec3(1.0f, 2.0f, 3.0f).z, vec3(1.0f, 2.0f, 3.0f).x, vec3(1.0f, 2.0f, 3.0f).z);
+  vec3 x_534 = vec3(3.0f, 1.0f, 3.0f);
   int x_956 = param_1;
   param_1 = 0;
   param_1 = x_956;
@@ -172,7 +172,7 @@
     int x_963 = pivot;
     pivot = 0;
     pivot = x_963;
-    x_537 = vec2(vec3(1.0f, 2.0f, 3.0f).y, vec3(1.0f, 2.0f, 3.0f).z);
+    x_537 = vec2(2.0f, 3.0f);
     QuicksortObject x_964 = obj;
     int tint_symbol_11[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
     QuicksortObject tint_symbol_12 = QuicksortObject(tint_symbol_11);
@@ -215,7 +215,7 @@
     obj = tint_symbol_14;
     obj = x_972;
     int x_63 = pivot;
-    vec2 x_540 = vec2(vec3(1.0f, 2.0f, 3.0f).y, x_534.z);
+    vec2 x_540 = vec2(2.0f, x_534.z);
     int x_973 = i_1;
     i_1 = 0;
     i_1 = x_973;
@@ -246,7 +246,7 @@
       int x_980 = l;
       l = 0;
       l = x_980;
-      vec3 x_544 = vec3(vec3(1.0f, 2.0f, 3.0f).z, vec3(1.0f, 2.0f, 3.0f).y, x_540.x);
+      vec3 x_544 = vec3(3.0f, 2.0f, x_540.x);
       int x_70 = i_1;
       vec2 x_545 = vec2(x_537.y, x_538.x);
       int x_981 = param;
@@ -346,7 +346,7 @@
   int x_1003 = l;
   l = 0;
   l = x_1003;
-  vec2 x_554 = vec2(x_536.z, vec3(1.0f, 2.0f, 3.0f).y);
+  vec2 x_554 = vec2(x_536.z, 2.0f);
   int x_1004 = param_1;
   param_1 = 0;
   param_1 = x_1004;
@@ -378,7 +378,7 @@
   int tint_symbol_19[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
   stack = tint_symbol_19;
   stack = x_1008;
-  vec2 x_556 = vec2(vec3(1.0f, 2.0f, 3.0f).y, vec3(1.0f, 2.0f, 3.0f).y);
+  vec2 x_556 = vec2(2.0f);
   int x_1009 = param_5;
   param_5 = 0;
   param_5 = x_1009;
@@ -387,7 +387,7 @@
   p = 0;
   p = x_1010;
   int x_93 = top;
-  vec2 x_557 = vec2(vec3(1.0f, 2.0f, 3.0f).x, vec3(1.0f, 2.0f, 3.0f).x);
+  vec2 x_557 = vec2(1.0f);
   int x_1011 = p;
   p = 0;
   p = x_1011;
@@ -431,7 +431,7 @@
   int x_1020 = param_4;
   param_4 = 0;
   param_4 = x_1020;
-  vec3 x_562 = vec3(vec3(1.0f, 2.0f, 3.0f).z, x_558.y, vec3(1.0f, 2.0f, 3.0f).y);
+  vec3 x_562 = vec3(3.0f, x_558.y, 2.0f);
   int x_1021 = stack[x_96_save];
   stack[x_96_save] = 0;
   stack[x_96_save] = x_1021;
@@ -534,7 +534,7 @@
     int x_1043 = stack[x_100_save];
     stack[x_100_save] = 0;
     stack[x_100_save] = x_1043;
-    vec2 x_573 = vec2(vec3(1.0f, 2.0f, 3.0f).y, vec3(1.0f, 2.0f, 3.0f).z);
+    vec2 x_573 = vec2(2.0f, 3.0f);
     top = (x_112 - 1);
     int x_1044 = param_5;
     param_5 = 0;
@@ -566,7 +566,7 @@
     stack[x_110_save] = x_1050;
     vec2 x_577 = vec2(x_569.y, x_569.z);
     int x_120 = h_1;
-    vec2 x_578 = vec2(x_558.x, vec3(1.0f, 2.0f, 3.0f).y);
+    vec2 x_578 = vec2(x_558.x, 2.0f);
     param_5 = x_120;
     int x_1051 = stack[x_100_save];
     stack[x_100_save] = 0;
@@ -676,7 +676,7 @@
     int x_1076 = stack[x_96_save];
     stack[x_96_save] = 0;
     stack[x_96_save] = x_1076;
-    vec2 x_592 = vec2(vec3(1.0f, 2.0f, 3.0f).x, vec3(1.0f, 2.0f, 3.0f).y);
+    vec2 x_592 = vec2(1.0f, 2.0f);
     QuicksortObject x_1077 = obj;
     int tint_symbol_31[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
     QuicksortObject tint_symbol_32 = QuicksortObject(tint_symbol_31);
@@ -821,7 +821,7 @@
     QuicksortObject tint_symbol_40 = QuicksortObject(tint_symbol_39);
     obj = tint_symbol_40;
     obj = x_722;
-    vec2 x_431 = vec2(vec3(1.0f, 2.0f, 3.0f).x, vec3(1.0f, 2.0f, 3.0f).x);
+    vec2 x_431 = vec2(1.0f);
     int x_158 = i_2;
     vec2 x_723 = uv;
     uv = vec2(0.0f);
@@ -841,7 +841,7 @@
   QuicksortObject tint_symbol_44 = QuicksortObject(tint_symbol_43);
   obj = tint_symbol_44;
   obj = x_756;
-  vec2 x_446 = vec2(vec2(0.0f).x, vec2(0.0f).x);
+  vec2 x_446 = vec2(0.0f);
   int x_757 = i_2;
   i_2 = 0;
   i_2 = x_757;
@@ -855,7 +855,7 @@
   vec2 x_759 = uv;
   uv = vec2(0.0f);
   uv = x_759;
-  vec2 x_447 = vec2(vec2(0.0f).y, vec2(0.0f).y);
+  vec2 x_447 = vec2(0.0f);
   vec2 x_760 = uv;
   uv = vec2(0.0f);
   uv = x_760;
@@ -875,7 +875,7 @@
   QuicksortObject tint_symbol_50 = QuicksortObject(tint_symbol_49);
   obj = tint_symbol_50;
   obj = x_763;
-  vec3 x_449 = vec3(x_184.y, vec3(1.0f, 2.0f, 3.0f).z, x_184.w);
+  vec3 x_449 = vec3(x_184.y, 3.0f, x_184.w);
   vec3 x_764 = color;
   color = vec3(0.0f);
   color = x_764;
@@ -919,7 +919,7 @@
   float x_773 = color.x;
   color.x = 0.0f;
   color.x = x_773;
-  vec2 x_452 = vec2(vec3(1.0f, 2.0f, 3.0f).z, vec3(1.0f, 2.0f, 3.0f).y);
+  vec2 x_452 = vec2(3.0f, 2.0f);
   int x_774 = i_2;
   i_2 = 0;
   i_2 = x_774;
@@ -954,7 +954,7 @@
     int x_781 = obj.numbers[0u];
     obj.numbers[0u] = 0;
     obj.numbers[0u] = x_781;
-    vec3 x_456 = vec3(vec2(0.0f).y, x_448.y, x_448.y);
+    vec3 x_456 = vec3(0.0f, x_448.y, x_448.y);
     float x_782 = uv.x;
     uv.x = 0.0f;
     uv.x = x_782;
@@ -973,7 +973,7 @@
     QuicksortObject tint_symbol_64 = QuicksortObject(tint_symbol_63);
     obj = tint_symbol_64;
     obj = x_785;
-    vec2 x_458 = vec2(vec3(1.0f, 2.0f, 3.0f).z, vec2(0.0f).y);
+    vec2 x_458 = vec2(3.0f, 0.0f);
     int x_786 = i_2;
     i_2 = 0;
     i_2 = x_786;
@@ -1013,7 +1013,7 @@
   float x_796 = uv.x;
   uv.x = 0.0f;
   uv.x = x_796;
-  vec2 x_461 = vec2(vec2(0.0f).y, vec2(0.0f).y);
+  vec2 x_461 = vec2(0.0f);
   float x_797 = uv.x;
   uv.x = 0.0f;
   uv.x = x_797;
@@ -1057,7 +1057,7 @@
     int x_808 = i_2;
     i_2 = 0;
     i_2 = x_808;
-    vec2 x_466 = vec2(x_455.y, vec2(0.0f).y);
+    vec2 x_466 = vec2(x_455.y, 0.0f);
     int x_809 = i_2;
     i_2 = 0;
     i_2 = x_809;
@@ -1111,7 +1111,7 @@
     int x_822 = obj.numbers[0u];
     obj.numbers[0u] = 0;
     obj.numbers[0u] = x_822;
-    vec2 x_470 = vec2(vec2(0.0f).x, vec2(0.0f).y);
+    vec2 x_470 = vec2(0.0f);
     float x_823 = color.z;
     color.z = 0.0f;
     color.z = x_823;
@@ -1153,7 +1153,7 @@
   color.x = x_832;
   vec2 x_476 = vec2(x_451.z, x_460.y);
   color.y = (x_257 + float(x_254));
-  vec3 x_477 = vec3(vec2(0.0f).x, x_472.x, vec2(0.0f).y);
+  vec3 x_477 = vec3(0.0f, x_472.x, 0.0f);
   float x_833 = uv.x;
   uv.x = 0.0f;
   uv.x = x_833;
@@ -1168,14 +1168,14 @@
   int x_836 = i_2;
   i_2 = 0;
   i_2 = x_836;
-  vec3 x_479 = vec3(vec2(0.0f).y, x_454.y, vec2(0.0f).x);
+  vec3 x_479 = vec3(0.0f, x_454.y, 0.0f);
   int x_837 = obj.numbers[0u];
   obj.numbers[0u] = 0;
   obj.numbers[0u] = x_837;
   float x_838 = color.y;
   color.y = 0.0f;
   color.y = x_838;
-  vec3 x_480 = vec3(x_446.x, x_446.x, vec2(0.0f).y);
+  vec3 x_480 = vec3(x_446.x, x_446.x, 0.0f);
   float x_839 = uv.x;
   uv.x = 0.0f;
   uv.x = x_839;
@@ -1281,7 +1281,7 @@
     float x_865 = color.x;
     color.x = 0.0f;
     color.x = x_865;
-    vec2 x_491 = vec2(vec3(1.0f, 2.0f, 3.0f).y, x_454.x);
+    vec2 x_491 = vec2(2.0f, x_454.x);
     float x_866 = color.y;
     color.y = 0.0f;
     color.y = x_866;
@@ -1382,7 +1382,7 @@
   float x_891 = color.y;
   color.y = 0.0f;
   color.y = x_891;
-  vec2 x_504 = vec2(x_453.y, vec2(0.0f).x);
+  vec2 x_504 = vec2(x_453.y, 0.0f);
   float x_892 = color.x;
   color.x = 0.0f;
   color.x = x_892;
@@ -1431,7 +1431,7 @@
   float x_904 = color.z;
   color.z = 0.0f;
   color.z = x_904;
-  vec3 x_510 = vec3(vec3(1.0f, 2.0f, 3.0f).y, x_485.y, x_485.z);
+  vec3 x_510 = vec3(2.0f, x_485.y, x_485.z);
   float x_905 = color.z;
   color.z = 0.0f;
   color.z = x_905;
@@ -1485,7 +1485,7 @@
     float x_918 = uv.x;
     uv.x = 0.0f;
     uv.x = x_918;
-    vec3 x_517 = vec3(vec2(0.0f).x, vec2(0.0f).x, vec2(0.0f).y);
+    vec3 x_517 = vec3(0.0f);
     color.x = (float(x_317) + x_320);
     float x_919 = color.x;
     color.x = 0.0f;
@@ -1528,7 +1528,7 @@
   float x_928 = uv.y;
   uv.y = 0.0f;
   uv.y = x_928;
-  vec3 x_521 = vec3(vec3(1.0f, 2.0f, 3.0f).y, vec3(1.0f, 2.0f, 3.0f).y, x_520.y);
+  vec3 x_521 = vec3(2.0f, 2.0f, x_520.y);
   float x_929 = uv.x;
   uv.x = 0.0f;
   uv.x = x_929;
diff --git a/test/tint/bug/tint/749.spvasm.expected.hlsl b/test/tint/bug/tint/749.spvasm.expected.hlsl
index 3208c15..8605266 100644
--- a/test/tint/bug/tint/749.spvasm.expected.hlsl
+++ b/test/tint/bug/tint/749.spvasm.expected.hlsl
@@ -14,7 +14,7 @@
   const int x_932 = temp;
   temp = 0;
   temp = x_932;
-  const float3 x_523 = float3(float3(1.0f, 2.0f, 3.0f).z, float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).z);
+  const float3 x_523 = float3(3.0f, 2.0f, 3.0f);
   const int x_933 = i;
   i = 0;
   i = x_933;
@@ -46,7 +46,7 @@
   const int x_938 = j;
   j = 0;
   j = x_938;
-  const float3 x_525 = float3(x_523.z, float3(1.0f, 2.0f, 3.0f).x, x_523.y);
+  const float3 x_525 = float3(x_523.z, 1.0f, x_523.y);
   const int x_939 = i;
   i = 0;
   i = x_939;
@@ -192,7 +192,7 @@
   const int x_955 = param_3;
   param_3 = 0;
   param_3 = x_955;
-  const float3 x_534 = float3(float3(1.0f, 2.0f, 3.0f).z, float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).z);
+  const float3 x_534 = float3(3.0f, 1.0f, 3.0f);
   const int x_956 = param_1;
   param_1 = 0;
   param_1 = x_956;
@@ -228,7 +228,7 @@
     const int x_963 = pivot;
     pivot = 0;
     pivot = x_963;
-    x_537 = float2(float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).z);
+    x_537 = float2(2.0f, 3.0f);
     const QuicksortObject x_964 = obj;
     const int tint_symbol_60[10] = (int[10])0;
     const QuicksortObject tint_symbol_61 = {tint_symbol_60};
@@ -279,7 +279,7 @@
     obj = tint_symbol_63;
     obj = x_972;
     const int x_63 = pivot;
-    const float2 x_540 = float2(float3(1.0f, 2.0f, 3.0f).y, x_534.z);
+    const float2 x_540 = float2(2.0f, x_534.z);
     const int x_973 = i_1;
     i_1 = 0;
     i_1 = x_973;
@@ -310,7 +310,7 @@
       const int x_980 = l;
       l = 0;
       l = x_980;
-      const float3 x_544 = float3(float3(1.0f, 2.0f, 3.0f).z, float3(1.0f, 2.0f, 3.0f).y, x_540.x);
+      const float3 x_544 = float3(3.0f, 2.0f, x_540.x);
       const int x_70 = i_1;
       const float2 x_545 = float2(x_537.y, x_538.x);
       const int x_981 = param;
@@ -434,7 +434,7 @@
   const int x_1003 = l;
   l = 0;
   l = x_1003;
-  const float2 x_554 = float2(x_536.z, float3(1.0f, 2.0f, 3.0f).y);
+  const float2 x_554 = float2(x_536.z, 2.0f);
   const int x_1004 = param_1;
   param_1 = 0;
   param_1 = x_1004;
@@ -466,7 +466,7 @@
   const int tint_symbol_68[10] = (int[10])0;
   stack = tint_symbol_68;
   stack = x_1008;
-  const float2 x_556 = float2(float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).y);
+  const float2 x_556 = (2.0f).xx;
   const int x_1009 = param_5;
   param_5 = 0;
   param_5 = x_1009;
@@ -475,7 +475,7 @@
   p = 0;
   p = x_1010;
   const int x_93 = top;
-  const float2 x_557 = float2(float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).x);
+  const float2 x_557 = (1.0f).xx;
   const int x_1011 = p;
   p = 0;
   p = x_1011;
@@ -519,7 +519,7 @@
   const int x_1020 = param_4;
   param_4 = 0;
   param_4 = x_1020;
-  const float3 x_562 = float3(float3(1.0f, 2.0f, 3.0f).z, x_558.y, float3(1.0f, 2.0f, 3.0f).y);
+  const float3 x_562 = float3(3.0f, x_558.y, 2.0f);
   const int x_1021 = stack[x_96_save];
   stack[x_96_save] = 0;
   stack[x_96_save] = x_1021;
@@ -622,7 +622,7 @@
     const int x_1043 = stack[x_100_save];
     stack[x_100_save] = 0;
     stack[x_100_save] = x_1043;
-    const float2 x_573 = float2(float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).z);
+    const float2 x_573 = float2(2.0f, 3.0f);
     top = (x_112 - 1);
     const int x_1044 = param_5;
     param_5 = 0;
@@ -654,7 +654,7 @@
     stack[x_110_save] = x_1050;
     const float2 x_577 = float2(x_569.y, x_569.z);
     const int x_120 = h_1;
-    const float2 x_578 = float2(x_558.x, float3(1.0f, 2.0f, 3.0f).y);
+    const float2 x_578 = float2(x_558.x, 2.0f);
     param_5 = x_120;
     const int x_1051 = stack[x_100_save];
     stack[x_100_save] = 0;
@@ -764,7 +764,7 @@
     const int x_1076 = stack[x_96_save];
     stack[x_96_save] = 0;
     stack[x_96_save] = x_1076;
-    const float2 x_592 = float2(float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).y);
+    const float2 x_592 = float2(1.0f, 2.0f);
     const QuicksortObject x_1077 = obj;
     const int tint_symbol_80[10] = (int[10])0;
     const QuicksortObject tint_symbol_81 = {tint_symbol_80};
@@ -909,7 +909,7 @@
     const QuicksortObject tint_symbol_89 = {tint_symbol_88};
     obj = tint_symbol_89;
     obj = x_722;
-    const float2 x_431 = float2(float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).x);
+    const float2 x_431 = (1.0f).xx;
     const int x_158 = i_2;
     const float2 x_723 = uv;
     uv = (0.0f).xx;
@@ -929,7 +929,7 @@
   const QuicksortObject tint_symbol_93 = {tint_symbol_92};
   obj = tint_symbol_93;
   obj = x_756;
-  const float2 x_446 = float2((0.0f).xx.x, (0.0f).xx.x);
+  const float2 x_446 = (0.0f).xx;
   const int x_757 = i_2;
   i_2 = 0;
   i_2 = x_757;
@@ -943,7 +943,7 @@
   const float2 x_759 = uv;
   uv = (0.0f).xx;
   uv = x_759;
-  const float2 x_447 = float2((0.0f).xx.y, (0.0f).xx.y);
+  const float2 x_447 = (0.0f).xx;
   const float2 x_760 = uv;
   uv = (0.0f).xx;
   uv = x_760;
@@ -963,7 +963,7 @@
   const QuicksortObject tint_symbol_99 = {tint_symbol_98};
   obj = tint_symbol_99;
   obj = x_763;
-  const float3 x_449 = float3(x_184.y, float3(1.0f, 2.0f, 3.0f).z, x_184.w);
+  const float3 x_449 = float3(x_184.y, 3.0f, x_184.w);
   const float3 x_764 = color;
   color = (0.0f).xxx;
   color = x_764;
@@ -1007,7 +1007,7 @@
   const float x_773 = color.x;
   color.x = 0.0f;
   color.x = x_773;
-  const float2 x_452 = float2(float3(1.0f, 2.0f, 3.0f).z, float3(1.0f, 2.0f, 3.0f).y);
+  const float2 x_452 = float2(3.0f, 2.0f);
   const int x_774 = i_2;
   i_2 = 0;
   i_2 = x_774;
@@ -1042,7 +1042,7 @@
     const int x_781 = obj.numbers[0u];
     obj.numbers[0u] = 0;
     obj.numbers[0u] = x_781;
-    const float3 x_456 = float3((0.0f).xx.y, x_448.y, x_448.y);
+    const float3 x_456 = float3(0.0f, x_448.y, x_448.y);
     const float x_782 = uv.x;
     uv.x = 0.0f;
     uv.x = x_782;
@@ -1061,7 +1061,7 @@
     const QuicksortObject tint_symbol_113 = {tint_symbol_112};
     obj = tint_symbol_113;
     obj = x_785;
-    const float2 x_458 = float2(float3(1.0f, 2.0f, 3.0f).z, (0.0f).xx.y);
+    const float2 x_458 = float2(3.0f, 0.0f);
     const int x_786 = i_2;
     i_2 = 0;
     i_2 = x_786;
@@ -1101,7 +1101,7 @@
   const float x_796 = uv.x;
   uv.x = 0.0f;
   uv.x = x_796;
-  const float2 x_461 = float2((0.0f).xx.y, (0.0f).xx.y);
+  const float2 x_461 = (0.0f).xx;
   const float x_797 = uv.x;
   uv.x = 0.0f;
   uv.x = x_797;
@@ -1145,7 +1145,7 @@
     const int x_808 = i_2;
     i_2 = 0;
     i_2 = x_808;
-    const float2 x_466 = float2(x_455.y, (0.0f).xx.y);
+    const float2 x_466 = float2(x_455.y, 0.0f);
     const int x_809 = i_2;
     i_2 = 0;
     i_2 = x_809;
@@ -1199,7 +1199,7 @@
     const int x_822 = obj.numbers[0u];
     obj.numbers[0u] = 0;
     obj.numbers[0u] = x_822;
-    const float2 x_470 = float2((0.0f).xx.x, (0.0f).xx.y);
+    const float2 x_470 = (0.0f).xx;
     const float x_823 = color.z;
     color.z = 0.0f;
     color.z = x_823;
@@ -1241,7 +1241,7 @@
   color.x = x_832;
   const float2 x_476 = float2(x_451.z, x_460.y);
   color.y = (x_257 + float(x_254));
-  const float3 x_477 = float3((0.0f).xx.x, x_472.x, (0.0f).xx.y);
+  const float3 x_477 = float3(0.0f, x_472.x, 0.0f);
   const float x_833 = uv.x;
   uv.x = 0.0f;
   uv.x = x_833;
@@ -1256,14 +1256,14 @@
   const int x_836 = i_2;
   i_2 = 0;
   i_2 = x_836;
-  const float3 x_479 = float3((0.0f).xx.y, x_454.y, (0.0f).xx.x);
+  const float3 x_479 = float3(0.0f, x_454.y, 0.0f);
   const int x_837 = obj.numbers[0u];
   obj.numbers[0u] = 0;
   obj.numbers[0u] = x_837;
   const float x_838 = color.y;
   color.y = 0.0f;
   color.y = x_838;
-  const float3 x_480 = float3(x_446.x, x_446.x, (0.0f).xx.y);
+  const float3 x_480 = float3(x_446.x, x_446.x, 0.0f);
   const float x_839 = uv.x;
   uv.x = 0.0f;
   uv.x = x_839;
@@ -1369,7 +1369,7 @@
     const float x_865 = color.x;
     color.x = 0.0f;
     color.x = x_865;
-    const float2 x_491 = float2(float3(1.0f, 2.0f, 3.0f).y, x_454.x);
+    const float2 x_491 = float2(2.0f, x_454.x);
     const float x_866 = color.y;
     color.y = 0.0f;
     color.y = x_866;
@@ -1470,7 +1470,7 @@
   const float x_891 = color.y;
   color.y = 0.0f;
   color.y = x_891;
-  const float2 x_504 = float2(x_453.y, (0.0f).xx.x);
+  const float2 x_504 = float2(x_453.y, 0.0f);
   const float x_892 = color.x;
   color.x = 0.0f;
   color.x = x_892;
@@ -1519,7 +1519,7 @@
   const float x_904 = color.z;
   color.z = 0.0f;
   color.z = x_904;
-  const float3 x_510 = float3(float3(1.0f, 2.0f, 3.0f).y, x_485.y, x_485.z);
+  const float3 x_510 = float3(2.0f, x_485.y, x_485.z);
   const float x_905 = color.z;
   color.z = 0.0f;
   color.z = x_905;
@@ -1573,7 +1573,7 @@
     const float x_918 = uv.x;
     uv.x = 0.0f;
     uv.x = x_918;
-    const float3 x_517 = float3((0.0f).xx.x, (0.0f).xx.x, (0.0f).xx.y);
+    const float3 x_517 = (0.0f).xxx;
     color.x = (float(x_317) + x_320);
     const float x_919 = color.x;
     color.x = 0.0f;
@@ -1616,7 +1616,7 @@
   const float x_928 = uv.y;
   uv.y = 0.0f;
   uv.y = x_928;
-  const float3 x_521 = float3(float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).y, x_520.y);
+  const float3 x_521 = float3(2.0f, 2.0f, x_520.y);
   const float x_929 = uv.x;
   uv.x = 0.0f;
   uv.x = x_929;
diff --git a/test/tint/bug/tint/749.spvasm.expected.msl b/test/tint/bug/tint/749.spvasm.expected.msl
index 88d8ef4..119081c 100644
--- a/test/tint/bug/tint/749.spvasm.expected.msl
+++ b/test/tint/bug/tint/749.spvasm.expected.msl
@@ -27,7 +27,7 @@
   int const x_932 = temp;
   temp = 0;
   temp = x_932;
-  float3 const x_523 = float3(float3(1.0f, 2.0f, 3.0f)[2], float3(1.0f, 2.0f, 3.0f)[1], float3(1.0f, 2.0f, 3.0f)[2]);
+  float3 const x_523 = float3(3.0f, 2.0f, 3.0f);
   int const x_933 = *(i);
   *(i) = 0;
   *(i) = x_933;
@@ -51,7 +51,7 @@
   int const x_938 = *(j);
   *(j) = 0;
   *(j) = x_938;
-  float3 const x_525 = float3(x_523[2], float3(1.0f, 2.0f, 3.0f)[0], x_523[1]);
+  float3 const x_525 = float3(x_523[2], 1.0f, x_523[1]);
   int const x_939 = *(i);
   *(i) = 0;
   *(i) = x_939;
@@ -141,7 +141,7 @@
   int const x_955 = param_3;
   param_3 = 0;
   param_3 = x_955;
-  float3 const x_534 = float3(float3(1.0f, 2.0f, 3.0f)[2], float3(1.0f, 2.0f, 3.0f)[0], float3(1.0f, 2.0f, 3.0f)[2]);
+  float3 const x_534 = float3(3.0f, 1.0f, 3.0f);
   int const x_956 = param_1;
   param_1 = 0;
   param_1 = x_956;
@@ -177,7 +177,7 @@
     int const x_963 = pivot;
     pivot = 0;
     pivot = x_963;
-    x_537 = float2(float3(1.0f, 2.0f, 3.0f)[1], float3(1.0f, 2.0f, 3.0f)[2]);
+    x_537 = float2(2.0f, 3.0f);
     QuicksortObject const x_964 = *(tint_symbol_82);
     tint_array<int, 10> const tint_symbol_10 = tint_array<int, 10>{};
     QuicksortObject const tint_symbol_11 = {.numbers=tint_symbol_10};
@@ -220,7 +220,7 @@
     *(tint_symbol_82) = tint_symbol_13;
     *(tint_symbol_82) = x_972;
     int const x_63 = pivot;
-    float2 const x_540 = float2(float3(1.0f, 2.0f, 3.0f)[1], x_534[2]);
+    float2 const x_540 = float2(2.0f, x_534[2]);
     int const x_973 = i_1;
     i_1 = 0;
     i_1 = x_973;
@@ -251,7 +251,7 @@
       int const x_980 = *(l);
       *(l) = 0;
       *(l) = x_980;
-      float3 const x_544 = float3(float3(1.0f, 2.0f, 3.0f)[2], float3(1.0f, 2.0f, 3.0f)[1], x_540[0]);
+      float3 const x_544 = float3(3.0f, 2.0f, x_540[0]);
       int const x_70 = i_1;
       float2 const x_545 = float2(x_537[1], x_538[0]);
       int const x_981 = param;
@@ -352,7 +352,7 @@
   int const x_1003 = *(l);
   *(l) = 0;
   *(l) = x_1003;
-  float2 const x_554 = float2(x_536[2], float3(1.0f, 2.0f, 3.0f)[1]);
+  float2 const x_554 = float2(x_536[2], 2.0f);
   int const x_1004 = param_1;
   param_1 = 0;
   param_1 = x_1004;
@@ -384,7 +384,7 @@
   tint_array<int, 10> const tint_symbol_18 = tint_array<int, 10>{};
   stack = tint_symbol_18;
   stack = x_1008;
-  float2 const x_556 = float2(float3(1.0f, 2.0f, 3.0f)[1], float3(1.0f, 2.0f, 3.0f)[1]);
+  float2 const x_556 = float2(2.0f);
   int const x_1009 = param_5;
   param_5 = 0;
   param_5 = x_1009;
@@ -393,7 +393,7 @@
   p = 0;
   p = x_1010;
   int const x_93 = top;
-  float2 const x_557 = float2(float3(1.0f, 2.0f, 3.0f)[0], float3(1.0f, 2.0f, 3.0f)[0]);
+  float2 const x_557 = float2(1.0f);
   int const x_1011 = p;
   p = 0;
   p = x_1011;
@@ -437,7 +437,7 @@
   int const x_1020 = param_4;
   param_4 = 0;
   param_4 = x_1020;
-  float3 const x_562 = float3(float3(1.0f, 2.0f, 3.0f)[2], x_558[1], float3(1.0f, 2.0f, 3.0f)[1]);
+  float3 const x_562 = float3(3.0f, x_558[1], 2.0f);
   int const x_1021 = stack[x_96_save];
   stack[x_96_save] = 0;
   stack[x_96_save] = x_1021;
@@ -540,7 +540,7 @@
     int const x_1043 = stack[x_100_save];
     stack[x_100_save] = 0;
     stack[x_100_save] = x_1043;
-    float2 const x_573 = float2(float3(1.0f, 2.0f, 3.0f)[1], float3(1.0f, 2.0f, 3.0f)[2]);
+    float2 const x_573 = float2(2.0f, 3.0f);
     top = as_type<int>((as_type<uint>(x_112) - as_type<uint>(1)));
     int const x_1044 = param_5;
     param_5 = 0;
@@ -573,7 +573,7 @@
     stack[x_110_save] = x_1050;
     float2 const x_577 = float2(x_569[1], x_569[2]);
     int const x_120 = h_1;
-    float2 const x_578 = float2(x_558[0], float3(1.0f, 2.0f, 3.0f)[1]);
+    float2 const x_578 = float2(x_558[0], 2.0f);
     param_5 = x_120;
     int const x_1051 = stack[x_100_save];
     stack[x_100_save] = 0;
@@ -683,7 +683,7 @@
     int const x_1076 = stack[x_96_save];
     stack[x_96_save] = 0;
     stack[x_96_save] = x_1076;
-    float2 const x_592 = float2(float3(1.0f, 2.0f, 3.0f)[0], float3(1.0f, 2.0f, 3.0f)[1]);
+    float2 const x_592 = float2(1.0f, 2.0f);
     QuicksortObject const x_1077 = *(tint_symbol_83);
     tint_array<int, 10> const tint_symbol_30 = tint_array<int, 10>{};
     QuicksortObject const tint_symbol_31 = {.numbers=tint_symbol_30};
@@ -828,7 +828,7 @@
     QuicksortObject const tint_symbol_39 = {.numbers=tint_symbol_38};
     *(tint_symbol_84) = tint_symbol_39;
     *(tint_symbol_84) = x_722;
-    float2 const x_431 = float2(float3(1.0f, 2.0f, 3.0f)[0], float3(1.0f, 2.0f, 3.0f)[0]);
+    float2 const x_431 = float2(1.0f);
     int const x_158 = i_2;
     float2 const x_723 = uv;
     uv = float2(0.0f);
@@ -848,7 +848,7 @@
   QuicksortObject const tint_symbol_43 = {.numbers=tint_symbol_42};
   *(tint_symbol_84) = tint_symbol_43;
   *(tint_symbol_84) = x_756;
-  float2 const x_446 = float2(float2(0.0f)[0], float2(0.0f)[0]);
+  float2 const x_446 = float2(0.0f);
   int const x_757 = i_2;
   i_2 = 0;
   i_2 = x_757;
@@ -862,7 +862,7 @@
   float2 const x_759 = uv;
   uv = float2(0.0f);
   uv = x_759;
-  float2 const x_447 = float2(float2(0.0f)[1], float2(0.0f)[1]);
+  float2 const x_447 = float2(0.0f);
   float2 const x_760 = uv;
   uv = float2(0.0f);
   uv = x_760;
@@ -882,7 +882,7 @@
   QuicksortObject const tint_symbol_49 = {.numbers=tint_symbol_48};
   *(tint_symbol_84) = tint_symbol_49;
   *(tint_symbol_84) = x_763;
-  float3 const x_449 = float3(x_184[1], float3(1.0f, 2.0f, 3.0f)[2], x_184[3]);
+  float3 const x_449 = float3(x_184[1], 3.0f, x_184[3]);
   float3 const x_764 = color;
   color = float3(0.0f);
   color = x_764;
@@ -926,7 +926,7 @@
   float const x_773 = color[0];
   color[0] = 0.0f;
   color[0] = x_773;
-  float2 const x_452 = float2(float3(1.0f, 2.0f, 3.0f)[2], float3(1.0f, 2.0f, 3.0f)[1]);
+  float2 const x_452 = float2(3.0f, 2.0f);
   int const x_774 = i_2;
   i_2 = 0;
   i_2 = x_774;
@@ -961,7 +961,7 @@
     int const x_781 = (*(tint_symbol_84)).numbers[0u];
     (*(tint_symbol_84)).numbers[0u] = 0;
     (*(tint_symbol_84)).numbers[0u] = x_781;
-    float3 const x_456 = float3(float2(0.0f)[1], x_448[1], x_448[1]);
+    float3 const x_456 = float3(0.0f, x_448[1], x_448[1]);
     float const x_782 = uv[0];
     uv[0] = 0.0f;
     uv[0] = x_782;
@@ -980,7 +980,7 @@
     QuicksortObject const tint_symbol_63 = {.numbers=tint_symbol_62};
     *(tint_symbol_84) = tint_symbol_63;
     *(tint_symbol_84) = x_785;
-    float2 const x_458 = float2(float3(1.0f, 2.0f, 3.0f)[2], float2(0.0f)[1]);
+    float2 const x_458 = float2(3.0f, 0.0f);
     int const x_786 = i_2;
     i_2 = 0;
     i_2 = x_786;
@@ -1020,7 +1020,7 @@
   float const x_796 = uv[0];
   uv[0] = 0.0f;
   uv[0] = x_796;
-  float2 const x_461 = float2(float2(0.0f)[1], float2(0.0f)[1]);
+  float2 const x_461 = float2(0.0f);
   float const x_797 = uv[0];
   uv[0] = 0.0f;
   uv[0] = x_797;
@@ -1064,7 +1064,7 @@
     int const x_808 = i_2;
     i_2 = 0;
     i_2 = x_808;
-    float2 const x_466 = float2(x_455[1], float2(0.0f)[1]);
+    float2 const x_466 = float2(x_455[1], 0.0f);
     int const x_809 = i_2;
     i_2 = 0;
     i_2 = x_809;
@@ -1118,7 +1118,7 @@
     int const x_822 = (*(tint_symbol_84)).numbers[0u];
     (*(tint_symbol_84)).numbers[0u] = 0;
     (*(tint_symbol_84)).numbers[0u] = x_822;
-    float2 const x_470 = float2(float2(0.0f)[0], float2(0.0f)[1]);
+    float2 const x_470 = float2(0.0f);
     float const x_823 = color[2];
     color[2] = 0.0f;
     color[2] = x_823;
@@ -1160,7 +1160,7 @@
   color[0] = x_832;
   float2 const x_476 = float2(x_451[2], x_460[1]);
   color[1] = (x_257 + float(x_254));
-  float3 const x_477 = float3(float2(0.0f)[0], x_472[0], float2(0.0f)[1]);
+  float3 const x_477 = float3(0.0f, x_472[0], 0.0f);
   float const x_833 = uv[0];
   uv[0] = 0.0f;
   uv[0] = x_833;
@@ -1175,14 +1175,14 @@
   int const x_836 = i_2;
   i_2 = 0;
   i_2 = x_836;
-  float3 const x_479 = float3(float2(0.0f)[1], x_454[1], float2(0.0f)[0]);
+  float3 const x_479 = float3(0.0f, x_454[1], 0.0f);
   int const x_837 = (*(tint_symbol_84)).numbers[0u];
   (*(tint_symbol_84)).numbers[0u] = 0;
   (*(tint_symbol_84)).numbers[0u] = x_837;
   float const x_838 = color[1];
   color[1] = 0.0f;
   color[1] = x_838;
-  float3 const x_480 = float3(x_446[0], x_446[0], float2(0.0f)[1]);
+  float3 const x_480 = float3(x_446[0], x_446[0], 0.0f);
   float const x_839 = uv[0];
   uv[0] = 0.0f;
   uv[0] = x_839;
@@ -1288,7 +1288,7 @@
     float const x_865 = color[0];
     color[0] = 0.0f;
     color[0] = x_865;
-    float2 const x_491 = float2(float3(1.0f, 2.0f, 3.0f)[1], x_454[0]);
+    float2 const x_491 = float2(2.0f, x_454[0]);
     float const x_866 = color[1];
     color[1] = 0.0f;
     color[1] = x_866;
@@ -1389,7 +1389,7 @@
   float const x_891 = color[1];
   color[1] = 0.0f;
   color[1] = x_891;
-  float2 const x_504 = float2(x_453[1], float2(0.0f)[0]);
+  float2 const x_504 = float2(x_453[1], 0.0f);
   float const x_892 = color[0];
   color[0] = 0.0f;
   color[0] = x_892;
@@ -1438,7 +1438,7 @@
   float const x_904 = color[2];
   color[2] = 0.0f;
   color[2] = x_904;
-  float3 const x_510 = float3(float3(1.0f, 2.0f, 3.0f)[1], x_485[1], x_485[2]);
+  float3 const x_510 = float3(2.0f, x_485[1], x_485[2]);
   float const x_905 = color[2];
   color[2] = 0.0f;
   color[2] = x_905;
@@ -1492,7 +1492,7 @@
     float const x_918 = uv[0];
     uv[0] = 0.0f;
     uv[0] = x_918;
-    float3 const x_517 = float3(float2(0.0f)[0], float2(0.0f)[0], float2(0.0f)[1]);
+    float3 const x_517 = float3(0.0f);
     color[0] = (float(x_317) + x_320);
     float const x_919 = color[0];
     color[0] = 0.0f;
@@ -1535,7 +1535,7 @@
   float const x_928 = uv[1];
   uv[1] = 0.0f;
   uv[1] = x_928;
-  float3 const x_521 = float3(float3(1.0f, 2.0f, 3.0f)[1], float3(1.0f, 2.0f, 3.0f)[1], x_520[1]);
+  float3 const x_521 = float3(2.0f, 2.0f, x_520[1]);
   float const x_929 = uv[0];
   uv[0] = 0.0f;
   uv[0] = x_929;
diff --git a/test/tint/bug/tint/749.spvasm.expected.spvasm b/test/tint/bug/tint/749.spvasm.expected.spvasm
index cb9afaa..70a28b1 100644
--- a/test/tint/bug/tint/749.spvasm.expected.spvasm
+++ b/test/tint/bug/tint/749.spvasm.expected.spvasm
@@ -1,10 +1,10 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 1830
+; Bound: 1769
 ; Schema: 0
                OpCapability Shader
-       %1691 = OpExtInstImport "GLSL.std.450"
+       %1636 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
                OpExecutionMode %main OriginUpperLeft
@@ -88,33 +88,41 @@
          %23 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int
          %31 = OpConstantNull %int
     %v3float = OpTypeVector %float 3
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
     %float_3 = OpConstant %float 3
-         %37 = OpConstantComposite %v3float %float_1 %float_2 %float_3
+    %float_2 = OpConstant %float 2
+         %36 = OpConstantComposite %v3float %float_3 %float_2 %float_3
      %uint_0 = OpConstant %uint 0
 %_ptr_Private_int = OpTypePointer Private %int
-        %101 = OpConstantNull %_arr_int_uint_10
-        %102 = OpConstantComposite %QuicksortObject %101
-        %153 = OpTypeFunction %int %_ptr_Function_int %_ptr_Function_int
+    %float_1 = OpConstant %float 1
+         %96 = OpConstantNull %_arr_int_uint_10
+         %97 = OpConstantComposite %QuicksortObject %96
+        %148 = OpTypeFunction %int %_ptr_Function_int %_ptr_Function_int
 %_ptr_Function_v2float = OpTypePointer Function %v2float
-        %167 = OpConstantNull %v2float
+        %162 = OpConstantNull %v2float
 %_ptr_Function_v3float = OpTypePointer Function %v3float
-        %170 = OpConstantNull %v3float
+        %165 = OpConstantNull %v3float
+        %183 = OpConstantComposite %v3float %float_3 %float_1 %float_3
      %uint_1 = OpConstant %uint 1
      %int_10 = OpConstant %int 10
+        %219 = OpConstantComposite %v2float %float_2 %float_3
 %_ptr_Function_float = OpTypePointer Function %float
        %bool = OpTypeBool
       %int_1 = OpConstant %int 1
-        %418 = OpTypeFunction %void
+        %404 = OpTypeFunction %void
 %_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
       %int_9 = OpConstant %int 9
+        %418 = OpConstantComposite %v2float %float_2 %float_2
      %int_n1 = OpConstant %int -1
-        %520 = OpConstantNull %uint
+        %423 = OpConstantComposite %v2float %float_1 %float_1
+        %500 = OpConstantNull %uint
+        %710 = OpConstantComposite %v2float %float_1 %float_2
        %true = OpConstantTrue %bool
 %_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-        %949 = OpConstantNull %float
+        %891 = OpConstantComposite %v3float %float_1 %float_2 %float_3
+        %914 = OpConstantNull %float
+        %916 = OpConstantComposite %v2float %float_3 %float_2
  %float_0_25 = OpConstant %float 0.25
+        %965 = OpConstantComposite %v2float %float_3 %914
   %float_0_5 = OpConstant %float 0.5
      %uint_2 = OpConstant %uint 2
  %float_0_75 = OpConstant %float 0.75
@@ -126,7 +134,7 @@
       %int_8 = OpConstant %int 8
      %uint_9 = OpConstant %uint 9
    %main_out = OpTypeStruct %v4float
-       %1817 = OpTypeFunction %main_out %v4float
+       %1756 = OpTypeFunction %main_out %v4float
 %swap_i1_i1_ = OpFunction %void None %23
           %i = OpFunctionParameter %_ptr_Function_int
           %j = OpFunctionParameter %_ptr_Function_int
@@ -135,139 +143,134 @@
          %32 = OpLoad %int %temp
                OpStore %temp %31
                OpStore %temp %32
-         %38 = OpCompositeExtract %float %37 2
-         %39 = OpCompositeExtract %float %37 1
-         %40 = OpCompositeExtract %float %37 2
-         %41 = OpCompositeConstruct %v3float %38 %39 %40
-         %43 = OpLoad %int %i
+         %38 = OpLoad %int %i
                OpStore %i %31
-               OpStore %i %43
-         %47 = OpLoad %int %i
-         %49 = OpLoad %int %j
+               OpStore %i %38
+         %42 = OpLoad %int %i
+         %44 = OpLoad %int %j
                OpStore %j %31
-               OpStore %j %49
-         %52 = OpCompositeExtract %float %41 1
-         %53 = OpCompositeExtract %float %41 0
-         %54 = OpCompositeExtract %float %41 1
-         %55 = OpCompositeConstruct %v3float %52 %53 %54
-         %56 = OpLoad %int %temp
+               OpStore %j %44
+         %47 = OpCompositeExtract %float %36 1
+         %48 = OpCompositeExtract %float %36 0
+         %49 = OpCompositeExtract %float %36 1
+         %50 = OpCompositeConstruct %v3float %47 %48 %49
+         %51 = OpLoad %int %temp
                OpStore %temp %31
-               OpStore %temp %56
-         %59 = OpAccessChain %_ptr_Private_int %obj %uint_0 %47
-         %60 = OpLoad %int %59
-         %61 = OpAccessChain %_ptr_Private_int %obj %uint_0 %47
-               OpStore %61 %31
-         %62 = OpAccessChain %_ptr_Private_int %obj %uint_0 %47
-               OpStore %62 %60
-         %63 = OpAccessChain %_ptr_Private_int %obj %uint_0 %47
-         %64 = OpLoad %int %63
-         %65 = OpLoad %int %temp
+               OpStore %temp %51
+         %54 = OpAccessChain %_ptr_Private_int %obj %uint_0 %42
+         %55 = OpLoad %int %54
+         %56 = OpAccessChain %_ptr_Private_int %obj %uint_0 %42
+               OpStore %56 %31
+         %57 = OpAccessChain %_ptr_Private_int %obj %uint_0 %42
+               OpStore %57 %55
+         %58 = OpAccessChain %_ptr_Private_int %obj %uint_0 %42
+         %59 = OpLoad %int %58
+         %60 = OpLoad %int %temp
                OpStore %temp %31
-               OpStore %temp %65
-               OpStore %temp %64
-         %67 = OpLoad %int %j
+               OpStore %temp %60
+               OpStore %temp %59
+         %62 = OpLoad %int %j
                OpStore %j %31
-               OpStore %j %67
-         %70 = OpCompositeExtract %float %41 2
-         %71 = OpCompositeExtract %float %37 0
-         %72 = OpCompositeExtract %float %41 1
-         %73 = OpCompositeConstruct %v3float %70 %71 %72
-         %75 = OpLoad %int %i
+               OpStore %j %62
+         %65 = OpCompositeExtract %float %36 2
+         %67 = OpCompositeExtract %float %36 1
+         %68 = OpCompositeConstruct %v3float %65 %float_1 %67
+         %70 = OpLoad %int %i
                OpStore %i %31
-               OpStore %i %75
-         %79 = OpLoad %int %i
-         %80 = OpAccessChain %_ptr_Private_int %obj %uint_0 %47
-         %81 = OpLoad %int %80
-         %82 = OpAccessChain %_ptr_Private_int %obj %uint_0 %47
-               OpStore %82 %31
-         %83 = OpAccessChain %_ptr_Private_int %obj %uint_0 %47
-               OpStore %83 %81
-         %85 = OpLoad %int %j
-         %87 = OpLoad %int %i
+               OpStore %i %70
+         %74 = OpLoad %int %i
+         %75 = OpAccessChain %_ptr_Private_int %obj %uint_0 %42
+         %76 = OpLoad %int %75
+         %77 = OpAccessChain %_ptr_Private_int %obj %uint_0 %42
+               OpStore %77 %31
+         %78 = OpAccessChain %_ptr_Private_int %obj %uint_0 %42
+               OpStore %78 %76
+         %80 = OpLoad %int %j
+         %82 = OpLoad %int %i
                OpStore %i %31
-               OpStore %i %87
-         %90 = OpCompositeExtract %float %73 0
-         %91 = OpCompositeExtract %float %73 2
-         %92 = OpCompositeExtract %float %73 2
-         %93 = OpCompositeConstruct %v3float %90 %91 %92
-         %94 = OpAccessChain %_ptr_Private_int %obj %uint_0 %47
-         %95 = OpLoad %int %94
-         %96 = OpAccessChain %_ptr_Private_int %obj %uint_0 %47
-               OpStore %96 %31
-         %97 = OpAccessChain %_ptr_Private_int %obj %uint_0 %47
-               OpStore %97 %95
-         %98 = OpAccessChain %_ptr_Private_int %obj %uint_0 %85
-         %99 = OpLoad %int %98
-        %100 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %100
-        %103 = OpCompositeExtract %float %93 0
-        %104 = OpCompositeExtract %float %93 0
-        %105 = OpCompositeConstruct %v2float %103 %104
-        %106 = OpCompositeExtract %float %55 0
-        %107 = OpCompositeExtract %float %55 2
-        %108 = OpCompositeExtract %float %55 0
-        %109 = OpCompositeConstruct %v3float %106 %107 %108
-        %110 = OpAccessChain %_ptr_Private_int %obj %uint_0 %79
-               OpStore %110 %99
-        %111 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %111
-        %112 = OpCompositeExtract %float %93 1
-        %113 = OpCompositeExtract %float %93 2
-        %114 = OpCompositeExtract %float %93 0
-        %115 = OpCompositeConstruct %v3float %112 %113 %114
-        %117 = OpLoad %int %i
+               OpStore %i %82
+         %85 = OpCompositeExtract %float %68 0
+         %86 = OpCompositeExtract %float %68 2
+         %87 = OpCompositeExtract %float %68 2
+         %88 = OpCompositeConstruct %v3float %85 %86 %87
+         %89 = OpAccessChain %_ptr_Private_int %obj %uint_0 %42
+         %90 = OpLoad %int %89
+         %91 = OpAccessChain %_ptr_Private_int %obj %uint_0 %42
+               OpStore %91 %31
+         %92 = OpAccessChain %_ptr_Private_int %obj %uint_0 %42
+               OpStore %92 %90
+         %93 = OpAccessChain %_ptr_Private_int %obj %uint_0 %80
+         %94 = OpLoad %int %93
+         %95 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %95
+         %98 = OpCompositeExtract %float %88 0
+         %99 = OpCompositeExtract %float %88 0
+        %100 = OpCompositeConstruct %v2float %98 %99
+        %101 = OpCompositeExtract %float %50 0
+        %102 = OpCompositeExtract %float %50 2
+        %103 = OpCompositeExtract %float %50 0
+        %104 = OpCompositeConstruct %v3float %101 %102 %103
+        %105 = OpAccessChain %_ptr_Private_int %obj %uint_0 %74
+               OpStore %105 %94
+        %106 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %106
+        %107 = OpCompositeExtract %float %88 1
+        %108 = OpCompositeExtract %float %88 2
+        %109 = OpCompositeExtract %float %88 0
+        %110 = OpCompositeConstruct %v3float %107 %108 %109
+        %112 = OpLoad %int %i
                OpStore %i %31
-               OpStore %i %117
-        %121 = OpLoad %int %j
-        %122 = OpLoad %int %temp
+               OpStore %i %112
+        %116 = OpLoad %int %j
+        %117 = OpLoad %int %temp
                OpStore %temp %31
-               OpStore %temp %122
-        %123 = OpCompositeExtract %float %115 2
-        %124 = OpCompositeExtract %float %115 1
-        %125 = OpCompositeConstruct %v2float %123 %124
-        %126 = OpAccessChain %_ptr_Private_int %obj %uint_0 %85
-        %127 = OpLoad %int %126
-        %128 = OpAccessChain %_ptr_Private_int %obj %uint_0 %85
-               OpStore %128 %31
-        %129 = OpAccessChain %_ptr_Private_int %obj %uint_0 %85
-               OpStore %129 %127
-        %130 = OpLoad %int %temp
-        %132 = OpLoad %int %j
+               OpStore %temp %117
+        %118 = OpCompositeExtract %float %110 2
+        %119 = OpCompositeExtract %float %110 1
+        %120 = OpCompositeConstruct %v2float %118 %119
+        %121 = OpAccessChain %_ptr_Private_int %obj %uint_0 %80
+        %122 = OpLoad %int %121
+        %123 = OpAccessChain %_ptr_Private_int %obj %uint_0 %80
+               OpStore %123 %31
+        %124 = OpAccessChain %_ptr_Private_int %obj %uint_0 %80
+               OpStore %124 %122
+        %125 = OpLoad %int %temp
+        %127 = OpLoad %int %j
                OpStore %j %31
-               OpStore %j %132
-        %135 = OpCompositeExtract %float %105 0
-        %136 = OpCompositeExtract %float %93 1
-        %137 = OpCompositeExtract %float %93 0
-        %138 = OpCompositeConstruct %v3float %135 %136 %137
-        %139 = OpAccessChain %_ptr_Private_int %obj %uint_0 %79
-        %140 = OpLoad %int %139
-        %141 = OpAccessChain %_ptr_Private_int %obj %uint_0 %79
-               OpStore %141 %31
-        %142 = OpAccessChain %_ptr_Private_int %obj %uint_0 %79
-               OpStore %142 %140
-        %143 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %143
-        %144 = OpCompositeExtract %float %109 0
-        %145 = OpCompositeExtract %float %109 1
-        %146 = OpCompositeExtract %float %109 0
-        %147 = OpCompositeConstruct %v3float %144 %145 %146
-        %148 = OpAccessChain %_ptr_Private_int %obj %uint_0 %85
-        %149 = OpLoad %int %148
-        %150 = OpAccessChain %_ptr_Private_int %obj %uint_0 %85
-               OpStore %150 %31
-        %151 = OpAccessChain %_ptr_Private_int %obj %uint_0 %85
-               OpStore %151 %149
-        %152 = OpAccessChain %_ptr_Private_int %obj %uint_0 %121
-               OpStore %152 %130
+               OpStore %j %127
+        %130 = OpCompositeExtract %float %100 0
+        %131 = OpCompositeExtract %float %88 1
+        %132 = OpCompositeExtract %float %88 0
+        %133 = OpCompositeConstruct %v3float %130 %131 %132
+        %134 = OpAccessChain %_ptr_Private_int %obj %uint_0 %74
+        %135 = OpLoad %int %134
+        %136 = OpAccessChain %_ptr_Private_int %obj %uint_0 %74
+               OpStore %136 %31
+        %137 = OpAccessChain %_ptr_Private_int %obj %uint_0 %74
+               OpStore %137 %135
+        %138 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %138
+        %139 = OpCompositeExtract %float %104 0
+        %140 = OpCompositeExtract %float %104 1
+        %141 = OpCompositeExtract %float %104 0
+        %142 = OpCompositeConstruct %v3float %139 %140 %141
+        %143 = OpAccessChain %_ptr_Private_int %obj %uint_0 %80
+        %144 = OpLoad %int %143
+        %145 = OpAccessChain %_ptr_Private_int %obj %uint_0 %80
+               OpStore %145 %31
+        %146 = OpAccessChain %_ptr_Private_int %obj %uint_0 %80
+               OpStore %146 %144
+        %147 = OpAccessChain %_ptr_Private_int %obj %uint_0 %116
+               OpStore %147 %125
                OpReturn
                OpFunctionEnd
-%performPartition_i1_i1_ = OpFunction %int None %153
+%performPartition_i1_i1_ = OpFunction %int None %148
           %l = OpFunctionParameter %_ptr_Function_int
           %h = OpFunctionParameter %_ptr_Function_int
-        %157 = OpLabel
+        %152 = OpLabel
     %param_3 = OpVariable %_ptr_Function_int Function %31
         %i_1 = OpVariable %_ptr_Function_int Function %31
         %j_1 = OpVariable %_ptr_Function_int Function %31
@@ -275,2366 +278,2302 @@
     %param_1 = OpVariable %_ptr_Function_int Function %31
       %param = OpVariable %_ptr_Function_int Function %31
       %pivot = OpVariable %_ptr_Function_int Function %31
-      %x_537 = OpVariable %_ptr_Function_v2float Function %167
-      %x_538 = OpVariable %_ptr_Function_v3float Function %170
-        %172 = OpLoad %int %h
+      %x_537 = OpVariable %_ptr_Function_v2float Function %162
+      %x_538 = OpVariable %_ptr_Function_v3float Function %165
+        %167 = OpLoad %int %h
                OpStore %h %31
-               OpStore %h %172
-        %176 = OpLoad %int %h
-        %178 = OpLoad %int %l
+               OpStore %h %167
+        %171 = OpLoad %int %h
+        %173 = OpLoad %int %l
                OpStore %l %31
-               OpStore %l %178
-        %181 = OpAccessChain %_ptr_Private_int %obj %uint_0 %176
-        %182 = OpLoad %int %181
-        %183 = OpAccessChain %_ptr_Private_int %obj %uint_0 %176
-               OpStore %183 %31
-        %184 = OpAccessChain %_ptr_Private_int %obj %uint_0 %176
-               OpStore %184 %182
-        %185 = OpAccessChain %_ptr_Private_int %obj %uint_0 %176
-        %186 = OpLoad %int %185
-        %187 = OpLoad %int %param_3
+               OpStore %l %173
+        %176 = OpAccessChain %_ptr_Private_int %obj %uint_0 %171
+        %177 = OpLoad %int %176
+        %178 = OpAccessChain %_ptr_Private_int %obj %uint_0 %171
+               OpStore %178 %31
+        %179 = OpAccessChain %_ptr_Private_int %obj %uint_0 %171
+               OpStore %179 %177
+        %180 = OpAccessChain %_ptr_Private_int %obj %uint_0 %171
+        %181 = OpLoad %int %180
+        %182 = OpLoad %int %param_3
                OpStore %param_3 %31
-               OpStore %param_3 %187
-        %188 = OpCompositeExtract %float %37 2
-        %189 = OpCompositeExtract %float %37 0
-        %190 = OpCompositeExtract %float %37 2
-        %191 = OpCompositeConstruct %v3float %188 %189 %190
-        %192 = OpLoad %int %param_1
+               OpStore %param_3 %182
+        %184 = OpLoad %int %param_1
                OpStore %param_1 %31
-               OpStore %param_1 %192
-               OpStore %pivot %186
-        %194 = OpLoad %int %l
-        %196 = OpLoad %int %h
+               OpStore %param_1 %184
+               OpStore %pivot %181
+        %186 = OpLoad %int %l
+        %188 = OpLoad %int %h
                OpStore %h %31
-               OpStore %h %196
-        %199 = OpLoad %int %j_1
+               OpStore %h %188
+        %191 = OpLoad %int %j_1
                OpStore %j_1 %31
-               OpStore %j_1 %199
-        %200 = OpCompositeExtract %float %191 1
-        %201 = OpCompositeExtract %float %191 2
-        %202 = OpCompositeExtract %float %191 1
-        %203 = OpCompositeConstruct %v3float %200 %201 %202
-        %205 = OpLoad %int %l
+               OpStore %j_1 %191
+        %192 = OpCompositeExtract %float %183 1
+        %193 = OpCompositeExtract %float %183 2
+        %194 = OpCompositeExtract %float %183 1
+        %195 = OpCompositeConstruct %v3float %192 %193 %194
+        %197 = OpLoad %int %l
                OpStore %l %31
-               OpStore %l %205
-        %208 = OpBitcast %int %uint_1
-        %210 = OpISub %int %194 %208
-               OpStore %i_1 %210
-        %212 = OpLoad %int %l
-        %213 = OpCompositeExtract %float %191 0
-        %214 = OpCompositeExtract %float %191 2
-        %215 = OpCompositeExtract %float %203 0
-        %216 = OpCompositeConstruct %v3float %213 %214 %215
+               OpStore %l %197
+        %200 = OpBitcast %int %uint_1
+        %202 = OpISub %int %186 %200
+               OpStore %i_1 %202
+        %204 = OpLoad %int %l
+        %205 = OpCompositeExtract %float %183 0
+        %206 = OpCompositeExtract %float %183 2
+        %207 = OpCompositeExtract %float %195 0
+        %208 = OpCompositeConstruct %v3float %205 %206 %207
                OpStore %j_1 %int_10
-        %218 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %218
-               OpBranch %219
-        %219 = OpLabel
-               OpLoopMerge %220 %221 None
-               OpBranch %222
-        %222 = OpLabel
-        %223 = OpLoad %int %pivot
+        %210 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %210
+               OpBranch %211
+        %211 = OpLabel
+               OpLoopMerge %212 %213 None
+               OpBranch %214
+        %214 = OpLabel
+        %215 = OpLoad %int %pivot
                OpStore %pivot %31
-               OpStore %pivot %223
-        %224 = OpLoad %int %param_1
+               OpStore %pivot %215
+        %216 = OpLoad %int %param_1
                OpStore %param_1 %31
-               OpStore %param_1 %224
-        %225 = OpLoad %int %j_1
-        %226 = OpLoad %int %pivot
+               OpStore %param_1 %216
+        %217 = OpLoad %int %j_1
+        %218 = OpLoad %int %pivot
                OpStore %pivot %31
-               OpStore %pivot %226
-        %227 = OpCompositeExtract %float %37 1
-        %228 = OpCompositeExtract %float %37 2
-        %229 = OpCompositeConstruct %v2float %227 %228
-               OpStore %x_537 %229
-        %230 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %230
-        %232 = OpLoad %int %h
-        %234 = OpLoad %int %h
+               OpStore %pivot %218
+               OpStore %x_537 %219
+        %220 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %220
+        %222 = OpLoad %int %h
+        %224 = OpLoad %int %h
                OpStore %h %31
-               OpStore %h %234
-        %237 = OpLoad %int %param
+               OpStore %h %224
+        %227 = OpLoad %int %param
                OpStore %param %31
-               OpStore %param %237
-        %238 = OpLoad %int %j_1
+               OpStore %param %227
+        %228 = OpLoad %int %j_1
                OpStore %j_1 %31
-               OpStore %j_1 %238
-        %239 = OpCompositeExtract %float %191 0
-        %241 = OpAccessChain %_ptr_Function_float %x_537 %uint_1
-        %242 = OpLoad %float %241
-        %243 = OpCompositeExtract %float %191 2
-        %244 = OpCompositeConstruct %v3float %239 %242 %243
-               OpStore %x_538 %244
-        %245 = OpLoad %int %param
+               OpStore %j_1 %228
+        %229 = OpCompositeExtract %float %183 0
+        %231 = OpAccessChain %_ptr_Function_float %x_537 %uint_1
+        %232 = OpLoad %float %231
+        %233 = OpCompositeExtract %float %183 2
+        %234 = OpCompositeConstruct %v3float %229 %232 %233
+               OpStore %x_538 %234
+        %235 = OpLoad %int %param
                OpStore %param %31
-               OpStore %param %245
-        %246 = OpBitcast %int %uint_1
-        %247 = OpISub %int %232 %246
-        %248 = OpSLessThanEqual %bool %225 %247
-               OpSelectionMerge %250 None
-               OpBranchConditional %248 %251 %252
-        %251 = OpLabel
-               OpBranch %250
-        %252 = OpLabel
-               OpBranch %220
-        %250 = OpLabel
-        %253 = OpLoad %int %j_1
-        %254 = OpAccessChain %_ptr_Private_int %obj %uint_0 %176
-        %255 = OpLoad %int %254
-        %256 = OpAccessChain %_ptr_Private_int %obj %uint_0 %176
-               OpStore %256 %31
-        %257 = OpAccessChain %_ptr_Private_int %obj %uint_0 %176
-               OpStore %257 %255
-        %259 = OpLoad %int %h
+               OpStore %param %235
+        %236 = OpBitcast %int %uint_1
+        %237 = OpISub %int %222 %236
+        %238 = OpSLessThanEqual %bool %217 %237
+               OpSelectionMerge %240 None
+               OpBranchConditional %238 %241 %242
+        %241 = OpLabel
+               OpBranch %240
+        %242 = OpLabel
+               OpBranch %212
+        %240 = OpLabel
+        %243 = OpLoad %int %j_1
+        %244 = OpAccessChain %_ptr_Private_int %obj %uint_0 %171
+        %245 = OpLoad %int %244
+        %246 = OpAccessChain %_ptr_Private_int %obj %uint_0 %171
+               OpStore %246 %31
+        %247 = OpAccessChain %_ptr_Private_int %obj %uint_0 %171
+               OpStore %247 %245
+        %249 = OpLoad %int %h
                OpStore %h %31
-               OpStore %h %259
-        %262 = OpAccessChain %_ptr_Function_float %x_537 %uint_0
-        %263 = OpLoad %float %262
-        %264 = OpCompositeExtract %float %203 2
-        %265 = OpAccessChain %_ptr_Function_float %x_537 %uint_0
-        %266 = OpLoad %float %265
-        %267 = OpCompositeConstruct %v3float %263 %264 %266
-        %268 = OpLoad %int %param_1
+               OpStore %h %249
+        %252 = OpAccessChain %_ptr_Function_float %x_537 %uint_0
+        %253 = OpLoad %float %252
+        %254 = OpCompositeExtract %float %195 2
+        %255 = OpAccessChain %_ptr_Function_float %x_537 %uint_0
+        %256 = OpLoad %float %255
+        %257 = OpCompositeConstruct %v3float %253 %254 %256
+        %258 = OpLoad %int %param_1
                OpStore %param_1 %31
-               OpStore %param_1 %268
-        %269 = OpAccessChain %_ptr_Private_int %obj %uint_0 %253
-        %270 = OpLoad %int %269
-        %271 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %271
-        %272 = OpLoad %int %pivot
-        %273 = OpCompositeExtract %float %37 1
-        %274 = OpCompositeExtract %float %191 2
-        %275 = OpCompositeConstruct %v2float %273 %274
-        %276 = OpLoad %int %i_1
+               OpStore %param_1 %258
+        %259 = OpAccessChain %_ptr_Private_int %obj %uint_0 %243
+        %260 = OpLoad %int %259
+        %261 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %261
+        %262 = OpLoad %int %pivot
+        %263 = OpCompositeExtract %float %183 2
+        %264 = OpCompositeConstruct %v2float %float_2 %263
+        %265 = OpLoad %int %i_1
                OpStore %i_1 %31
-               OpStore %i_1 %276
-        %278 = OpLoad %int %l
+               OpStore %i_1 %265
+        %267 = OpLoad %int %l
                OpStore %l %31
-               OpStore %l %278
-        %281 = OpCompositeExtract %float %191 1
-        %282 = OpCompositeExtract %float %191 0
-        %283 = OpCompositeExtract %float %191 1
-        %284 = OpCompositeConstruct %v3float %281 %282 %283
-        %285 = OpLoad %int %pivot
+               OpStore %l %267
+        %270 = OpCompositeExtract %float %183 1
+        %271 = OpCompositeExtract %float %183 0
+        %272 = OpCompositeExtract %float %183 1
+        %273 = OpCompositeConstruct %v3float %270 %271 %272
+        %274 = OpLoad %int %pivot
                OpStore %pivot %31
-               OpStore %pivot %285
-        %286 = OpSLessThanEqual %bool %270 %272
-               OpSelectionMerge %287 None
-               OpBranchConditional %286 %288 %287
-        %288 = OpLabel
-        %289 = OpCompositeExtract %float %284 2
-        %290 = OpCompositeExtract %float %284 0
-        %291 = OpCompositeExtract %float %284 0
-        %292 = OpCompositeConstruct %v3float %289 %290 %291
-        %293 = OpLoad %int %param_3
+               OpStore %pivot %274
+        %275 = OpSLessThanEqual %bool %260 %262
+               OpSelectionMerge %276 None
+               OpBranchConditional %275 %277 %276
+        %277 = OpLabel
+        %278 = OpCompositeExtract %float %273 2
+        %279 = OpCompositeExtract %float %273 0
+        %280 = OpCompositeExtract %float %273 0
+        %281 = OpCompositeConstruct %v3float %278 %279 %280
+        %282 = OpLoad %int %param_3
                OpStore %param_3 %31
-               OpStore %param_3 %293
-        %294 = OpLoad %int %i_1
-        %295 = OpLoad %int %pivot
+               OpStore %param_3 %282
+        %283 = OpLoad %int %i_1
+        %284 = OpLoad %int %pivot
                OpStore %pivot %31
-               OpStore %pivot %295
-        %296 = OpCompositeExtract %float %267 0
-        %297 = OpCompositeExtract %float %284 1
-        %298 = OpCompositeConstruct %v2float %296 %297
-        %299 = OpLoad %int %i_1
+               OpStore %pivot %284
+        %285 = OpCompositeExtract %float %257 0
+        %286 = OpCompositeExtract %float %273 1
+        %287 = OpCompositeConstruct %v2float %285 %286
+        %288 = OpLoad %int %i_1
                OpStore %i_1 %31
-               OpStore %i_1 %299
-        %300 = OpLoad %int %param
+               OpStore %i_1 %288
+        %289 = OpLoad %int %param
                OpStore %param %31
-               OpStore %param %300
-        %301 = OpBitcast %int %uint_1
-        %302 = OpIAdd %int %294 %301
-               OpStore %i_1 %302
-        %304 = OpLoad %int %l
+               OpStore %param %289
+        %290 = OpBitcast %int %uint_1
+        %291 = OpIAdd %int %283 %290
+               OpStore %i_1 %291
+        %293 = OpLoad %int %l
                OpStore %l %31
-               OpStore %l %304
-        %307 = OpCompositeExtract %float %37 2
-        %308 = OpCompositeExtract %float %37 1
-        %309 = OpCompositeExtract %float %275 0
-        %310 = OpCompositeConstruct %v3float %307 %308 %309
-        %311 = OpLoad %int %i_1
-        %312 = OpAccessChain %_ptr_Function_float %x_537 %uint_1
-        %313 = OpLoad %float %312
-        %314 = OpAccessChain %_ptr_Function_float %x_538 %uint_0
-        %315 = OpLoad %float %314
-        %316 = OpCompositeConstruct %v2float %313 %315
-        %317 = OpLoad %int %param
+               OpStore %l %293
+        %296 = OpCompositeExtract %float %264 0
+        %297 = OpCompositeConstruct %v3float %float_3 %float_2 %296
+        %298 = OpLoad %int %i_1
+        %299 = OpAccessChain %_ptr_Function_float %x_537 %uint_1
+        %300 = OpLoad %float %299
+        %301 = OpAccessChain %_ptr_Function_float %x_538 %uint_0
+        %302 = OpLoad %float %301
+        %303 = OpCompositeConstruct %v2float %300 %302
+        %304 = OpLoad %int %param
                OpStore %param %31
-               OpStore %param %317
-               OpStore %param %311
-        %318 = OpLoad %int %param
+               OpStore %param %304
+               OpStore %param %298
+        %305 = OpLoad %int %param
                OpStore %param %31
-               OpStore %param %318
-        %319 = OpCompositeExtract %float %316 0
-        %320 = OpCompositeExtract %float %316 0
-        %321 = OpCompositeConstruct %v2float %319 %320
-        %322 = OpLoad %int %i_1
+               OpStore %param %305
+        %306 = OpCompositeExtract %float %303 0
+        %307 = OpCompositeExtract %float %303 0
+        %308 = OpCompositeConstruct %v2float %306 %307
+        %309 = OpLoad %int %i_1
                OpStore %i_1 %31
-               OpStore %i_1 %322
-        %323 = OpLoad %int %j_1
-               OpStore %param_1 %323
-        %324 = OpLoad %int %param_3
+               OpStore %i_1 %309
+        %310 = OpLoad %int %j_1
+               OpStore %param_1 %310
+        %311 = OpLoad %int %param_3
                OpStore %param_3 %31
-               OpStore %param_3 %324
-        %325 = OpFunctionCall %void %swap_i1_i1_ %param %param_1
-        %328 = OpLoad %int %param_1
+               OpStore %param_3 %311
+        %312 = OpFunctionCall %void %swap_i1_i1_ %param %param_1
+        %315 = OpLoad %int %param_1
                OpStore %param_1 %31
-               OpStore %param_1 %328
-               OpBranch %287
-        %287 = OpLabel
-        %329 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %329
-               OpBranch %221
-        %221 = OpLabel
-        %331 = OpLoad %int %h
+               OpStore %param_1 %315
+               OpBranch %276
+        %276 = OpLabel
+        %316 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %316
+               OpBranch %213
+        %213 = OpLabel
+        %318 = OpLoad %int %h
                OpStore %h %31
-               OpStore %h %331
-        %334 = OpLoad %int %j_1
-        %336 = OpLoad %int %h
+               OpStore %h %318
+        %321 = OpLoad %int %j_1
+        %323 = OpLoad %int %h
                OpStore %h %31
-               OpStore %h %336
-        %339 = OpCompositeExtract %float %267 0
-        %340 = OpCompositeExtract %float %284 2
-        %341 = OpCompositeExtract %float %284 2
-        %342 = OpCompositeConstruct %v3float %339 %340 %341
-        %343 = OpAccessChain %_ptr_Private_int %obj %uint_0 %253
-        %344 = OpLoad %int %343
-        %345 = OpAccessChain %_ptr_Private_int %obj %uint_0 %253
-               OpStore %345 %31
-        %346 = OpAccessChain %_ptr_Private_int %obj %uint_0 %253
-               OpStore %346 %344
-        %347 = OpLoad %int %param
+               OpStore %h %323
+        %326 = OpCompositeExtract %float %257 0
+        %327 = OpCompositeExtract %float %273 2
+        %328 = OpCompositeExtract %float %273 2
+        %329 = OpCompositeConstruct %v3float %326 %327 %328
+        %330 = OpAccessChain %_ptr_Private_int %obj %uint_0 %243
+        %331 = OpLoad %int %330
+        %332 = OpAccessChain %_ptr_Private_int %obj %uint_0 %243
+               OpStore %332 %31
+        %333 = OpAccessChain %_ptr_Private_int %obj %uint_0 %243
+               OpStore %333 %331
+        %334 = OpLoad %int %param
                OpStore %param %31
-               OpStore %param %347
-        %349 = OpIAdd %int %int_1 %334
-               OpStore %j_1 %349
-        %350 = OpLoad %int %param_1
+               OpStore %param %334
+        %336 = OpIAdd %int %int_1 %321
+               OpStore %j_1 %336
+        %337 = OpLoad %int %param_1
                OpStore %param_1 %31
-               OpStore %param_1 %350
-        %351 = OpCompositeExtract %float %284 1
-        %352 = OpCompositeExtract %float %284 2
-        %353 = OpCompositeExtract %float %284 0
-        %354 = OpCompositeConstruct %v3float %351 %352 %353
-        %355 = OpAccessChain %_ptr_Private_int %obj %uint_0 %253
-        %356 = OpLoad %int %355
-        %357 = OpAccessChain %_ptr_Private_int %obj %uint_0 %253
-               OpStore %357 %31
-        %358 = OpAccessChain %_ptr_Private_int %obj %uint_0 %253
-               OpStore %358 %356
-               OpBranch %219
-        %220 = OpLabel
-        %359 = OpLoad %int %i_1
-        %360 = OpAccessChain %_ptr_Private_int %obj %uint_0 %176
-        %361 = OpLoad %int %360
-        %362 = OpAccessChain %_ptr_Private_int %obj %uint_0 %176
-               OpStore %362 %31
-        %363 = OpAccessChain %_ptr_Private_int %obj %uint_0 %176
-               OpStore %363 %361
-        %364 = OpCompositeExtract %float %191 0
-        %365 = OpCompositeExtract %float %191 1
-        %366 = OpCompositeConstruct %v2float %364 %365
-        %367 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %367
-        %369 = OpLoad %int %h
+               OpStore %param_1 %337
+        %338 = OpCompositeExtract %float %273 1
+        %339 = OpCompositeExtract %float %273 2
+        %340 = OpCompositeExtract %float %273 0
+        %341 = OpCompositeConstruct %v3float %338 %339 %340
+        %342 = OpAccessChain %_ptr_Private_int %obj %uint_0 %243
+        %343 = OpLoad %int %342
+        %344 = OpAccessChain %_ptr_Private_int %obj %uint_0 %243
+               OpStore %344 %31
+        %345 = OpAccessChain %_ptr_Private_int %obj %uint_0 %243
+               OpStore %345 %343
+               OpBranch %211
+        %212 = OpLabel
+        %346 = OpLoad %int %i_1
+        %347 = OpAccessChain %_ptr_Private_int %obj %uint_0 %171
+        %348 = OpLoad %int %347
+        %349 = OpAccessChain %_ptr_Private_int %obj %uint_0 %171
+               OpStore %349 %31
+        %350 = OpAccessChain %_ptr_Private_int %obj %uint_0 %171
+               OpStore %350 %348
+        %351 = OpCompositeExtract %float %183 0
+        %352 = OpCompositeExtract %float %183 1
+        %353 = OpCompositeConstruct %v2float %351 %352
+        %354 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %354
+        %356 = OpLoad %int %h
                OpStore %h %31
-               OpStore %h %369
-        %372 = OpIAdd %int %int_1 %359
-               OpStore %i_1 %372
-        %373 = OpLoad %int %param_1
+               OpStore %h %356
+        %359 = OpIAdd %int %int_1 %346
+               OpStore %i_1 %359
+        %360 = OpLoad %int %param_1
                OpStore %param_1 %31
-               OpStore %param_1 %373
-        %374 = OpLoad %int %i_1
-        %375 = OpLoad %int %j_1
+               OpStore %param_1 %360
+        %361 = OpLoad %int %i_1
+        %362 = OpLoad %int %j_1
                OpStore %j_1 %31
-               OpStore %j_1 %375
-        %376 = OpCompositeExtract %float %191 0
-        %377 = OpCompositeExtract %float %191 0
-        %378 = OpCompositeConstruct %v2float %376 %377
-        %379 = OpLoad %int %param_1
+               OpStore %j_1 %362
+        %363 = OpCompositeExtract %float %183 0
+        %364 = OpCompositeExtract %float %183 0
+        %365 = OpCompositeConstruct %v2float %363 %364
+        %366 = OpLoad %int %param_1
                OpStore %param_1 %31
-               OpStore %param_1 %379
-               OpStore %param_2 %374
-        %380 = OpCompositeExtract %float %191 1
-        %381 = OpCompositeExtract %float %216 0
-        %382 = OpCompositeConstruct %v2float %380 %381
-        %383 = OpLoad %int %pivot
+               OpStore %param_1 %366
+               OpStore %param_2 %361
+        %367 = OpCompositeExtract %float %183 1
+        %368 = OpCompositeExtract %float %208 0
+        %369 = OpCompositeConstruct %v2float %367 %368
+        %370 = OpLoad %int %pivot
                OpStore %pivot %31
-               OpStore %pivot %383
+               OpStore %pivot %370
+        %372 = OpLoad %int %h
+        %373 = OpCompositeExtract %float %365 0
+        %374 = OpCompositeExtract %float %353 1
+        %375 = OpCompositeConstruct %v2float %373 %374
+        %377 = OpLoad %int %h
+               OpStore %h %31
+               OpStore %h %377
+               OpStore %param_3 %372
+        %380 = OpLoad %int %i_1
+               OpStore %i_1 %31
+               OpStore %i_1 %380
+        %381 = OpCompositeExtract %float %353 1
+        %382 = OpCompositeExtract %float %375 0
+        %383 = OpCompositeConstruct %v2float %381 %382
         %385 = OpLoad %int %h
-        %386 = OpCompositeExtract %float %378 0
-        %387 = OpCompositeExtract %float %366 1
-        %388 = OpCompositeConstruct %v2float %386 %387
-        %390 = OpLoad %int %h
                OpStore %h %31
-               OpStore %h %390
-               OpStore %param_3 %385
-        %393 = OpLoad %int %i_1
-               OpStore %i_1 %31
-               OpStore %i_1 %393
-        %394 = OpCompositeExtract %float %366 1
-        %395 = OpCompositeExtract %float %388 0
-        %396 = OpCompositeConstruct %v2float %394 %395
-        %398 = OpLoad %int %h
-               OpStore %h %31
-               OpStore %h %398
-        %401 = OpFunctionCall %void %swap_i1_i1_ %param_2 %param_3
-        %405 = OpLoad %int %l
+               OpStore %h %385
+        %388 = OpFunctionCall %void %swap_i1_i1_ %param_2 %param_3
+        %392 = OpLoad %int %l
                OpStore %l %31
-               OpStore %l %405
-        %408 = OpCompositeExtract %float %216 2
-        %409 = OpCompositeExtract %float %37 1
-        %410 = OpCompositeConstruct %v2float %408 %409
-        %411 = OpLoad %int %param_1
+               OpStore %l %392
+        %395 = OpCompositeExtract %float %208 2
+        %396 = OpCompositeConstruct %v2float %395 %float_2
+        %397 = OpLoad %int %param_1
                OpStore %param_1 %31
-               OpStore %param_1 %411
-        %412 = OpLoad %int %i_1
-        %413 = OpLoad %int %param
+               OpStore %param_1 %397
+        %398 = OpLoad %int %i_1
+        %399 = OpLoad %int %param
                OpStore %param %31
-               OpStore %param %413
-        %414 = OpCompositeExtract %float %191 1
-        %415 = OpCompositeExtract %float %191 0
-        %416 = OpCompositeConstruct %v2float %414 %415
-        %417 = OpLoad %int %j_1
+               OpStore %param %399
+        %400 = OpCompositeExtract %float %183 1
+        %401 = OpCompositeExtract %float %183 0
+        %402 = OpCompositeConstruct %v2float %400 %401
+        %403 = OpLoad %int %j_1
                OpStore %j_1 %31
-               OpStore %j_1 %417
-               OpReturnValue %412
+               OpStore %j_1 %403
+               OpReturnValue %398
                OpFunctionEnd
- %quicksort_ = OpFunction %void None %418
-        %420 = OpLabel
+ %quicksort_ = OpFunction %void None %404
+        %406 = OpLabel
     %param_4 = OpVariable %_ptr_Function_int Function %31
         %h_1 = OpVariable %_ptr_Function_int Function %31
           %p = OpVariable %_ptr_Function_int Function %31
         %l_1 = OpVariable %_ptr_Function_int Function %31
         %top = OpVariable %_ptr_Function_int Function %31
-      %stack = OpVariable %_ptr_Function__arr_int_uint_10 Function %101
+      %stack = OpVariable %_ptr_Function__arr_int_uint_10 Function %96
     %param_5 = OpVariable %_ptr_Function_int Function %31
                OpStore %l_1 %31
-        %429 = OpLoad %int %param_5
+        %415 = OpLoad %int %param_5
                OpStore %param_5 %31
-               OpStore %param_5 %429
+               OpStore %param_5 %415
                OpStore %h_1 %int_9
-        %431 = OpLoad %_arr_int_uint_10 %stack
-               OpStore %stack %101
-               OpStore %stack %431
-        %432 = OpCompositeExtract %float %37 1
-        %433 = OpCompositeExtract %float %37 1
-        %434 = OpCompositeConstruct %v2float %432 %433
-        %435 = OpLoad %int %param_5
+        %417 = OpLoad %_arr_int_uint_10 %stack
+               OpStore %stack %96
+               OpStore %stack %417
+        %419 = OpLoad %int %param_5
                OpStore %param_5 %31
-               OpStore %param_5 %435
+               OpStore %param_5 %419
                OpStore %top %int_n1
-        %437 = OpLoad %int %p
+        %421 = OpLoad %int %p
                OpStore %p %31
-               OpStore %p %437
-        %438 = OpLoad %int %top
-        %439 = OpCompositeExtract %float %37 0
-        %440 = OpCompositeExtract %float %37 0
-        %441 = OpCompositeConstruct %v2float %439 %440
-        %442 = OpLoad %int %p
+               OpStore %p %421
+        %422 = OpLoad %int %top
+        %424 = OpLoad %int %p
                OpStore %p %31
-               OpStore %p %442
-        %443 = OpBitcast %int %uint_1
-        %444 = OpIAdd %int %438 %443
-        %445 = OpLoad %int %top
+               OpStore %p %424
+        %425 = OpBitcast %int %uint_1
+        %426 = OpIAdd %int %422 %425
+        %427 = OpLoad %int %top
                OpStore %top %31
-               OpStore %top %445
-        %446 = OpCompositeExtract %float %434 1
-        %447 = OpCompositeExtract %float %441 1
-        %448 = OpCompositeConstruct %v2float %446 %447
-        %449 = OpLoad %int %param_4
+               OpStore %top %427
+        %428 = OpCompositeExtract %float %418 1
+        %429 = OpCompositeExtract %float %423 1
+        %430 = OpCompositeConstruct %v2float %428 %429
+        %431 = OpLoad %int %param_4
                OpStore %param_4 %31
-               OpStore %param_4 %449
-               OpStore %top %444
-        %450 = OpLoad %int %h_1
+               OpStore %param_4 %431
+               OpStore %top %426
+        %432 = OpLoad %int %h_1
                OpStore %h_1 %31
-               OpStore %h_1 %450
-        %451 = OpCompositeExtract %float %441 1
-        %452 = OpCompositeExtract %float %441 0
-        %453 = OpCompositeExtract %float %441 0
-        %454 = OpCompositeConstruct %v3float %451 %452 %453
-        %455 = OpLoad %int %param_4
+               OpStore %h_1 %432
+        %433 = OpCompositeExtract %float %423 1
+        %434 = OpCompositeExtract %float %423 0
+        %435 = OpCompositeExtract %float %423 0
+        %436 = OpCompositeConstruct %v3float %433 %434 %435
+        %437 = OpLoad %int %param_4
                OpStore %param_4 %31
-               OpStore %param_4 %455
-        %456 = OpLoad %int %l_1
-        %457 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %457
-        %458 = OpCompositeExtract %float %454 1
-        %459 = OpCompositeExtract %float %454 0
-        %460 = OpCompositeExtract %float %441 0
-        %461 = OpCompositeConstruct %v3float %458 %459 %460
-        %462 = OpLoad %_arr_int_uint_10 %stack
-               OpStore %stack %101
-               OpStore %stack %462
-        %463 = OpCompositeExtract %float %434 1
-        %464 = OpCompositeExtract %float %434 1
-        %465 = OpCompositeExtract %float %434 1
-        %466 = OpCompositeConstruct %v3float %463 %464 %465
-        %467 = OpLoad %int %l_1
+               OpStore %param_4 %437
+        %438 = OpLoad %int %l_1
+        %439 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %439
+        %440 = OpCompositeExtract %float %436 1
+        %441 = OpCompositeExtract %float %436 0
+        %442 = OpCompositeExtract %float %423 0
+        %443 = OpCompositeConstruct %v3float %440 %441 %442
+        %444 = OpLoad %_arr_int_uint_10 %stack
+               OpStore %stack %96
+               OpStore %stack %444
+        %445 = OpCompositeExtract %float %418 1
+        %446 = OpCompositeExtract %float %418 1
+        %447 = OpCompositeExtract %float %418 1
+        %448 = OpCompositeConstruct %v3float %445 %446 %447
+        %449 = OpLoad %int %l_1
                OpStore %l_1 %31
                OpStore %l_1 %31
-        %468 = OpAccessChain %_ptr_Function_int %stack %444
-               OpStore %468 %456
-        %469 = OpLoad %int %param_5
+        %450 = OpAccessChain %_ptr_Function_int %stack %426
+               OpStore %450 %438
+        %451 = OpLoad %int %param_5
                OpStore %param_5 %31
-               OpStore %param_5 %469
-        %470 = OpLoad %int %top
+               OpStore %param_5 %451
+        %452 = OpLoad %int %top
+        %453 = OpLoad %int %param_4
+               OpStore %param_4 %31
+               OpStore %param_4 %453
+        %454 = OpCompositeExtract %float %430 1
+        %455 = OpCompositeConstruct %v3float %float_3 %454 %float_2
+        %456 = OpAccessChain %_ptr_Function_int %stack %426
+        %457 = OpLoad %int %456
+        %458 = OpAccessChain %_ptr_Function_int %stack %426
+               OpStore %458 %31
+        %459 = OpAccessChain %_ptr_Function_int %stack %426
+               OpStore %459 %457
+        %460 = OpIAdd %int %452 %int_1
+        %461 = OpAccessChain %_ptr_Function_int %stack %426
+        %462 = OpLoad %int %461
+        %463 = OpAccessChain %_ptr_Function_int %stack %426
+               OpStore %463 %31
+        %464 = OpAccessChain %_ptr_Function_int %stack %426
+               OpStore %464 %462
+        %465 = OpCompositeExtract %float %436 0
+        %466 = OpCompositeExtract %float %436 2
+        %467 = OpCompositeExtract %float %418 1
+        %468 = OpCompositeConstruct %v3float %465 %466 %467
+               OpStore %top %460
+        %469 = OpLoad %int %param_4
+               OpStore %param_4 %31
+               OpStore %param_4 %469
+        %470 = OpLoad %int %h_1
         %471 = OpLoad %int %param_4
                OpStore %param_4 %31
                OpStore %param_4 %471
-        %472 = OpCompositeExtract %float %37 2
-        %473 = OpCompositeExtract %float %448 1
-        %474 = OpCompositeExtract %float %37 1
+        %472 = OpCompositeExtract %float %430 0
+        %473 = OpCompositeExtract %float %448 0
+        %474 = OpCompositeExtract %float %430 1
         %475 = OpCompositeConstruct %v3float %472 %473 %474
-        %476 = OpAccessChain %_ptr_Function_int %stack %444
-        %477 = OpLoad %int %476
-        %478 = OpAccessChain %_ptr_Function_int %stack %444
-               OpStore %478 %31
-        %479 = OpAccessChain %_ptr_Function_int %stack %444
-               OpStore %479 %477
-        %480 = OpIAdd %int %470 %int_1
-        %481 = OpAccessChain %_ptr_Function_int %stack %444
-        %482 = OpLoad %int %481
-        %483 = OpAccessChain %_ptr_Function_int %stack %444
-               OpStore %483 %31
-        %484 = OpAccessChain %_ptr_Function_int %stack %444
-               OpStore %484 %482
-        %485 = OpCompositeExtract %float %454 0
-        %486 = OpCompositeExtract %float %454 2
-        %487 = OpCompositeExtract %float %434 1
-        %488 = OpCompositeConstruct %v3float %485 %486 %487
-               OpStore %top %480
-        %489 = OpLoad %int %param_4
-               OpStore %param_4 %31
-               OpStore %param_4 %489
-        %490 = OpLoad %int %h_1
-        %491 = OpLoad %int %param_4
-               OpStore %param_4 %31
-               OpStore %param_4 %491
-        %492 = OpCompositeExtract %float %448 0
-        %493 = OpCompositeExtract %float %466 0
-        %494 = OpCompositeExtract %float %448 1
-        %495 = OpCompositeConstruct %v3float %492 %493 %494
-        %496 = OpLoad %int %l_1
+        %476 = OpLoad %int %l_1
                OpStore %l_1 %31
-               OpStore %l_1 %496
-        %497 = OpLoad %int %param_5
+               OpStore %l_1 %476
+        %477 = OpLoad %int %param_5
                OpStore %param_5 %31
-               OpStore %param_5 %497
-        %498 = OpCompositeExtract %float %495 2
-        %499 = OpCompositeExtract %float %495 2
-        %500 = OpCompositeConstruct %v2float %498 %499
-        %501 = OpLoad %int %p
+               OpStore %param_5 %477
+        %478 = OpCompositeExtract %float %475 2
+        %479 = OpCompositeExtract %float %475 2
+        %480 = OpCompositeConstruct %v2float %478 %479
+        %481 = OpLoad %int %p
                OpStore %p %31
-               OpStore %p %501
-        %502 = OpAccessChain %_ptr_Function_int %stack %480
-               OpStore %502 %490
-               OpBranch %503
+               OpStore %p %481
+        %482 = OpAccessChain %_ptr_Function_int %stack %460
+               OpStore %482 %470
+               OpBranch %483
+        %483 = OpLabel
+               OpLoopMerge %484 %485 None
+               OpBranch %486
+        %486 = OpLabel
+        %487 = OpCompositeExtract %float %468 0
+        %488 = OpCompositeExtract %float %468 0
+        %489 = OpCompositeExtract %float %468 0
+        %490 = OpCompositeConstruct %v3float %487 %488 %489
+        %491 = OpLoad %int %h_1
+               OpStore %h_1 %31
+               OpStore %h_1 %491
+        %492 = OpLoad %_arr_int_uint_10 %stack
+               OpStore %stack %96
+               OpStore %stack %492
+        %493 = OpLoad %int %top
+        %494 = OpLoad %_arr_int_uint_10 %stack
+               OpStore %stack %96
+               OpStore %stack %494
+        %495 = OpCompositeExtract %float %430 0
+        %496 = OpCompositeExtract %float %475 2
+        %497 = OpCompositeConstruct %v2float %495 %496
+        %498 = OpLoad %int %param_4
+               OpStore %param_4 %31
+               OpStore %param_4 %498
+        %499 = OpBitcast %int %500
+        %501 = OpSGreaterThanEqual %bool %493 %499
+               OpSelectionMerge %502 None
+               OpBranchConditional %501 %503 %504
         %503 = OpLabel
-               OpLoopMerge %504 %505 None
-               OpBranch %506
-        %506 = OpLabel
-        %507 = OpCompositeExtract %float %488 0
-        %508 = OpCompositeExtract %float %488 0
-        %509 = OpCompositeExtract %float %488 0
-        %510 = OpCompositeConstruct %v3float %507 %508 %509
-        %511 = OpLoad %int %h_1
-               OpStore %h_1 %31
-               OpStore %h_1 %511
-        %512 = OpLoad %_arr_int_uint_10 %stack
-               OpStore %stack %101
-               OpStore %stack %512
-        %513 = OpLoad %int %top
-        %514 = OpLoad %_arr_int_uint_10 %stack
-               OpStore %stack %101
-               OpStore %stack %514
-        %515 = OpCompositeExtract %float %448 0
-        %516 = OpCompositeExtract %float %495 2
-        %517 = OpCompositeConstruct %v2float %515 %516
-        %518 = OpLoad %int %param_4
+               OpBranch %502
+        %504 = OpLabel
+               OpBranch %484
+        %502 = OpLabel
+        %505 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %505
+        %506 = OpCompositeExtract %float %436 1
+        %507 = OpCompositeExtract %float %436 0
+        %508 = OpCompositeExtract %float %468 1
+        %509 = OpCompositeConstruct %v3float %506 %507 %508
+        %510 = OpLoad %int %param_4
                OpStore %param_4 %31
-               OpStore %param_4 %518
-        %519 = OpBitcast %int %520
-        %521 = OpSGreaterThanEqual %bool %513 %519
-               OpSelectionMerge %522 None
-               OpBranchConditional %521 %523 %524
-        %523 = OpLabel
-               OpBranch %522
-        %524 = OpLabel
-               OpBranch %504
-        %522 = OpLabel
-        %525 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %525
-        %526 = OpCompositeExtract %float %454 1
-        %527 = OpCompositeExtract %float %454 0
-        %528 = OpCompositeExtract %float %488 1
-        %529 = OpCompositeConstruct %v3float %526 %527 %528
-        %530 = OpLoad %int %param_4
-               OpStore %param_4 %31
-               OpStore %param_4 %530
-        %531 = OpLoad %int %top
-        %532 = OpCompositeExtract %float %500 0
-        %533 = OpCompositeExtract %float %517 1
-        %534 = OpCompositeExtract %float %500 0
-        %535 = OpCompositeConstruct %v3float %532 %533 %534
-        %536 = OpLoad %int %h_1
+               OpStore %param_4 %510
+        %511 = OpLoad %int %top
+        %512 = OpCompositeExtract %float %480 0
+        %513 = OpCompositeExtract %float %497 1
+        %514 = OpCompositeExtract %float %480 0
+        %515 = OpCompositeConstruct %v3float %512 %513 %514
+        %516 = OpLoad %int %h_1
                OpStore %h_1 %31
-               OpStore %h_1 %536
-        %537 = OpCompositeExtract %float %434 0
-        %538 = OpCompositeExtract %float %434 0
+               OpStore %h_1 %516
+        %517 = OpCompositeExtract %float %418 0
+        %518 = OpCompositeExtract %float %418 0
+        %519 = OpCompositeConstruct %v2float %517 %518
+        %520 = OpLoad %int %p
+               OpStore %p %31
+               OpStore %p %520
+        %521 = OpBitcast %int %uint_1
+        %522 = OpISub %int %511 %521
+               OpStore %top %522
+        %523 = OpLoad %int %p
+               OpStore %p %31
+               OpStore %p %523
+        %524 = OpAccessChain %_ptr_Function_int %stack %426
+        %525 = OpLoad %int %524
+        %526 = OpAccessChain %_ptr_Function_int %stack %426
+               OpStore %526 %31
+        %527 = OpAccessChain %_ptr_Function_int %stack %426
+               OpStore %527 %525
+        %528 = OpAccessChain %_ptr_Function_int %stack %511
+        %529 = OpLoad %int %528
+        %530 = OpLoad %_arr_int_uint_10 %stack
+               OpStore %stack %96
+               OpStore %stack %530
+        %531 = OpCompositeExtract %float %436 1
+        %532 = OpCompositeExtract %float %436 0
+        %533 = OpCompositeExtract %float %475 1
+        %534 = OpCompositeConstruct %v3float %531 %532 %533
+        %535 = OpLoad %int %l_1
+               OpStore %l_1 %31
+               OpStore %l_1 %535
+               OpStore %h_1 %529
+        %536 = OpLoad %_arr_int_uint_10 %stack
+               OpStore %stack %96
+               OpStore %stack %536
+        %537 = OpCompositeExtract %float %455 1
+        %538 = OpCompositeExtract %float %448 1
         %539 = OpCompositeConstruct %v2float %537 %538
         %540 = OpLoad %int %p
                OpStore %p %31
                OpStore %p %540
-        %541 = OpBitcast %int %uint_1
-        %542 = OpISub %int %531 %541
-               OpStore %top %542
-        %543 = OpLoad %int %p
-               OpStore %p %31
-               OpStore %p %543
-        %544 = OpAccessChain %_ptr_Function_int %stack %444
-        %545 = OpLoad %int %544
-        %546 = OpAccessChain %_ptr_Function_int %stack %444
-               OpStore %546 %31
-        %547 = OpAccessChain %_ptr_Function_int %stack %444
-               OpStore %547 %545
-        %548 = OpAccessChain %_ptr_Function_int %stack %531
-        %549 = OpLoad %int %548
-        %550 = OpLoad %_arr_int_uint_10 %stack
-               OpStore %stack %101
-               OpStore %stack %550
-        %551 = OpCompositeExtract %float %454 1
-        %552 = OpCompositeExtract %float %454 0
-        %553 = OpCompositeExtract %float %495 1
-        %554 = OpCompositeConstruct %v3float %551 %552 %553
-        %555 = OpLoad %int %l_1
-               OpStore %l_1 %31
-               OpStore %l_1 %555
-               OpStore %h_1 %549
-        %556 = OpLoad %_arr_int_uint_10 %stack
-               OpStore %stack %101
-               OpStore %stack %556
-        %557 = OpCompositeExtract %float %475 1
-        %558 = OpCompositeExtract %float %466 1
-        %559 = OpCompositeConstruct %v2float %557 %558
-        %560 = OpLoad %int %p
-               OpStore %p %31
-               OpStore %p %560
-        %561 = OpLoad %int %top
-        %562 = OpLoad %int %param_4
+        %541 = OpLoad %int %top
+        %542 = OpLoad %int %param_4
                OpStore %param_4 %31
-               OpStore %param_4 %562
-        %563 = OpAccessChain %_ptr_Function_int %stack %480
-        %564 = OpLoad %int %563
-        %565 = OpAccessChain %_ptr_Function_int %stack %480
-               OpStore %565 %31
-        %566 = OpAccessChain %_ptr_Function_int %stack %480
-               OpStore %566 %564
-        %567 = OpCompositeExtract %float %37 1
-        %568 = OpCompositeExtract %float %37 2
-        %569 = OpCompositeConstruct %v2float %567 %568
-        %570 = OpISub %int %561 %int_1
-               OpStore %top %570
-        %571 = OpLoad %int %param_5
+               OpStore %param_4 %542
+        %543 = OpAccessChain %_ptr_Function_int %stack %460
+        %544 = OpLoad %int %543
+        %545 = OpAccessChain %_ptr_Function_int %stack %460
+               OpStore %545 %31
+        %546 = OpAccessChain %_ptr_Function_int %stack %460
+               OpStore %546 %544
+        %547 = OpISub %int %541 %int_1
+               OpStore %top %547
+        %548 = OpLoad %int %param_5
                OpStore %param_5 %31
-               OpStore %param_5 %571
-        %572 = OpCompositeExtract %float %539 1
-        %573 = OpCompositeExtract %float %500 0
-        %574 = OpCompositeExtract %float %539 1
-        %575 = OpCompositeConstruct %v3float %572 %573 %574
-        %576 = OpLoad %int %h_1
+               OpStore %param_5 %548
+        %549 = OpCompositeExtract %float %519 1
+        %550 = OpCompositeExtract %float %480 0
+        %551 = OpCompositeExtract %float %519 1
+        %552 = OpCompositeConstruct %v3float %549 %550 %551
+        %553 = OpLoad %int %h_1
                OpStore %h_1 %31
-               OpStore %h_1 %576
-        %577 = OpCompositeExtract %float %495 1
-        %578 = OpCompositeExtract %float %495 2
-        %579 = OpCompositeConstruct %v2float %577 %578
-        %580 = OpAccessChain %_ptr_Function_int %stack %480
-        %581 = OpLoad %int %580
-        %582 = OpAccessChain %_ptr_Function_int %stack %480
-               OpStore %582 %31
-        %583 = OpAccessChain %_ptr_Function_int %stack %480
-               OpStore %583 %581
-        %584 = OpAccessChain %_ptr_Function_int %stack %561
-        %585 = OpLoad %int %584
-        %586 = OpLoad %int %p
+               OpStore %h_1 %553
+        %554 = OpCompositeExtract %float %475 1
+        %555 = OpCompositeExtract %float %475 2
+        %556 = OpCompositeConstruct %v2float %554 %555
+        %557 = OpAccessChain %_ptr_Function_int %stack %460
+        %558 = OpLoad %int %557
+        %559 = OpAccessChain %_ptr_Function_int %stack %460
+               OpStore %559 %31
+        %560 = OpAccessChain %_ptr_Function_int %stack %460
+               OpStore %560 %558
+        %561 = OpAccessChain %_ptr_Function_int %stack %541
+        %562 = OpLoad %int %561
+        %563 = OpLoad %int %p
                OpStore %p %31
-               OpStore %p %586
-        %587 = OpCompositeExtract %float %569 1
-        %588 = OpCompositeExtract %float %569 1
-        %589 = OpCompositeExtract %float %500 0
-        %590 = OpCompositeConstruct %v3float %587 %588 %589
+               OpStore %p %563
+        %564 = OpCompositeExtract %float %219 1
+        %565 = OpCompositeExtract %float %219 1
+        %566 = OpCompositeExtract %float %480 0
+        %567 = OpCompositeConstruct %v3float %564 %565 %566
+        %568 = OpLoad %int %param_5
+               OpStore %param_5 %31
+               OpStore %param_5 %568
+               OpStore %l_1 %562
+        %569 = OpLoad %int %top
+               OpStore %top %31
+               OpStore %top %569
+        %570 = OpLoad %int %l_1
+               OpStore %param_4 %570
+        %571 = OpAccessChain %_ptr_Function_int %stack %511
+        %572 = OpLoad %int %571
+        %573 = OpAccessChain %_ptr_Function_int %stack %511
+               OpStore %573 %31
+        %574 = OpAccessChain %_ptr_Function_int %stack %511
+               OpStore %574 %572
+        %575 = OpCompositeExtract %float %515 1
+        %576 = OpCompositeExtract %float %515 2
+        %577 = OpCompositeConstruct %v2float %575 %576
+        %578 = OpLoad %int %h_1
+        %579 = OpCompositeExtract %float %430 0
+        %580 = OpCompositeConstruct %v2float %579 %float_2
+               OpStore %param_5 %578
+        %581 = OpAccessChain %_ptr_Function_int %stack %460
+        %582 = OpLoad %int %581
+        %583 = OpAccessChain %_ptr_Function_int %stack %460
+               OpStore %583 %31
+        %584 = OpAccessChain %_ptr_Function_int %stack %460
+               OpStore %584 %582
+        %585 = OpFunctionCall %int %performPartition_i1_i1_ %param_4 %param_5
+        %588 = OpCompositeExtract %float %497 0
+        %589 = OpCompositeExtract %float %509 0
+        %590 = OpCompositeConstruct %v2float %588 %589
         %591 = OpLoad %int %param_5
                OpStore %param_5 %31
                OpStore %param_5 %591
-               OpStore %l_1 %585
-        %592 = OpLoad %int %top
-               OpStore %top %31
-               OpStore %top %592
-        %593 = OpLoad %int %l_1
-               OpStore %param_4 %593
-        %594 = OpAccessChain %_ptr_Function_int %stack %531
-        %595 = OpLoad %int %594
-        %596 = OpAccessChain %_ptr_Function_int %stack %531
-               OpStore %596 %31
-        %597 = OpAccessChain %_ptr_Function_int %stack %531
-               OpStore %597 %595
-        %598 = OpCompositeExtract %float %535 1
-        %599 = OpCompositeExtract %float %535 2
-        %600 = OpCompositeConstruct %v2float %598 %599
-        %601 = OpLoad %int %h_1
-        %602 = OpCompositeExtract %float %448 0
-        %603 = OpCompositeExtract %float %37 1
-        %604 = OpCompositeConstruct %v2float %602 %603
-               OpStore %param_5 %601
-        %605 = OpAccessChain %_ptr_Function_int %stack %480
-        %606 = OpLoad %int %605
-        %607 = OpAccessChain %_ptr_Function_int %stack %480
-               OpStore %607 %31
-        %608 = OpAccessChain %_ptr_Function_int %stack %480
-               OpStore %608 %606
-        %609 = OpFunctionCall %int %performPartition_i1_i1_ %param_4 %param_5
-        %612 = OpCompositeExtract %float %517 0
-        %613 = OpCompositeExtract %float %529 0
-        %614 = OpCompositeConstruct %v2float %612 %613
-        %615 = OpLoad %int %param_5
-               OpStore %param_5 %31
-               OpStore %param_5 %615
-               OpStore %p %609
-        %616 = OpLoad %int %param_4
+               OpStore %p %585
+        %592 = OpLoad %int %param_4
                OpStore %param_4 %31
-               OpStore %param_4 %616
-        %617 = OpLoad %int %p
-        %618 = OpLoad %int %h_1
+               OpStore %param_4 %592
+        %593 = OpLoad %int %p
+        %594 = OpLoad %int %h_1
                OpStore %h_1 %31
-               OpStore %h_1 %618
-        %619 = OpCompositeExtract %float %529 1
-        %620 = OpCompositeExtract %float %529 1
-        %621 = OpCompositeConstruct %v2float %619 %620
-        %622 = OpLoad %int %l_1
+               OpStore %h_1 %594
+        %595 = OpCompositeExtract %float %509 1
+        %596 = OpCompositeExtract %float %509 1
+        %597 = OpCompositeConstruct %v2float %595 %596
+        %598 = OpLoad %int %l_1
                OpStore %l_1 %31
-               OpStore %l_1 %622
-        %623 = OpLoad %int %h_1
+               OpStore %l_1 %598
+        %599 = OpLoad %int %h_1
                OpStore %h_1 %31
-               OpStore %h_1 %623
-        %624 = OpLoad %int %l_1
-        %625 = OpAccessChain %_ptr_Function_int %stack %531
-        %626 = OpLoad %int %625
-        %627 = OpAccessChain %_ptr_Function_int %stack %531
-               OpStore %627 %31
-        %628 = OpAccessChain %_ptr_Function_int %stack %531
-               OpStore %628 %626
-        %629 = OpLoad %int %h_1
+               OpStore %h_1 %599
+        %600 = OpLoad %int %l_1
+        %601 = OpAccessChain %_ptr_Function_int %stack %511
+        %602 = OpLoad %int %601
+        %603 = OpAccessChain %_ptr_Function_int %stack %511
+               OpStore %603 %31
+        %604 = OpAccessChain %_ptr_Function_int %stack %511
+               OpStore %604 %602
+        %605 = OpLoad %int %h_1
                OpStore %h_1 %31
-               OpStore %h_1 %629
-        %630 = OpCompositeExtract %float %517 1
-        %631 = OpCompositeExtract %float %569 0
-        %632 = OpCompositeConstruct %v2float %630 %631
-        %633 = OpAccessChain %_ptr_Function_int %stack %480
-        %634 = OpLoad %int %633
-        %635 = OpAccessChain %_ptr_Function_int %stack %480
-               OpStore %635 %31
-        %636 = OpAccessChain %_ptr_Function_int %stack %480
-               OpStore %636 %634
-        %637 = OpBitcast %int %uint_1
-        %638 = OpISub %int %617 %637
-        %639 = OpSGreaterThan %bool %638 %624
-               OpSelectionMerge %640 None
-               OpBranchConditional %639 %641 %640
-        %641 = OpLabel
-        %642 = OpLoad %int %param_4
+               OpStore %h_1 %605
+        %606 = OpCompositeExtract %float %497 1
+        %607 = OpCompositeExtract %float %219 0
+        %608 = OpCompositeConstruct %v2float %606 %607
+        %609 = OpAccessChain %_ptr_Function_int %stack %460
+        %610 = OpLoad %int %609
+        %611 = OpAccessChain %_ptr_Function_int %stack %460
+               OpStore %611 %31
+        %612 = OpAccessChain %_ptr_Function_int %stack %460
+               OpStore %612 %610
+        %613 = OpBitcast %int %uint_1
+        %614 = OpISub %int %593 %613
+        %615 = OpSGreaterThan %bool %614 %600
+               OpSelectionMerge %616 None
+               OpBranchConditional %615 %617 %616
+        %617 = OpLabel
+        %618 = OpLoad %int %param_4
                OpStore %param_4 %31
-               OpStore %param_4 %642
-        %643 = OpLoad %int %top
-        %644 = OpCompositeExtract %float %554 1
-        %645 = OpCompositeExtract %float %434 1
-        %646 = OpCompositeConstruct %v2float %644 %645
-        %647 = OpAccessChain %_ptr_Function_int %stack %480
-        %648 = OpLoad %int %647
-        %649 = OpAccessChain %_ptr_Function_int %stack %480
-               OpStore %649 %31
-        %650 = OpAccessChain %_ptr_Function_int %stack %480
-               OpStore %650 %648
-        %651 = OpLoad %_arr_int_uint_10 %stack
-               OpStore %stack %101
-               OpStore %stack %651
-        %652 = OpCompositeExtract %float %535 2
-        %653 = OpCompositeExtract %float %535 1
-        %654 = OpCompositeConstruct %v2float %652 %653
-        %655 = OpCompositeExtract %float %621 1
-        %656 = OpCompositeExtract %float %600 0
-        %657 = OpCompositeExtract %float %600 0
-        %658 = OpCompositeConstruct %v3float %655 %656 %657
-        %659 = OpLoad %int %l_1
-        %660 = OpAccessChain %_ptr_Function_int %stack %561
-        %661 = OpLoad %int %660
-        %662 = OpAccessChain %_ptr_Function_int %stack %561
-               OpStore %662 %31
-        %663 = OpAccessChain %_ptr_Function_int %stack %561
-               OpStore %663 %661
-        %664 = OpCompositeExtract %float %495 0
-        %665 = OpCompositeExtract %float %658 0
-        %666 = OpCompositeConstruct %v2float %664 %665
-        %667 = OpLoad %int %param_5
+               OpStore %param_4 %618
+        %619 = OpLoad %int %top
+        %620 = OpCompositeExtract %float %534 1
+        %621 = OpCompositeExtract %float %418 1
+        %622 = OpCompositeConstruct %v2float %620 %621
+        %623 = OpAccessChain %_ptr_Function_int %stack %460
+        %624 = OpLoad %int %623
+        %625 = OpAccessChain %_ptr_Function_int %stack %460
+               OpStore %625 %31
+        %626 = OpAccessChain %_ptr_Function_int %stack %460
+               OpStore %626 %624
+        %627 = OpLoad %_arr_int_uint_10 %stack
+               OpStore %stack %96
+               OpStore %stack %627
+        %628 = OpCompositeExtract %float %515 2
+        %629 = OpCompositeExtract %float %515 1
+        %630 = OpCompositeConstruct %v2float %628 %629
+        %631 = OpCompositeExtract %float %597 1
+        %632 = OpCompositeExtract %float %577 0
+        %633 = OpCompositeExtract %float %577 0
+        %634 = OpCompositeConstruct %v3float %631 %632 %633
+        %635 = OpLoad %int %l_1
+        %636 = OpAccessChain %_ptr_Function_int %stack %541
+        %637 = OpLoad %int %636
+        %638 = OpAccessChain %_ptr_Function_int %stack %541
+               OpStore %638 %31
+        %639 = OpAccessChain %_ptr_Function_int %stack %541
+               OpStore %639 %637
+        %640 = OpCompositeExtract %float %475 0
+        %641 = OpCompositeExtract %float %634 0
+        %642 = OpCompositeConstruct %v2float %640 %641
+        %643 = OpLoad %int %param_5
                OpStore %param_5 %31
-               OpStore %param_5 %667
-        %668 = OpIAdd %int %int_1 %643
-        %669 = OpAccessChain %_ptr_Function_int %stack %531
-        %670 = OpLoad %int %669
-        %671 = OpAccessChain %_ptr_Function_int %stack %531
-               OpStore %671 %31
-        %672 = OpAccessChain %_ptr_Function_int %stack %531
-               OpStore %672 %670
-        %673 = OpCompositeExtract %float %510 1
-        %674 = OpCompositeExtract %float %510 1
-        %675 = OpCompositeExtract %float %488 0
-        %676 = OpCompositeConstruct %v3float %673 %674 %675
-        %677 = OpLoad %int %param_5
+               OpStore %param_5 %643
+        %644 = OpIAdd %int %int_1 %619
+        %645 = OpAccessChain %_ptr_Function_int %stack %511
+        %646 = OpLoad %int %645
+        %647 = OpAccessChain %_ptr_Function_int %stack %511
+               OpStore %647 %31
+        %648 = OpAccessChain %_ptr_Function_int %stack %511
+               OpStore %648 %646
+        %649 = OpCompositeExtract %float %490 1
+        %650 = OpCompositeExtract %float %490 1
+        %651 = OpCompositeExtract %float %468 0
+        %652 = OpCompositeConstruct %v3float %649 %650 %651
+        %653 = OpLoad %int %param_5
                OpStore %param_5 %31
-               OpStore %param_5 %677
-        %678 = OpAccessChain %_ptr_Function_int %stack %668
-               OpStore %678 %659
-        %679 = OpLoad %int %top
-        %680 = OpAccessChain %_ptr_Function_int %stack %480
-        %681 = OpLoad %int %680
-        %682 = OpAccessChain %_ptr_Function_int %stack %480
-               OpStore %682 %31
-        %683 = OpAccessChain %_ptr_Function_int %stack %480
-               OpStore %683 %681
-        %684 = OpCompositeExtract %float %579 1
-        %685 = OpCompositeExtract %float %579 0
-        %686 = OpCompositeConstruct %v2float %684 %685
-        %687 = OpAccessChain %_ptr_Function_int %stack %668
-        %688 = OpLoad %int %687
-        %689 = OpAccessChain %_ptr_Function_int %stack %668
-               OpStore %689 %31
-        %690 = OpAccessChain %_ptr_Function_int %stack %668
-               OpStore %690 %688
-        %692 = OpBitcast %uint %679
-        %693 = OpIAdd %uint %uint_1 %692
-        %691 = OpBitcast %int %693
-        %694 = OpAccessChain %_ptr_Function_int %stack %480
-        %695 = OpLoad %int %694
-        %696 = OpAccessChain %_ptr_Function_int %stack %480
-               OpStore %696 %31
-        %697 = OpAccessChain %_ptr_Function_int %stack %480
-               OpStore %697 %695
-        %698 = OpCompositeExtract %float %590 2
-        %699 = OpCompositeExtract %float %686 1
-        %700 = OpCompositeExtract %float %590 2
-        %701 = OpCompositeConstruct %v3float %698 %699 %700
-        %702 = OpLoad %int %h_1
+               OpStore %param_5 %653
+        %654 = OpAccessChain %_ptr_Function_int %stack %644
+               OpStore %654 %635
+        %655 = OpLoad %int %top
+        %656 = OpAccessChain %_ptr_Function_int %stack %460
+        %657 = OpLoad %int %656
+        %658 = OpAccessChain %_ptr_Function_int %stack %460
+               OpStore %658 %31
+        %659 = OpAccessChain %_ptr_Function_int %stack %460
+               OpStore %659 %657
+        %660 = OpCompositeExtract %float %556 1
+        %661 = OpCompositeExtract %float %556 0
+        %662 = OpCompositeConstruct %v2float %660 %661
+        %663 = OpAccessChain %_ptr_Function_int %stack %644
+        %664 = OpLoad %int %663
+        %665 = OpAccessChain %_ptr_Function_int %stack %644
+               OpStore %665 %31
+        %666 = OpAccessChain %_ptr_Function_int %stack %644
+               OpStore %666 %664
+        %668 = OpBitcast %uint %655
+        %669 = OpIAdd %uint %uint_1 %668
+        %667 = OpBitcast %int %669
+        %670 = OpAccessChain %_ptr_Function_int %stack %460
+        %671 = OpLoad %int %670
+        %672 = OpAccessChain %_ptr_Function_int %stack %460
+               OpStore %672 %31
+        %673 = OpAccessChain %_ptr_Function_int %stack %460
+               OpStore %673 %671
+        %674 = OpCompositeExtract %float %567 2
+        %675 = OpCompositeExtract %float %662 1
+        %676 = OpCompositeExtract %float %567 2
+        %677 = OpCompositeConstruct %v3float %674 %675 %676
+        %678 = OpLoad %int %h_1
                OpStore %h_1 %31
-               OpStore %h_1 %702
-               OpStore %top %691
-        %703 = OpLoad %_arr_int_uint_10 %stack
-               OpStore %stack %101
-               OpStore %stack %703
-        %704 = OpLoad %int %p
-        %705 = OpCompositeExtract %float %590 0
-        %706 = OpCompositeExtract %float %569 1
-        %707 = OpCompositeConstruct %v2float %705 %706
-        %708 = OpAccessChain %_ptr_Function_int %stack %561
-        %709 = OpLoad %int %708
-        %710 = OpAccessChain %_ptr_Function_int %stack %561
-               OpStore %710 %31
-        %711 = OpAccessChain %_ptr_Function_int %stack %561
-               OpStore %711 %709
-        %712 = OpAccessChain %_ptr_Function_int %stack %561
-        %713 = OpLoad %int %712
-        %714 = OpAccessChain %_ptr_Function_int %stack %561
-               OpStore %714 %31
-        %715 = OpAccessChain %_ptr_Function_int %stack %561
-               OpStore %715 %713
-        %716 = OpAccessChain %_ptr_Function_int %stack %691
-        %717 = OpBitcast %int %uint_1
-        %718 = OpISub %int %704 %717
-               OpStore %716 %718
-        %719 = OpAccessChain %_ptr_Function_int %stack %444
-        %720 = OpLoad %int %719
-        %721 = OpAccessChain %_ptr_Function_int %stack %444
-               OpStore %721 %31
-        %722 = OpAccessChain %_ptr_Function_int %stack %444
-               OpStore %722 %720
-        %723 = OpCompositeExtract %float %535 2
-        %724 = OpCompositeExtract %float %535 1
-        %725 = OpCompositeConstruct %v2float %723 %724
-        %726 = OpAccessChain %_ptr_Function_int %stack %691
+               OpStore %h_1 %678
+               OpStore %top %667
+        %679 = OpLoad %_arr_int_uint_10 %stack
+               OpStore %stack %96
+               OpStore %stack %679
+        %680 = OpLoad %int %p
+        %681 = OpCompositeExtract %float %567 0
+        %682 = OpCompositeExtract %float %219 1
+        %683 = OpCompositeConstruct %v2float %681 %682
+        %684 = OpAccessChain %_ptr_Function_int %stack %541
+        %685 = OpLoad %int %684
+        %686 = OpAccessChain %_ptr_Function_int %stack %541
+               OpStore %686 %31
+        %687 = OpAccessChain %_ptr_Function_int %stack %541
+               OpStore %687 %685
+        %688 = OpAccessChain %_ptr_Function_int %stack %541
+        %689 = OpLoad %int %688
+        %690 = OpAccessChain %_ptr_Function_int %stack %541
+               OpStore %690 %31
+        %691 = OpAccessChain %_ptr_Function_int %stack %541
+               OpStore %691 %689
+        %692 = OpAccessChain %_ptr_Function_int %stack %667
+        %693 = OpBitcast %int %uint_1
+        %694 = OpISub %int %680 %693
+               OpStore %692 %694
+        %695 = OpAccessChain %_ptr_Function_int %stack %426
+        %696 = OpLoad %int %695
+        %697 = OpAccessChain %_ptr_Function_int %stack %426
+               OpStore %697 %31
+        %698 = OpAccessChain %_ptr_Function_int %stack %426
+               OpStore %698 %696
+        %699 = OpCompositeExtract %float %515 2
+        %700 = OpCompositeExtract %float %515 1
+        %701 = OpCompositeConstruct %v2float %699 %700
+        %702 = OpAccessChain %_ptr_Function_int %stack %667
+        %703 = OpLoad %int %702
+        %704 = OpAccessChain %_ptr_Function_int %stack %667
+               OpStore %704 %31
+        %705 = OpAccessChain %_ptr_Function_int %stack %667
+               OpStore %705 %703
+               OpBranch %616
+        %616 = OpLabel
+        %706 = OpAccessChain %_ptr_Function_int %stack %426
+        %707 = OpLoad %int %706
+        %708 = OpAccessChain %_ptr_Function_int %stack %426
+               OpStore %708 %31
+        %709 = OpAccessChain %_ptr_Function_int %stack %426
+               OpStore %709 %707
+        %711 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %711
+        %712 = OpLoad %int %p
+        %713 = OpAccessChain %_ptr_Function_int %stack %541
+        %714 = OpLoad %int %713
+        %715 = OpAccessChain %_ptr_Function_int %stack %541
+               OpStore %715 %31
+        %716 = OpAccessChain %_ptr_Function_int %stack %541
+               OpStore %716 %714
+        %717 = OpCompositeExtract %float %534 2
+        %718 = OpCompositeExtract %float %418 0
+        %719 = OpCompositeExtract %float %418 1
+        %720 = OpCompositeConstruct %v3float %717 %718 %719
+        %721 = OpLoad %int %p
+               OpStore %p %31
+               OpStore %p %721
+        %722 = OpCompositeExtract %float %468 2
+        %723 = OpCompositeExtract %float %468 0
+        %724 = OpCompositeExtract %float %556 0
+        %725 = OpCompositeConstruct %v3float %722 %723 %724
+        %726 = OpAccessChain %_ptr_Function_int %stack %541
         %727 = OpLoad %int %726
-        %728 = OpAccessChain %_ptr_Function_int %stack %691
+        %728 = OpAccessChain %_ptr_Function_int %stack %541
                OpStore %728 %31
-        %729 = OpAccessChain %_ptr_Function_int %stack %691
+        %729 = OpAccessChain %_ptr_Function_int %stack %541
                OpStore %729 %727
-               OpBranch %640
-        %640 = OpLabel
-        %730 = OpAccessChain %_ptr_Function_int %stack %444
-        %731 = OpLoad %int %730
-        %732 = OpAccessChain %_ptr_Function_int %stack %444
-               OpStore %732 %31
-        %733 = OpAccessChain %_ptr_Function_int %stack %444
-               OpStore %733 %731
-        %734 = OpCompositeExtract %float %37 0
-        %735 = OpCompositeExtract %float %37 1
-        %736 = OpCompositeConstruct %v2float %734 %735
-        %737 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %737
-        %738 = OpLoad %int %p
-        %739 = OpAccessChain %_ptr_Function_int %stack %561
-        %740 = OpLoad %int %739
-        %741 = OpAccessChain %_ptr_Function_int %stack %561
-               OpStore %741 %31
-        %742 = OpAccessChain %_ptr_Function_int %stack %561
-               OpStore %742 %740
-        %743 = OpCompositeExtract %float %554 2
-        %744 = OpCompositeExtract %float %434 0
-        %745 = OpCompositeExtract %float %434 1
-        %746 = OpCompositeConstruct %v3float %743 %744 %745
-        %747 = OpLoad %int %p
-               OpStore %p %31
-               OpStore %p %747
-        %748 = OpCompositeExtract %float %488 2
-        %749 = OpCompositeExtract %float %488 0
-        %750 = OpCompositeExtract %float %579 0
-        %751 = OpCompositeConstruct %v3float %748 %749 %750
-        %752 = OpAccessChain %_ptr_Function_int %stack %561
-        %753 = OpLoad %int %752
-        %754 = OpAccessChain %_ptr_Function_int %stack %561
-               OpStore %754 %31
-        %755 = OpAccessChain %_ptr_Function_int %stack %561
-               OpStore %755 %753
-        %756 = OpLoad %int %h_1
-        %757 = OpLoad %int %top
+        %730 = OpLoad %int %h_1
+        %731 = OpLoad %int %top
                OpStore %top %31
-               OpStore %top %757
-        %758 = OpCompositeExtract %float %461 2
-        %759 = OpCompositeExtract %float %529 0
-        %760 = OpCompositeExtract %float %461 0
-        %761 = OpCompositeConstruct %v3float %758 %759 %760
-        %762 = OpAccessChain %_ptr_Function_int %stack %480
-        %763 = OpLoad %int %762
-        %764 = OpAccessChain %_ptr_Function_int %stack %480
-               OpStore %764 %31
-        %765 = OpAccessChain %_ptr_Function_int %stack %480
-               OpStore %765 %763
-        %766 = OpLoad %int %p
+               OpStore %top %731
+        %732 = OpCompositeExtract %float %443 2
+        %733 = OpCompositeExtract %float %509 0
+        %734 = OpCompositeExtract %float %443 0
+        %735 = OpCompositeConstruct %v3float %732 %733 %734
+        %736 = OpAccessChain %_ptr_Function_int %stack %460
+        %737 = OpLoad %int %736
+        %738 = OpAccessChain %_ptr_Function_int %stack %460
+               OpStore %738 %31
+        %739 = OpAccessChain %_ptr_Function_int %stack %460
+               OpStore %739 %737
+        %740 = OpLoad %int %p
                OpStore %p %31
-               OpStore %p %766
-        %768 = OpBitcast %uint %738
-        %769 = OpIAdd %uint %uint_1 %768
-        %767 = OpBitcast %int %769
-        %770 = OpSLessThan %bool %767 %756
-               OpSelectionMerge %771 None
-               OpBranchConditional %770 %772 %771
-        %772 = OpLabel
-        %773 = OpAccessChain %_ptr_Function_int %stack %561
-        %774 = OpLoad %int %773
-        %775 = OpAccessChain %_ptr_Function_int %stack %561
-               OpStore %775 %31
-        %776 = OpAccessChain %_ptr_Function_int %stack %561
-               OpStore %776 %774
-        %777 = OpCompositeExtract %float %736 1
-        %778 = OpCompositeExtract %float %632 0
-        %779 = OpCompositeConstruct %v2float %777 %778
-        %780 = OpLoad %int %l_1
+               OpStore %p %740
+        %742 = OpBitcast %uint %712
+        %743 = OpIAdd %uint %uint_1 %742
+        %741 = OpBitcast %int %743
+        %744 = OpSLessThan %bool %741 %730
+               OpSelectionMerge %745 None
+               OpBranchConditional %744 %746 %745
+        %746 = OpLabel
+        %747 = OpAccessChain %_ptr_Function_int %stack %541
+        %748 = OpLoad %int %747
+        %749 = OpAccessChain %_ptr_Function_int %stack %541
+               OpStore %749 %31
+        %750 = OpAccessChain %_ptr_Function_int %stack %541
+               OpStore %750 %748
+        %751 = OpCompositeExtract %float %710 1
+        %752 = OpCompositeExtract %float %608 0
+        %753 = OpCompositeConstruct %v2float %751 %752
+        %754 = OpLoad %int %l_1
                OpStore %l_1 %31
-               OpStore %l_1 %780
-        %781 = OpLoad %int %top
-        %782 = OpAccessChain %_ptr_Function_int %stack %561
-        %783 = OpLoad %int %782
-        %784 = OpAccessChain %_ptr_Function_int %stack %561
-               OpStore %784 %31
-        %785 = OpAccessChain %_ptr_Function_int %stack %561
-               OpStore %785 %783
-        %786 = OpCompositeExtract %float %475 1
-        %787 = OpCompositeExtract %float %461 1
-        %788 = OpCompositeExtract %float %461 1
-        %789 = OpCompositeConstruct %v3float %786 %787 %788
-        %790 = OpIAdd %int %781 %int_1
-        %791 = OpLoad %int %param_5
+               OpStore %l_1 %754
+        %755 = OpLoad %int %top
+        %756 = OpAccessChain %_ptr_Function_int %stack %541
+        %757 = OpLoad %int %756
+        %758 = OpAccessChain %_ptr_Function_int %stack %541
+               OpStore %758 %31
+        %759 = OpAccessChain %_ptr_Function_int %stack %541
+               OpStore %759 %757
+        %760 = OpCompositeExtract %float %455 1
+        %761 = OpCompositeExtract %float %443 1
+        %762 = OpCompositeExtract %float %443 1
+        %763 = OpCompositeConstruct %v3float %760 %761 %762
+        %764 = OpIAdd %int %755 %int_1
+        %765 = OpLoad %int %param_5
                OpStore %param_5 %31
-               OpStore %param_5 %791
-               OpStore %top %790
-        %792 = OpAccessChain %_ptr_Function_int %stack %561
-        %793 = OpLoad %int %792
-        %794 = OpAccessChain %_ptr_Function_int %stack %561
-               OpStore %794 %31
-        %795 = OpAccessChain %_ptr_Function_int %stack %561
-               OpStore %795 %793
-        %796 = OpLoad %int %p
-        %797 = OpLoad %int %param_5
+               OpStore %param_5 %765
+               OpStore %top %764
+        %766 = OpAccessChain %_ptr_Function_int %stack %541
+        %767 = OpLoad %int %766
+        %768 = OpAccessChain %_ptr_Function_int %stack %541
+               OpStore %768 %31
+        %769 = OpAccessChain %_ptr_Function_int %stack %541
+               OpStore %769 %767
+        %770 = OpLoad %int %p
+        %771 = OpLoad %int %param_5
                OpStore %param_5 %31
-               OpStore %param_5 %797
-        %798 = OpCompositeExtract %float %461 2
-        %799 = OpCompositeExtract %float %461 0
-        %800 = OpCompositeExtract %float %529 0
-        %801 = OpCompositeConstruct %v3float %798 %799 %800
-        %802 = OpLoad %int %p
+               OpStore %param_5 %771
+        %772 = OpCompositeExtract %float %443 2
+        %773 = OpCompositeExtract %float %443 0
+        %774 = OpCompositeExtract %float %509 0
+        %775 = OpCompositeConstruct %v3float %772 %773 %774
+        %776 = OpLoad %int %p
                OpStore %p %31
-               OpStore %p %802
-        %803 = OpCompositeExtract %float %434 0
-        %804 = OpCompositeExtract %float %621 0
-        %805 = OpCompositeExtract %float %621 0
-        %806 = OpCompositeConstruct %v3float %803 %804 %805
-        %807 = OpAccessChain %_ptr_Function_int %stack %480
-        %808 = OpLoad %int %807
-        %809 = OpAccessChain %_ptr_Function_int %stack %480
-               OpStore %809 %31
-        %810 = OpAccessChain %_ptr_Function_int %stack %480
-               OpStore %810 %808
-        %811 = OpAccessChain %_ptr_Function_int %stack %531
-        %812 = OpLoad %int %811
-        %813 = OpAccessChain %_ptr_Function_int %stack %531
-               OpStore %813 %31
-        %814 = OpAccessChain %_ptr_Function_int %stack %531
-               OpStore %814 %812
-        %815 = OpCompositeExtract %float %488 0
-        %816 = OpCompositeExtract %float %488 1
-        %817 = OpCompositeConstruct %v2float %815 %816
-        %818 = OpAccessChain %_ptr_Function_int %stack %790
-        %820 = OpBitcast %uint %796
-        %821 = OpIAdd %uint %uint_1 %820
-        %819 = OpBitcast %int %821
-               OpStore %818 %819
-        %822 = OpLoad %_arr_int_uint_10 %stack
-               OpStore %stack %101
-               OpStore %stack %822
-        %823 = OpLoad %int %top
-        %824 = OpAccessChain %_ptr_Function_int %stack %561
-        %825 = OpLoad %int %824
-        %826 = OpAccessChain %_ptr_Function_int %stack %561
-               OpStore %826 %31
-        %827 = OpAccessChain %_ptr_Function_int %stack %561
-               OpStore %827 %825
-        %828 = OpCompositeExtract %float %500 1
-        %829 = OpCompositeExtract %float %801 1
-        %830 = OpCompositeConstruct %v2float %828 %829
-        %831 = OpLoad %_arr_int_uint_10 %stack
-               OpStore %stack %101
-               OpStore %stack %831
-        %832 = OpBitcast %int %uint_1
-        %833 = OpIAdd %int %823 %832
-        %834 = OpAccessChain %_ptr_Function_int %stack %790
-        %835 = OpLoad %int %834
-        %836 = OpAccessChain %_ptr_Function_int %stack %790
-               OpStore %836 %31
-        %837 = OpAccessChain %_ptr_Function_int %stack %790
-               OpStore %837 %835
-               OpStore %top %833
-        %838 = OpLoad %int %param_4
+               OpStore %p %776
+        %777 = OpCompositeExtract %float %418 0
+        %778 = OpCompositeExtract %float %597 0
+        %779 = OpCompositeExtract %float %597 0
+        %780 = OpCompositeConstruct %v3float %777 %778 %779
+        %781 = OpAccessChain %_ptr_Function_int %stack %460
+        %782 = OpLoad %int %781
+        %783 = OpAccessChain %_ptr_Function_int %stack %460
+               OpStore %783 %31
+        %784 = OpAccessChain %_ptr_Function_int %stack %460
+               OpStore %784 %782
+        %785 = OpAccessChain %_ptr_Function_int %stack %511
+        %786 = OpLoad %int %785
+        %787 = OpAccessChain %_ptr_Function_int %stack %511
+               OpStore %787 %31
+        %788 = OpAccessChain %_ptr_Function_int %stack %511
+               OpStore %788 %786
+        %789 = OpCompositeExtract %float %468 0
+        %790 = OpCompositeExtract %float %468 1
+        %791 = OpCompositeConstruct %v2float %789 %790
+        %792 = OpAccessChain %_ptr_Function_int %stack %764
+        %794 = OpBitcast %uint %770
+        %795 = OpIAdd %uint %uint_1 %794
+        %793 = OpBitcast %int %795
+               OpStore %792 %793
+        %796 = OpLoad %_arr_int_uint_10 %stack
+               OpStore %stack %96
+               OpStore %stack %796
+        %797 = OpLoad %int %top
+        %798 = OpAccessChain %_ptr_Function_int %stack %541
+        %799 = OpLoad %int %798
+        %800 = OpAccessChain %_ptr_Function_int %stack %541
+               OpStore %800 %31
+        %801 = OpAccessChain %_ptr_Function_int %stack %541
+               OpStore %801 %799
+        %802 = OpCompositeExtract %float %480 1
+        %803 = OpCompositeExtract %float %775 1
+        %804 = OpCompositeConstruct %v2float %802 %803
+        %805 = OpLoad %_arr_int_uint_10 %stack
+               OpStore %stack %96
+               OpStore %stack %805
+        %806 = OpBitcast %int %uint_1
+        %807 = OpIAdd %int %797 %806
+        %808 = OpAccessChain %_ptr_Function_int %stack %764
+        %809 = OpLoad %int %808
+        %810 = OpAccessChain %_ptr_Function_int %stack %764
+               OpStore %810 %31
+        %811 = OpAccessChain %_ptr_Function_int %stack %764
+               OpStore %811 %809
+               OpStore %top %807
+        %812 = OpLoad %int %param_4
                OpStore %param_4 %31
-               OpStore %param_4 %838
-        %839 = OpLoad %int %h_1
-        %840 = OpAccessChain %_ptr_Function_int %stack %480
-        %841 = OpLoad %int %840
-        %842 = OpAccessChain %_ptr_Function_int %stack %480
-               OpStore %842 %31
-        %843 = OpAccessChain %_ptr_Function_int %stack %480
-               OpStore %843 %841
-        %844 = OpAccessChain %_ptr_Function_int %stack %444
-        %845 = OpLoad %int %844
-        %846 = OpAccessChain %_ptr_Function_int %stack %444
-               OpStore %846 %31
-        %847 = OpAccessChain %_ptr_Function_int %stack %444
-               OpStore %847 %845
-        %848 = OpAccessChain %_ptr_Function_int %stack %833
-               OpStore %848 %839
-        %849 = OpAccessChain %_ptr_Function_int %stack %561
-        %850 = OpLoad %int %849
-        %851 = OpAccessChain %_ptr_Function_int %stack %561
-               OpStore %851 %31
-        %852 = OpAccessChain %_ptr_Function_int %stack %561
-               OpStore %852 %850
-        %853 = OpCompositeExtract %float %529 1
-        %854 = OpCompositeExtract %float %495 0
-        %855 = OpCompositeExtract %float %495 0
-        %856 = OpCompositeConstruct %v3float %853 %854 %855
-        %857 = OpLoad %int %l_1
+               OpStore %param_4 %812
+        %813 = OpLoad %int %h_1
+        %814 = OpAccessChain %_ptr_Function_int %stack %460
+        %815 = OpLoad %int %814
+        %816 = OpAccessChain %_ptr_Function_int %stack %460
+               OpStore %816 %31
+        %817 = OpAccessChain %_ptr_Function_int %stack %460
+               OpStore %817 %815
+        %818 = OpAccessChain %_ptr_Function_int %stack %426
+        %819 = OpLoad %int %818
+        %820 = OpAccessChain %_ptr_Function_int %stack %426
+               OpStore %820 %31
+        %821 = OpAccessChain %_ptr_Function_int %stack %426
+               OpStore %821 %819
+        %822 = OpAccessChain %_ptr_Function_int %stack %807
+               OpStore %822 %813
+        %823 = OpAccessChain %_ptr_Function_int %stack %541
+        %824 = OpLoad %int %823
+        %825 = OpAccessChain %_ptr_Function_int %stack %541
+               OpStore %825 %31
+        %826 = OpAccessChain %_ptr_Function_int %stack %541
+               OpStore %826 %824
+        %827 = OpCompositeExtract %float %509 1
+        %828 = OpCompositeExtract %float %475 0
+        %829 = OpCompositeExtract %float %475 0
+        %830 = OpCompositeConstruct %v3float %827 %828 %829
+        %831 = OpLoad %int %l_1
                OpStore %l_1 %31
-               OpStore %l_1 %857
-               OpBranch %771
-        %771 = OpLabel
-        %858 = OpAccessChain %_ptr_Function_int %stack %480
-        %859 = OpLoad %int %858
-        %860 = OpAccessChain %_ptr_Function_int %stack %480
-               OpStore %860 %31
-        %861 = OpAccessChain %_ptr_Function_int %stack %480
-               OpStore %861 %859
-               OpBranch %505
-        %505 = OpLabel
-        %862 = OpLoad %int %l_1
+               OpStore %l_1 %831
+               OpBranch %745
+        %745 = OpLabel
+        %832 = OpAccessChain %_ptr_Function_int %stack %460
+        %833 = OpLoad %int %832
+        %834 = OpAccessChain %_ptr_Function_int %stack %460
+               OpStore %834 %31
+        %835 = OpAccessChain %_ptr_Function_int %stack %460
+               OpStore %835 %833
+               OpBranch %485
+        %485 = OpLabel
+        %836 = OpLoad %int %l_1
                OpStore %l_1 %31
-               OpStore %l_1 %862
-        %863 = OpCompositeExtract %float %488 2
-        %864 = OpCompositeExtract %float %495 0
-        %865 = OpCompositeConstruct %v2float %863 %864
-        %866 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %866
-               OpBranch %503
-        %504 = OpLabel
-        %867 = OpLoad %int %h_1
+               OpStore %l_1 %836
+        %837 = OpCompositeExtract %float %468 2
+        %838 = OpCompositeExtract %float %475 0
+        %839 = OpCompositeConstruct %v2float %837 %838
+        %840 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %840
+               OpBranch %483
+        %484 = OpLabel
+        %841 = OpLoad %int %h_1
                OpStore %h_1 %31
-               OpStore %h_1 %867
+               OpStore %h_1 %841
                OpReturn
                OpFunctionEnd
-     %main_1 = OpFunction %void None %418
-        %869 = OpLabel
-      %color = OpVariable %_ptr_Function_v3float Function %170
+     %main_1 = OpFunction %void None %404
+        %843 = OpLabel
+      %color = OpVariable %_ptr_Function_v3float Function %165
         %i_2 = OpVariable %_ptr_Function_int Function %31
-         %uv = OpVariable %_ptr_Function_v2float Function %167
-        %873 = OpLoad %v2float %uv
-               OpStore %uv %167
-               OpStore %uv %873
+         %uv = OpVariable %_ptr_Function_v2float Function %162
+        %847 = OpLoad %v2float %uv
+               OpStore %uv %162
+               OpStore %uv %847
                OpStore %i_2 %31
+        %848 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %848
+               OpSelectionMerge %850 None
+               OpBranchConditional %true %851 %850
+        %851 = OpLabel
+        %852 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %852
+        %853 = OpLoad %int %i_2
+        %854 = OpLoad %v2float %uv
+               OpStore %uv %162
+               OpStore %uv %854
+        %855 = OpLoad %v3float %color
+               OpStore %color %165
+               OpStore %color %855
+        %856 = OpCompositeExtract %float %423 1
+        %857 = OpCompositeExtract %float %423 1
+        %858 = OpCompositeConstruct %v2float %856 %857
+        %859 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %859
+               OpBranch %850
+        %850 = OpLabel
+        %860 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %860
+        %861 = OpLoad %int %i_2
+               OpStore %i_2 %31
+               OpStore %i_2 %861
+        %862 = OpFunctionCall %void %quicksort_
+        %863 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %863
+        %864 = OpLoad %v4float %gl_FragCoord
+        %865 = OpLoad %v2float %uv
+               OpStore %uv %162
+               OpStore %uv %865
+        %866 = OpLoad %v2float %uv
+               OpStore %uv %162
+               OpStore %uv %866
+        %867 = OpCompositeExtract %float %864 0
+        %868 = OpCompositeExtract %float %864 1
+        %869 = OpCompositeConstruct %v2float %867 %868
+        %870 = OpCompositeExtract %float %869 1
+        %871 = OpCompositeExtract %float %162 1
+        %872 = OpCompositeExtract %float %162 1
+        %873 = OpCompositeConstruct %v3float %870 %871 %872
         %874 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
+               OpStore %obj %97
                OpStore %obj %874
-               OpSelectionMerge %876 None
-               OpBranchConditional %true %877 %876
-        %877 = OpLabel
-        %878 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %878
-        %879 = OpCompositeExtract %float %37 0
-        %880 = OpCompositeExtract %float %37 0
-        %881 = OpCompositeConstruct %v2float %879 %880
-        %882 = OpLoad %int %i_2
-        %883 = OpLoad %v2float %uv
-               OpStore %uv %167
-               OpStore %uv %883
-        %884 = OpLoad %v3float %color
-               OpStore %color %170
-               OpStore %color %884
-        %885 = OpCompositeExtract %float %881 1
-        %886 = OpCompositeExtract %float %881 1
-        %887 = OpCompositeConstruct %v2float %885 %886
-        %888 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %888
-               OpBranch %876
-        %876 = OpLabel
-        %889 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %889
-        %890 = OpCompositeExtract %float %167 0
-        %891 = OpCompositeExtract %float %167 0
-        %892 = OpCompositeConstruct %v2float %890 %891
-        %893 = OpLoad %int %i_2
+        %875 = OpLoad %v2float %uv
+               OpStore %uv %162
+               OpStore %uv %875
+        %877 = OpAccessChain %_ptr_Uniform_v2float %x_188 %uint_0
+        %878 = OpLoad %v2float %877
+        %879 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %879
+        %880 = OpCompositeExtract %float %864 1
+        %881 = OpCompositeExtract %float %864 3
+        %882 = OpCompositeConstruct %v3float %880 %float_3 %881
+        %883 = OpLoad %v3float %color
+               OpStore %color %165
+               OpStore %color %883
+        %884 = OpFDiv %v2float %869 %878
+        %885 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %885
+        %886 = OpCompositeExtract %float %162 0
+        %887 = OpCompositeExtract %float %869 1
+        %888 = OpCompositeConstruct %v2float %886 %887
+        %889 = OpLoad %v3float %color
+               OpStore %color %165
+        %890 = OpLoad %v3float %color
+               OpStore %color %165
+               OpStore %color %890
+               OpStore %color %889
+               OpStore %uv %884
+               OpStore %color %891
+        %892 = OpLoad %v3float %color
+               OpStore %color %165
+               OpStore %color %892
+        %893 = OpCompositeExtract %float %869 0
+        %894 = OpCompositeExtract %float %869 1
+        %895 = OpCompositeExtract %float %162 1
+        %896 = OpCompositeConstruct %v3float %893 %894 %895
+        %897 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %897
+        %898 = OpAccessChain %_ptr_Private_int %obj %uint_0 %500
+        %899 = OpLoad %int %898
+        %900 = OpAccessChain %_ptr_Private_int %obj %uint_0 %500
+               OpStore %900 %31
+        %901 = OpAccessChain %_ptr_Private_int %obj %uint_0 %500
+               OpStore %901 %899
+        %902 = OpAccessChain %_ptr_Private_int %obj %uint_0 %500
+        %903 = OpLoad %int %902
+        %904 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %904
+        %905 = OpAccessChain %_ptr_Private_int %obj %uint_0 %500
+        %906 = OpLoad %int %905
+        %907 = OpAccessChain %_ptr_Private_int %obj %uint_0 %500
+               OpStore %907 %31
+        %908 = OpAccessChain %_ptr_Private_int %obj %uint_0 %500
+               OpStore %908 %906
+        %909 = OpAccessChain %_ptr_Function_float %color %uint_0
+        %910 = OpLoad %float %909
+        %911 = OpAccessChain %_ptr_Function_float %color %uint_0
+        %912 = OpLoad %float %911
+        %913 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %913 %914
+        %915 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %915 %912
+        %917 = OpLoad %int %i_2
                OpStore %i_2 %31
-               OpStore %i_2 %893
-        %894 = OpFunctionCall %void %quicksort_
-        %895 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %895
-        %896 = OpLoad %v4float %gl_FragCoord
-        %897 = OpLoad %v2float %uv
-               OpStore %uv %167
-               OpStore %uv %897
-        %898 = OpCompositeExtract %float %167 1
-        %899 = OpCompositeExtract %float %167 1
-        %900 = OpCompositeConstruct %v2float %898 %899
-        %901 = OpLoad %v2float %uv
-               OpStore %uv %167
-               OpStore %uv %901
-        %902 = OpCompositeExtract %float %896 0
-        %903 = OpCompositeExtract %float %896 1
-        %904 = OpCompositeConstruct %v2float %902 %903
-        %905 = OpCompositeExtract %float %904 1
-        %906 = OpCompositeExtract %float %892 1
-        %907 = OpCompositeExtract %float %892 1
-        %908 = OpCompositeConstruct %v3float %905 %906 %907
-        %909 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %909
-        %910 = OpLoad %v2float %uv
-               OpStore %uv %167
-               OpStore %uv %910
-        %912 = OpAccessChain %_ptr_Uniform_v2float %x_188 %uint_0
-        %913 = OpLoad %v2float %912
-        %914 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %914
-        %915 = OpCompositeExtract %float %896 1
-        %916 = OpCompositeExtract %float %37 2
-        %917 = OpCompositeExtract %float %896 3
-        %918 = OpCompositeConstruct %v3float %915 %916 %917
-        %919 = OpLoad %v3float %color
-               OpStore %color %170
-               OpStore %color %919
-        %920 = OpFDiv %v2float %904 %913
-        %921 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %921
-        %922 = OpCompositeExtract %float %900 0
-        %923 = OpCompositeExtract %float %904 1
-        %924 = OpCompositeConstruct %v2float %922 %923
-        %925 = OpLoad %v3float %color
-               OpStore %color %170
-        %926 = OpLoad %v3float %color
-               OpStore %color %170
-               OpStore %color %926
-               OpStore %color %925
-               OpStore %uv %920
-               OpStore %color %37
-        %927 = OpLoad %v3float %color
-               OpStore %color %170
-               OpStore %color %927
-        %928 = OpCompositeExtract %float %904 0
-        %929 = OpCompositeExtract %float %904 1
-        %930 = OpCompositeExtract %float %892 1
-        %931 = OpCompositeConstruct %v3float %928 %929 %930
-        %932 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %932
-        %933 = OpAccessChain %_ptr_Private_int %obj %uint_0 %520
-        %934 = OpLoad %int %933
-        %935 = OpAccessChain %_ptr_Private_int %obj %uint_0 %520
-               OpStore %935 %31
-        %936 = OpAccessChain %_ptr_Private_int %obj %uint_0 %520
-               OpStore %936 %934
-        %937 = OpAccessChain %_ptr_Private_int %obj %uint_0 %520
-        %938 = OpLoad %int %937
-        %939 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %939
-        %940 = OpAccessChain %_ptr_Private_int %obj %uint_0 %520
-        %941 = OpLoad %int %940
-        %942 = OpAccessChain %_ptr_Private_int %obj %uint_0 %520
-               OpStore %942 %31
-        %943 = OpAccessChain %_ptr_Private_int %obj %uint_0 %520
-               OpStore %943 %941
-        %944 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %945 = OpLoad %float %944
-        %946 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %947 = OpLoad %float %946
-        %948 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %948 %949
-        %950 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %950 %947
-        %951 = OpCompositeExtract %float %37 2
-        %952 = OpCompositeExtract %float %37 1
-        %953 = OpCompositeConstruct %v2float %951 %952
-        %954 = OpLoad %int %i_2
+               OpStore %i_2 %917
+        %918 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %918
+        %919 = OpCompositeExtract %float %896 0
+        %920 = OpCompositeExtract %float %888 0
+        %921 = OpCompositeExtract %float %888 1
+        %922 = OpCompositeConstruct %v3float %919 %920 %921
+        %923 = OpAccessChain %_ptr_Function_float %color %uint_0
+        %924 = OpConvertSToF %float %903
+        %925 = OpFAdd %float %910 %924
+               OpStore %923 %925
+        %926 = OpLoad %v2float %uv
+               OpStore %uv %162
+               OpStore %uv %926
+        %927 = OpLoad %v2float %uv
+               OpStore %uv %162
+               OpStore %uv %927
+        %928 = OpCompositeExtract %float %864 1
+        %929 = OpCompositeExtract %float %864 1
+        %930 = OpCompositeConstruct %v2float %928 %929
+        %931 = OpAccessChain %_ptr_Function_float %uv %uint_0
+        %932 = OpLoad %float %931
+        %933 = OpCompositeExtract %float %884 1
+        %934 = OpCompositeExtract %float %884 0
+        %935 = OpCompositeConstruct %v2float %933 %934
+        %936 = OpAccessChain %_ptr_Function_float %uv %uint_0
+        %937 = OpLoad %float %936
+        %938 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %938 %914
+        %939 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %939 %937
+        %940 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %940
+        %942 = OpFOrdGreaterThan %bool %932 %float_0_25
+               OpSelectionMerge %943 None
+               OpBranchConditional %942 %944 %943
+        %944 = OpLabel
+        %945 = OpLoad %int %i_2
                OpStore %i_2 %31
-               OpStore %i_2 %954
-        %955 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %955
-        %956 = OpCompositeExtract %float %931 0
-        %957 = OpCompositeExtract %float %924 0
-        %958 = OpCompositeExtract %float %924 1
-        %959 = OpCompositeConstruct %v3float %956 %957 %958
-        %960 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %961 = OpConvertSToF %float %938
-        %962 = OpFAdd %float %945 %961
-               OpStore %960 %962
+               OpStore %i_2 %945
+        %946 = OpAccessChain %_ptr_Private_int %obj %uint_0 %500
+        %947 = OpLoad %int %946
+        %948 = OpAccessChain %_ptr_Private_int %obj %uint_0 %500
+               OpStore %948 %31
+        %949 = OpAccessChain %_ptr_Private_int %obj %uint_0 %500
+               OpStore %949 %947
+        %950 = OpCompositeExtract %float %873 1
+        %951 = OpCompositeExtract %float %873 1
+        %952 = OpCompositeConstruct %v3float %914 %950 %951
+        %953 = OpAccessChain %_ptr_Function_float %uv %uint_0
+        %954 = OpLoad %float %953
+        %955 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %955 %914
+        %956 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %956 %954
+        %957 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_1
+        %958 = OpLoad %int %957
+        %959 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %959
+        %960 = OpCompositeExtract %float %930 0
+        %961 = OpCompositeExtract %float %930 0
+        %962 = OpCompositeConstruct %v2float %960 %961
         %963 = OpLoad %v2float %uv
-               OpStore %uv %167
+               OpStore %uv %162
                OpStore %uv %963
-        %964 = OpLoad %v2float %uv
-               OpStore %uv %167
-               OpStore %uv %964
-        %965 = OpCompositeExtract %float %896 1
-        %966 = OpCompositeExtract %float %896 1
-        %967 = OpCompositeConstruct %v2float %965 %966
-        %968 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %969 = OpLoad %float %968
-        %970 = OpCompositeExtract %float %920 1
-        %971 = OpCompositeExtract %float %920 0
-        %972 = OpCompositeConstruct %v2float %970 %971
-        %973 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %974 = OpLoad %float %973
-        %975 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %975 %949
-        %976 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %976 %974
-        %977 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %977
-        %979 = OpFOrdGreaterThan %bool %969 %float_0_25
-               OpSelectionMerge %980 None
-               OpBranchConditional %979 %981 %980
-        %981 = OpLabel
-        %982 = OpLoad %int %i_2
+        %964 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %964
+        %966 = OpLoad %int %i_2
                OpStore %i_2 %31
-               OpStore %i_2 %982
-        %983 = OpAccessChain %_ptr_Private_int %obj %uint_0 %520
-        %984 = OpLoad %int %983
-        %985 = OpAccessChain %_ptr_Private_int %obj %uint_0 %520
-               OpStore %985 %31
-        %986 = OpAccessChain %_ptr_Private_int %obj %uint_0 %520
-               OpStore %986 %984
-        %987 = OpCompositeExtract %float %167 1
-        %988 = OpCompositeExtract %float %908 1
-        %989 = OpCompositeExtract %float %908 1
-        %990 = OpCompositeConstruct %v3float %987 %988 %989
-        %991 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %992 = OpLoad %float %991
+               OpStore %i_2 %966
+        %967 = OpAccessChain %_ptr_Function_float %color %31
+        %968 = OpLoad %float %967
+        %969 = OpAccessChain %_ptr_Function_float %color %31
+        %970 = OpLoad %float %969
+        %971 = OpAccessChain %_ptr_Function_float %color %31
+               OpStore %971 %914
+        %972 = OpAccessChain %_ptr_Function_float %color %31
+               OpStore %972 %970
+        %973 = OpLoad %v3float %color
+               OpStore %color %165
+               OpStore %color %973
+        %974 = OpLoad %v3float %color
+               OpStore %color %165
+               OpStore %color %974
+        %975 = OpCompositeExtract %float %930 1
+        %976 = OpCompositeExtract %float %930 1
+        %977 = OpCompositeExtract %float %162 1
+        %978 = OpCompositeConstruct %v3float %975 %976 %977
+        %979 = OpAccessChain %_ptr_Function_float %color %31
+        %980 = OpLoad %float %979
+        %981 = OpAccessChain %_ptr_Function_float %color %31
+               OpStore %981 %914
+        %982 = OpAccessChain %_ptr_Function_float %color %31
+               OpStore %982 %980
+        %983 = OpAccessChain %_ptr_Function_float %color %uint_0
+        %984 = OpConvertSToF %float %958
+        %985 = OpFAdd %float %984 %968
+               OpStore %983 %985
+        %986 = OpAccessChain %_ptr_Private_int %obj %uint_0 %500
+        %987 = OpLoad %int %986
+        %988 = OpAccessChain %_ptr_Private_int %obj %uint_0 %500
+               OpStore %988 %31
+        %989 = OpAccessChain %_ptr_Private_int %obj %uint_0 %500
+               OpStore %989 %987
+               OpBranch %943
+        %943 = OpLabel
+        %990 = OpAccessChain %_ptr_Function_float %uv %uint_0
+        %991 = OpLoad %float %990
+        %992 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %992 %914
         %993 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %993 %949
+               OpStore %993 %991
         %994 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %994 %992
-        %995 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_1
-        %996 = OpLoad %int %995
-        %997 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %997
-        %998 = OpCompositeExtract %float %967 0
-        %999 = OpCompositeExtract %float %967 0
-       %1000 = OpCompositeConstruct %v2float %998 %999
-       %1001 = OpLoad %v2float %uv
-               OpStore %uv %167
-               OpStore %uv %1001
-       %1002 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %1002
-       %1003 = OpCompositeExtract %float %37 2
-       %1004 = OpCompositeExtract %float %167 1
-       %1005 = OpCompositeConstruct %v2float %1003 %1004
-       %1006 = OpLoad %int %i_2
-               OpStore %i_2 %31
-               OpStore %i_2 %1006
-       %1007 = OpAccessChain %_ptr_Function_float %color %31
-       %1008 = OpLoad %float %1007
-       %1009 = OpAccessChain %_ptr_Function_float %color %31
+        %995 = OpLoad %float %994
+        %996 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %996 %914
+        %997 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %997 %995
+        %998 = OpAccessChain %_ptr_Function_float %uv %uint_0
+        %999 = OpLoad %float %998
+       %1000 = OpAccessChain %_ptr_Function_float %uv %uint_0
+       %1001 = OpLoad %float %1000
+       %1002 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1002 %914
+       %1003 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1003 %1001
+       %1004 = OpCompositeExtract %float %922 2
+       %1005 = OpCompositeExtract %float %922 1
+       %1006 = OpCompositeExtract %float %922 1
+       %1007 = OpCompositeConstruct %v3float %1004 %1005 %1006
+       %1008 = OpLoad %v2float %uv
+               OpStore %uv %162
+               OpStore %uv %1008
+       %1009 = OpAccessChain %_ptr_Function_float %uv %uint_0
        %1010 = OpLoad %float %1009
-       %1011 = OpAccessChain %_ptr_Function_float %color %31
-               OpStore %1011 %949
-       %1012 = OpAccessChain %_ptr_Function_float %color %31
+       %1011 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1011 %914
+       %1012 = OpAccessChain %_ptr_Function_float %uv %uint_0
                OpStore %1012 %1010
-       %1013 = OpLoad %v3float %color
-               OpStore %color %170
-               OpStore %color %1013
-       %1014 = OpLoad %v3float %color
-               OpStore %color %170
-               OpStore %color %1014
-       %1015 = OpCompositeExtract %float %967 1
-       %1016 = OpCompositeExtract %float %967 1
-       %1017 = OpCompositeExtract %float %900 1
-       %1018 = OpCompositeConstruct %v3float %1015 %1016 %1017
-       %1019 = OpAccessChain %_ptr_Function_float %color %31
-       %1020 = OpLoad %float %1019
-       %1021 = OpAccessChain %_ptr_Function_float %color %31
-               OpStore %1021 %949
-       %1022 = OpAccessChain %_ptr_Function_float %color %31
-               OpStore %1022 %1020
-       %1023 = OpAccessChain %_ptr_Function_float %color %uint_0
-       %1024 = OpConvertSToF %float %996
-       %1025 = OpFAdd %float %1024 %1008
-               OpStore %1023 %1025
-       %1026 = OpAccessChain %_ptr_Private_int %obj %uint_0 %520
-       %1027 = OpLoad %int %1026
-       %1028 = OpAccessChain %_ptr_Private_int %obj %uint_0 %520
-               OpStore %1028 %31
-       %1029 = OpAccessChain %_ptr_Private_int %obj %uint_0 %520
-               OpStore %1029 %1027
-               OpBranch %980
-        %980 = OpLabel
-       %1030 = OpAccessChain %_ptr_Function_float %uv %uint_0
-       %1031 = OpLoad %float %1030
-       %1032 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1032 %949
-       %1033 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1033 %1031
-       %1034 = OpAccessChain %_ptr_Function_float %uv %uint_0
-       %1035 = OpLoad %float %1034
-       %1036 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1036 %949
-       %1037 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1037 %1035
-       %1038 = OpAccessChain %_ptr_Function_float %uv %uint_0
-       %1039 = OpLoad %float %1038
-       %1040 = OpAccessChain %_ptr_Function_float %uv %uint_0
+       %1013 = OpAccessChain %_ptr_Function_float %uv %uint_0
+       %1014 = OpLoad %float %1013
+       %1015 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1015 %914
+       %1016 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1016 %1014
+       %1018 = OpFOrdGreaterThan %bool %999 %float_0_5
+               OpSelectionMerge %1019 None
+               OpBranchConditional %1018 %1020 %1019
+       %1020 = OpLabel
+       %1021 = OpAccessChain %_ptr_Function_float %uv %uint_0
+       %1022 = OpLoad %float %1021
+       %1023 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1023 %914
+       %1024 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1024 %1022
+       %1025 = OpCompositeExtract %float %162 0
+       %1026 = OpCompositeExtract %float %162 0
+       %1027 = OpCompositeConstruct %v2float %1025 %1026
+       %1028 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1029 = OpLoad %float %1028
+       %1030 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1030 %914
+       %1031 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1031 %1029
+       %1032 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1033 = OpLoad %float %1032
+       %1034 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1034 %914
+       %1035 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1035 %1033
+       %1036 = OpCompositeExtract %float %922 0
+       %1037 = OpCompositeExtract %float %922 2
+       %1038 = OpCompositeExtract %float %162 1
+       %1039 = OpCompositeConstruct %v3float %1036 %1037 %1038
+       %1040 = OpAccessChain %_ptr_Function_float %color %uint_0
        %1041 = OpLoad %float %1040
-       %1042 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1042 %949
-       %1043 = OpAccessChain %_ptr_Function_float %uv %uint_0
+       %1042 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1042 %914
+       %1043 = OpAccessChain %_ptr_Function_float %color %uint_0
                OpStore %1043 %1041
-       %1044 = OpCompositeExtract %float %959 2
-       %1045 = OpCompositeExtract %float %959 1
-       %1046 = OpCompositeExtract %float %959 1
-       %1047 = OpCompositeConstruct %v3float %1044 %1045 %1046
-       %1048 = OpLoad %v2float %uv
-               OpStore %uv %167
-               OpStore %uv %1048
+       %1045 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_2
+       %1046 = OpLoad %int %1045
+       %1047 = OpAccessChain %_ptr_Function_float %uv %uint_0
+       %1048 = OpLoad %float %1047
        %1049 = OpAccessChain %_ptr_Function_float %uv %uint_0
-       %1050 = OpLoad %float %1049
-       %1051 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1051 %949
-       %1052 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1052 %1050
-       %1053 = OpCompositeExtract %float %167 1
-       %1054 = OpCompositeExtract %float %167 1
-       %1055 = OpCompositeConstruct %v2float %1053 %1054
-       %1056 = OpAccessChain %_ptr_Function_float %uv %uint_0
-       %1057 = OpLoad %float %1056
-       %1058 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1058 %949
-       %1059 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1059 %1057
-       %1061 = OpFOrdGreaterThan %bool %1039 %float_0_5
-               OpSelectionMerge %1062 None
-               OpBranchConditional %1061 %1063 %1062
-       %1063 = OpLabel
-       %1064 = OpAccessChain %_ptr_Function_float %uv %uint_0
-       %1065 = OpLoad %float %1064
-       %1066 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1066 %949
-       %1067 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1067 %1065
-       %1068 = OpCompositeExtract %float %892 0
-       %1069 = OpCompositeExtract %float %892 0
-       %1070 = OpCompositeConstruct %v2float %1068 %1069
-       %1071 = OpAccessChain %_ptr_Function_float %color %uint_0
-       %1072 = OpLoad %float %1071
-       %1073 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1073 %949
-       %1074 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1074 %1072
+               OpStore %1049 %914
+       %1050 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1050 %1048
+       %1051 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1052 = OpLoad %float %1051
+       %1053 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1053 %914
+       %1054 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1054 %1052
+       %1055 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_2
+       %1056 = OpLoad %int %1055
+       %1057 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_2
+               OpStore %1057 %31
+       %1058 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_2
+               OpStore %1058 %1056
+       %1059 = OpCompositeExtract %float %888 1
+       %1060 = OpCompositeExtract %float %878 0
+       %1061 = OpCompositeConstruct %v2float %1059 %1060
+       %1062 = OpAccessChain %_ptr_Function_float %color %uint_1
+       %1063 = OpLoad %float %1062
+       %1064 = OpAccessChain %_ptr_Function_float %color %uint_1
+               OpStore %1064 %914
+       %1065 = OpAccessChain %_ptr_Function_float %color %uint_1
+               OpStore %1065 %1063
+       %1066 = OpAccessChain %_ptr_Function_float %color %uint_1
+       %1067 = OpLoad %float %1066
+       %1068 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_2
+       %1069 = OpLoad %int %1068
+       %1070 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_2
+               OpStore %1070 %31
+       %1071 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_2
+               OpStore %1071 %1069
+       %1072 = OpCompositeExtract %float %1039 0
+       %1073 = OpCompositeExtract %float %869 0
+       %1074 = OpCompositeConstruct %v2float %1072 %1073
        %1075 = OpAccessChain %_ptr_Function_float %color %uint_0
        %1076 = OpLoad %float %1075
        %1077 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1077 %949
+               OpStore %1077 %914
        %1078 = OpAccessChain %_ptr_Function_float %color %uint_0
                OpStore %1078 %1076
-       %1079 = OpCompositeExtract %float %959 0
-       %1080 = OpCompositeExtract %float %959 2
-       %1081 = OpCompositeExtract %float %1055 1
-       %1082 = OpCompositeConstruct %v3float %1079 %1080 %1081
-       %1083 = OpAccessChain %_ptr_Function_float %color %uint_0
-       %1084 = OpLoad %float %1083
-       %1085 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1085 %949
-       %1086 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1086 %1084
-       %1088 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_2
-       %1089 = OpLoad %int %1088
-       %1090 = OpAccessChain %_ptr_Function_float %uv %uint_0
-       %1091 = OpLoad %float %1090
-       %1092 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1092 %949
-       %1093 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1093 %1091
-       %1094 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1079 = OpLoad %int %i_2
+               OpStore %i_2 %31
+               OpStore %i_2 %1079
+       %1080 = OpCompositeExtract %float %935 1
+       %1081 = OpCompositeConstruct %v2float %1080 %914
+       %1082 = OpLoad %int %i_2
+               OpStore %i_2 %31
+               OpStore %i_2 %1082
+       %1083 = OpAccessChain %_ptr_Function_float %color %uint_1
+       %1084 = OpConvertSToF %float %1046
+       %1085 = OpFAdd %float %1084 %1067
+               OpStore %1083 %1085
+       %1086 = OpAccessChain %_ptr_Function_float %uv %uint_0
+       %1087 = OpLoad %float %1086
+       %1088 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1088 %914
+       %1089 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1089 %1087
+               OpBranch %1019
+       %1019 = OpLabel
+       %1090 = OpLoad %int %i_2
+               OpStore %i_2 %31
+               OpStore %i_2 %1090
+       %1091 = OpCompositeExtract %float %878 0
+       %1092 = OpCompositeExtract %float %878 0
+       %1093 = OpCompositeConstruct %v2float %1091 %1092
+       %1094 = OpAccessChain %_ptr_Function_float %uv %uint_0
        %1095 = OpLoad %float %1094
-       %1096 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1096 %949
-       %1097 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1096 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1096 %914
+       %1097 = OpAccessChain %_ptr_Function_float %uv %uint_0
                OpStore %1097 %1095
-       %1098 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_2
-       %1099 = OpLoad %int %1098
-       %1100 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_2
-               OpStore %1100 %31
-       %1101 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_2
-               OpStore %1101 %1099
-       %1102 = OpCompositeExtract %float %924 1
-       %1103 = OpCompositeExtract %float %913 0
-       %1104 = OpCompositeConstruct %v2float %1102 %1103
-       %1105 = OpAccessChain %_ptr_Function_float %color %uint_1
-       %1106 = OpLoad %float %1105
-       %1107 = OpAccessChain %_ptr_Function_float %color %uint_1
-               OpStore %1107 %949
-       %1108 = OpAccessChain %_ptr_Function_float %color %uint_1
-               OpStore %1108 %1106
-       %1109 = OpAccessChain %_ptr_Function_float %color %uint_1
+       %1098 = OpAccessChain %_ptr_Function_float %uv %31
+       %1099 = OpLoad %float %1098
+       %1100 = OpLoad %v3float %color
+               OpStore %color %165
+               OpStore %color %1100
+       %1101 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1102 = OpLoad %float %1101
+       %1103 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1103 %914
+       %1104 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1104 %1102
+       %1106 = OpFOrdGreaterThan %bool %1099 %float_0_75
+               OpSelectionMerge %1107 None
+               OpBranchConditional %1106 %1108 %1107
+       %1108 = OpLabel
+       %1109 = OpAccessChain %_ptr_Function_float %color %uint_0
        %1110 = OpLoad %float %1109
-       %1111 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_2
-       %1112 = OpLoad %int %1111
-       %1113 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_2
-               OpStore %1113 %31
-       %1114 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_2
-               OpStore %1114 %1112
-       %1115 = OpCompositeExtract %float %1082 0
-       %1116 = OpCompositeExtract %float %904 0
-       %1117 = OpCompositeConstruct %v2float %1115 %1116
+       %1111 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1111 %914
+       %1112 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1112 %1110
+       %1114 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_3
+       %1115 = OpLoad %int %1114
+       %1116 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1117 = OpLoad %float %1116
        %1118 = OpAccessChain %_ptr_Function_float %color %uint_0
-       %1119 = OpLoad %float %1118
-       %1120 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1120 %949
-       %1121 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1121 %1119
-       %1122 = OpLoad %int %i_2
-               OpStore %i_2 %31
-               OpStore %i_2 %1122
-       %1123 = OpCompositeExtract %float %972 1
-       %1124 = OpCompositeExtract %float %167 1
-       %1125 = OpCompositeConstruct %v2float %1123 %1124
-       %1126 = OpLoad %int %i_2
-               OpStore %i_2 %31
-               OpStore %i_2 %1126
-       %1127 = OpAccessChain %_ptr_Function_float %color %uint_1
-       %1128 = OpConvertSToF %float %1089
-       %1129 = OpFAdd %float %1128 %1110
-               OpStore %1127 %1129
-       %1130 = OpAccessChain %_ptr_Function_float %uv %uint_0
-       %1131 = OpLoad %float %1130
+               OpStore %1118 %914
+       %1119 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1119 %1117
+       %1120 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %1120
+       %1121 = OpCompositeExtract %float %1093 0
+       %1122 = OpCompositeExtract %float %1093 0
+       %1123 = OpCompositeExtract %float %1093 0
+       %1124 = OpCompositeConstruct %v3float %1121 %1122 %1123
+       %1125 = OpAccessChain %_ptr_Function_float %uv %31
+       %1126 = OpLoad %float %1125
+       %1127 = OpAccessChain %_ptr_Function_float %uv %31
+               OpStore %1127 %914
+       %1128 = OpAccessChain %_ptr_Function_float %uv %31
+               OpStore %1128 %1126
+       %1129 = OpAccessChain %_ptr_Function_float %uv %uint_0
+       %1130 = OpLoad %float %1129
+       %1131 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1131 %914
        %1132 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1132 %949
-       %1133 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1133 %1131
-               OpBranch %1062
-       %1062 = OpLabel
-       %1134 = OpLoad %int %i_2
-               OpStore %i_2 %31
-               OpStore %i_2 %1134
-       %1135 = OpCompositeExtract %float %913 0
-       %1136 = OpCompositeExtract %float %913 0
-       %1137 = OpCompositeConstruct %v2float %1135 %1136
-       %1138 = OpAccessChain %_ptr_Function_float %uv %uint_0
-       %1139 = OpLoad %float %1138
-       %1140 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1140 %949
-       %1141 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1141 %1139
-       %1142 = OpAccessChain %_ptr_Function_float %uv %31
-       %1143 = OpLoad %float %1142
-       %1144 = OpLoad %v3float %color
-               OpStore %color %170
-               OpStore %color %1144
-       %1145 = OpAccessChain %_ptr_Function_float %color %uint_0
-       %1146 = OpLoad %float %1145
-       %1147 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1147 %949
-       %1148 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1148 %1146
-       %1150 = OpFOrdGreaterThan %bool %1143 %float_0_75
-               OpSelectionMerge %1151 None
-               OpBranchConditional %1150 %1152 %1151
-       %1152 = OpLabel
-       %1153 = OpAccessChain %_ptr_Function_float %color %uint_0
-       %1154 = OpLoad %float %1153
-       %1155 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1155 %949
-       %1156 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1156 %1154
-       %1158 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_3
-       %1159 = OpLoad %int %1158
-       %1160 = OpAccessChain %_ptr_Function_float %color %uint_0
-       %1161 = OpLoad %float %1160
-       %1162 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1162 %949
-       %1163 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1163 %1161
-       %1164 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %1164
-       %1165 = OpCompositeExtract %float %1137 0
-       %1166 = OpCompositeExtract %float %1137 0
-       %1167 = OpCompositeExtract %float %1137 0
-       %1168 = OpCompositeConstruct %v3float %1165 %1166 %1167
-       %1169 = OpAccessChain %_ptr_Function_float %uv %31
-       %1170 = OpLoad %float %1169
-       %1171 = OpAccessChain %_ptr_Function_float %uv %31
-               OpStore %1171 %949
+               OpStore %1132 %1130
+       %1133 = OpAccessChain %_ptr_Function_float %color %uint_2
+       %1134 = OpLoad %float %1133
+       %1135 = OpLoad %v3float %color
+               OpStore %color %165
+               OpStore %color %1135
+       %1136 = OpCompositeExtract %float %1093 0
+       %1137 = OpCompositeExtract %float %878 1
+       %1138 = OpCompositeExtract %float %1093 1
+       %1139 = OpCompositeConstruct %v3float %1136 %1137 %1138
+       %1140 = OpAccessChain %_ptr_Function_float %color %uint_2
+       %1141 = OpLoad %float %1140
+       %1142 = OpAccessChain %_ptr_Function_float %color %uint_2
+               OpStore %1142 %914
+       %1143 = OpAccessChain %_ptr_Function_float %color %uint_2
+               OpStore %1143 %1141
+       %1144 = OpAccessChain %_ptr_Private_int %obj %uint_0 %500
+       %1145 = OpLoad %int %1144
+       %1146 = OpAccessChain %_ptr_Private_int %obj %uint_0 %500
+               OpStore %1146 %31
+       %1147 = OpAccessChain %_ptr_Private_int %obj %uint_0 %500
+               OpStore %1147 %1145
+       %1148 = OpAccessChain %_ptr_Function_float %color %uint_2
+       %1149 = OpLoad %float %1148
+       %1150 = OpAccessChain %_ptr_Function_float %color %uint_2
+               OpStore %1150 %914
+       %1151 = OpAccessChain %_ptr_Function_float %color %uint_2
+               OpStore %1151 %1149
+       %1152 = OpAccessChain %_ptr_Function_float %color %uint_2
+       %1153 = OpConvertSToF %float %1115
+       %1154 = OpFAdd %float %1134 %1153
+               OpStore %1152 %1154
+       %1155 = OpLoad %v2float %uv
+               OpStore %uv %162
+               OpStore %uv %1155
+       %1156 = OpCompositeExtract %float %162 1
+       %1157 = OpCompositeExtract %float %162 1
+       %1158 = OpCompositeConstruct %v2float %1156 %1157
+               OpBranch %1107
+       %1107 = OpLabel
+       %1159 = OpAccessChain %_ptr_Function_float %uv %31
+       %1160 = OpLoad %float %1159
+       %1161 = OpAccessChain %_ptr_Function_float %uv %31
+               OpStore %1161 %914
+       %1162 = OpAccessChain %_ptr_Function_float %uv %31
+               OpStore %1162 %1160
+       %1163 = OpCompositeExtract %float %930 0
+       %1164 = OpCompositeExtract %float %930 1
+       %1165 = OpCompositeExtract %float %930 1
+       %1166 = OpCompositeConstruct %v3float %1163 %1164 %1165
+       %1168 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+       %1169 = OpLoad %int %1168
+       %1170 = OpAccessChain %_ptr_Function_float %uv %31
+       %1171 = OpLoad %float %1170
        %1172 = OpAccessChain %_ptr_Function_float %uv %31
-               OpStore %1172 %1170
-       %1173 = OpAccessChain %_ptr_Function_float %uv %uint_0
-       %1174 = OpLoad %float %1173
-       %1175 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1175 %949
-       %1176 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1176 %1174
-       %1177 = OpAccessChain %_ptr_Function_float %color %uint_2
-       %1178 = OpLoad %float %1177
-       %1179 = OpLoad %v3float %color
-               OpStore %color %170
-               OpStore %color %1179
-       %1180 = OpCompositeExtract %float %1137 0
-       %1181 = OpCompositeExtract %float %913 1
-       %1182 = OpCompositeExtract %float %1137 1
-       %1183 = OpCompositeConstruct %v3float %1180 %1181 %1182
-       %1184 = OpAccessChain %_ptr_Function_float %color %uint_2
-       %1185 = OpLoad %float %1184
-       %1186 = OpAccessChain %_ptr_Function_float %color %uint_2
-               OpStore %1186 %949
-       %1187 = OpAccessChain %_ptr_Function_float %color %uint_2
-               OpStore %1187 %1185
-       %1188 = OpAccessChain %_ptr_Private_int %obj %uint_0 %520
-       %1189 = OpLoad %int %1188
-       %1190 = OpAccessChain %_ptr_Private_int %obj %uint_0 %520
-               OpStore %1190 %31
-       %1191 = OpAccessChain %_ptr_Private_int %obj %uint_0 %520
-               OpStore %1191 %1189
-       %1192 = OpCompositeExtract %float %167 0
-       %1193 = OpCompositeExtract %float %167 1
-       %1194 = OpCompositeConstruct %v2float %1192 %1193
-       %1195 = OpAccessChain %_ptr_Function_float %color %uint_2
-       %1196 = OpLoad %float %1195
-       %1197 = OpAccessChain %_ptr_Function_float %color %uint_2
-               OpStore %1197 %949
-       %1198 = OpAccessChain %_ptr_Function_float %color %uint_2
-               OpStore %1198 %1196
-       %1199 = OpAccessChain %_ptr_Function_float %color %uint_2
-       %1200 = OpConvertSToF %float %1159
-       %1201 = OpFAdd %float %1178 %1200
-               OpStore %1199 %1201
-       %1202 = OpLoad %v2float %uv
-               OpStore %uv %167
-               OpStore %uv %1202
-       %1203 = OpCompositeExtract %float %1194 1
-       %1204 = OpCompositeExtract %float %1194 1
-       %1205 = OpCompositeConstruct %v2float %1203 %1204
-               OpBranch %1151
-       %1151 = OpLabel
-       %1206 = OpAccessChain %_ptr_Function_float %uv %31
-       %1207 = OpLoad %float %1206
-       %1208 = OpAccessChain %_ptr_Function_float %uv %31
-               OpStore %1208 %949
-       %1209 = OpAccessChain %_ptr_Function_float %uv %31
-               OpStore %1209 %1207
-       %1210 = OpCompositeExtract %float %967 0
-       %1211 = OpCompositeExtract %float %967 1
-       %1212 = OpCompositeExtract %float %967 1
-       %1213 = OpCompositeConstruct %v3float %1210 %1211 %1212
-       %1215 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-       %1216 = OpLoad %int %1215
-       %1217 = OpAccessChain %_ptr_Function_float %uv %31
-       %1218 = OpLoad %float %1217
-       %1219 = OpAccessChain %_ptr_Function_float %uv %31
-               OpStore %1219 %949
-       %1220 = OpAccessChain %_ptr_Function_float %uv %31
-               OpStore %1220 %1218
-       %1221 = OpLoad %v3float %color
-               OpStore %color %170
-               OpStore %color %1221
-       %1222 = OpCompositeExtract %float %892 1
-       %1223 = OpCompositeExtract %float %959 0
-       %1224 = OpCompositeExtract %float %959 0
-       %1225 = OpCompositeConstruct %v3float %1222 %1223 %1224
-       %1226 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-       %1227 = OpLoad %int %1226
-       %1228 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-               OpStore %1228 %31
-       %1229 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+               OpStore %1172 %914
+       %1173 = OpAccessChain %_ptr_Function_float %uv %31
+               OpStore %1173 %1171
+       %1174 = OpLoad %v3float %color
+               OpStore %color %165
+               OpStore %color %1174
+       %1175 = OpCompositeExtract %float %162 1
+       %1176 = OpCompositeExtract %float %922 0
+       %1177 = OpCompositeExtract %float %922 0
+       %1178 = OpCompositeConstruct %v3float %1175 %1176 %1177
+       %1179 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+       %1180 = OpLoad %int %1179
+       %1181 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+               OpStore %1181 %31
+       %1182 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+               OpStore %1182 %1180
+       %1183 = OpCompositeExtract %float %878 0
+       %1184 = OpCompositeExtract %float %864 2
+       %1185 = OpCompositeConstruct %v2float %1183 %1184
+       %1186 = OpAccessChain %_ptr_Function_float %uv %uint_0
+       %1187 = OpLoad %float %1186
+       %1188 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1188 %914
+       %1189 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1189 %1187
+       %1190 = OpAccessChain %_ptr_Function_float %color %uint_1
+       %1191 = OpLoad %float %1190
+       %1192 = OpAccessChain %_ptr_Function_float %color %uint_1
+       %1193 = OpLoad %float %1192
+       %1194 = OpAccessChain %_ptr_Function_float %color %uint_1
+               OpStore %1194 %914
+       %1195 = OpAccessChain %_ptr_Function_float %color %uint_1
+               OpStore %1195 %1193
+       %1196 = OpCompositeExtract %float %1093 0
+       %1197 = OpCompositeExtract %float %888 0
+       %1198 = OpCompositeConstruct %v2float %1196 %1197
+       %1199 = OpAccessChain %_ptr_Function_float %uv %uint_0
+       %1200 = OpLoad %float %1199
+       %1201 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1201 %914
+       %1202 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1202 %1200
+       %1203 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1204 = OpLoad %float %1203
+       %1205 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1205 %914
+       %1206 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1206 %1204
+       %1207 = OpCompositeExtract %float %896 2
+       %1208 = OpCompositeExtract %float %1007 1
+       %1209 = OpCompositeConstruct %v2float %1207 %1208
+       %1210 = OpAccessChain %_ptr_Function_float %color %uint_1
+       %1211 = OpConvertSToF %float %1169
+       %1212 = OpFAdd %float %1191 %1211
+               OpStore %1210 %1212
+       %1213 = OpCompositeExtract %float %1166 0
+       %1214 = OpCompositeConstruct %v3float %914 %1213 %914
+       %1215 = OpAccessChain %_ptr_Function_float %uv %uint_0
+       %1216 = OpLoad %float %1215
+       %1217 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1217 %914
+       %1218 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1218 %1216
+       %1219 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1220 = OpLoad %float %1219
+       %1221 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1221 %914
+       %1222 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1222 %1220
+       %1223 = OpCompositeExtract %float %1166 0
+       %1224 = OpCompositeExtract %float %1166 1
+       %1225 = OpCompositeConstruct %v2float %1223 %1224
+       %1226 = OpAccessChain %_ptr_Function_float %uv %uint_1
+       %1227 = OpLoad %float %1226
+       %1228 = OpAccessChain %_ptr_Function_float %uv %uint_1
+               OpStore %1228 %914
+       %1229 = OpAccessChain %_ptr_Function_float %uv %uint_1
                OpStore %1229 %1227
-       %1230 = OpCompositeExtract %float %913 0
-       %1231 = OpCompositeExtract %float %896 2
-       %1232 = OpCompositeConstruct %v2float %1230 %1231
-       %1233 = OpAccessChain %_ptr_Function_float %uv %uint_0
-       %1234 = OpLoad %float %1233
-       %1235 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1235 %949
-       %1236 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1236 %1234
-       %1237 = OpAccessChain %_ptr_Function_float %color %uint_1
-       %1238 = OpLoad %float %1237
+       %1230 = OpAccessChain %_ptr_Function_float %uv %uint_1
+       %1231 = OpLoad %float %1230
+       %1232 = OpLoad %int %i_2
+               OpStore %i_2 %31
+               OpStore %i_2 %1232
+       %1233 = OpCompositeExtract %float %930 1
+       %1234 = OpCompositeConstruct %v3float %914 %1233 %914
+       %1235 = OpAccessChain %_ptr_Private_int %obj %uint_0 %500
+       %1236 = OpLoad %int %1235
+       %1237 = OpAccessChain %_ptr_Private_int %obj %uint_0 %500
+               OpStore %1237 %31
+       %1238 = OpAccessChain %_ptr_Private_int %obj %uint_0 %500
+               OpStore %1238 %1236
        %1239 = OpAccessChain %_ptr_Function_float %color %uint_1
        %1240 = OpLoad %float %1239
        %1241 = OpAccessChain %_ptr_Function_float %color %uint_1
-               OpStore %1241 %949
+               OpStore %1241 %914
        %1242 = OpAccessChain %_ptr_Function_float %color %uint_1
                OpStore %1242 %1240
-       %1243 = OpCompositeExtract %float %1137 0
-       %1244 = OpCompositeExtract %float %924 0
-       %1245 = OpCompositeConstruct %v2float %1243 %1244
+       %1243 = OpCompositeExtract %float %162 0
+       %1244 = OpCompositeExtract %float %162 0
+       %1245 = OpCompositeConstruct %v3float %1243 %1244 %914
        %1246 = OpAccessChain %_ptr_Function_float %uv %uint_0
        %1247 = OpLoad %float %1246
        %1248 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1248 %949
+               OpStore %1248 %914
        %1249 = OpAccessChain %_ptr_Function_float %uv %uint_0
                OpStore %1249 %1247
-       %1250 = OpAccessChain %_ptr_Function_float %color %uint_0
-       %1251 = OpLoad %float %1250
-       %1252 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1252 %949
-       %1253 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1253 %1251
-       %1254 = OpCompositeExtract %float %931 2
-       %1255 = OpCompositeExtract %float %1047 1
-       %1256 = OpCompositeConstruct %v2float %1254 %1255
-       %1257 = OpAccessChain %_ptr_Function_float %color %uint_1
-       %1258 = OpConvertSToF %float %1216
-       %1259 = OpFAdd %float %1238 %1258
-               OpStore %1257 %1259
-       %1260 = OpCompositeExtract %float %167 0
-       %1261 = OpCompositeExtract %float %1213 0
-       %1262 = OpCompositeExtract %float %167 1
-       %1263 = OpCompositeConstruct %v3float %1260 %1261 %1262
-       %1264 = OpAccessChain %_ptr_Function_float %uv %uint_0
-       %1265 = OpLoad %float %1264
-       %1266 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1266 %949
-       %1267 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1267 %1265
-       %1268 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1250 = OpFOrdGreaterThan %bool %1231 %float_0_25
+               OpSelectionMerge %1251 None
+               OpBranchConditional %1250 %1252 %1251
+       %1252 = OpLabel
+       %1253 = OpCompositeExtract %float %162 0
+       %1254 = OpCompositeExtract %float %1245 2
+       %1255 = OpCompositeConstruct %v2float %1253 %1254
+       %1256 = OpLoad %v3float %color
+               OpStore %color %165
+               OpStore %color %1256
+       %1258 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_5
+       %1259 = OpLoad %int %1258
+       %1260 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1261 = OpLoad %float %1260
+       %1262 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1262 %914
+       %1263 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1263 %1261
+       %1264 = OpLoad %int %i_2
+               OpStore %i_2 %31
+               OpStore %i_2 %1264
+       %1265 = OpLoad %int %i_2
+               OpStore %i_2 %31
+               OpStore %i_2 %1265
+       %1266 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1267 = OpLoad %float %1266
+       %1268 = OpAccessChain %_ptr_Function_float %uv %31
        %1269 = OpLoad %float %1268
-       %1270 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1270 %949
-       %1271 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1270 = OpAccessChain %_ptr_Function_float %uv %31
+               OpStore %1270 %914
+       %1271 = OpAccessChain %_ptr_Function_float %uv %31
                OpStore %1271 %1269
-       %1272 = OpCompositeExtract %float %1213 0
-       %1273 = OpCompositeExtract %float %1213 1
-       %1274 = OpCompositeConstruct %v2float %1272 %1273
-       %1275 = OpAccessChain %_ptr_Function_float %uv %uint_1
-       %1276 = OpLoad %float %1275
+       %1272 = OpCompositeExtract %float %935 0
+       %1273 = OpCompositeExtract %float %1198 1
+       %1274 = OpCompositeExtract %float %935 1
+       %1275 = OpCompositeConstruct %v3float %1272 %1273 %1274
+       %1276 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %1276
        %1277 = OpAccessChain %_ptr_Function_float %uv %uint_1
-               OpStore %1277 %949
-       %1278 = OpAccessChain %_ptr_Function_float %uv %uint_1
-               OpStore %1278 %1276
+       %1278 = OpLoad %float %1277
        %1279 = OpAccessChain %_ptr_Function_float %uv %uint_1
-       %1280 = OpLoad %float %1279
+               OpStore %1279 %914
+       %1280 = OpAccessChain %_ptr_Function_float %uv %uint_1
+               OpStore %1280 %1278
        %1281 = OpLoad %int %i_2
                OpStore %i_2 %31
                OpStore %i_2 %1281
-       %1282 = OpCompositeExtract %float %167 1
-       %1283 = OpCompositeExtract %float %967 1
-       %1284 = OpCompositeExtract %float %167 0
+       %1282 = OpCompositeExtract %float %864 3
+       %1283 = OpCompositeExtract %float %864 3
+       %1284 = OpCompositeExtract %float %884 0
        %1285 = OpCompositeConstruct %v3float %1282 %1283 %1284
-       %1286 = OpAccessChain %_ptr_Private_int %obj %uint_0 %520
-       %1287 = OpLoad %int %1286
-       %1288 = OpAccessChain %_ptr_Private_int %obj %uint_0 %520
-               OpStore %1288 %31
-       %1289 = OpAccessChain %_ptr_Private_int %obj %uint_0 %520
+       %1286 = OpAccessChain %_ptr_Function_float %uv %uint_0
+       %1287 = OpLoad %float %1286
+       %1288 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1288 %914
+       %1289 = OpAccessChain %_ptr_Function_float %uv %uint_0
                OpStore %1289 %1287
-       %1290 = OpAccessChain %_ptr_Function_float %color %uint_1
-       %1291 = OpLoad %float %1290
-       %1292 = OpAccessChain %_ptr_Function_float %color %uint_1
-               OpStore %1292 %949
-       %1293 = OpAccessChain %_ptr_Function_float %color %uint_1
-               OpStore %1293 %1291
-       %1294 = OpCompositeExtract %float %892 0
-       %1295 = OpCompositeExtract %float %892 0
-       %1296 = OpCompositeExtract %float %167 1
-       %1297 = OpCompositeConstruct %v3float %1294 %1295 %1296
-       %1298 = OpAccessChain %_ptr_Function_float %uv %uint_0
-       %1299 = OpLoad %float %1298
+       %1290 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1291 = OpConvertSToF %float %1259
+       %1292 = OpFAdd %float %1291 %1267
+               OpStore %1290 %1292
+       %1293 = OpCompositeExtract %float %930 1
+       %1294 = OpCompositeExtract %float %888 0
+       %1295 = OpCompositeExtract %float %930 1
+       %1296 = OpCompositeConstruct %v3float %1293 %1294 %1295
+       %1297 = OpAccessChain %_ptr_Function_float %uv %uint_0
+       %1298 = OpLoad %float %1297
+       %1299 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1299 %914
        %1300 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1300 %949
-       %1301 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1301 %1299
-       %1302 = OpFOrdGreaterThan %bool %1280 %float_0_25
-               OpSelectionMerge %1303 None
-               OpBranchConditional %1302 %1304 %1303
-       %1304 = OpLabel
-       %1305 = OpCompositeExtract %float %900 0
-       %1306 = OpCompositeExtract %float %1297 2
-       %1307 = OpCompositeConstruct %v2float %1305 %1306
-       %1308 = OpLoad %v3float %color
-               OpStore %color %170
-               OpStore %color %1308
-       %1310 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_5
-       %1311 = OpLoad %int %1310
-       %1312 = OpAccessChain %_ptr_Function_float %color %uint_0
-       %1313 = OpLoad %float %1312
-       %1314 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1314 %949
-       %1315 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1315 %1313
-       %1316 = OpLoad %int %i_2
+               OpStore %1300 %1298
+               OpBranch %1251
+       %1251 = OpLabel
+       %1301 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1302 = OpLoad %float %1301
+       %1303 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1303 %914
+       %1304 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1304 %1302
+       %1305 = OpCompositeExtract %float %1093 0
+       %1306 = OpCompositeExtract %float %888 1
+       %1307 = OpCompositeExtract %float %888 0
+       %1308 = OpCompositeConstruct %v3float %1305 %1306 %1307
+       %1309 = OpAccessChain %_ptr_Function_float %uv %uint_1
+       %1310 = OpLoad %float %1309
+       %1311 = OpAccessChain %_ptr_Function_float %uv %uint_1
+               OpStore %1311 %914
+       %1312 = OpAccessChain %_ptr_Function_float %uv %uint_1
+               OpStore %1312 %1310
+       %1313 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+       %1314 = OpLoad %int %1313
+       %1315 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+               OpStore %1315 %31
+       %1316 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+               OpStore %1316 %1314
+       %1317 = OpAccessChain %_ptr_Function_float %uv %uint_1
+       %1318 = OpLoad %float %1317
+       %1319 = OpAccessChain %_ptr_Private_int %obj %uint_0 %500
+       %1320 = OpLoad %int %1319
+       %1321 = OpAccessChain %_ptr_Private_int %obj %uint_0 %500
+               OpStore %1321 %31
+       %1322 = OpAccessChain %_ptr_Private_int %obj %uint_0 %500
+               OpStore %1322 %1320
+       %1323 = OpFOrdGreaterThan %bool %1318 %float_0_5
+               OpSelectionMerge %1324 None
+               OpBranchConditional %1323 %1325 %1324
+       %1325 = OpLabel
+       %1326 = OpAccessChain %_ptr_Function_float %uv %uint_0
+       %1327 = OpLoad %float %1326
+       %1328 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1328 %914
+       %1329 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1329 %1327
+       %1330 = OpCompositeExtract %float %1245 1
+       %1331 = OpCompositeExtract %float %935 1
+       %1332 = OpCompositeConstruct %v2float %1330 %1331
+       %1333 = OpAccessChain %_ptr_Function_float %color %uint_1
+       %1334 = OpLoad %float %1333
+       %1335 = OpAccessChain %_ptr_Function_float %color %uint_1
+               OpStore %1335 %914
+       %1336 = OpAccessChain %_ptr_Function_float %color %uint_1
+               OpStore %1336 %1334
+       %1337 = OpCompositeExtract %float %882 2
+       %1338 = OpCompositeExtract %float %882 1
+       %1339 = OpCompositeConstruct %v2float %1337 %1338
+       %1340 = OpAccessChain %_ptr_Function_float %uv %uint_1
+       %1341 = OpLoad %float %1340
+       %1342 = OpAccessChain %_ptr_Function_float %uv %uint_1
+               OpStore %1342 %914
+       %1343 = OpAccessChain %_ptr_Function_float %uv %uint_1
+               OpStore %1343 %1341
+       %1345 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_6
+       %1346 = OpLoad %int %1345
+       %1347 = OpAccessChain %_ptr_Function_float %uv %uint_1
+       %1348 = OpLoad %float %1347
+       %1349 = OpAccessChain %_ptr_Function_float %uv %uint_1
+               OpStore %1349 %914
+       %1350 = OpAccessChain %_ptr_Function_float %uv %uint_1
+               OpStore %1350 %1348
+       %1351 = OpLoad %int %i_2
                OpStore %i_2 %31
-               OpStore %i_2 %1316
-       %1317 = OpLoad %int %i_2
-               OpStore %i_2 %31
-               OpStore %i_2 %1317
-       %1318 = OpAccessChain %_ptr_Function_float %color %uint_0
-       %1319 = OpLoad %float %1318
-       %1320 = OpAccessChain %_ptr_Function_float %uv %31
-       %1321 = OpLoad %float %1320
-       %1322 = OpAccessChain %_ptr_Function_float %uv %31
-               OpStore %1322 %949
-       %1323 = OpAccessChain %_ptr_Function_float %uv %31
-               OpStore %1323 %1321
-       %1324 = OpCompositeExtract %float %972 0
-       %1325 = OpCompositeExtract %float %1245 1
-       %1326 = OpCompositeExtract %float %972 1
-       %1327 = OpCompositeConstruct %v3float %1324 %1325 %1326
-       %1328 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %1328
-       %1329 = OpAccessChain %_ptr_Function_float %uv %uint_1
-       %1330 = OpLoad %float %1329
-       %1331 = OpAccessChain %_ptr_Function_float %uv %uint_1
-               OpStore %1331 %949
-       %1332 = OpAccessChain %_ptr_Function_float %uv %uint_1
-               OpStore %1332 %1330
-       %1333 = OpLoad %int %i_2
-               OpStore %i_2 %31
-               OpStore %i_2 %1333
-       %1334 = OpCompositeExtract %float %896 3
-       %1335 = OpCompositeExtract %float %896 3
-       %1336 = OpCompositeExtract %float %920 0
-       %1337 = OpCompositeConstruct %v3float %1334 %1335 %1336
-       %1338 = OpAccessChain %_ptr_Function_float %uv %uint_0
-       %1339 = OpLoad %float %1338
-       %1340 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1340 %949
-       %1341 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1341 %1339
-       %1342 = OpAccessChain %_ptr_Function_float %color %uint_0
-       %1343 = OpConvertSToF %float %1311
-       %1344 = OpFAdd %float %1343 %1319
-               OpStore %1342 %1344
-       %1345 = OpCompositeExtract %float %967 1
-       %1346 = OpCompositeExtract %float %924 0
-       %1347 = OpCompositeExtract %float %967 1
-       %1348 = OpCompositeConstruct %v3float %1345 %1346 %1347
-       %1349 = OpAccessChain %_ptr_Function_float %uv %uint_0
-       %1350 = OpLoad %float %1349
-       %1351 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1351 %949
-       %1352 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1352 %1350
-               OpBranch %1303
-       %1303 = OpLabel
-       %1353 = OpAccessChain %_ptr_Function_float %color %uint_0
-       %1354 = OpLoad %float %1353
-       %1355 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1355 %949
-       %1356 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1356 %1354
-       %1357 = OpCompositeExtract %float %1137 0
-       %1358 = OpCompositeExtract %float %924 1
-       %1359 = OpCompositeExtract %float %924 0
-       %1360 = OpCompositeConstruct %v3float %1357 %1358 %1359
-       %1361 = OpAccessChain %_ptr_Function_float %uv %uint_1
-       %1362 = OpLoad %float %1361
-       %1363 = OpAccessChain %_ptr_Function_float %uv %uint_1
-               OpStore %1363 %949
-       %1364 = OpAccessChain %_ptr_Function_float %uv %uint_1
-               OpStore %1364 %1362
-       %1365 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-       %1366 = OpLoad %int %1365
-       %1367 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-               OpStore %1367 %31
-       %1368 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-               OpStore %1368 %1366
-       %1369 = OpAccessChain %_ptr_Function_float %uv %uint_1
-       %1370 = OpLoad %float %1369
-       %1371 = OpAccessChain %_ptr_Private_int %obj %uint_0 %520
-       %1372 = OpLoad %int %1371
-       %1373 = OpAccessChain %_ptr_Private_int %obj %uint_0 %520
-               OpStore %1373 %31
-       %1374 = OpAccessChain %_ptr_Private_int %obj %uint_0 %520
-               OpStore %1374 %1372
-       %1375 = OpFOrdGreaterThan %bool %1370 %float_0_5
-               OpSelectionMerge %1376 None
-               OpBranchConditional %1375 %1377 %1376
-       %1377 = OpLabel
-       %1378 = OpAccessChain %_ptr_Function_float %uv %uint_0
-       %1379 = OpLoad %float %1378
-       %1380 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1380 %949
-       %1381 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1381 %1379
-       %1382 = OpCompositeExtract %float %1297 1
-       %1383 = OpCompositeExtract %float %972 1
-       %1384 = OpCompositeConstruct %v2float %1382 %1383
-       %1385 = OpAccessChain %_ptr_Function_float %color %uint_1
-       %1386 = OpLoad %float %1385
-       %1387 = OpAccessChain %_ptr_Function_float %color %uint_1
-               OpStore %1387 %949
-       %1388 = OpAccessChain %_ptr_Function_float %color %uint_1
-               OpStore %1388 %1386
-       %1389 = OpCompositeExtract %float %918 2
-       %1390 = OpCompositeExtract %float %918 1
-       %1391 = OpCompositeConstruct %v2float %1389 %1390
-       %1392 = OpAccessChain %_ptr_Function_float %uv %uint_1
-       %1393 = OpLoad %float %1392
-       %1394 = OpAccessChain %_ptr_Function_float %uv %uint_1
-               OpStore %1394 %949
-       %1395 = OpAccessChain %_ptr_Function_float %uv %uint_1
-               OpStore %1395 %1393
-       %1397 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_6
-       %1398 = OpLoad %int %1397
-       %1399 = OpAccessChain %_ptr_Function_float %uv %uint_1
-       %1400 = OpLoad %float %1399
+               OpStore %i_2 %1351
+       %1352 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+       %1353 = OpLoad %int %1352
+       %1354 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+               OpStore %1354 %31
+       %1355 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+               OpStore %1355 %1353
+       %1356 = OpCompositeExtract %float %1178 2
+       %1357 = OpCompositeExtract %float %1178 1
+       %1358 = OpCompositeConstruct %v2float %1356 %1357
+       %1359 = OpAccessChain %_ptr_Function_float %color %uint_1
+       %1360 = OpLoad %float %1359
+       %1361 = OpLoad %v2float %uv
+               OpStore %uv %162
+               OpStore %uv %1361
+       %1362 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1363 = OpLoad %float %1362
+       %1364 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1364 %914
+       %1365 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1365 %1363
+       %1366 = OpCompositeExtract %float %1198 1
+       %1367 = OpCompositeExtract %float %1198 0
+       %1368 = OpCompositeConstruct %v2float %1366 %1367
+       %1369 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_6
+       %1370 = OpLoad %int %1369
+       %1371 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_6
+               OpStore %1371 %31
+       %1372 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_6
+               OpStore %1372 %1370
+       %1373 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_6
+       %1374 = OpLoad %int %1373
+       %1375 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_6
+               OpStore %1375 %31
+       %1376 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_6
+               OpStore %1376 %1374
+       %1377 = OpCompositeExtract %float %1245 2
+       %1378 = OpCompositeExtract %float %1245 2
+       %1379 = OpCompositeConstruct %v2float %1377 %1378
+       %1380 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %1380
+       %1381 = OpAccessChain %_ptr_Function_float %color %uint_1
+       %1382 = OpConvertSToF %float %1346
+       %1383 = OpFAdd %float %1382 %1360
+               OpStore %1381 %1383
+       %1384 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1385 = OpLoad %float %1384
+       %1386 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1386 %914
+       %1387 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1387 %1385
+       %1388 = OpCompositeExtract %float %930 0
+       %1389 = OpCompositeConstruct %v2float %float_2 %1388
+       %1390 = OpAccessChain %_ptr_Function_float %color %uint_1
+       %1391 = OpLoad %float %1390
+       %1392 = OpAccessChain %_ptr_Function_float %color %uint_1
+               OpStore %1392 %914
+       %1393 = OpAccessChain %_ptr_Function_float %color %uint_1
+               OpStore %1393 %1391
+               OpBranch %1324
+       %1324 = OpLabel
+       %1394 = OpCompositeExtract %float %935 1
+       %1395 = OpCompositeExtract %float %935 1
+       %1396 = OpCompositeConstruct %v2float %1394 %1395
+       %1397 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1398 = OpLoad %float %1397
+       %1399 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1399 %914
+       %1400 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1400 %1398
        %1401 = OpAccessChain %_ptr_Function_float %uv %uint_1
-               OpStore %1401 %949
-       %1402 = OpAccessChain %_ptr_Function_float %uv %uint_1
-               OpStore %1402 %1400
-       %1403 = OpLoad %int %i_2
-               OpStore %i_2 %31
-               OpStore %i_2 %1403
-       %1404 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-       %1405 = OpLoad %int %1404
-       %1406 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-               OpStore %1406 %31
-       %1407 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-               OpStore %1407 %1405
-       %1408 = OpCompositeExtract %float %1225 2
-       %1409 = OpCompositeExtract %float %1225 1
-       %1410 = OpCompositeConstruct %v2float %1408 %1409
+       %1402 = OpLoad %float %1401
+       %1403 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %1403
+       %1404 = OpCompositeExtract %float %1198 0
+       %1405 = OpCompositeExtract %float %1198 1
+       %1406 = OpCompositeConstruct %v2float %1404 %1405
+       %1407 = OpAccessChain %_ptr_Function_float %uv %31
+       %1408 = OpLoad %float %1407
+       %1409 = OpAccessChain %_ptr_Function_float %uv %31
+               OpStore %1409 %914
+       %1410 = OpAccessChain %_ptr_Function_float %uv %31
+               OpStore %1410 %1408
        %1411 = OpAccessChain %_ptr_Function_float %color %uint_1
        %1412 = OpLoad %float %1411
-       %1413 = OpLoad %v2float %uv
-               OpStore %uv %167
-               OpStore %uv %1413
-       %1414 = OpAccessChain %_ptr_Function_float %color %uint_0
-       %1415 = OpLoad %float %1414
-       %1416 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1416 %949
-       %1417 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1417 %1415
-       %1418 = OpCompositeExtract %float %1245 1
-       %1419 = OpCompositeExtract %float %1245 0
-       %1420 = OpCompositeConstruct %v2float %1418 %1419
-       %1421 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_6
-       %1422 = OpLoad %int %1421
-       %1423 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_6
-               OpStore %1423 %31
-       %1424 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_6
-               OpStore %1424 %1422
-       %1425 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_6
-       %1426 = OpLoad %int %1425
-       %1427 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_6
-               OpStore %1427 %31
-       %1428 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_6
-               OpStore %1428 %1426
-       %1429 = OpCompositeExtract %float %1297 2
-       %1430 = OpCompositeExtract %float %1297 2
-       %1431 = OpCompositeConstruct %v2float %1429 %1430
-       %1432 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %1432
-       %1433 = OpAccessChain %_ptr_Function_float %color %uint_1
-       %1434 = OpConvertSToF %float %1398
-       %1435 = OpFAdd %float %1434 %1412
-               OpStore %1433 %1435
-       %1436 = OpAccessChain %_ptr_Function_float %color %uint_0
-       %1437 = OpLoad %float %1436
-       %1438 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1438 %949
-       %1439 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1439 %1437
-       %1440 = OpCompositeExtract %float %37 1
-       %1441 = OpCompositeExtract %float %967 0
-       %1442 = OpCompositeConstruct %v2float %1440 %1441
-       %1443 = OpAccessChain %_ptr_Function_float %color %uint_1
-       %1444 = OpLoad %float %1443
-       %1445 = OpAccessChain %_ptr_Function_float %color %uint_1
-               OpStore %1445 %949
-       %1446 = OpAccessChain %_ptr_Function_float %color %uint_1
-               OpStore %1446 %1444
-               OpBranch %1376
-       %1376 = OpLabel
-       %1447 = OpCompositeExtract %float %972 1
-       %1448 = OpCompositeExtract %float %972 1
-       %1449 = OpCompositeConstruct %v2float %1447 %1448
-       %1450 = OpAccessChain %_ptr_Function_float %color %uint_0
-       %1451 = OpLoad %float %1450
-       %1452 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1452 %949
-       %1453 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1453 %1451
-       %1454 = OpAccessChain %_ptr_Function_float %uv %uint_1
-       %1455 = OpLoad %float %1454
-       %1456 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %1456
-       %1457 = OpCompositeExtract %float %1245 0
-       %1458 = OpCompositeExtract %float %1245 1
-       %1459 = OpCompositeConstruct %v2float %1457 %1458
-       %1460 = OpAccessChain %_ptr_Function_float %uv %31
-       %1461 = OpLoad %float %1460
-       %1462 = OpAccessChain %_ptr_Function_float %uv %31
-               OpStore %1462 %949
-       %1463 = OpAccessChain %_ptr_Function_float %uv %31
-               OpStore %1463 %1461
-       %1464 = OpAccessChain %_ptr_Function_float %color %uint_1
-       %1465 = OpLoad %float %1464
-       %1466 = OpAccessChain %_ptr_Function_float %color %uint_1
-               OpStore %1466 %949
-       %1467 = OpAccessChain %_ptr_Function_float %color %uint_1
-               OpStore %1467 %1465
-       %1468 = OpCompositeExtract %float %913 0
-       %1469 = OpCompositeExtract %float %913 1
-       %1470 = OpCompositeExtract %float %913 1
-       %1471 = OpCompositeConstruct %v3float %1468 %1469 %1470
-       %1472 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-       %1473 = OpLoad %int %1472
-       %1474 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-               OpStore %1474 %31
-       %1475 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+       %1413 = OpAccessChain %_ptr_Function_float %color %uint_1
+               OpStore %1413 %914
+       %1414 = OpAccessChain %_ptr_Function_float %color %uint_1
+               OpStore %1414 %1412
+       %1415 = OpCompositeExtract %float %878 0
+       %1416 = OpCompositeExtract %float %878 1
+       %1417 = OpCompositeExtract %float %878 1
+       %1418 = OpCompositeConstruct %v3float %1415 %1416 %1417
+       %1419 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+       %1420 = OpLoad %int %1419
+       %1421 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+               OpStore %1421 %31
+       %1422 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+               OpStore %1422 %1420
+       %1423 = OpFOrdGreaterThan %bool %1402 %float_0_75
+               OpSelectionMerge %1424 None
+               OpBranchConditional %1423 %1425 %1424
+       %1425 = OpLabel
+       %1426 = OpLoad %v3float %color
+               OpStore %color %165
+               OpStore %color %1426
+       %1427 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1428 = OpLoad %float %1427
+       %1429 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1429 %914
+       %1430 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1430 %1428
+       %1431 = OpCompositeExtract %float %884 1
+       %1432 = OpCompositeExtract %float %884 0
+       %1433 = OpCompositeExtract %float %884 1
+       %1434 = OpCompositeConstruct %v3float %1431 %1432 %1433
+       %1435 = OpLoad %v3float %color
+               OpStore %color %165
+               OpStore %color %1435
+       %1437 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_7
+       %1438 = OpLoad %int %1437
+       %1439 = OpAccessChain %_ptr_Function_float %uv %uint_0
+       %1440 = OpLoad %float %1439
+       %1441 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1441 %914
+       %1442 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1442 %1440
+       %1443 = OpCompositeExtract %float %1198 0
+       %1444 = OpCompositeExtract %float %1093 1
+       %1445 = OpCompositeExtract %float %1093 0
+       %1446 = OpCompositeConstruct %v3float %1443 %1444 %1445
+       %1447 = OpAccessChain %_ptr_Function_float %color %uint_1
+       %1448 = OpLoad %float %1447
+       %1449 = OpAccessChain %_ptr_Function_float %color %uint_1
+               OpStore %1449 %914
+       %1450 = OpAccessChain %_ptr_Function_float %color %uint_1
+               OpStore %1450 %1448
+       %1451 = OpCompositeExtract %float %1214 0
+       %1452 = OpCompositeExtract %float %162 1
+       %1453 = OpCompositeConstruct %v2float %1451 %1452
+       %1454 = OpAccessChain %_ptr_Private_int %obj %uint_0 %500
+       %1455 = OpLoad %int %1454
+       %1456 = OpAccessChain %_ptr_Private_int %obj %uint_0 %500
+               OpStore %1456 %31
+       %1457 = OpAccessChain %_ptr_Private_int %obj %uint_0 %500
+               OpStore %1457 %1455
+       %1458 = OpAccessChain %_ptr_Function_float %color %uint_1
+       %1459 = OpLoad %float %1458
+       %1460 = OpAccessChain %_ptr_Function_float %color %uint_1
+               OpStore %1460 %914
+       %1461 = OpAccessChain %_ptr_Function_float %color %uint_1
+               OpStore %1461 %1459
+       %1462 = OpCompositeExtract %float %1225 0
+       %1463 = OpCompositeExtract %float %1225 1
+       %1464 = OpCompositeExtract %float %1225 0
+       %1465 = OpCompositeConstruct %v3float %1462 %1463 %1464
+       %1466 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1467 = OpLoad %float %1466
+       %1468 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1468 %914
+       %1469 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1469 %1467
+       %1470 = OpAccessChain %_ptr_Function_float %color %uint_2
+       %1471 = OpLoad %float %1470
+       %1472 = OpAccessChain %_ptr_Function_float %uv %uint_1
+       %1473 = OpLoad %float %1472
+       %1474 = OpAccessChain %_ptr_Function_float %uv %uint_1
+               OpStore %1474 %914
+       %1475 = OpAccessChain %_ptr_Function_float %uv %uint_1
                OpStore %1475 %1473
-       %1476 = OpFOrdGreaterThan %bool %1455 %float_0_75
-               OpSelectionMerge %1477 None
-               OpBranchConditional %1476 %1478 %1477
-       %1478 = OpLabel
-       %1479 = OpLoad %v3float %color
-               OpStore %color %170
-               OpStore %color %1479
-       %1480 = OpAccessChain %_ptr_Function_float %color %uint_0
-       %1481 = OpLoad %float %1480
-       %1482 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1482 %949
-       %1483 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1483 %1481
-       %1484 = OpCompositeExtract %float %920 1
-       %1485 = OpCompositeExtract %float %920 0
-       %1486 = OpCompositeExtract %float %920 1
-       %1487 = OpCompositeConstruct %v3float %1484 %1485 %1486
-       %1488 = OpLoad %v3float %color
-               OpStore %color %170
-               OpStore %color %1488
-       %1490 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_7
-       %1491 = OpLoad %int %1490
-       %1492 = OpAccessChain %_ptr_Function_float %uv %uint_0
-       %1493 = OpLoad %float %1492
-       %1494 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1494 %949
-       %1495 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1495 %1493
-       %1496 = OpCompositeExtract %float %1245 0
-       %1497 = OpCompositeExtract %float %1137 1
-       %1498 = OpCompositeExtract %float %1137 0
-       %1499 = OpCompositeConstruct %v3float %1496 %1497 %1498
-       %1500 = OpAccessChain %_ptr_Function_float %color %uint_1
-       %1501 = OpLoad %float %1500
+       %1476 = OpCompositeExtract %float %864 0
+       %1477 = OpCompositeExtract %float %864 1
+       %1478 = OpCompositeConstruct %v2float %1476 %1477
+       %1479 = OpAccessChain %_ptr_Function_float %uv %uint_0
+       %1480 = OpLoad %float %1479
+       %1481 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1481 %914
+       %1482 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1482 %1480
+       %1483 = OpAccessChain %_ptr_Function_float %uv %uint_1
+       %1484 = OpLoad %float %1483
+       %1485 = OpAccessChain %_ptr_Function_float %uv %uint_1
+               OpStore %1485 %914
+       %1486 = OpAccessChain %_ptr_Function_float %uv %uint_1
+               OpStore %1486 %1484
+       %1487 = OpAccessChain %_ptr_Function_float %uv %uint_1
+       %1488 = OpLoad %float %1487
+       %1489 = OpAccessChain %_ptr_Function_float %uv %uint_1
+               OpStore %1489 %914
+       %1490 = OpAccessChain %_ptr_Function_float %uv %uint_1
+               OpStore %1490 %1488
+       %1491 = OpCompositeExtract %float %1478 1
+       %1492 = OpCompositeExtract %float %1478 1
+       %1493 = OpCompositeExtract %float %1418 2
+       %1494 = OpCompositeConstruct %v3float %1491 %1492 %1493
+       %1495 = OpAccessChain %_ptr_Function_float %color %uint_2
+       %1496 = OpLoad %float %1495
+       %1497 = OpAccessChain %_ptr_Function_float %color %uint_2
+               OpStore %1497 %914
+       %1498 = OpAccessChain %_ptr_Function_float %color %uint_2
+               OpStore %1498 %1496
+       %1499 = OpAccessChain %_ptr_Function_float %color %uint_2
+       %1500 = OpConvertSToF %float %1438
+       %1501 = OpFAdd %float %1500 %1471
+               OpStore %1499 %1501
        %1502 = OpAccessChain %_ptr_Function_float %color %uint_1
-               OpStore %1502 %949
-       %1503 = OpAccessChain %_ptr_Function_float %color %uint_1
-               OpStore %1503 %1501
-       %1504 = OpCompositeExtract %float %1263 0
-       %1505 = OpCompositeExtract %float %1055 1
-       %1506 = OpCompositeConstruct %v2float %1504 %1505
-       %1507 = OpAccessChain %_ptr_Private_int %obj %uint_0 %520
-       %1508 = OpLoad %int %1507
-       %1509 = OpAccessChain %_ptr_Private_int %obj %uint_0 %520
-               OpStore %1509 %31
-       %1510 = OpAccessChain %_ptr_Private_int %obj %uint_0 %520
-               OpStore %1510 %1508
-       %1511 = OpAccessChain %_ptr_Function_float %color %uint_1
-       %1512 = OpLoad %float %1511
-       %1513 = OpAccessChain %_ptr_Function_float %color %uint_1
-               OpStore %1513 %949
-       %1514 = OpAccessChain %_ptr_Function_float %color %uint_1
-               OpStore %1514 %1512
-       %1515 = OpCompositeExtract %float %1274 0
-       %1516 = OpCompositeExtract %float %1274 1
-       %1517 = OpCompositeExtract %float %1274 0
-       %1518 = OpCompositeConstruct %v3float %1515 %1516 %1517
-       %1519 = OpAccessChain %_ptr_Function_float %color %uint_0
-       %1520 = OpLoad %float %1519
-       %1521 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1521 %949
-       %1522 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1522 %1520
-       %1523 = OpAccessChain %_ptr_Function_float %color %uint_2
-       %1524 = OpLoad %float %1523
-       %1525 = OpAccessChain %_ptr_Function_float %uv %uint_1
-       %1526 = OpLoad %float %1525
-       %1527 = OpAccessChain %_ptr_Function_float %uv %uint_1
-               OpStore %1527 %949
-       %1528 = OpAccessChain %_ptr_Function_float %uv %uint_1
+       %1503 = OpLoad %float %1502
+       %1504 = OpAccessChain %_ptr_Function_float %color %uint_1
+               OpStore %1504 %914
+       %1505 = OpAccessChain %_ptr_Function_float %color %uint_1
+               OpStore %1505 %1503
+       %1506 = OpCompositeExtract %float %922 0
+       %1507 = OpCompositeExtract %float %922 2
+       %1508 = OpCompositeConstruct %v2float %1506 %1507
+       %1509 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1510 = OpLoad %float %1509
+       %1511 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1511 %914
+       %1512 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1512 %1510
+               OpBranch %1424
+       %1424 = OpLabel
+       %1513 = OpLoad %int %i_2
+               OpStore %i_2 %31
+               OpStore %i_2 %1513
+       %1514 = OpCompositeExtract %float %896 1
+       %1515 = OpCompositeExtract %float %884 1
+       %1516 = OpCompositeConstruct %v2float %1514 %1515
+       %1517 = OpLoad %v2float %uv
+               OpStore %uv %162
+               OpStore %uv %1517
+       %1519 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
+       %1520 = OpLoad %int %1519
+       %1521 = OpLoad %int %i_2
+               OpStore %i_2 %31
+               OpStore %i_2 %1521
+       %1522 = OpCompositeExtract %float %869 0
+       %1523 = OpCompositeExtract %float %896 2
+       %1524 = OpCompositeConstruct %v2float %1522 %1523
+       %1525 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
+       %1526 = OpLoad %int %1525
+       %1527 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
+               OpStore %1527 %31
+       %1528 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
                OpStore %1528 %1526
-       %1529 = OpCompositeExtract %float %896 0
-       %1530 = OpCompositeExtract %float %896 1
-       %1531 = OpCompositeConstruct %v2float %1529 %1530
-       %1532 = OpAccessChain %_ptr_Function_float %uv %uint_0
-       %1533 = OpLoad %float %1532
-       %1534 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1534 %949
-       %1535 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1535 %1533
-       %1536 = OpAccessChain %_ptr_Function_float %uv %uint_1
-       %1537 = OpLoad %float %1536
-       %1538 = OpAccessChain %_ptr_Function_float %uv %uint_1
-               OpStore %1538 %949
-       %1539 = OpAccessChain %_ptr_Function_float %uv %uint_1
-               OpStore %1539 %1537
-       %1540 = OpAccessChain %_ptr_Function_float %uv %uint_1
-       %1541 = OpLoad %float %1540
-       %1542 = OpAccessChain %_ptr_Function_float %uv %uint_1
-               OpStore %1542 %949
-       %1543 = OpAccessChain %_ptr_Function_float %uv %uint_1
-               OpStore %1543 %1541
-       %1544 = OpCompositeExtract %float %1531 1
-       %1545 = OpCompositeExtract %float %1531 1
-       %1546 = OpCompositeExtract %float %1471 2
-       %1547 = OpCompositeConstruct %v3float %1544 %1545 %1546
-       %1548 = OpAccessChain %_ptr_Function_float %color %uint_2
-       %1549 = OpLoad %float %1548
-       %1550 = OpAccessChain %_ptr_Function_float %color %uint_2
-               OpStore %1550 %949
-       %1551 = OpAccessChain %_ptr_Function_float %color %uint_2
-               OpStore %1551 %1549
-       %1552 = OpAccessChain %_ptr_Function_float %color %uint_2
-       %1553 = OpConvertSToF %float %1491
-       %1554 = OpFAdd %float %1553 %1524
-               OpStore %1552 %1554
-       %1555 = OpAccessChain %_ptr_Function_float %color %uint_1
-       %1556 = OpLoad %float %1555
-       %1557 = OpAccessChain %_ptr_Function_float %color %uint_1
-               OpStore %1557 %949
-       %1558 = OpAccessChain %_ptr_Function_float %color %uint_1
-               OpStore %1558 %1556
-       %1559 = OpCompositeExtract %float %959 0
-       %1560 = OpCompositeExtract %float %959 2
-       %1561 = OpCompositeConstruct %v2float %1559 %1560
-       %1562 = OpAccessChain %_ptr_Function_float %color %uint_0
-       %1563 = OpLoad %float %1562
-       %1564 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1564 %949
-       %1565 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1565 %1563
-               OpBranch %1477
-       %1477 = OpLabel
-       %1566 = OpLoad %int %i_2
-               OpStore %i_2 %31
-               OpStore %i_2 %1566
-       %1567 = OpCompositeExtract %float %931 1
-       %1568 = OpCompositeExtract %float %920 1
-       %1569 = OpCompositeConstruct %v2float %1567 %1568
-       %1570 = OpLoad %v2float %uv
-               OpStore %uv %167
-               OpStore %uv %1570
-       %1572 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
-       %1573 = OpLoad %int %1572
-       %1574 = OpLoad %int %i_2
-               OpStore %i_2 %31
-               OpStore %i_2 %1574
-       %1575 = OpCompositeExtract %float %904 0
-       %1576 = OpCompositeExtract %float %931 2
-       %1577 = OpCompositeConstruct %v2float %1575 %1576
-       %1578 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
-       %1579 = OpLoad %int %1578
-       %1580 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
-               OpStore %1580 %31
-       %1581 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
-               OpStore %1581 %1579
-       %1582 = OpAccessChain %_ptr_Function_float %color %uint_1
-       %1583 = OpLoad %float %1582
-       %1584 = OpAccessChain %_ptr_Function_float %color %uint_1
-               OpStore %1584 %949
-       %1585 = OpAccessChain %_ptr_Function_float %color %uint_1
-               OpStore %1585 %1583
-       %1586 = OpCompositeExtract %float %959 1
-       %1587 = OpCompositeExtract %float %167 0
-       %1588 = OpCompositeConstruct %v2float %1586 %1587
-       %1589 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1529 = OpAccessChain %_ptr_Function_float %color %uint_1
+       %1530 = OpLoad %float %1529
+       %1531 = OpAccessChain %_ptr_Function_float %color %uint_1
+               OpStore %1531 %914
+       %1532 = OpAccessChain %_ptr_Function_float %color %uint_1
+               OpStore %1532 %1530
+       %1533 = OpCompositeExtract %float %922 1
+       %1534 = OpCompositeConstruct %v2float %1533 %914
+       %1535 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1536 = OpLoad %float %1535
+       %1537 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1537 %914
+       %1538 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1538 %1536
+       %1539 = OpCompositeExtract %float %1534 0
+       %1540 = OpCompositeExtract %float %1534 1
+       %1541 = OpCompositeExtract %float %1534 0
+       %1542 = OpCompositeConstruct %v3float %1539 %1540 %1541
+       %1543 = OpAccessChain %_ptr_Function_float %color %uint_2
+       %1544 = OpLoad %float %1543
+       %1545 = OpAccessChain %_ptr_Function_float %color %uint_2
+               OpStore %1545 %914
+       %1546 = OpAccessChain %_ptr_Function_float %color %uint_2
+               OpStore %1546 %1544
+       %1547 = OpAccessChain %_ptr_Function_float %color %uint_2
+       %1548 = OpLoad %float %1547
+       %1549 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1550 = OpLoad %float %1549
+       %1551 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1551 %914
+       %1552 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1552 %1550
+       %1553 = OpCompositeExtract %float %1406 0
+       %1554 = OpCompositeExtract %float %1396 0
+       %1555 = OpCompositeConstruct %v2float %1553 %1554
+       %1556 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+       %1557 = OpLoad %int %1556
+       %1558 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+               OpStore %1558 %31
+       %1559 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+               OpStore %1559 %1557
+       %1560 = OpAccessChain %_ptr_Function_float %uv %uint_1
+       %1561 = OpLoad %float %1560
+       %1562 = OpAccessChain %_ptr_Function_float %uv %uint_1
+               OpStore %1562 %914
+       %1563 = OpAccessChain %_ptr_Function_float %uv %uint_1
+               OpStore %1563 %1561
+       %1564 = OpCompositeExtract %float %162 0
+       %1565 = OpCompositeExtract %float %162 0
+       %1566 = OpCompositeConstruct %v2float %1564 %1565
+       %1567 = OpAccessChain %_ptr_Function_float %color %uint_1
+       %1568 = OpLoad %float %1567
+       %1569 = OpAccessChain %_ptr_Function_float %color %uint_1
+               OpStore %1569 %914
+       %1570 = OpAccessChain %_ptr_Function_float %color %uint_1
+               OpStore %1570 %1568
+       %1571 = OpAccessChain %_ptr_Function_float %color %uint_2
+       %1572 = OpConvertSToF %float %1520
+       %1573 = OpFAdd %float %1548 %1572
+               OpStore %1571 %1573
+       %1574 = OpLoad %v2float %uv
+               OpStore %uv %162
+               OpStore %uv %1574
+       %1575 = OpAccessChain %_ptr_Function_float %uv %uint_0
+       %1576 = OpLoad %float %1575
+       %1577 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1577 %914
+       %1578 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1578 %1576
+       %1579 = OpCompositeExtract %float %162 1
+       %1580 = OpCompositeExtract %float %162 0
+       %1581 = OpCompositeExtract %float %1555 1
+       %1582 = OpCompositeConstruct %v3float %1579 %1580 %1581
+       %1583 = OpAccessChain %_ptr_Function_float %uv %uint_0
+       %1584 = OpLoad %float %1583
+       %1585 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1585 %914
+       %1586 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1586 %1584
+       %1587 = OpAccessChain %_ptr_Function_float %uv %uint_0
+       %1588 = OpLoad %float %1587
+       %1589 = OpAccessChain %_ptr_Function_float %color %uint_1
        %1590 = OpLoad %float %1589
-       %1591 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1591 %949
-       %1592 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1591 = OpAccessChain %_ptr_Function_float %color %uint_1
+               OpStore %1591 %914
+       %1592 = OpAccessChain %_ptr_Function_float %color %uint_1
                OpStore %1592 %1590
-       %1593 = OpCompositeExtract %float %1588 0
-       %1594 = OpCompositeExtract %float %1588 1
-       %1595 = OpCompositeExtract %float %1588 0
+       %1593 = OpCompositeExtract %float %1524 1
+       %1594 = OpCompositeExtract %float %1524 0
+       %1595 = OpCompositeExtract %float %873 2
        %1596 = OpCompositeConstruct %v3float %1593 %1594 %1595
-       %1597 = OpAccessChain %_ptr_Function_float %color %uint_2
+       %1597 = OpAccessChain %_ptr_Function_float %uv %uint_1
        %1598 = OpLoad %float %1597
-       %1599 = OpAccessChain %_ptr_Function_float %color %uint_2
-               OpStore %1599 %949
-       %1600 = OpAccessChain %_ptr_Function_float %color %uint_2
+       %1599 = OpAccessChain %_ptr_Function_float %uv %uint_1
+               OpStore %1599 %914
+       %1600 = OpAccessChain %_ptr_Function_float %uv %uint_1
                OpStore %1600 %1598
-       %1601 = OpAccessChain %_ptr_Function_float %color %uint_2
+       %1601 = OpAccessChain %_ptr_Function_float %uv %uint_1
        %1602 = OpLoad %float %1601
-       %1603 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1603 = OpAccessChain %_ptr_Function_float %uv %uint_1
        %1604 = OpLoad %float %1603
-       %1605 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1605 %949
-       %1606 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1605 = OpAccessChain %_ptr_Function_float %uv %uint_1
+               OpStore %1605 %914
+       %1606 = OpAccessChain %_ptr_Function_float %uv %uint_1
                OpStore %1606 %1604
-       %1607 = OpCompositeExtract %float %1459 0
-       %1608 = OpCompositeExtract %float %1449 0
-       %1609 = OpCompositeConstruct %v2float %1607 %1608
-       %1610 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-       %1611 = OpLoad %int %1610
-       %1612 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-               OpStore %1612 %31
-       %1613 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-               OpStore %1613 %1611
-       %1614 = OpAccessChain %_ptr_Function_float %uv %uint_1
+       %1607 = OpAccessChain %_ptr_Function_float %color %uint_2
+       %1608 = OpLoad %float %1607
+       %1609 = OpAccessChain %_ptr_Function_float %color %uint_2
+               OpStore %1609 %914
+       %1610 = OpAccessChain %_ptr_Function_float %color %uint_2
+               OpStore %1610 %1608
+       %1611 = OpCompositeExtract %float %1308 1
+       %1612 = OpCompositeExtract %float %1308 2
+       %1613 = OpCompositeConstruct %v3float %float_2 %1611 %1612
+       %1614 = OpAccessChain %_ptr_Function_float %color %uint_2
        %1615 = OpLoad %float %1614
-       %1616 = OpAccessChain %_ptr_Function_float %uv %uint_1
-               OpStore %1616 %949
-       %1617 = OpAccessChain %_ptr_Function_float %uv %uint_1
+       %1616 = OpAccessChain %_ptr_Function_float %color %uint_2
+               OpStore %1616 %914
+       %1617 = OpAccessChain %_ptr_Function_float %color %uint_2
                OpStore %1617 %1615
-       %1618 = OpCompositeExtract %float %1055 0
-       %1619 = OpCompositeExtract %float %900 0
-       %1620 = OpCompositeConstruct %v2float %1618 %1619
-       %1621 = OpAccessChain %_ptr_Function_float %color %uint_1
-       %1622 = OpLoad %float %1621
-       %1623 = OpAccessChain %_ptr_Function_float %color %uint_1
-               OpStore %1623 %949
-       %1624 = OpAccessChain %_ptr_Function_float %color %uint_1
-               OpStore %1624 %1622
-       %1625 = OpAccessChain %_ptr_Function_float %color %uint_2
-       %1626 = OpConvertSToF %float %1573
-       %1627 = OpFAdd %float %1602 %1626
-               OpStore %1625 %1627
-       %1628 = OpLoad %v2float %uv
-               OpStore %uv %167
-               OpStore %uv %1628
-       %1629 = OpAccessChain %_ptr_Function_float %uv %uint_0
-       %1630 = OpLoad %float %1629
-       %1631 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1631 %949
-       %1632 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1632 %1630
-       %1633 = OpCompositeExtract %float %1055 1
-       %1634 = OpCompositeExtract %float %1055 0
-       %1635 = OpCompositeExtract %float %1609 1
-       %1636 = OpCompositeConstruct %v3float %1633 %1634 %1635
-       %1637 = OpAccessChain %_ptr_Function_float %uv %uint_0
-       %1638 = OpLoad %float %1637
-       %1639 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1639 %949
-       %1640 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1640 %1638
+       %1618 = OpLoad %int %i_2
+               OpStore %i_2 %31
+               OpStore %i_2 %1618
+       %1619 = OpCompositeExtract %float %1308 2
+       %1620 = OpCompositeExtract %float %1308 1
+       %1621 = OpCompositeConstruct %v2float %1619 %1620
+       %1622 = OpLoad %v3float %color
+               OpStore %color %165
+               OpStore %color %1622
+       %1623 = OpAccessChain %_ptr_Function_float %uv %uint_1
+       %1624 = OpLoad %float %1623
+       %1625 = OpAccessChain %_ptr_Function_float %uv %uint_1
+               OpStore %1625 %914
+       %1626 = OpAccessChain %_ptr_Function_float %uv %uint_1
+               OpStore %1626 %1624
+       %1627 = OpCompositeExtract %float %935 1
+       %1628 = OpCompositeExtract %float %935 1
+       %1629 = OpCompositeExtract %float %935 1
+       %1630 = OpCompositeConstruct %v3float %1627 %1628 %1629
+       %1631 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+       %1632 = OpLoad %int %1631
+       %1633 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+               OpStore %1633 %31
+       %1634 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+               OpStore %1634 %1632
+       %1637 = OpFSub %float %1588 %1602
+       %1635 = OpExtInst %float %1636 FAbs %1637
+       %1638 = OpFOrdLessThan %bool %1635 %float_0_25
+               OpSelectionMerge %1639 None
+               OpBranchConditional %1638 %1640 %1639
+       %1640 = OpLabel
        %1641 = OpAccessChain %_ptr_Function_float %uv %uint_0
        %1642 = OpLoad %float %1641
-       %1643 = OpAccessChain %_ptr_Function_float %color %uint_1
-       %1644 = OpLoad %float %1643
-       %1645 = OpAccessChain %_ptr_Function_float %color %uint_1
-               OpStore %1645 %949
-       %1646 = OpAccessChain %_ptr_Function_float %color %uint_1
-               OpStore %1646 %1644
-       %1647 = OpCompositeExtract %float %1577 1
-       %1648 = OpCompositeExtract %float %1577 0
-       %1649 = OpCompositeExtract %float %908 2
-       %1650 = OpCompositeConstruct %v3float %1647 %1648 %1649
-       %1651 = OpAccessChain %_ptr_Function_float %uv %uint_1
-       %1652 = OpLoad %float %1651
-       %1653 = OpAccessChain %_ptr_Function_float %uv %uint_1
-               OpStore %1653 %949
-       %1654 = OpAccessChain %_ptr_Function_float %uv %uint_1
-               OpStore %1654 %1652
-       %1655 = OpAccessChain %_ptr_Function_float %uv %uint_1
-       %1656 = OpLoad %float %1655
-       %1657 = OpAccessChain %_ptr_Function_float %uv %uint_1
-       %1658 = OpLoad %float %1657
-       %1659 = OpAccessChain %_ptr_Function_float %uv %uint_1
-               OpStore %1659 %949
-       %1660 = OpAccessChain %_ptr_Function_float %uv %uint_1
-               OpStore %1660 %1658
-       %1661 = OpAccessChain %_ptr_Function_float %color %uint_2
+       %1643 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1643 %914
+       %1644 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1644 %1642
+       %1645 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %1645
+       %1646 = OpCompositeExtract %float %1542 2
+       %1647 = OpCompositeExtract %float %1542 0
+       %1648 = OpCompositeExtract %float %873 0
+       %1649 = OpCompositeConstruct %v3float %1646 %1647 %1648
+       %1650 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
+       %1651 = OpLoad %int %1650
+       %1652 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
+               OpStore %1652 %31
+       %1653 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
+               OpStore %1653 %1651
+       %1655 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_9
+       %1656 = OpLoad %int %1655
+       %1657 = OpCompositeExtract %float %1185 1
+       %1658 = OpCompositeExtract %float %1185 1
+       %1659 = OpCompositeExtract %float %1185 1
+       %1660 = OpCompositeConstruct %v3float %1657 %1658 %1659
+       %1661 = OpAccessChain %_ptr_Function_float %uv %uint_1
        %1662 = OpLoad %float %1661
-       %1663 = OpAccessChain %_ptr_Function_float %color %uint_2
-               OpStore %1663 %949
-       %1664 = OpAccessChain %_ptr_Function_float %color %uint_2
+       %1663 = OpAccessChain %_ptr_Function_float %uv %uint_1
+               OpStore %1663 %914
+       %1664 = OpAccessChain %_ptr_Function_float %uv %uint_1
                OpStore %1664 %1662
-       %1665 = OpCompositeExtract %float %37 1
-       %1666 = OpCompositeExtract %float %1360 1
-       %1667 = OpCompositeExtract %float %1360 2
-       %1668 = OpCompositeConstruct %v3float %1665 %1666 %1667
-       %1669 = OpAccessChain %_ptr_Function_float %color %uint_2
-       %1670 = OpLoad %float %1669
-       %1671 = OpAccessChain %_ptr_Function_float %color %uint_2
-               OpStore %1671 %949
-       %1672 = OpAccessChain %_ptr_Function_float %color %uint_2
-               OpStore %1672 %1670
-       %1673 = OpLoad %int %i_2
-               OpStore %i_2 %31
-               OpStore %i_2 %1673
-       %1674 = OpCompositeExtract %float %1360 2
-       %1675 = OpCompositeExtract %float %1360 1
-       %1676 = OpCompositeConstruct %v2float %1674 %1675
-       %1677 = OpLoad %v3float %color
-               OpStore %color %170
-               OpStore %color %1677
-       %1678 = OpAccessChain %_ptr_Function_float %uv %uint_1
-       %1679 = OpLoad %float %1678
-       %1680 = OpAccessChain %_ptr_Function_float %uv %uint_1
-               OpStore %1680 %949
-       %1681 = OpAccessChain %_ptr_Function_float %uv %uint_1
-               OpStore %1681 %1679
-       %1682 = OpCompositeExtract %float %972 1
-       %1683 = OpCompositeExtract %float %972 1
-       %1684 = OpCompositeExtract %float %972 1
-       %1685 = OpCompositeConstruct %v3float %1682 %1683 %1684
-       %1686 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-       %1687 = OpLoad %int %1686
-       %1688 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-               OpStore %1688 %31
-       %1689 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-               OpStore %1689 %1687
-       %1692 = OpFSub %float %1642 %1656
-       %1690 = OpExtInst %float %1691 FAbs %1692
-       %1693 = OpFOrdLessThan %bool %1690 %float_0_25
-               OpSelectionMerge %1694 None
-               OpBranchConditional %1693 %1695 %1694
-       %1695 = OpLabel
-       %1696 = OpAccessChain %_ptr_Function_float %uv %uint_0
-       %1697 = OpLoad %float %1696
-       %1698 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1698 %949
-       %1699 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1699 %1697
-       %1700 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %1700
-       %1701 = OpCompositeExtract %float %1596 2
-       %1702 = OpCompositeExtract %float %1596 0
-       %1703 = OpCompositeExtract %float %908 0
-       %1704 = OpCompositeConstruct %v3float %1701 %1702 %1703
-       %1705 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
-       %1706 = OpLoad %int %1705
-       %1707 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
-               OpStore %1707 %31
-       %1708 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
-               OpStore %1708 %1706
-       %1710 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_9
-       %1711 = OpLoad %int %1710
-       %1712 = OpCompositeExtract %float %1232 1
-       %1713 = OpCompositeExtract %float %1232 1
-       %1714 = OpCompositeExtract %float %1232 1
-       %1715 = OpCompositeConstruct %v3float %1712 %1713 %1714
-       %1716 = OpAccessChain %_ptr_Function_float %uv %uint_1
+       %1665 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1666 = OpLoad %float %1665
+       %1667 = OpAccessChain %_ptr_Function_float %uv %uint_1
+       %1668 = OpLoad %float %1667
+       %1669 = OpAccessChain %_ptr_Function_float %uv %uint_1
+               OpStore %1669 %914
+       %1670 = OpAccessChain %_ptr_Function_float %uv %uint_1
+               OpStore %1670 %1668
+       %1671 = OpCompositeExtract %float %1516 0
+       %1672 = OpCompositeExtract %float %1516 1
+       %1673 = OpCompositeConstruct %v2float %1671 %1672
+       %1674 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1675 = OpLoad %float %1674
+       %1676 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1676 %914
+       %1677 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1677 %1675
+       %1678 = OpLoad %v3float %color
+               OpStore %color %165
+               OpStore %color %1678
+       %1679 = OpCompositeExtract %float %916 0
+       %1680 = OpCompositeExtract %float %916 0
+       %1681 = OpCompositeConstruct %v2float %1679 %1680
+       %1682 = OpLoad %v2float %uv
+               OpStore %uv %162
+               OpStore %uv %1682
+       %1683 = OpAccessChain %_ptr_Function_float %uv %uint_0
+       %1684 = OpLoad %float %1683
+       %1685 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1685 %914
+       %1686 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1686 %1684
+       %1687 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1688 = OpConvertSToF %float %1656
+       %1689 = OpFAdd %float %1688 %1666
+               OpStore %1687 %1689
+       %1690 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1691 = OpLoad %float %1690
+       %1692 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1692 %914
+       %1693 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1693 %1691
+       %1694 = OpCompositeExtract %float %1245 1
+       %1695 = OpCompositeExtract %float %1582 0
+       %1696 = OpCompositeExtract %float %1245 0
+       %1697 = OpCompositeConstruct %v3float %1694 %1695 %1696
+       %1698 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1699 = OpLoad %float %1698
+       %1700 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1700 %914
+       %1701 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1701 %1699
+               OpBranch %1639
+       %1639 = OpLabel
+       %1702 = OpAccessChain %_ptr_Function_float %uv %uint_1
+       %1703 = OpLoad %float %1702
+       %1704 = OpAccessChain %_ptr_Function_float %uv %uint_1
+               OpStore %1704 %914
+       %1705 = OpAccessChain %_ptr_Function_float %uv %uint_1
+               OpStore %1705 %1703
+       %1706 = OpLoad %v3float %color
+       %1707 = OpAccessChain %_ptr_Function_float %uv %31
+       %1708 = OpLoad %float %1707
+       %1709 = OpAccessChain %_ptr_Function_float %uv %31
+               OpStore %1709 %914
+       %1710 = OpAccessChain %_ptr_Function_float %uv %31
+               OpStore %1710 %1708
+       %1711 = OpCompositeExtract %float %162 0
+       %1712 = OpCompositeExtract %float %162 0
+       %1713 = OpCompositeExtract %float %162 1
+       %1714 = OpCompositeConstruct %v3float %1711 %1712 %1713
+       %1715 = OpExtInst %v3float %1636 Normalize %1706
+       %1716 = OpAccessChain %_ptr_Function_float %uv %uint_0
        %1717 = OpLoad %float %1716
-       %1718 = OpAccessChain %_ptr_Function_float %uv %uint_1
-               OpStore %1718 %949
-       %1719 = OpAccessChain %_ptr_Function_float %uv %uint_1
+       %1718 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1718 %914
+       %1719 = OpAccessChain %_ptr_Function_float %uv %uint_0
                OpStore %1719 %1717
-       %1720 = OpAccessChain %_ptr_Function_float %color %uint_0
-       %1721 = OpLoad %float %1720
-       %1722 = OpAccessChain %_ptr_Function_float %uv %uint_1
+       %1720 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %1720
+       %1721 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %1721
+       %1722 = OpAccessChain %_ptr_Function_float %color %uint_1
        %1723 = OpLoad %float %1722
-       %1724 = OpAccessChain %_ptr_Function_float %uv %uint_1
-               OpStore %1724 %949
-       %1725 = OpAccessChain %_ptr_Function_float %uv %uint_1
+       %1724 = OpAccessChain %_ptr_Function_float %color %uint_1
+               OpStore %1724 %914
+       %1725 = OpAccessChain %_ptr_Function_float %color %uint_1
                OpStore %1725 %1723
-       %1726 = OpCompositeExtract %float %1569 0
-       %1727 = OpCompositeExtract %float %1569 1
+       %1726 = OpCompositeExtract %float %1555 1
+       %1727 = OpCompositeExtract %float %1714 1
        %1728 = OpCompositeConstruct %v2float %1726 %1727
-       %1729 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1729 = OpAccessChain %_ptr_Function_float %color %uint_1
        %1730 = OpLoad %float %1729
-       %1731 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1731 %949
-       %1732 = OpAccessChain %_ptr_Function_float %color %uint_0
+       %1731 = OpAccessChain %_ptr_Function_float %color %uint_1
+               OpStore %1731 %914
+       %1732 = OpAccessChain %_ptr_Function_float %color %uint_1
                OpStore %1732 %1730
-       %1733 = OpLoad %v3float %color
-               OpStore %color %170
-               OpStore %color %1733
-       %1734 = OpCompositeExtract %float %953 0
-       %1735 = OpCompositeExtract %float %953 0
-       %1736 = OpCompositeConstruct %v2float %1734 %1735
-       %1737 = OpLoad %v2float %uv
-               OpStore %uv %167
-               OpStore %uv %1737
-       %1738 = OpAccessChain %_ptr_Function_float %uv %uint_0
-       %1739 = OpLoad %float %1738
-       %1740 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1740 %949
-       %1741 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1741 %1739
-       %1742 = OpCompositeExtract %float %167 0
-       %1743 = OpCompositeExtract %float %167 0
-       %1744 = OpCompositeExtract %float %167 1
-       %1745 = OpCompositeConstruct %v3float %1742 %1743 %1744
-       %1746 = OpAccessChain %_ptr_Function_float %color %uint_0
-       %1747 = OpConvertSToF %float %1711
-       %1748 = OpFAdd %float %1747 %1721
-               OpStore %1746 %1748
-       %1749 = OpAccessChain %_ptr_Function_float %color %uint_0
-       %1750 = OpLoad %float %1749
-       %1751 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1751 %949
+       %1733 = OpCompositeExtract %float %1715 0
+       %1734 = OpCompositeExtract %float %1715 1
+       %1735 = OpCompositeExtract %float %1715 2
+       %1736 = OpCompositeConstruct %v4float %1733 %1734 %1735 %float_1
+       %1737 = OpAccessChain %_ptr_Function_float %uv %uint_1
+       %1738 = OpLoad %float %1737
+       %1739 = OpAccessChain %_ptr_Function_float %uv %uint_1
+               OpStore %1739 %914
+       %1740 = OpAccessChain %_ptr_Function_float %uv %uint_1
+               OpStore %1740 %1738
+       %1741 = OpCompositeExtract %float %1728 1
+       %1742 = OpCompositeConstruct %v3float %float_2 %float_2 %1741
+       %1743 = OpAccessChain %_ptr_Function_float %uv %uint_0
+       %1744 = OpLoad %float %1743
+       %1745 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1745 %914
+       %1746 = OpAccessChain %_ptr_Function_float %uv %uint_0
+               OpStore %1746 %1744
+               OpStore %x_GLF_color %1736
+       %1747 = OpLoad %QuicksortObject %obj
+               OpStore %obj %97
+               OpStore %obj %1747
+       %1748 = OpCompositeExtract %float %1736 3
+       %1749 = OpCompositeExtract %float %1736 1
+       %1750 = OpCompositeExtract %float %1406 0
+       %1751 = OpCompositeConstruct %v3float %1748 %1749 %1750
        %1752 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1752 %1750
-       %1753 = OpCompositeExtract %float %1297 1
-       %1754 = OpCompositeExtract %float %1636 0
-       %1755 = OpCompositeExtract %float %1297 0
-       %1756 = OpCompositeConstruct %v3float %1753 %1754 %1755
-       %1757 = OpAccessChain %_ptr_Function_float %color %uint_0
-       %1758 = OpLoad %float %1757
-       %1759 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1759 %949
-       %1760 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1760 %1758
-               OpBranch %1694
-       %1694 = OpLabel
-       %1761 = OpAccessChain %_ptr_Function_float %uv %uint_1
-       %1762 = OpLoad %float %1761
-       %1763 = OpAccessChain %_ptr_Function_float %uv %uint_1
-               OpStore %1763 %949
-       %1764 = OpAccessChain %_ptr_Function_float %uv %uint_1
-               OpStore %1764 %1762
-       %1765 = OpLoad %v3float %color
-       %1766 = OpAccessChain %_ptr_Function_float %uv %31
-       %1767 = OpLoad %float %1766
-       %1768 = OpAccessChain %_ptr_Function_float %uv %31
-               OpStore %1768 %949
-       %1769 = OpAccessChain %_ptr_Function_float %uv %31
-               OpStore %1769 %1767
-       %1770 = OpCompositeExtract %float %900 0
-       %1771 = OpCompositeExtract %float %892 0
-       %1772 = OpCompositeExtract %float %892 1
-       %1773 = OpCompositeConstruct %v3float %1770 %1771 %1772
-       %1774 = OpExtInst %v3float %1691 Normalize %1765
-       %1775 = OpAccessChain %_ptr_Function_float %uv %uint_0
-       %1776 = OpLoad %float %1775
-       %1777 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1777 %949
-       %1778 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1778 %1776
-       %1779 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %1779
-       %1780 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %1780
-       %1781 = OpAccessChain %_ptr_Function_float %color %uint_1
-       %1782 = OpLoad %float %1781
-       %1783 = OpAccessChain %_ptr_Function_float %color %uint_1
-               OpStore %1783 %949
-       %1784 = OpAccessChain %_ptr_Function_float %color %uint_1
-               OpStore %1784 %1782
-       %1785 = OpCompositeExtract %float %1609 1
-       %1786 = OpCompositeExtract %float %1773 1
-       %1787 = OpCompositeConstruct %v2float %1785 %1786
-       %1788 = OpAccessChain %_ptr_Function_float %color %uint_1
-       %1789 = OpLoad %float %1788
-       %1790 = OpAccessChain %_ptr_Function_float %color %uint_1
-               OpStore %1790 %949
-       %1791 = OpAccessChain %_ptr_Function_float %color %uint_1
-               OpStore %1791 %1789
-       %1792 = OpCompositeExtract %float %1774 0
-       %1793 = OpCompositeExtract %float %1774 1
-       %1794 = OpCompositeExtract %float %1774 2
-       %1795 = OpCompositeConstruct %v4float %1792 %1793 %1794 %float_1
-       %1796 = OpAccessChain %_ptr_Function_float %uv %uint_1
-       %1797 = OpLoad %float %1796
-       %1798 = OpAccessChain %_ptr_Function_float %uv %uint_1
-               OpStore %1798 %949
-       %1799 = OpAccessChain %_ptr_Function_float %uv %uint_1
-               OpStore %1799 %1797
-       %1800 = OpCompositeExtract %float %37 1
-       %1801 = OpCompositeExtract %float %37 1
-       %1802 = OpCompositeExtract %float %1787 1
-       %1803 = OpCompositeConstruct %v3float %1800 %1801 %1802
-       %1804 = OpAccessChain %_ptr_Function_float %uv %uint_0
-       %1805 = OpLoad %float %1804
-       %1806 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1806 %949
-       %1807 = OpAccessChain %_ptr_Function_float %uv %uint_0
-               OpStore %1807 %1805
-               OpStore %x_GLF_color %1795
-       %1808 = OpLoad %QuicksortObject %obj
-               OpStore %obj %102
-               OpStore %obj %1808
-       %1809 = OpCompositeExtract %float %1795 3
-       %1810 = OpCompositeExtract %float %1795 1
-       %1811 = OpCompositeExtract %float %1459 0
-       %1812 = OpCompositeConstruct %v3float %1809 %1810 %1811
-       %1813 = OpAccessChain %_ptr_Function_float %color %uint_0
-       %1814 = OpLoad %float %1813
-       %1815 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1815 %949
-       %1816 = OpAccessChain %_ptr_Function_float %color %uint_0
-               OpStore %1816 %1814
+       %1753 = OpLoad %float %1752
+       %1754 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1754 %914
+       %1755 = OpAccessChain %_ptr_Function_float %color %uint_0
+               OpStore %1755 %1753
                OpReturn
                OpFunctionEnd
- %main_inner = OpFunction %main_out None %1817
+ %main_inner = OpFunction %main_out None %1756
 %gl_FragCoord_param = OpFunctionParameter %v4float
-       %1821 = OpLabel
+       %1760 = OpLabel
                OpStore %gl_FragCoord %gl_FragCoord_param
-       %1822 = OpFunctionCall %void %main_1
-       %1823 = OpLoad %v4float %x_GLF_color
-       %1824 = OpCompositeConstruct %main_out %1823
-               OpReturnValue %1824
+       %1761 = OpFunctionCall %void %main_1
+       %1762 = OpLoad %v4float %x_GLF_color
+       %1763 = OpCompositeConstruct %main_out %1762
+               OpReturnValue %1763
                OpFunctionEnd
-       %main = OpFunction %void None %418
-       %1826 = OpLabel
-       %1828 = OpLoad %v4float %gl_FragCoord_param_1
-       %1827 = OpFunctionCall %main_out %main_inner %1828
-       %1829 = OpCompositeExtract %v4float %1827 0
-               OpStore %x_GLF_color_1_1 %1829
+       %main = OpFunction %void None %404
+       %1765 = OpLabel
+       %1767 = OpLoad %v4float %gl_FragCoord_param_1
+       %1766 = OpFunctionCall %main_out %main_inner %1767
+       %1768 = OpCompositeExtract %v4float %1766 0
+               OpStore %x_GLF_color_1_1 %1768
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/bug/tint/948.wgsl.expected.glsl b/test/tint/bug/tint/948.wgsl.expected.glsl
index c4742f4..bdeba4b 100644
--- a/test/tint/bug/tint/948.wgsl.expected.glsl
+++ b/test/tint/bug/tint/948.wgsl.expected.glsl
@@ -67,7 +67,7 @@
   vec4 x_40 = texture(frameMapTexture_frameMapSampler, vec2(fX, 0.0f), 0.0f);
   vec4 x_47 = texture(frameMapTexture_frameMapSampler, vec2(fX, 0.25f), 0.0f);
   vec4 x_54 = texture(frameMapTexture_frameMapSampler, vec2(fX, 0.5f), 0.0f);
-  return mat4(vec4(x_40.x, x_40.y, x_40.z, x_40.w), vec4(x_47.x, x_47.y, x_47.z, x_47.w), vec4(x_54.x, x_54.y, x_54.z, x_54.w), vec4(vec4(0.0f).x, vec4(0.0f).y, vec4(0.0f).z, vec4(0.0f).w));
+  return mat4(vec4(x_40.x, x_40.y, x_40.z, x_40.w), vec4(x_47.x, x_47.y, x_47.z, x_47.w), vec4(x_54.x, x_54.y, x_54.z, x_54.w), vec4(0.0f));
 }
 
 uniform highp sampler2D tileMapsTexture1_tileMapsSampler;
diff --git a/test/tint/bug/tint/948.wgsl.expected.hlsl b/test/tint/bug/tint/948.wgsl.expected.hlsl
index 02a6716..1864ff1 100644
--- a/test/tint/bug/tint/948.wgsl.expected.hlsl
+++ b/test/tint/bug/tint/948.wgsl.expected.hlsl
@@ -39,7 +39,7 @@
   const float4 x_40 = frameMapTexture.SampleBias(frameMapSampler, float2(fX, 0.0f), 0.0f);
   const float4 x_47 = frameMapTexture.SampleBias(frameMapSampler, float2(fX, 0.25f), 0.0f);
   const float4 x_54 = frameMapTexture.SampleBias(frameMapSampler, float2(fX, 0.5f), 0.0f);
-  return float4x4(float4(x_40.x, x_40.y, x_40.z, x_40.w), float4(x_47.x, x_47.y, x_47.z, x_47.w), float4(x_54.x, x_54.y, x_54.z, x_54.w), float4((0.0f).xxxx.x, (0.0f).xxxx.y, (0.0f).xxxx.z, (0.0f).xxxx.w));
+  return float4x4(float4(x_40.x, x_40.y, x_40.z, x_40.w), float4(x_47.x, x_47.y, x_47.z, x_47.w), float4(x_54.x, x_54.y, x_54.z, x_54.w), (0.0f).xxxx);
 }
 
 void main_1() {
diff --git a/test/tint/bug/tint/948.wgsl.expected.msl b/test/tint/bug/tint/948.wgsl.expected.msl
index b36650f..ad55625 100644
--- a/test/tint/bug/tint/948.wgsl.expected.msl
+++ b/test/tint/bug/tint/948.wgsl.expected.msl
@@ -61,7 +61,7 @@
   float4 const x_47 = tint_symbol_6.sample(tint_symbol_7, float2(x_44, 0.25f), bias(0.0f));
   float const x_51 = fX;
   float4 const x_54 = tint_symbol_6.sample(tint_symbol_7, float2(x_51, 0.5f), bias(0.0f));
-  return float4x4(float4(x_40[0], x_40[1], x_40[2], x_40[3]), float4(x_47[0], x_47[1], x_47[2], x_47[3]), float4(x_54[0], x_54[1], x_54[2], x_54[3]), float4(float4(0.0f)[0], float4(0.0f)[1], float4(0.0f)[2], float4(0.0f)[3]));
+  return float4x4(float4(x_40[0], x_40[1], x_40[2], x_40[3]), float4(x_47[0], x_47[1], x_47[2], x_47[3]), float4(x_54[0], x_54[1], x_54[2], x_54[3]), float4(0.0f));
 }
 
 void main_1(thread float2* const tint_symbol_8, const constant LeftOver* const tint_symbol_9, texture2d<float, access::sample> tint_symbol_10, sampler tint_symbol_11, texture2d<float, access::sample> tint_symbol_12, texture2d<float, access::sample> tint_symbol_13, sampler tint_symbol_14, texture2d<float, access::sample> tint_symbol_16, sampler tint_symbol_17, texture2d<float, access::sample> tint_symbol_18, sampler tint_symbol_19, thread float4* const tint_symbol_20) {
diff --git a/test/tint/bug/tint/948.wgsl.expected.spvasm b/test/tint/bug/tint/948.wgsl.expected.spvasm
index a3e66de..91c81d8 100644
--- a/test/tint/bug/tint/948.wgsl.expected.spvasm
+++ b/test/tint/bug/tint/948.wgsl.expected.spvasm
@@ -13,10 +13,10 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 383
+; Bound: 378
 ; Schema: 0
                OpCapability Shader
-        %136 = OpExtInstImport "GLSL.std.450"
+        %131 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Fragment %main "main" %tUV_param_1 %tileID_1_param_1 %levelUnits_param_1 %stageUnits_1_param_1 %vPosition_param_1 %vUV_param_1 %glFragColor_1_1
                OpExecutionMode %main OriginUpperLeft
@@ -184,24 +184,24 @@
  %float_0_25 = OpConstant %float 0.25
   %float_0_5 = OpConstant %float 0.5
        %void = OpTypeVoid
-        %104 = OpTypeFunction %void
+         %99 = OpTypeFunction %void
 %_ptr_Function_v4float = OpTypePointer Function %v4float
 %_ptr_Function_v2float = OpTypePointer Function %v2float
         %int = OpTypeInt 32 1
 %_ptr_Function_int = OpTypePointer Function %int
-        %119 = OpConstantNull %int
+        %114 = OpConstantNull %int
 %_ptr_Function_mat4v4float = OpTypePointer Function %mat4v4float
-        %125 = OpConstantNull %mat4v4float
+        %120 = OpConstantNull %mat4v4float
 %_ptr_Function_v3float = OpTypePointer Function %v3float
      %uint_1 = OpConstant %uint 1
     %float_1 = OpConstant %float 1
      %uint_5 = OpConstant %uint 5
 %_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-        %149 = OpConstantComposite %v2float %float_1 %float_1
+        %144 = OpConstantComposite %v2float %float_1 %float_1
      %uint_4 = OpConstant %uint 4
       %int_2 = OpConstant %int 2
        %bool = OpTypeBool
-        %181 = OpConstantComposite %v2float %float_0_5 %float_0_5
+        %176 = OpConstantComposite %v2float %float_0_5 %float_0_5
      %uint_0 = OpConstant %uint 0
      %uint_2 = OpConstant %uint 2
     %float_8 = OpConstant %float 8
@@ -211,7 +211,7 @@
      %uint_8 = OpConstant %uint 8
 %_ptr_Uniform_v3float = OpTypePointer Uniform %v3float
    %main_out = OpTypeStruct %v4float
-        %360 = OpTypeFunction %main_out %v2float %v2float %v2float %v2float %v3float %v2float
+        %355 = OpTypeFunction %main_out %v2float %v2float %v2float %v2float %v3float %v2float
 %getFrameData_f1_ = OpFunction %mat4v4float None %49
     %frameID = OpFunctionParameter %_ptr_Function_float
          %53 = OpLabel
@@ -254,27 +254,22 @@
          %95 = OpCompositeExtract %float %77 2
          %96 = OpCompositeExtract %float %77 3
          %97 = OpCompositeConstruct %v4float %93 %94 %95 %96
-         %98 = OpCompositeExtract %float %15 0
-         %99 = OpCompositeExtract %float %15 1
-        %100 = OpCompositeExtract %float %15 2
-        %101 = OpCompositeExtract %float %15 3
-        %102 = OpCompositeConstruct %v4float %98 %99 %100 %101
-        %103 = OpCompositeConstruct %mat4v4float %87 %92 %97 %102
-               OpReturnValue %103
+         %98 = OpCompositeConstruct %mat4v4float %87 %92 %97 %15
+               OpReturnValue %98
                OpFunctionEnd
-     %main_1 = OpFunction %void None %104
-        %107 = OpLabel
+     %main_1 = OpFunction %void None %99
+        %102 = OpLabel
       %color = OpVariable %_ptr_Function_v4float Function %15
      %tileUV = OpVariable %_ptr_Function_v2float Function %29
      %tileID = OpVariable %_ptr_Function_v2float Function %29
  %sheetUnits = OpVariable %_ptr_Function_v2float Function %29
 %spriteUnits = OpVariable %_ptr_Function_float Function %37
  %stageUnits = OpVariable %_ptr_Function_v2float Function %29
-          %i = OpVariable %_ptr_Function_int Function %119
+          %i = OpVariable %_ptr_Function_int Function %114
   %frameID_1 = OpVariable %_ptr_Function_float Function %37
 %animationData = OpVariable %_ptr_Function_v4float Function %15
           %f = OpVariable %_ptr_Function_float Function %37
-  %frameData = OpVariable %_ptr_Function_mat4v4float Function %125
+  %frameData = OpVariable %_ptr_Function_mat4v4float Function %120
       %param = OpVariable %_ptr_Function_float Function %37
   %frameSize = OpVariable %_ptr_Function_v2float Function %29
    %offset_1 = OpVariable %_ptr_Function_v2float Function %29
@@ -283,309 +278,309 @@
       %alpha = OpVariable %_ptr_Function_float Function %37
       %mixed = OpVariable %_ptr_Function_v3float Function %47
                OpStore %color %15
-        %134 = OpLoad %v2float %tUV
-        %135 = OpExtInst %v2float %136 Fract %134
-               OpStore %tileUV %135
-        %138 = OpAccessChain %_ptr_Function_float %tileUV %uint_1
-        %139 = OpLoad %float %138
-        %140 = OpAccessChain %_ptr_Function_float %tileUV %uint_1
-        %142 = OpFSub %float %float_1 %139
-               OpStore %140 %142
-        %143 = OpLoad %v2float %tUV
-        %144 = OpExtInst %v2float %136 Floor %143
-               OpStore %tileID %144
-        %147 = OpAccessChain %_ptr_Uniform_v2float %x_20 %uint_5
-        %148 = OpLoad %v2float %147
-        %150 = OpFDiv %v2float %149 %148
-               OpStore %sheetUnits %150
-        %151 = OpAccessChain %_ptr_Uniform_float %x_20 %uint_7
-        %152 = OpLoad %float %151
-        %153 = OpFDiv %float %float_1 %152
-               OpStore %spriteUnits %153
-        %155 = OpAccessChain %_ptr_Uniform_v2float %x_20 %uint_4
-        %156 = OpLoad %v2float %155
-        %157 = OpFDiv %v2float %149 %156
-               OpStore %stageUnits %157
-               OpStore %i %119
-               OpBranch %158
-        %158 = OpLabel
-               OpLoopMerge %159 %160 None
+        %129 = OpLoad %v2float %tUV
+        %130 = OpExtInst %v2float %131 Fract %129
+               OpStore %tileUV %130
+        %133 = OpAccessChain %_ptr_Function_float %tileUV %uint_1
+        %134 = OpLoad %float %133
+        %135 = OpAccessChain %_ptr_Function_float %tileUV %uint_1
+        %137 = OpFSub %float %float_1 %134
+               OpStore %135 %137
+        %138 = OpLoad %v2float %tUV
+        %139 = OpExtInst %v2float %131 Floor %138
+               OpStore %tileID %139
+        %142 = OpAccessChain %_ptr_Uniform_v2float %x_20 %uint_5
+        %143 = OpLoad %v2float %142
+        %145 = OpFDiv %v2float %144 %143
+               OpStore %sheetUnits %145
+        %146 = OpAccessChain %_ptr_Uniform_float %x_20 %uint_7
+        %147 = OpLoad %float %146
+        %148 = OpFDiv %float %float_1 %147
+               OpStore %spriteUnits %148
+        %150 = OpAccessChain %_ptr_Uniform_v2float %x_20 %uint_4
+        %151 = OpLoad %v2float %150
+        %152 = OpFDiv %v2float %144 %151
+               OpStore %stageUnits %152
+               OpStore %i %114
+               OpBranch %153
+        %153 = OpLabel
+               OpLoopMerge %154 %155 None
+               OpBranch %156
+        %156 = OpLabel
+        %157 = OpLoad %int %i
+        %159 = OpSLessThan %bool %157 %int_2
+               OpSelectionMerge %161 None
+               OpBranchConditional %159 %162 %163
+        %162 = OpLabel
                OpBranch %161
+        %163 = OpLabel
+               OpBranch %154
         %161 = OpLabel
-        %162 = OpLoad %int %i
-        %164 = OpSLessThan %bool %162 %int_2
-               OpSelectionMerge %166 None
-               OpBranchConditional %164 %167 %168
+        %164 = OpLoad %int %i
+               OpSelectionMerge %165 None
+               OpSwitch %164 %166 1 %167 0 %168
         %167 = OpLabel
-               OpBranch %166
+        %169 = OpLoad %v2float %tileID
+        %170 = OpAccessChain %_ptr_Uniform_v2float %x_20 %uint_4
+        %171 = OpLoad %v2float %170
+        %173 = OpLoad %26 %tileMapsSampler
+        %174 = OpLoad %23 %tileMapsTexture1
+        %175 = OpSampledImage %66 %174 %173
+        %177 = OpFAdd %v2float %169 %176
+        %178 = OpFDiv %v2float %177 %171
+        %172 = OpImageSampleImplicitLod %v4float %175 %178 Bias %37
+        %179 = OpCompositeExtract %float %172 0
+               OpStore %frameID_1 %179
+               OpBranch %165
         %168 = OpLabel
-               OpBranch %159
+        %180 = OpLoad %v2float %tileID
+        %181 = OpAccessChain %_ptr_Uniform_v2float %x_20 %uint_4
+        %182 = OpLoad %v2float %181
+        %184 = OpLoad %26 %tileMapsSampler
+        %185 = OpLoad %23 %tileMapsTexture0
+        %186 = OpSampledImage %66 %185 %184
+        %187 = OpFAdd %v2float %180 %176
+        %188 = OpFDiv %v2float %187 %182
+        %183 = OpImageSampleImplicitLod %v4float %186 %188 Bias %37
+        %189 = OpCompositeExtract %float %183 0
+               OpStore %frameID_1 %189
+               OpBranch %165
         %166 = OpLabel
-        %169 = OpLoad %int %i
-               OpSelectionMerge %170 None
-               OpSwitch %169 %171 1 %172 0 %173
-        %172 = OpLabel
-        %174 = OpLoad %v2float %tileID
-        %175 = OpAccessChain %_ptr_Uniform_v2float %x_20 %uint_4
-        %176 = OpLoad %v2float %175
-        %178 = OpLoad %26 %tileMapsSampler
-        %179 = OpLoad %23 %tileMapsTexture1
-        %180 = OpSampledImage %66 %179 %178
-        %182 = OpFAdd %v2float %174 %181
-        %183 = OpFDiv %v2float %182 %176
-        %177 = OpImageSampleImplicitLod %v4float %180 %183 Bias %37
-        %184 = OpCompositeExtract %float %177 0
-               OpStore %frameID_1 %184
-               OpBranch %170
-        %173 = OpLabel
-        %185 = OpLoad %v2float %tileID
-        %186 = OpAccessChain %_ptr_Uniform_v2float %x_20 %uint_4
-        %187 = OpLoad %v2float %186
-        %189 = OpLoad %26 %tileMapsSampler
-        %190 = OpLoad %23 %tileMapsTexture0
-        %191 = OpSampledImage %66 %190 %189
-        %192 = OpFAdd %v2float %185 %181
-        %193 = OpFDiv %v2float %192 %187
-        %188 = OpImageSampleImplicitLod %v4float %191 %193 Bias %37
-        %194 = OpCompositeExtract %float %188 0
-               OpStore %frameID_1 %194
-               OpBranch %170
-        %171 = OpLabel
-               OpBranch %170
-        %170 = OpLabel
-        %195 = OpLoad %float %frameID_1
-        %196 = OpAccessChain %_ptr_Uniform_float %x_20 %uint_7
-        %197 = OpLoad %float %196
-        %199 = OpLoad %26 %animationMapSampler
-        %200 = OpLoad %23 %animationMapTexture
-        %201 = OpSampledImage %66 %200 %199
-        %202 = OpFAdd %float %195 %float_0_5
-        %203 = OpFDiv %float %202 %197
-        %204 = OpCompositeConstruct %v2float %203 %37
-        %198 = OpImageSampleImplicitLod %v4float %201 %204 Bias %37
-               OpStore %animationData %198
-        %205 = OpAccessChain %_ptr_Function_float %animationData %uint_1
-        %206 = OpLoad %float %205
-        %207 = OpFOrdGreaterThan %bool %206 %37
-               OpSelectionMerge %208 None
-               OpBranchConditional %207 %209 %208
-        %209 = OpLabel
-        %211 = OpAccessChain %_ptr_Uniform_float %x_20 %uint_0
-        %212 = OpLoad %float %211
-        %214 = OpAccessChain %_ptr_Function_float %animationData %uint_2
-        %215 = OpLoad %float %214
-        %216 = OpFMul %float %212 %215
-        %217 = OpFRem %float %216 %float_1
-               OpStore %mt %217
+               OpBranch %165
+        %165 = OpLabel
+        %190 = OpLoad %float %frameID_1
+        %191 = OpAccessChain %_ptr_Uniform_float %x_20 %uint_7
+        %192 = OpLoad %float %191
+        %194 = OpLoad %26 %animationMapSampler
+        %195 = OpLoad %23 %animationMapTexture
+        %196 = OpSampledImage %66 %195 %194
+        %197 = OpFAdd %float %190 %float_0_5
+        %198 = OpFDiv %float %197 %192
+        %199 = OpCompositeConstruct %v2float %198 %37
+        %193 = OpImageSampleImplicitLod %v4float %196 %199 Bias %37
+               OpStore %animationData %193
+        %200 = OpAccessChain %_ptr_Function_float %animationData %uint_1
+        %201 = OpLoad %float %200
+        %202 = OpFOrdGreaterThan %bool %201 %37
+               OpSelectionMerge %203 None
+               OpBranchConditional %202 %204 %203
+        %204 = OpLabel
+        %206 = OpAccessChain %_ptr_Uniform_float %x_20 %uint_0
+        %207 = OpLoad %float %206
+        %209 = OpAccessChain %_ptr_Function_float %animationData %uint_2
+        %210 = OpLoad %float %209
+        %211 = OpFMul %float %207 %210
+        %212 = OpFRem %float %211 %float_1
+               OpStore %mt %212
                OpStore %f %37
-               OpBranch %218
-        %218 = OpLabel
-               OpLoopMerge %219 %220 None
-               OpBranch %221
+               OpBranch %213
+        %213 = OpLabel
+               OpLoopMerge %214 %215 None
+               OpBranch %216
+        %216 = OpLabel
+        %217 = OpLoad %float %f
+        %219 = OpFOrdLessThan %bool %217 %float_8
+               OpSelectionMerge %220 None
+               OpBranchConditional %219 %221 %222
         %221 = OpLabel
-        %222 = OpLoad %float %f
-        %224 = OpFOrdLessThan %bool %222 %float_8
-               OpSelectionMerge %225 None
-               OpBranchConditional %224 %226 %227
-        %226 = OpLabel
-               OpBranch %225
-        %227 = OpLabel
-               OpBranch %219
-        %225 = OpLabel
-        %228 = OpAccessChain %_ptr_Function_float %animationData %uint_1
-        %229 = OpLoad %float %228
-        %230 = OpLoad %float %mt
-        %231 = OpFOrdGreaterThan %bool %229 %230
-               OpSelectionMerge %232 None
-               OpBranchConditional %231 %233 %232
-        %233 = OpLabel
-        %234 = OpAccessChain %_ptr_Function_float %animationData %uint_0
-        %235 = OpLoad %float %234
-               OpStore %frameID_1 %235
-               OpBranch %219
-        %232 = OpLabel
-        %236 = OpLoad %float %frameID_1
-        %237 = OpAccessChain %_ptr_Uniform_float %x_20 %uint_7
-        %238 = OpLoad %float %237
-        %239 = OpLoad %float %f
-        %241 = OpLoad %26 %animationMapSampler
-        %242 = OpLoad %23 %animationMapTexture
-        %243 = OpSampledImage %66 %242 %241
-        %244 = OpFAdd %float %236 %float_0_5
-        %245 = OpFDiv %float %244 %238
-        %247 = OpFMul %float %float_0_125 %239
-        %248 = OpCompositeConstruct %v2float %245 %247
-        %240 = OpImageSampleImplicitLod %v4float %243 %248 Bias %37
-               OpStore %animationData %240
                OpBranch %220
+        %222 = OpLabel
+               OpBranch %214
         %220 = OpLabel
-        %249 = OpLoad %float %f
-        %250 = OpFAdd %float %249 %float_1
-               OpStore %f %250
-               OpBranch %218
-        %219 = OpLabel
-               OpBranch %208
-        %208 = OpLabel
-        %251 = OpLoad %float %frameID_1
-        %252 = OpFAdd %float %251 %float_0_5
-               OpStore %param %252
-        %253 = OpFunctionCall %mat4v4float %getFrameData_f1_ %param
-               OpStore %frameData %253
-        %255 = OpAccessChain %_ptr_Function_v4float %frameData %119
-        %256 = OpLoad %v4float %255
-        %257 = OpAccessChain %_ptr_Uniform_v2float %x_20 %uint_5
-        %258 = OpLoad %v2float %257
-        %259 = OpCompositeExtract %float %256 3
-        %260 = OpCompositeExtract %float %256 2
-        %261 = OpCompositeConstruct %v2float %259 %260
-        %262 = OpFDiv %v2float %261 %258
-               OpStore %frameSize %262
-        %263 = OpAccessChain %_ptr_Function_v4float %frameData %119
-        %264 = OpLoad %v4float %263
-        %265 = OpLoad %v2float %sheetUnits
-        %266 = OpCompositeExtract %float %264 0
-        %267 = OpCompositeExtract %float %264 1
-        %268 = OpCompositeConstruct %v2float %266 %267
-        %269 = OpFMul %v2float %268 %265
-               OpStore %offset_1 %269
-        %270 = OpAccessChain %_ptr_Function_v4float %frameData %int_2
-        %271 = OpLoad %v4float %270
-        %272 = OpAccessChain %_ptr_Function_v4float %frameData %119
-        %273 = OpLoad %v4float %272
-        %274 = OpCompositeExtract %float %271 0
-        %275 = OpCompositeExtract %float %271 1
-        %276 = OpCompositeConstruct %v2float %274 %275
-        %277 = OpCompositeExtract %float %273 3
-        %278 = OpCompositeExtract %float %273 2
-        %279 = OpCompositeConstruct %v2float %277 %278
-        %280 = OpFDiv %v2float %276 %279
-               OpStore %ratio %280
-        %281 = OpAccessChain %_ptr_Function_float %frameData %int_2 %uint_2
-        %282 = OpLoad %float %281
-        %283 = OpFOrdEqual %bool %282 %float_1
-               OpSelectionMerge %284 None
-               OpBranchConditional %283 %285 %284
-        %285 = OpLabel
-        %286 = OpLoad %v2float %tileUV
-        %287 = OpCompositeExtract %float %286 1
-        %288 = OpCompositeExtract %float %286 0
-        %289 = OpCompositeConstruct %v2float %287 %288
-               OpStore %tileUV %289
-               OpBranch %284
-        %284 = OpLabel
-        %290 = OpLoad %int %i
-        %291 = OpIEqual %bool %290 %119
-               OpSelectionMerge %292 None
-               OpBranchConditional %291 %293 %294
-        %293 = OpLabel
-        %295 = OpLoad %v2float %tileUV
-        %296 = OpLoad %v2float %frameSize
-        %297 = OpLoad %v2float %offset_1
-        %299 = OpLoad %26 %spriteSheetSampler
-        %300 = OpLoad %23 %spriteSheetTexture
-        %301 = OpSampledImage %66 %300 %299
-        %302 = OpFMul %v2float %295 %296
-        %303 = OpFAdd %v2float %302 %297
-        %298 = OpImageSampleImplicitLod %v4float %301 %303
-               OpStore %color %298
-               OpBranch %292
-        %294 = OpLabel
-        %304 = OpLoad %v2float %tileUV
-        %305 = OpLoad %v2float %frameSize
-        %306 = OpLoad %v2float %offset_1
-        %308 = OpLoad %26 %spriteSheetSampler
-        %309 = OpLoad %23 %spriteSheetTexture
-        %310 = OpSampledImage %66 %309 %308
-        %311 = OpFMul %v2float %304 %305
-        %312 = OpFAdd %v2float %311 %306
-        %307 = OpImageSampleImplicitLod %v4float %310 %312
-               OpStore %nc %307
-        %314 = OpAccessChain %_ptr_Function_float %color %uint_3
-        %315 = OpLoad %float %314
-        %316 = OpAccessChain %_ptr_Function_float %nc %uint_3
-        %317 = OpLoad %float %316
-        %319 = OpFAdd %float %315 %317
-        %318 = OpExtInst %float %136 NMin %319 %float_1
-               OpStore %alpha %318
-        %320 = OpLoad %v4float %color
-        %321 = OpLoad %v4float %nc
-        %322 = OpAccessChain %_ptr_Function_float %nc %uint_3
-        %323 = OpLoad %float %322
-        %325 = OpCompositeExtract %float %320 0
-        %326 = OpCompositeExtract %float %320 1
-        %327 = OpCompositeExtract %float %320 2
-        %328 = OpCompositeConstruct %v3float %325 %326 %327
-        %329 = OpCompositeExtract %float %321 0
-        %330 = OpCompositeExtract %float %321 1
-        %331 = OpCompositeExtract %float %321 2
-        %332 = OpCompositeConstruct %v3float %329 %330 %331
-        %333 = OpCompositeConstruct %v3float %323 %323 %323
-        %324 = OpExtInst %v3float %136 FMix %328 %332 %333
-               OpStore %mixed %324
-        %334 = OpLoad %v3float %mixed
-        %335 = OpLoad %float %alpha
-        %336 = OpCompositeExtract %float %334 0
-        %337 = OpCompositeExtract %float %334 1
-        %338 = OpCompositeExtract %float %334 2
-        %339 = OpCompositeConstruct %v4float %336 %337 %338 %335
-               OpStore %color %339
-               OpBranch %292
-        %292 = OpLabel
-               OpBranch %160
-        %160 = OpLabel
-        %340 = OpLoad %int %i
-        %342 = OpIAdd %int %340 %int_1
-               OpStore %i %342
-               OpBranch %158
-        %159 = OpLabel
-        %345 = OpAccessChain %_ptr_Uniform_v3float %x_20 %uint_8
-        %346 = OpLoad %v3float %345
-        %347 = OpLoad %v4float %color
-        %348 = OpCompositeExtract %float %347 0
-        %349 = OpCompositeExtract %float %347 1
-        %350 = OpCompositeExtract %float %347 2
-        %351 = OpCompositeConstruct %v3float %348 %349 %350
-        %352 = OpFMul %v3float %351 %346
-        %353 = OpLoad %v4float %color
-        %354 = OpCompositeExtract %float %352 0
-        %355 = OpCompositeExtract %float %352 1
-        %356 = OpCompositeExtract %float %352 2
-        %357 = OpCompositeExtract %float %353 3
-        %358 = OpCompositeConstruct %v4float %354 %355 %356 %357
-               OpStore %color %358
-        %359 = OpLoad %v4float %color
-               OpStore %glFragColor %359
+        %223 = OpAccessChain %_ptr_Function_float %animationData %uint_1
+        %224 = OpLoad %float %223
+        %225 = OpLoad %float %mt
+        %226 = OpFOrdGreaterThan %bool %224 %225
+               OpSelectionMerge %227 None
+               OpBranchConditional %226 %228 %227
+        %228 = OpLabel
+        %229 = OpAccessChain %_ptr_Function_float %animationData %uint_0
+        %230 = OpLoad %float %229
+               OpStore %frameID_1 %230
+               OpBranch %214
+        %227 = OpLabel
+        %231 = OpLoad %float %frameID_1
+        %232 = OpAccessChain %_ptr_Uniform_float %x_20 %uint_7
+        %233 = OpLoad %float %232
+        %234 = OpLoad %float %f
+        %236 = OpLoad %26 %animationMapSampler
+        %237 = OpLoad %23 %animationMapTexture
+        %238 = OpSampledImage %66 %237 %236
+        %239 = OpFAdd %float %231 %float_0_5
+        %240 = OpFDiv %float %239 %233
+        %242 = OpFMul %float %float_0_125 %234
+        %243 = OpCompositeConstruct %v2float %240 %242
+        %235 = OpImageSampleImplicitLod %v4float %238 %243 Bias %37
+               OpStore %animationData %235
+               OpBranch %215
+        %215 = OpLabel
+        %244 = OpLoad %float %f
+        %245 = OpFAdd %float %244 %float_1
+               OpStore %f %245
+               OpBranch %213
+        %214 = OpLabel
+               OpBranch %203
+        %203 = OpLabel
+        %246 = OpLoad %float %frameID_1
+        %247 = OpFAdd %float %246 %float_0_5
+               OpStore %param %247
+        %248 = OpFunctionCall %mat4v4float %getFrameData_f1_ %param
+               OpStore %frameData %248
+        %250 = OpAccessChain %_ptr_Function_v4float %frameData %114
+        %251 = OpLoad %v4float %250
+        %252 = OpAccessChain %_ptr_Uniform_v2float %x_20 %uint_5
+        %253 = OpLoad %v2float %252
+        %254 = OpCompositeExtract %float %251 3
+        %255 = OpCompositeExtract %float %251 2
+        %256 = OpCompositeConstruct %v2float %254 %255
+        %257 = OpFDiv %v2float %256 %253
+               OpStore %frameSize %257
+        %258 = OpAccessChain %_ptr_Function_v4float %frameData %114
+        %259 = OpLoad %v4float %258
+        %260 = OpLoad %v2float %sheetUnits
+        %261 = OpCompositeExtract %float %259 0
+        %262 = OpCompositeExtract %float %259 1
+        %263 = OpCompositeConstruct %v2float %261 %262
+        %264 = OpFMul %v2float %263 %260
+               OpStore %offset_1 %264
+        %265 = OpAccessChain %_ptr_Function_v4float %frameData %int_2
+        %266 = OpLoad %v4float %265
+        %267 = OpAccessChain %_ptr_Function_v4float %frameData %114
+        %268 = OpLoad %v4float %267
+        %269 = OpCompositeExtract %float %266 0
+        %270 = OpCompositeExtract %float %266 1
+        %271 = OpCompositeConstruct %v2float %269 %270
+        %272 = OpCompositeExtract %float %268 3
+        %273 = OpCompositeExtract %float %268 2
+        %274 = OpCompositeConstruct %v2float %272 %273
+        %275 = OpFDiv %v2float %271 %274
+               OpStore %ratio %275
+        %276 = OpAccessChain %_ptr_Function_float %frameData %int_2 %uint_2
+        %277 = OpLoad %float %276
+        %278 = OpFOrdEqual %bool %277 %float_1
+               OpSelectionMerge %279 None
+               OpBranchConditional %278 %280 %279
+        %280 = OpLabel
+        %281 = OpLoad %v2float %tileUV
+        %282 = OpCompositeExtract %float %281 1
+        %283 = OpCompositeExtract %float %281 0
+        %284 = OpCompositeConstruct %v2float %282 %283
+               OpStore %tileUV %284
+               OpBranch %279
+        %279 = OpLabel
+        %285 = OpLoad %int %i
+        %286 = OpIEqual %bool %285 %114
+               OpSelectionMerge %287 None
+               OpBranchConditional %286 %288 %289
+        %288 = OpLabel
+        %290 = OpLoad %v2float %tileUV
+        %291 = OpLoad %v2float %frameSize
+        %292 = OpLoad %v2float %offset_1
+        %294 = OpLoad %26 %spriteSheetSampler
+        %295 = OpLoad %23 %spriteSheetTexture
+        %296 = OpSampledImage %66 %295 %294
+        %297 = OpFMul %v2float %290 %291
+        %298 = OpFAdd %v2float %297 %292
+        %293 = OpImageSampleImplicitLod %v4float %296 %298
+               OpStore %color %293
+               OpBranch %287
+        %289 = OpLabel
+        %299 = OpLoad %v2float %tileUV
+        %300 = OpLoad %v2float %frameSize
+        %301 = OpLoad %v2float %offset_1
+        %303 = OpLoad %26 %spriteSheetSampler
+        %304 = OpLoad %23 %spriteSheetTexture
+        %305 = OpSampledImage %66 %304 %303
+        %306 = OpFMul %v2float %299 %300
+        %307 = OpFAdd %v2float %306 %301
+        %302 = OpImageSampleImplicitLod %v4float %305 %307
+               OpStore %nc %302
+        %309 = OpAccessChain %_ptr_Function_float %color %uint_3
+        %310 = OpLoad %float %309
+        %311 = OpAccessChain %_ptr_Function_float %nc %uint_3
+        %312 = OpLoad %float %311
+        %314 = OpFAdd %float %310 %312
+        %313 = OpExtInst %float %131 NMin %314 %float_1
+               OpStore %alpha %313
+        %315 = OpLoad %v4float %color
+        %316 = OpLoad %v4float %nc
+        %317 = OpAccessChain %_ptr_Function_float %nc %uint_3
+        %318 = OpLoad %float %317
+        %320 = OpCompositeExtract %float %315 0
+        %321 = OpCompositeExtract %float %315 1
+        %322 = OpCompositeExtract %float %315 2
+        %323 = OpCompositeConstruct %v3float %320 %321 %322
+        %324 = OpCompositeExtract %float %316 0
+        %325 = OpCompositeExtract %float %316 1
+        %326 = OpCompositeExtract %float %316 2
+        %327 = OpCompositeConstruct %v3float %324 %325 %326
+        %328 = OpCompositeConstruct %v3float %318 %318 %318
+        %319 = OpExtInst %v3float %131 FMix %323 %327 %328
+               OpStore %mixed %319
+        %329 = OpLoad %v3float %mixed
+        %330 = OpLoad %float %alpha
+        %331 = OpCompositeExtract %float %329 0
+        %332 = OpCompositeExtract %float %329 1
+        %333 = OpCompositeExtract %float %329 2
+        %334 = OpCompositeConstruct %v4float %331 %332 %333 %330
+               OpStore %color %334
+               OpBranch %287
+        %287 = OpLabel
+               OpBranch %155
+        %155 = OpLabel
+        %335 = OpLoad %int %i
+        %337 = OpIAdd %int %335 %int_1
+               OpStore %i %337
+               OpBranch %153
+        %154 = OpLabel
+        %340 = OpAccessChain %_ptr_Uniform_v3float %x_20 %uint_8
+        %341 = OpLoad %v3float %340
+        %342 = OpLoad %v4float %color
+        %343 = OpCompositeExtract %float %342 0
+        %344 = OpCompositeExtract %float %342 1
+        %345 = OpCompositeExtract %float %342 2
+        %346 = OpCompositeConstruct %v3float %343 %344 %345
+        %347 = OpFMul %v3float %346 %341
+        %348 = OpLoad %v4float %color
+        %349 = OpCompositeExtract %float %347 0
+        %350 = OpCompositeExtract %float %347 1
+        %351 = OpCompositeExtract %float %347 2
+        %352 = OpCompositeExtract %float %348 3
+        %353 = OpCompositeConstruct %v4float %349 %350 %351 %352
+               OpStore %color %353
+        %354 = OpLoad %v4float %color
+               OpStore %glFragColor %354
                OpReturn
                OpFunctionEnd
- %main_inner = OpFunction %main_out None %360
+ %main_inner = OpFunction %main_out None %355
   %tUV_param = OpFunctionParameter %v2float
 %tileID_1_param = OpFunctionParameter %v2float
 %levelUnits_param = OpFunctionParameter %v2float
 %stageUnits_1_param = OpFunctionParameter %v2float
 %vPosition_param = OpFunctionParameter %v3float
   %vUV_param = OpFunctionParameter %v2float
-        %369 = OpLabel
+        %364 = OpLabel
                OpStore %tUV %tUV_param
                OpStore %tileID_1 %tileID_1_param
                OpStore %levelUnits %levelUnits_param
                OpStore %stageUnits_1 %stageUnits_1_param
                OpStore %vPosition %vPosition_param
                OpStore %vUV %vUV_param
-        %370 = OpFunctionCall %void %main_1
-        %371 = OpLoad %v4float %glFragColor
-        %372 = OpCompositeConstruct %main_out %371
-               OpReturnValue %372
+        %365 = OpFunctionCall %void %main_1
+        %366 = OpLoad %v4float %glFragColor
+        %367 = OpCompositeConstruct %main_out %366
+               OpReturnValue %367
                OpFunctionEnd
-       %main = OpFunction %void None %104
-        %374 = OpLabel
-        %376 = OpLoad %v2float %tUV_param_1
-        %377 = OpLoad %v2float %tileID_1_param_1
-        %378 = OpLoad %v2float %levelUnits_param_1
-        %379 = OpLoad %v2float %stageUnits_1_param_1
-        %380 = OpLoad %v3float %vPosition_param_1
-        %381 = OpLoad %v2float %vUV_param_1
-        %375 = OpFunctionCall %main_out %main_inner %376 %377 %378 %379 %380 %381
-        %382 = OpCompositeExtract %v4float %375 0
-               OpStore %glFragColor_1_1 %382
+       %main = OpFunction %void None %99
+        %369 = OpLabel
+        %371 = OpLoad %v2float %tUV_param_1
+        %372 = OpLoad %v2float %tileID_1_param_1
+        %373 = OpLoad %v2float %levelUnits_param_1
+        %374 = OpLoad %v2float %stageUnits_1_param_1
+        %375 = OpLoad %v3float %vPosition_param_1
+        %376 = OpLoad %v2float %vUV_param_1
+        %370 = OpFunctionCall %main_out %main_inner %371 %372 %373 %374 %375 %376
+        %377 = OpCompositeExtract %v4float %370 0
+               OpStore %glFragColor_1_1 %377
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/splat/with_swizzle/f32.wgsl.expected.glsl b/test/tint/expressions/splat/with_swizzle/f32.wgsl.expected.glsl
index 3493354..b00eb09 100644
--- a/test/tint/expressions/splat/with_swizzle/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/splat/with_swizzle/f32.wgsl.expected.glsl
@@ -5,8 +5,8 @@
   return;
 }
 void f() {
-  float a = vec2(1.0f).y;
-  float b = vec3(1.0f).z;
-  float c = vec4(1.0f).w;
+  float a = 1.0f;
+  float b = 1.0f;
+  float c = 1.0f;
 }
 
diff --git a/test/tint/expressions/splat/with_swizzle/f32.wgsl.expected.hlsl b/test/tint/expressions/splat/with_swizzle/f32.wgsl.expected.hlsl
index 3803af8..bc8913a 100644
--- a/test/tint/expressions/splat/with_swizzle/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/splat/with_swizzle/f32.wgsl.expected.hlsl
@@ -4,7 +4,7 @@
 }
 
 void f() {
-  float a = (1.0f).xx.y;
-  float b = (1.0f).xxx.z;
-  float c = (1.0f).xxxx.w;
+  float a = 1.0f;
+  float b = 1.0f;
+  float c = 1.0f;
 }
diff --git a/test/tint/expressions/splat/with_swizzle/f32.wgsl.expected.msl b/test/tint/expressions/splat/with_swizzle/f32.wgsl.expected.msl
index 2f9ac2a..d7d4949 100644
--- a/test/tint/expressions/splat/with_swizzle/f32.wgsl.expected.msl
+++ b/test/tint/expressions/splat/with_swizzle/f32.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void f() {
-  float a = float2(1.0f)[1];
-  float b = float3(1.0f)[2];
-  float c = float4(1.0f)[3];
+  float a = 1.0f;
+  float b = 1.0f;
+  float c = 1.0f;
 }
 
diff --git a/test/tint/expressions/splat/with_swizzle/f32.wgsl.expected.spvasm b/test/tint/expressions/splat/with_swizzle/f32.wgsl.expected.spvasm
index fe1995c..1fa9baf 100644
--- a/test/tint/expressions/splat/with_swizzle/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/splat/with_swizzle/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 23
+; Bound: 14
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -15,29 +15,20 @@
        %void = OpTypeVoid
           %1 = OpTypeFunction %void
       %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
     %float_1 = OpConstant %float 1
-         %10 = OpConstantComposite %v2float %float_1 %float_1
 %_ptr_Function_float = OpTypePointer Function %float
-         %14 = OpConstantNull %float
-    %v3float = OpTypeVector %float 3
-         %16 = OpConstantComposite %v3float %float_1 %float_1 %float_1
-    %v4float = OpTypeVector %float 4
-         %20 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %11 = OpConstantNull %float
 %unused_entry_point = OpFunction %void None %1
           %4 = OpLabel
                OpReturn
                OpFunctionEnd
           %f = OpFunction %void None %1
           %6 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %14
-          %b = OpVariable %_ptr_Function_float Function %14
-          %c = OpVariable %_ptr_Function_float Function %14
-         %11 = OpCompositeExtract %float %10 1
-               OpStore %a %11
-         %17 = OpCompositeExtract %float %16 2
-               OpStore %b %17
-         %21 = OpCompositeExtract %float %20 3
-               OpStore %c %21
+          %a = OpVariable %_ptr_Function_float Function %11
+          %b = OpVariable %_ptr_Function_float Function %11
+          %c = OpVariable %_ptr_Function_float Function %11
+               OpStore %a %float_1
+               OpStore %b %float_1
+               OpStore %c %float_1
                OpReturn
                OpFunctionEnd